[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-aldinokemal--go-whatsapp-web-multidevice":3,"tool-aldinokemal--go-whatsapp-web-multidevice":61},[4,17,27,36,44,53],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":16},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",159267,2,"2026-04-17T11:29:14",[13,14,15],"开发框架","Agent","语言模型","ready",{"id":18,"name":19,"github_repo":20,"description_zh":21,"stars":22,"difficulty_score":23,"last_commit_at":24,"category_tags":25,"status":16},8272,"opencode","anomalyco\u002Fopencode","OpenCode 是一款开源的 AI 编程助手（Coding Agent），旨在像一位智能搭档一样融入您的开发流程。它不仅仅是一个代码补全插件，而是一个能够理解项目上下文、自主规划任务并执行复杂编码操作的智能体。无论是生成全新功能、重构现有代码，还是排查难以定位的 Bug，OpenCode 都能通过自然语言交互高效完成，显著减少开发者在重复性劳动和上下文切换上的时间消耗。\n\n这款工具专为软件开发者、工程师及技术研究人员设计，特别适合希望利用大模型能力来提升编码效率、加速原型开发或处理遗留代码维护的专业人群。其核心亮点在于完全开源的架构，这意味着用户可以审查代码逻辑、自定义行为策略，甚至私有化部署以保障数据安全，彻底打破了传统闭源 AI 助手的“黑盒”限制。\n\n在技术体验上，OpenCode 提供了灵活的终端界面（Terminal UI）和正在测试中的桌面应用程序，支持 macOS、Windows 及 Linux 全平台。它兼容多种包管理工具，安装便捷，并能无缝集成到现有的开发环境中。无论您是追求极致控制权的资深极客，还是渴望提升产出的独立开发者，OpenCode 都提供了一个透明、可信",144296,1,"2026-04-16T14:50:03",[14,26],"插件",{"id":28,"name":29,"github_repo":30,"description_zh":31,"stars":32,"difficulty_score":10,"last_commit_at":33,"category_tags":34,"status":16},6121,"gemini-cli","google-gemini\u002Fgemini-cli","gemini-cli 是一款由谷歌推出的开源 AI 命令行工具，它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言，它提供了一条从输入提示词到获取模型响应的最短路径，无需切换窗口即可享受智能辅助。\n\n这款工具主要解决了开发过程中频繁上下文切换的痛点，让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用，还是执行复杂的 Git 操作，gemini-cli 都能通过自然语言指令高效处理。\n\n它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口，具备出色的逻辑推理能力；内置 Google 搜索、文件操作及 Shell 命令执行等实用工具；更独特的是，它支持 MCP（模型上下文协议），允许用户灵活扩展自定义集成，连接如图像生成等外部能力。此外，个人谷歌账号即可享受免费的额度支持，且项目基于 Apache 2.0 协议完全开源，是提升终端工作效率的理想助手。",100752,"2026-04-10T01:20:03",[26,14,35,13],"图像",{"id":37,"name":38,"github_repo":39,"description_zh":40,"stars":41,"difficulty_score":10,"last_commit_at":42,"category_tags":43,"status":16},4721,"markitdown","microsoft\u002Fmarkitdown","MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具，专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片（含 OCR）、音频（含语音转录）、HTML 乃至 YouTube 链接等多种格式的解析，能够精准提取文档中的标题、列表、表格和链接等关键结构信息。\n\n在人工智能应用日益普及的今天，大语言模型（LLM）虽擅长处理文本，却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点，它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式，成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外，它还提供了 MCP（模型上下文协议）服务器，可无缝集成到 Claude Desktop 等 LLM 应用中。\n\n这款工具特别适合开发者、数据科学家及 AI 研究人员使用，尤其是那些需要构建文档检索增强生成（RAG）系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性，但其核心优势在于为机器",93400,"2026-04-06T19:52:38",[26,13],{"id":45,"name":46,"github_repo":47,"description_zh":48,"stars":49,"difficulty_score":50,"last_commit_at":51,"category_tags":52,"status":16},4487,"LLMs-from-scratch","rasbt\u002FLLMs-from-scratch","LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目，旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型（LLM）。它不仅是同名技术著作的官方代码库，更提供了一套完整的实践方案，涵盖模型开发、预训练及微调的全过程。\n\n该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型，却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码，用户能够透彻掌握 Transformer 架构、注意力机制等关键原理，从而真正理解大模型是如何“思考”的。此外，项目还包含了加载大型预训练权重进行微调的代码，帮助用户将理论知识延伸至实际应用。\n\nLLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API，而是渴望探究模型构建细节的技术人员而言，这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计：将复杂的系统工程拆解为清晰的步骤，配合详细的图表与示例，让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础，还是为未来研发更大规模的模型做准备",90106,3,"2026-04-06T11:19:32",[15,35,14,13],{"id":54,"name":55,"github_repo":56,"description_zh":57,"stars":58,"difficulty_score":10,"last_commit_at":59,"category_tags":60,"status":16},8553,"spec-kit","github\u002Fspec-kit","Spec Kit 是一款专为提升软件开发效率而设计的开源工具包，旨在帮助团队快速落地“规格驱动开发”（Spec-Driven Development）模式。传统开发中，需求文档往往与代码实现脱节，导致沟通成本高且结果不可控；而 Spec Kit 通过将规格说明书转化为可执行的指令，让 AI 直接依据明确的业务场景生成高质量代码，从而减少从零开始的随意编码，确保产出结果的可预测性。\n\n该工具特别适合希望利用 AI 辅助编程的开发者、技术负责人及初创团队。无论是启动全新项目还是在现有工程中引入规范化流程，用户只需通过简单的命令行操作，即可初始化项目并集成主流的 AI 编程助手。其核心技术亮点在于“规格即代码”的理念，支持社区扩展与预设模板，允许用户根据特定技术栈定制开发流程。此外，Spec Kit 强调官方维护的安全性，提供稳定的版本管理，帮助开发者在享受 AI 红利的同时，依然牢牢掌握架构设计的主动权，真正实现从“凭感觉写代码”到“按规格建系统”的转变。",88749,"2026-04-17T09:48:14",[15,35,14,13],{"id":62,"github_repo":63,"name":64,"description_en":65,"description_zh":66,"ai_summary_zh":66,"readme_en":67,"readme_zh":68,"quickstart_zh":69,"use_case_zh":70,"hero_image_url":71,"owner_login":72,"owner_name":73,"owner_avatar_url":74,"owner_bio":75,"owner_company":76,"owner_location":77,"owner_email":78,"owner_twitter":76,"owner_website":79,"owner_url":80,"languages":81,"stars":106,"forks":107,"last_commit_at":108,"license":109,"difficulty_score":10,"env_os":110,"env_gpu":111,"env_ram":112,"env_deps":113,"category_tags":120,"github_topics":122,"view_count":10,"oss_zip_url":76,"oss_zip_packed_at":76,"status":16,"created_at":135,"updated_at":136,"faqs":137,"releases":168},8538,"aldinokemal\u002Fgo-whatsapp-web-multidevice","go-whatsapp-web-multidevice","GOWA - WhatsApp REST API with support for UI, Multi Account, Webhooks, and MCP, and Chatwoot. Built with Golang for efficient memory use. ","go-whatsapp-web-multidevice 是一款基于 Go 语言开发的高效 WhatsApp 自动化工具，旨在为开发者提供稳定且低内存占用的 REST API 服务。它核心解决了在服务器端批量管理多个 WhatsApp 账号、集成外部业务系统以及实现消息自动化收发的技术难题，特别适用于需要高并发处理或多账号运营的场景。\n\n该工具非常适合后端开发者、系统集成工程师以及希望将 WhatsApp 功能嵌入自有应用（如客服系统 Chatwoot 或工作流平台 n8n）的技术团队。其独特亮点在于原生支持“多设备模式”，允许单个实例同时连接并管理多个 WhatsApp 账号；此外，它还率先集成了 MCP（模型上下文协议），便于与 AI 智能体无缝对接。功能上，它不仅支持发送文本、状态和自动转换格式的贴纸（含动态图），还具备“幽灵提及”等高级群组互动能力。通过提供完善的 Webhooks、WebSocket 支持及详细的 OpenAPI 文档，go-whatsapp-web-multidevice 让构建复杂的 WhatsApp 机器人或消息中台变得更加简单高效。","\u003C!-- markdownlint-disable MD041 -->\n\u003C!-- markdownlint-disable-next-line MD033 -->\n\u003Cdiv align=\"center\">\n  \u003C!-- markdownlint-disable-next-line MD033 -->\n  \u003Cimg src=\"src\u002Fviews\u002Fassets\u002Fgowa.svg\" alt=\"GoWA Logo\" width=\"200\" height=\"200\">\n\n## Golang WhatsApp - Built with Go for efficient memory use\n\n\u003C\u002Fdiv>\n\n[![Patreon](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FSupport%20on-Patreon-orange.svg)](https:\u002F\u002Fwww.patreon.com\u002Fc\u002Faldinokemal)\n**If you're using this tools to generate income, consider supporting its development by becoming a Patreon member!**\nYour support helps ensure the library stays maintained and receives regular updates!\n___\n\n![release version](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fv\u002Frelease\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice)\n![Build Image](https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Factions\u002Fworkflows\u002Fbuild-docker-image.yaml\u002Fbadge.svg)\n![Binary Release](https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Factions\u002Fworkflows\u002Frelease.yml\u002Fbadge.svg)\n\n## Support for `ARM` & `AMD` Architecture along with `MCP` Support\n\nDownload:\n\n- [Release](https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Freleases\u002Flatest)\n- [Docker Hub](https:\u002F\u002Fhub.docker.com\u002Fr\u002Faldinokemal2104\u002Fgo-whatsapp-web-multidevice\u002Ftags)\n- [GitHub Container Registry](https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Fpkgs\u002Fcontainer\u002Fgo-whatsapp-web-multidevice)\n\n## Support n8n package (n8n.io)\n\n- [n8n package](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@aldinokemal2104\u002Fn8n-nodes-gowa)\n- Go to Settings -> Community Nodes -> Input `@aldinokemal2104\u002Fn8n-nodes-gowa` -> Install\n\n## Breaking Changes\n\n- `v6`\n  - For REST mode, you need to run `\u003Cbinary> rest` instead of `\u003Cbinary>`\n    - for example: `.\u002Fwhatsapp rest` instead of ~~.\u002Fwhatsapp~~\n  - For MCP mode, you need to run `\u003Cbinary> mcp`\n    - for example: `.\u002Fwhatsapp mcp`\n- `v7`\n  - Starting version 7.x we are using goreleaser to build the binary, so you can download the binary\n      from [release](https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Freleases\u002Flatest)\n- `v8`\n  - **Multi-device support**: You can now connect and manage multiple WhatsApp accounts simultaneously in a single\n      server instance\n  - **New Device Management API**: New endpoints under `\u002Fdevices` for managing multiple devices\n  - **Device scoping required**: All device-scoped REST API calls now require either:\n    - `X-Device-Id` header, or\n    - `device_id` query parameter\n    - If only one device is registered, it will be used as the default\n  - **WebSocket device scoping**: Connect to `\u002Fws?device_id=\u003Cid>` to scope WebSocket to a specific device\n  - **Webhook payload changes**: All webhook payloads now include a top-level `device_id` field identifying which\n      device received the event:\n\n        ```json\n        {\n          \"event\": \"message\",\n          \"device_id\": \"628123456789@s.whatsapp.net\",\n          \"payload\": { ... }\n        }\n        ```\n\n## Feature\n\n- Send WhatsApp message via http API, [docs\u002Fopenapi.yml](.\u002Fdocs\u002Fopenapi.yaml) for more details\n- **MCP (Model Context Protocol) Server Support** - Integrate with AI agents and tools using standardized protocol\n- Mention someone\n  - `@phoneNumber`\n  - example: `Hello @628974812XXXX, @628974812XXXX`\n- **Ghost Mentions (Mention All)** - Mention group participants without showing `@phone` in message text\n  - Pass phone numbers in `mentions` field to mention users without visible `@` in message\n  - Use special keyword `@everyone` to automatically mention ALL group participants\n  - UI checkbox available in Send Message modal for groups\n- Post Whatsapp Status\n- **Send Stickers** - Automatically converts images to WebP sticker format\n  - Supports JPG, JPEG, PNG, WebP, and GIF formats\n  - Automatic resizing to 512x512 pixels\n  - Preserves transparency for PNG images\n  - **Animated WebP stickers** are supported but must meet WhatsApp requirements:\n    - Must be exactly **512x512 pixels**\n    - Must be under **500KB** file size\n    - Maximum **10 seconds** duration\n    - If your animated sticker doesn't meet these requirements, please resize it before uploading using tools like [ezgif.com](https:\u002F\u002Fezgif.com\u002Fresize)\n- Compress image before send\n- Compress video before send\n- Change OS name become your app (it's the device name when connect via mobile)\n  - `--os=Chrome` or `--os=MyApplication`\n- Basic Auth (able to add multi credentials)\n  - `--basic-auth=kemal:secret,toni:password,userName:secretPassword`, or you can simplify\n  - `-b=kemal:secret,toni:password,userName:secretPassword`\n- Subpath deployment support\n  - `--base-path=\"\u002Fgowa\"` (allows deployment under a specific path like `\u002Fgowa\u002Fsub\u002Fpath`)\n- Customizable port and debug mode\n  - `--port 8000`\n  - `--debug true`\n- Auto reply message\n  - `--autoreply=\"Don't reply this message\"`\n- Auto mark read incoming messages\n  - `--auto-mark-read=true` (automatically marks incoming messages as read)\n- Auto download media from incoming messages\n  - `--auto-download-media=false` (disable automatic media downloads, default: `true`)\n- Auto reject incoming calls\n  - `--auto-reject-call=true` or `WHATSAPP_AUTO_REJECT_CALL=true` (see [Webhook Payload](.\u002Fdocs\u002Fwebhook-payload.md#call-events) for call events)\n- Configurable presence on connect\n  - `--presence-on-connect=unavailable` or `WHATSAPP_PRESENCE_ON_CONNECT=unavailable`\n  - `available` — mark as online (suppresses phone notifications)\n  - `unavailable` — register pushname without going online (default, preserves phone notifications)\n  - `none` — skip presence entirely (pushname won't be registered, contacts may see \"-\" as name)\n- Webhook for received message\n  - `--webhook=\"http:\u002F\u002Fyourwebhook.site\u002Fhandler\"`, or you can simplify\n  - `-w=\"http:\u002F\u002Fyourwebhook.site\u002Fhandler\"`\n  - for more detail, see [Webhook Payload Documentation](.\u002Fdocs\u002Fwebhook-payload.md)\n- Webhook Secret\n  Our webhook will be sent to you with an HMAC header and a sha256 default key `secret`.\n\n  You may modify this by using the option below:\n  - `--webhook-secret=\"secret\"`\n- **Webhook Payload Documentation**\n  For detailed webhook payload schemas, security implementation, and integration examples,\n  see [Webhook Payload Documentation](.\u002Fdocs\u002Fwebhook-payload.md)\n- **Webhook Event Filtering**\n  You can filter which events are forwarded to your webhook using:\n  - `--webhook-events=\"message,message.ack\"` (comma-separated list)\n  - Or environment variable: `WHATSAPP_WEBHOOK_EVENTS=message,message.ack`\n\n  **Available Webhook Events:**\n\n  | Event                | Description                                   |\n  |----------------------|-----------------------------------------------|\n  | `message`            | Text, media, contact, location messages       |\n  | `message.reaction`   | Emoji reactions to messages                   |\n  | `message.revoked`    | Deleted\u002Frevoked messages                      |\n  | `message.edited`     | Edited messages                               |\n  | `message.ack`        | Delivery and read receipts                    |\n  | `message.deleted`    | Messages deleted for the user                 |\n  | `group.participants` | Group member join\u002Fleave\u002Fpromote\u002Fdemote events |\n  | `group.joined`       | You were added to a group                     |\n  | `newsletter.joined`  | You subscribed to a newsletter\u002Fchannel        |\n  | `newsletter.left`    | You unsubscribed from a newsletter            |\n  | `newsletter.message` | New message(s) posted in a newsletter         |\n  | `newsletter.mute`    | Newsletter mute setting changed               |\n  | `call.offer`         | Incoming call received                        |\n\n  If not configured (empty), all events will be forwarded.\n- **Webhook TLS Configuration**\n\n  If you encounter TLS certificate verification errors when using webhooks (e.g., with Cloudflare tunnels or self-signed\n  certificates):\n\n  ```\n  tls: failed to verify certificate: x509: certificate signed by unknown authority\n  ```\n\n  You can disable TLS certificate verification using:\n  - `--webhook-insecure-skip-verify=true`\n  - Or environment variable: `WHATSAPP_WEBHOOK_INSECURE_SKIP_VERIFY=true`\n\n  **Security Warning**: This option disables TLS certificate verification and should only be used in:\n  - Development\u002Ftesting environments\n  - Cloudflare tunnels (which provide their own security layer)\n  - Internal networks with self-signed certificates\n\n  **For production environments**, it's strongly recommended to use proper SSL certificates (e.g., Let's Encrypt)\n  instead of disabling verification.\n\n## Configuration\n\nYou can configure the application using either command-line flags (shown above) or environment variables. Configuration\ncan be set in three ways (in order of priority):\n\n1. Command-line flags (highest priority)\n2. Environment variables\n3. `.env` file (lowest priority)\n\n### Environment Variables\n\nYou can configure the application using environment variables. Configuration can be set in three ways (in order of\npriority):\n\n1. Command-line flags (highest priority)\n2. Environment variables\n3. `.env` file (lowest priority)\n\nTo use environment variables:\n\n1. Copy `.env.example` to `.env` in your project root (`cp src\u002F.env.example src\u002F.env`)\n2. Modify the values in `.env` according to your needs\n3. Or set the same variables as system environment variables\n\n#### Available Environment Variables\n\n| Variable                                | Description                                                   | Default                                      | Example                                       |\n|-----------------------------------------|---------------------------------------------------------------|----------------------------------------------|-----------------------------------------------|\n| `APP_PORT`                              | Application port                                              | `3000`                                       | `APP_PORT=8080`                               |\n| `APP_HOST`                              | Host address to bind the server                               | `0.0.0.0`                                    | `APP_HOST=127.0.0.1`                          |\n| `APP_DEBUG`                             | Enable debug logging                                          | `false`                                      | `APP_DEBUG=true`                              |\n| `APP_OS`                                | OS name (device name in WhatsApp)                             | `Chrome`                                     | `APP_OS=MyApp`                                |\n| `APP_BASIC_AUTH`                        | Basic authentication credentials                              | -                                            | `APP_BASIC_AUTH=user1:pass1,user2:pass2`      |\n| `APP_BASE_PATH`                         | Base path for subpath deployment                              | -                                            | `APP_BASE_PATH=\u002Fgowa`                         |\n| `APP_TRUSTED_PROXIES`                   | Trusted proxy IP ranges for reverse proxy                     | -                                            | `APP_TRUSTED_PROXIES=0.0.0.0\u002F0`               |\n| `DB_URI`                                | Database connection URI                                       | `file:storages\u002Fwhatsapp.db?_foreign_keys=on` | `DB_URI=postgres:\u002F\u002Fuser:pass@host\u002Fdb`         |\n| `WHATSAPP_AUTO_REPLY`                   | Auto-reply message                                            | -                                            | `WHATSAPP_AUTO_REPLY=\"Auto reply message\"`    |\n| `WHATSAPP_AUTO_MARK_READ`               | Auto-mark incoming messages as read                           | `false`                                      | `WHATSAPP_AUTO_MARK_READ=true`                |\n| `WHATSAPP_AUTO_DOWNLOAD_MEDIA`          | Auto-download media from incoming messages                    | `true`                                       | `WHATSAPP_AUTO_DOWNLOAD_MEDIA=false`          |\n| `WHATSAPP_WEBHOOK`                      | Webhook URL(s) for events (comma-separated)                   | -                                            | `WHATSAPP_WEBHOOK=https:\u002F\u002Fwebhook.site\u002Fxxx`   |\n| `WHATSAPP_WEBHOOK_SECRET`               | Webhook secret for validation                                 | `secret`                                     | `WHATSAPP_WEBHOOK_SECRET=super-secret-key`    |\n| `WHATSAPP_WEBHOOK_INSECURE_SKIP_VERIFY` | Skip TLS verification for webhooks (insecure)                 | `false`                                      | `WHATSAPP_WEBHOOK_INSECURE_SKIP_VERIFY=true`  |\n| `WHATSAPP_WEBHOOK_EVENTS`               | Whitelist of events to forward (comma-separated, empty = all) | -                                            | `WHATSAPP_WEBHOOK_EVENTS=message,message.ack` |\n| `WHATSAPP_ACCOUNT_VALIDATION`           | Enable account validation                                     | `true`                                       | `WHATSAPP_ACCOUNT_VALIDATION=false`           |\n| `WHATSAPP_PRESENCE_ON_CONNECT`          | Presence on connect: `available`, `unavailable`, or `none`    | `unavailable`                                | `WHATSAPP_PRESENCE_ON_CONNECT=unavailable`    |\n| `CHATWOOT_ENABLED`                      | Enable Chatwoot integration                                   | `false`                                      | `CHATWOOT_ENABLED=true`                       |\n| `CHATWOOT_URL`                          | Chatwoot instance URL                                         | -                                            | `CHATWOOT_URL=https:\u002F\u002Fapp.chatwoot.com`       |\n| `CHATWOOT_API_TOKEN`                    | Chatwoot API access token                                     | -                                            | `CHATWOOT_API_TOKEN=your-api-token`           |\n| `CHATWOOT_ACCOUNT_ID`                   | Chatwoot account ID                                           | -                                            | `CHATWOOT_ACCOUNT_ID=12345`                   |\n| `CHATWOOT_INBOX_ID`                     | Chatwoot inbox ID                                             | -                                            | `CHATWOOT_INBOX_ID=67890`                     |\n| `CHATWOOT_DEVICE_ID`                    | WhatsApp device ID for Chatwoot (multi-device setup)          | -                                            | `CHATWOOT_DEVICE_ID=628xxx@s.whatsapp.net`    |\n| `CHATWOOT_IMPORT_MESSAGES`              | Enable message history sync to Chatwoot                       | `false`                                      | `CHATWOOT_IMPORT_MESSAGES=true`               |\n| `CHATWOOT_DAYS_LIMIT_IMPORT_MESSAGES`   | Days of history to import                                     | `3`                                          | `CHATWOOT_DAYS_LIMIT_IMPORT_MESSAGES=7`       |\n\n**Documentation:**\n\n- For detailed webhook payload schemas, security implementation, and integration examples, see [Webhook Payload Documentation](.\u002Fdocs\u002Fwebhook-payload.md)\n- For comprehensive Chatwoot integration guide, see [Chatwoot Integration Documentation](.\u002Fdocs\u002Fchatwoot.md)\n\nNote: Command-line flags will override any values set in environment variables or `.env` file.\n\n- For more command `.\u002Fwhatsapp --help`\n\n## Requirements\n\n### System Requirements\n\n- **Go 1.24.0 or higher** (for building from source)\n- **FFmpeg** (for media processing)\n\n### Platform Support\n\n- Linux (x86_64, ARM64)\n- macOS (Intel, Apple Silicon)\n- Windows (x86_64) - WSL recommended\n\n### Dependencies (without docker)\n\n- Mac OS:\n  - `brew install ffmpeg webp`\n  - `export CGO_CFLAGS_ALLOW=\"-Xpreprocessor\"`\n- Linux:\n  - `sudo apt update`\n  - `sudo apt install ffmpeg webp`\n- Windows (not recommended, prefer using [WSL](https:\u002F\u002Fdocs.microsoft.com\u002Fen-us\u002Fwindows\u002Fwsl\u002Finstall)):\n  - Install ffmpeg: [download here](https:\u002F\u002Fwww.ffmpeg.org\u002Fdownload.html#build-windows)\n  - Install libwebp: [download here](https:\u002F\u002Fdevelopers.google.com\u002Fspeed\u002Fwebp\u002Fdownload) (extract and add `bin` folder to PATH)\n  - Add both to [environment variable](https:\u002F\u002Fwww.google.com\u002Fsearch?q=windows+add+to+environment+path)\n\n> **Note**: The `webp` package provides `cwebp` (encoder), `dwebp` (decoder), and `webpmux` (frame extractor) tools.\n> FFmpeg is required for media processing. The libwebp tools (`webpmux` + `dwebp`) are used for animated WebP sticker support.\n\n## How to use\n\n### Basic\n\n1. Clone this repo: `git clone https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice`\n2. Open the folder that was cloned via cmd\u002Fterminal.\n3. run `cd src`\n4. run `go run . rest` (for REST API mode)\n5. Open `http:\u002F\u002Flocalhost:3000`\n\n### Docker (you don't need to install in required)\n\n1. Clone this repo: `git clone https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice`\n2. Open the folder that was cloned via cmd\u002Fterminal.\n3. run `docker-compose up -d --build`\n4. open `http:\u002F\u002Flocalhost:3000`\n\n### Build your own binary\n\n1. Clone this repo `git clone https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice`\n2. Open the folder that was cloned via cmd\u002Fterminal.\n3. run `cd src`\n4. run\n    1. Linux & MacOS: `go build -o whatsapp`\n    2. Windows (CMD \u002F PowerShell): `go build -o whatsapp.exe`\n5. run\n    1. Linux & MacOS: `.\u002Fwhatsapp rest` (for REST API mode)\n        1. run `.\u002Fwhatsapp --help` for more detail flags\n    2. Windows: `.\\whatsapp.exe rest` (for REST API mode)\n        1. run `.\\whatsapp.exe --help` for more detail flags\n6. open `http:\u002F\u002Flocalhost:3000` in browser\n\n### MCP Server (Model Context Protocol)\n\nThis application can also run as an MCP server, allowing AI agents and tools to interact with WhatsApp through a\nstandardized protocol.\n\n1. Clone this repo `git clone https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice`\n2. Open the folder that was cloned via cmd\u002Fterminal.\n3. run `cd src`\n4. run `go run . mcp` or build the binary and run `.\u002Fwhatsapp mcp`\n5. The MCP server will start on `http:\u002F\u002Flocalhost:8080` by default\n\n#### MCP Server Options\n\n- `--host localhost` - Set the host for MCP server (default: localhost)\n- `--port 8080` - Set the port for MCP server (default: 8080)\n\n#### Available MCP Tools\n\nThe WhatsApp MCP server provides comprehensive tools for AI agents to interact with WhatsApp through a standardized\nprotocol. Below is the complete list of available tools:\n\n##### **📱 Connection Management**\n\n- `whatsapp_connection_status` - Check whether the WhatsApp client is connected and logged in\n- `whatsapp_login_qr` - Initiate QR code based login flow with image output\n- `whatsapp_login_with_code` - Generate pairing code for multi-device login using phone number\n- `whatsapp_logout` - Sign out the current WhatsApp session\n- `whatsapp_reconnect` - Attempt to reconnect to WhatsApp using stored session\n\n##### **💬 Messaging & Communication**\n\n- `whatsapp_send_text` - Send text messages with reply and forwarding support\n- `whatsapp_send_contact` - Send contact cards with name and phone number\n- `whatsapp_send_link` - Send links with custom captions\n- `whatsapp_send_location` - Send location coordinates (latitude\u002Flongitude)\n- `whatsapp_send_image` - Send images with captions, compression, and view-once options\n- `whatsapp_send_sticker` - Send stickers with automatic WebP conversion (supports JPG\u002FPNG\u002FGIF)\n\n##### **📋 Chat & Contact Management**\n\n- `whatsapp_list_contacts` - Retrieve all contacts in your WhatsApp account\n- `whatsapp_list_chats` - Get recent chats with pagination and search filters\n- `whatsapp_get_chat_messages` - Fetch messages from specific chats with time\u002Fmedia filtering\n- `whatsapp_download_message_media` - Download images\u002Fvideos from messages\n- `whatsapp_archive_chat` - Archive or unarchive a chat conversation\n\n##### **👥 Group Management**\n\n- `whatsapp_group_create` - Create new groups with optional initial participants\n- `whatsapp_group_join_via_link` - Join groups using invite links\n- `whatsapp_group_leave` - Leave groups by group ID\n- `whatsapp_group_participants` - List all participants in a group\n- `whatsapp_group_manage_participants` - Add, remove, promote, or demote group members\n- `whatsapp_group_invite_link` - Get or reset group invite links\n- `whatsapp_group_info` - Get detailed group information\n- `whatsapp_group_set_name` - Update group display name\n- `whatsapp_group_set_topic` - Update group description\u002Ftopic\n- `whatsapp_group_set_locked` - Toggle admin-only group info editing\n- `whatsapp_group_set_announce` - Toggle announcement-only mode\n- `whatsapp_group_join_requests` - List pending join requests\n- `whatsapp_group_manage_join_requests` - Approve or reject join requests\n\n#### MCP Endpoints\n\n- SSE endpoint: `http:\u002F\u002Flocalhost:8080\u002Fsse`\n- Message endpoint: `http:\u002F\u002Flocalhost:8080\u002Fmessage`\n\n### MCP Configuration\n\nMake sure you have the MCP server running: `.\u002Fwhatsapp mcp`\n\nFor AI tools that support MCP with SSE (like Cursor), add this configuration:\n\n```json\n{\n  \"mcpServers\": {\n    \"whatsapp\": {\n      \"url\": \"http:\u002F\u002Flocalhost:8080\u002Fsse\"\n    }\n  }\n}\n```\n\n### Production Mode REST (docker)\n\nUsing Docker Hub:\n\n```bash\ndocker run --detach --publish=3000:3000 --name=whatsapp --restart=always --volume=$(docker volume create --name=whatsapp):\u002Fapp\u002Fstorages aldinokemal2104\u002Fgo-whatsapp-web-multidevice rest --autoreply=\"Dont't reply this message please\"\n```\n\nUsing GitHub Container Registry:\n\n```bash\ndocker run --detach --publish=3000:3000 --name=whatsapp --restart=always --volume=$(docker volume create --name=whatsapp):\u002Fapp\u002Fstorages ghcr.io\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice rest --autoreply=\"Dont't reply this message please\"\n```\n\n### Production Mode REST (docker compose)\n\ncreate `docker-compose.yml` file with the following configuration:\n\nUsing Docker Hub:\n\n```yml\nservices:\n  whatsapp:\n    image: aldinokemal2104\u002Fgo-whatsapp-web-multidevice\n    container_name: whatsapp\n    restart: always\n    ports:\n      - \"3000:3000\"\n    volumes:\n      - whatsapp:\u002Fapp\u002Fstorages\n    command:\n      - rest\n      - --basic-auth=admin:admin\n      - --port=3000\n      - --debug=true\n      - --os=Chrome\n      - --account-validation=false\n\nvolumes:\n  whatsapp:\n```\n\nUsing GitHub Container Registry:\n\n```yml\nservices:\n  whatsapp:\n    image: ghcr.io\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\n    container_name: whatsapp\n    restart: always\n    ports:\n      - \"3000:3000\"\n    volumes:\n      - whatsapp:\u002Fapp\u002Fstorages\n    command:\n      - rest\n      - --basic-auth=admin:admin\n      - --port=3000\n      - --debug=true\n      - --os=Chrome\n      - --account-validation=false\n\nvolumes:\n  whatsapp:\n```\n\nor with env file (Docker Hub):\n\n```yml\nservices:\n  whatsapp:\n    image: aldinokemal2104\u002Fgo-whatsapp-web-multidevice\n    container_name: whatsapp\n    restart: always\n    ports:\n      - \"3000:3000\"\n    volumes:\n      - whatsapp:\u002Fapp\u002Fstorages\n    environment:\n      - APP_BASIC_AUTH=admin:admin\n      - APP_PORT=3000\n      - APP_DEBUG=true\n      - APP_OS=Chrome\n      - APP_ACCOUNT_VALIDATION=false\n\nvolumes:\n  whatsapp:\n```\n\nor with env file (GitHub Container Registry):\n\n```yml\nservices:\n  whatsapp:\n    image: ghcr.io\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\n    container_name: whatsapp\n    restart: always\n    ports:\n      - \"3000:3000\"\n    volumes:\n      - whatsapp:\u002Fapp\u002Fstorages\n    environment:\n      - APP_BASIC_AUTH=admin:admin\n      - APP_PORT=3000\n      - APP_DEBUG=true\n      - APP_OS=Chrome\n      - APP_ACCOUNT_VALIDATION=false\n\nvolumes:\n  whatsapp:\n```\n\n### Production Mode (binary)\n\n- download binary from [release](https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Freleases)\n\nYou can fork or edit this source code !\n\n## Current API\n\n### MCP (Model Context Protocol) API\n\n- MCP server provides standardized tools for AI agents to interact with WhatsApp\n- Supports Server-Sent Events (SSE) transport\n- Available tools: `whatsapp_send_text`, `whatsapp_send_contact`, `whatsapp_send_link`, `whatsapp_send_location`\n- Compatible with MCP-enabled AI tools and agents\n\n### HTTP REST API\n\n- Check [docs\u002Fopenapi.yml](.\u002Fdocs\u002Fopenapi.yaml) for detailed API specifications.\n- Use [SwaggerEditor](https:\u002F\u002Feditor.swagger.io) to visualize the API.\n- Generate HTTP clients using [openapi-generator](https:\u002F\u002Fopenapi-generator.tech\u002F#try).\n\n| Feature  | Menu                                   | Method | URL                                 |\n|----------|----------------------------------------|--------|-------------------------------------|\n| ✅       | List Devices                           | GET    | \u002Fdevices                            |\n| ✅       | Add Device                             | POST   | \u002Fdevices                            |\n| ✅       | Get Device Info                        | GET    | \u002Fdevices\u002F:device_id                 |\n| ✅       | Remove Device                          | DELETE | \u002Fdevices\u002F:device_id                 |\n| ✅       | Login Device (QR)                      | GET    | \u002Fdevices\u002F:device_id\u002Flogin           |\n| ✅       | Login Device (Code)                    | POST   | \u002Fdevices\u002F:device_id\u002Flogin\u002Fcode      |\n| ✅       | Logout Device                          | POST   | \u002Fdevices\u002F:device_id\u002Flogout          |\n| ✅       | Reconnect Device                       | POST   | \u002Fdevices\u002F:device_id\u002Freconnect       |\n| ✅       | Get Device Status                      | GET    | \u002Fdevices\u002F:device_id\u002Fstatus          |\n| ✅       | Login with Scan QR                     | GET    | \u002Fapp\u002Flogin                          |\n| ✅       | Login With Pair Code                   | GET    | \u002Fapp\u002Flogin-with-code                |\n| ✅       | Logout                                 | GET    | \u002Fapp\u002Flogout                         |\n| ✅       | Reconnect                              | GET    | \u002Fapp\u002Freconnect                      |\n| ✅       | Devices                                | GET    | \u002Fapp\u002Fdevices                        |\n| ✅       | Connection Status                      | GET    | \u002Fapp\u002Fstatus                         |\n| ✅       | User Info                              | GET    | \u002Fuser\u002Finfo                          |\n| ✅       | User Avatar                            | GET    | \u002Fuser\u002Favatar                        |\n| ✅       | User Change Avatar                     | POST   | \u002Fuser\u002Favatar                        |\n| ✅       | User Change PushName                   | POST   | \u002Fuser\u002Fpushname                      |\n| ✅       | User My Groups*                        | GET    | \u002Fuser\u002Fmy\u002Fgroups                     |\n| ✅       | User My Newsletter                     | GET    | \u002Fuser\u002Fmy\u002Fnewsletters                |\n| ✅       | User My Privacy Setting                | GET    | \u002Fuser\u002Fmy\u002Fprivacy                    |\n| ✅       | User My Contacts                       | GET    | \u002Fuser\u002Fmy\u002Fcontacts                   |\n| ✅       | User Check                             | GET    | \u002Fuser\u002Fcheck                         |\n| ✅       | User Business Profile                  | GET    | \u002Fuser\u002Fbusiness-profile              |\n| ✅       | Send Message                           | POST   | \u002Fsend\u002Fmessage                       |\n| ✅       | Send Image                             | POST   | \u002Fsend\u002Fimage                         |\n| ✅       | Send Audio                             | POST   | \u002Fsend\u002Faudio                         |\n| ✅       | Send File                              | POST   | \u002Fsend\u002Ffile                          |\n| ✅       | Send Video                             | POST   | \u002Fsend\u002Fvideo                         |\n| ✅       | Send Sticker                           | POST   | \u002Fsend\u002Fsticker                       |\n| ✅       | Send Contact                           | POST   | \u002Fsend\u002Fcontact                       |\n| ✅       | Send Link                              | POST   | \u002Fsend\u002Flink                          |\n| ✅       | Send Location                          | POST   | \u002Fsend\u002Flocation                      |\n| ✅       | Send Poll \u002F Vote                       | POST   | \u002Fsend\u002Fpoll                          |\n| ✅       | Send Presence                          | POST   | \u002Fsend\u002Fpresence                      |\n| ✅       | Send Chat Presence (Typing Indicator)  | POST   | \u002Fsend\u002Fchat-presence                 |\n| ✅       | Revoke Message                         | POST   | \u002Fmessage\u002F:message_id\u002Frevoke         |\n| ✅       | React Message                          | POST   | \u002Fmessage\u002F:message_id\u002Freaction       |\n| ✅       | Delete Message                         | POST   | \u002Fmessage\u002F:message_id\u002Fdelete         |\n| ✅       | Edit Message                           | POST   | \u002Fmessage\u002F:message_id\u002Fupdate         |\n| ✅       | Read Message (DM)                      | POST   | \u002Fmessage\u002F:message_id\u002Fread           |\n| ✅       | Star Message                           | POST   | \u002Fmessage\u002F:message_id\u002Fstar           |\n| ✅       | Unstar Message                         | POST   | \u002Fmessage\u002F:message_id\u002Funstar         |\n| ✅       | Download Message Media                 | GET    | \u002Fmessage\u002F:message_id\u002Fdownload       |\n| ✅       | Join Group With Link                   | POST   | \u002Fgroup\u002Fjoin-with-link               |\n| ✅       | Group Info From Link                   | GET    | \u002Fgroup\u002Finfo-from-link               |\n| ✅       | Group Info                             | GET    | \u002Fgroup\u002Finfo                         |\n| ✅       | Leave Group                            | POST   | \u002Fgroup\u002Fleave                        |\n| ✅       | Create Group                           | POST   | \u002Fgroup                              |\n| ✅       | List Participants in Group             | GET    | \u002Fgroup\u002Fparticipants                 |\n| ✅       | Add Participants in Group              | POST   | \u002Fgroup\u002Fparticipants                 |\n| ✅       | Remove Participant in Group            | POST   | \u002Fgroup\u002Fparticipants\u002Fremove          |\n| ✅       | Promote Participant in Group           | POST   | \u002Fgroup\u002Fparticipants\u002Fpromote         |\n| ✅       | Demote Participant in Group            | POST   | \u002Fgroup\u002Fparticipants\u002Fdemote          |\n| ✅       | Export Group Participants (CSV)        | GET    | \u002Fgroup\u002Fparticipants\u002Fexport          |\n| ✅       | List Requested Participants in Group   | GET    | \u002Fgroup\u002Fparticipant-requests         |\n| ✅       | Approve Requested Participant in Group | POST   | \u002Fgroup\u002Fparticipant-requests\u002Fapprove |\n| ✅       | Reject Requested Participant in Group  | POST   | \u002Fgroup\u002Fparticipant-requests\u002Freject  |\n| ✅       | Set Group Photo                        | POST   | \u002Fgroup\u002Fphoto                        |\n| ✅       | Set Group Name                         | POST   | \u002Fgroup\u002Fname                         |\n| ✅       | Set Group Locked                       | POST   | \u002Fgroup\u002Flocked                       |\n| ✅       | Set Group Announce                     | POST   | \u002Fgroup\u002Fannounce                     |\n| ✅       | Set Group Topic                        | POST   | \u002Fgroup\u002Ftopic                        |\n| ✅       | Get Group Invite Link                  | GET    | \u002Fgroup\u002Finvite-link                  |\n| ✅       | Unfollow Newsletter                    | POST   | \u002Fnewsletter\u002Funfollow                |\n| ✅       | Get Chat List                          | GET    | \u002Fchats                              |\n| ✅       | Get Chat Messages                      | GET    | \u002Fchat\u002F:chat_jid\u002Fmessages            |\n| ✅       | Label Chat                             | POST   | \u002Fchat\u002F:chat_jid\u002Flabel               |\n| ✅       | Pin Chat                               | POST   | \u002Fchat\u002F:chat_jid\u002Fpin                 |\n| ✅       | Archive Chat                           | POST   | \u002Fchat\u002F:chat_jid\u002Farchive             |\n| ✅       | Set Disappearing Messages              | POST   | \u002Fchat\u002F:chat_jid\u002Fdisappearing        |\n\n```\n✅ = Available\n❌ = Not Available Yet\n* = Has known limitations (see notes below)\n```\n\n**Notes:**\n\n- `*User My Groups`: Returns a maximum of 500 groups due to WhatsApp protocol limitation. This is enforced by WhatsApp servers, not this API. See [whatsmeow source](https:\u002F\u002Fgithub.com\u002Ftulir\u002Fwhatsmeow\u002Fblob\u002Fmain\u002Fgroup.go) for details.\n\n## User Interface\n\n### MCP UI\n\n- Setup MCP (tested in cursor)\n  ![Setup MCP](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Faldinokemal_go-whatsapp-web-multidevice_readme_648e38987267.png)\n- Test MCP\n  ![Test MCP](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Faldinokemal_go-whatsapp-web-multidevice_readme_df358bdb8fb7.png)\n- Successfully setup MCP\n  ![Success MCP](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Faldinokemal_go-whatsapp-web-multidevice_readme_c218de966aae.png)\n\n### HTTP REST API UI\n\n| Description          | Image                                                         |\n|----------------------|---------------------------------------------------------------|\n| Homepage             | ![Homepage](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Faldinokemal_go-whatsapp-web-multidevice_readme_843dcbfb87c2.png)                       |\n| Login                | ![Login](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Faldinokemal_go-whatsapp-web-multidevice_readme_328e07df3610.png)                                 |\n| Login With Code      | ![Login With Code](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Faldinokemal_go-whatsapp-web-multidevice_readme_f8afad443394.png)             |\n| Send Message         | ![Send Message](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Faldinokemal_go-whatsapp-web-multidevice_readme_60d860adb65e.png)                   |\n| Send Image           | ![Send Image](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Faldinokemal_go-whatsapp-web-multidevice_readme_7f51ae397b09.png)                       |\n| Send File            | ![Send File](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Faldinokemal_go-whatsapp-web-multidevice_readme_2dbabb9fdb85.png)                         |\n| Send Video           | ![Send Video](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Faldinokemal_go-whatsapp-web-multidevice_readme_2c41eb970eca.png)                       |\n| Send Sticker         | ![Send Sticker](.\u002Fgallery\u002Fsend-sticker.png)                   |\n| Send Contact         | ![Send Contact](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Faldinokemal_go-whatsapp-web-multidevice_readme_5f8f41e4f7bc.png)                   |\n| Send Location        | ![Send Location](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Faldinokemal_go-whatsapp-web-multidevice_readme_68832e690ec2.png)                 |\n| Send Audio           | ![Send Audio](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Faldinokemal_go-whatsapp-web-multidevice_readme_098bb1efa11d.png)                       |\n| Send Poll            | ![Send Poll](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Faldinokemal_go-whatsapp-web-multidevice_readme_ef5bf8a1c731.png)                         |\n| Send Presence        | ![Send Presence](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Faldinokemal_go-whatsapp-web-multidevice_readme_d20029dc77ef.png)                 |\n| Send Link            | ![Send Link](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Faldinokemal_go-whatsapp-web-multidevice_readme_96eae4283b3e.png)                         |\n| My Group             | ![My Group](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Faldinokemal_go-whatsapp-web-multidevice_readme_93c2e8a1de6d.png)                         |\n| Group Info From Link | ![Group Info From Link](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Faldinokemal_go-whatsapp-web-multidevice_readme_3c4b115055c8.png)   |\n| Create Group         | ![Create Group](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Faldinokemal_go-whatsapp-web-multidevice_readme_d6cf70f93f5c.png)                   |\n| Join Group with Link | ![Join Group with Link](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Faldinokemal_go-whatsapp-web-multidevice_readme_fd9a8930ce3e.png)        |\n| Manage Participant   | ![Manage Participant](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Faldinokemal_go-whatsapp-web-multidevice_readme_e69c347d58c1.png) |\n| My Newsletter        | ![My Newsletter](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Faldinokemal_go-whatsapp-web-multidevice_readme_fa63c30e1e2b.png)               |\n| My Contacts          | ![My Contacts](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Faldinokemal_go-whatsapp-web-multidevice_readme_355febb4dac4.png)                    |\n| Business Profile     | ![Business Profile](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Faldinokemal_go-whatsapp-web-multidevice_readme_ed732cc8532b.png)           |\n\n### Mac OS NOTE\n\n- Please do this if you have an error (invalid flag in pkg-config --cflags: -Xpreprocessor)\n  `export CGO_CFLAGS_ALLOW=\"-Xpreprocessor\"`\n\n## Important\n\n- This project is unofficial and not affiliated with WhatsApp.\n- Please use official WhatsApp API to avoid any issues.\n- We only able to run MCP or REST API, this is limitation from whatsmeow library. independent MCP will be available in\n  the future.\n","\u003C!-- markdownlint-disable MD041 -->\n\u003C!-- markdownlint-disable-next-line MD033 -->\n\u003Cdiv align=\"center\">\n  \u003C!-- markdownlint-disable-next-line MD033 -->\n  \u003Cimg src=\"src\u002Fviews\u002Fassets\u002Fgowa.svg\" alt=\"GoWA Logo\" width=\"200\" height=\"200\">\n\n## Golang WhatsApp - 基于 Go 语言构建，内存使用高效\n\n\u003C\u002Fdiv>\n\n[![Patreon](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FSupport%20on-Patreon-orange.svg)](https:\u002F\u002Fwww.patreon.com\u002Fc\u002Faldinokemal)\n**如果您正在使用此工具产生收益，请考虑通过成为 Patreon 成员来支持其开发！** 您的支持将有助于确保该库得到持续维护和定期更新！\n___\n\n![发布版本](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fv\u002Frelease\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice)\n![构建镜像](https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Factions\u002Fworkflows\u002Fbuild-docker-image.yaml\u002Fbadge.svg)\n![二进制发布](https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Factions\u002Fworkflows\u002Frelease.yml\u002Fbadge.svg)\n\n## 支持 `ARM` 和 `AMD` 架构，并提供 `MCP` 支持\n\n下载：\n\n- [发布页面](https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Freleases\u002Flatest)\n- [Docker Hub](https:\u002F\u002Fhub.docker.com\u002Fr\u002Faldinokemal2104\u002Fgo-whatsapp-web-multidevice\u002Ftags)\n- [GitHub 容器注册表](https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Fpkgs\u002Fcontainer\u002Fgo-whatsapp-web-multidevice)\n\n## 支持 n8n 包（n8n.io）\n\n- [n8n 包](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@aldinokemal2104\u002Fn8n-nodes-gowa)\n- 前往设置 -> 社区节点 -> 输入 `@aldinokemal2104\u002Fn8n-nodes-gowa` -> 安装\n\n## 重大变更\n\n- `v6`\n  - 对于 REST 模式，您需要运行 `\u003C二进制文件> rest`，而不是直接运行 `\u003C二进制文件>`。\n    - 例如：`.\u002Fwhatsapp rest` 而不是 ~~.\u002Fwhatsapp~~。\n  - 对于 MCP 模式，您需要运行 `\u003C二进制文件> mcp`。\n    - 例如：`.\u002Fwhatsapp mcp`。\n- `v7`\n  - 从 7.x 版本开始，我们使用 goreleaser 来构建二进制文件，因此您可以从 [发布页面](https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Freleases\u002Flatest) 下载二进制文件。\n- `v8`\n  - **多设备支持**：现在您可以在单个服务器实例中同时连接和管理多个 WhatsApp 账号。\n  - **新的设备管理 API**：新增了 `\u002Fdevices` 路径下的端点，用于管理多个设备。\n  - **设备作用域要求**：所有与设备相关的 REST API 调用现在都需要以下任一方式：\n    - `X-Device-Id` 请求头，或\n    - `device_id` 查询参数。\n    - 如果仅注册了一个设备，则该设备将作为默认设备。\n  - **WebSocket 设备作用域**：通过连接到 `\u002Fws?device_id=\u003Cid>` 可以将 WebSocket 限定在特定设备上。\n  - **Webhook 负载变化**：所有 webhook 负载现在都包含一个顶级的 `device_id` 字段，用于标识接收事件的具体设备：\n\n        ```json\n        {\n          \"event\": \"message\",\n          \"device_id\": \"628123456789@s.whatsapp.net\",\n          \"payload\": { ... }\n        }\n        ```\n\n## 功能\n\n- 通过 HTTP API 发送 WhatsApp 消息，更多详情请参阅 [docs\u002Fopenapi.yml](.\u002Fdocs\u002Fopenapi.yaml)\n- **MCP（模型上下文协议）服务器支持** - 使用标准化协议与 AI 代理和工具集成\n- 提及某人\n  - `@phoneNumber`\n  - 示例：`Hello @628974812XXXX, @628974812XXXX`\n- **幽灵提及（全员提及）** - 在不显示消息文本中 `@phone` 的情况下提及群组成员\n  - 将电话号码传递到 `mentions` 字段以在消息中提及用户而不显示可见的 `@`\n  - 使用特殊关键字 `@everyone` 自动提及所有群组成员\n  - 群组发送消息模态框中提供 UI 复选框\n- 发布 WhatsApp 状态\n- **发送贴纸** - 自动将图片转换为 WebP 贴纸格式\n  - 支持 JPG、JPEG、PNG、WebP 和 GIF 格式\n  - 自动调整大小至 512x512 像素\n  - 保留 PNG 图片的透明度\n  - **动画 WebP 贴纸** 受支持，但必须符合 WhatsApp 要求：\n    - 必须精确为 **512x512 像素**\n    - 文件大小不得超过 **500KB**\n    - 最长持续时间为 **10 秒**\n    - 如果您的动画贴纸不符合这些要求，请使用 [ezgif.com](https:\u002F\u002Fezgif.com\u002Fresize) 等工具在上传前调整其尺寸\n- 发送前压缩图片\n- 发送前压缩视频\n- 更改操作系统名称为您的应用名称（这是通过手机连接时的设备名称）\n  - `--os=Chrome` 或 `--os=MyApplication`\n- 基本认证（可添加多个凭证）\n  - `--basic-auth=kemal:secret,toni:password,userName:secretPassword`，或者您可以简化为\n  - `-b=kemal:secret,toni:password,userName:secretPassword`\n- 子路径部署支持\n  - `--base-path=\"\u002Fgowa\"`（允许在特定路径下部署，例如 `\u002Fgowa\u002Fsub\u002Fpath`）\n- 可自定义端口和调试模式\n  - `--port 8000`\n  - `--debug true`\n- 自动回复消息\n  - `--autoreply=\"Don't reply this message\"`\n- 自动标记已读传入消息\n  - `--auto-mark-read=true`（自动将传入消息标记为已读）\n- 自动下载传入消息中的媒体\n  - `--auto-download-media=false`（禁用自动下载媒体，默认值为 `true`）\n- 自动拒绝来电\n  - `--auto-reject-call=true` 或 `WHATSAPP_AUTO_REJECT_CALL=true`（有关呼叫事件，请参阅 [Webhook 负载](.\u002Fdocs\u002Fwebhook-payload.md#call-events)）\n- 连接时可配置在线状态\n  - `--presence-on-connect=unavailable` 或 `WHATSAPP_PRESENCE_ON_CONNECT=unavailable`\n  - `available` — 标记为在线（抑制手机通知）\n  - `unavailable` — 注册推送名称而不上线（默认设置，保留手机通知）\n  - `none` — 完全跳过在线状态（不会注册推送名称，联系人可能会看到“-”作为名称）\n- 接收消息的 Webhook\n  - `--webhook=\"http:\u002F\u002Fyourwebhook.site\u002Fhandler\"`，或者您可以简化为\n  - `-w=\"http:\u002F\u002Fyourwebhook.site\u002Fhandler\"`\n  - 更多详情请参阅 [Webhook 负载文档](.\u002Fdocs\u002Fwebhook-payload.md)\n- Webhook 密钥\n  我们的 Webhook 将附带 HMAC 头部和默认密钥 `secret` 的 sha256 签名发送给您。\n  您可以使用以下选项修改此密钥：\n  - `--webhook-secret=\"secret\"`\n- **Webhook 负载文档**\n  有关详细的 Webhook 负载模式、安全实施和集成示例，请参阅 [Webhook 负载文档](.\u002Fdocs\u002Fwebhook-payload.md)\n- **Webhook 事件过滤**\n  您可以通过以下方式过滤转发到您的 Webhook 的事件：\n  - `--webhook-events=\"message,message.ack\"`（逗号分隔列表）\n  - 或环境变量：`WHATSAPP_WEBHOOK_EVENTS=message,message.ack`\n\n  **可用的 Webhook 事件：**\n\n  | 事件                | 描述                                   |\n  |----------------------|-----------------------------------------------|\n  | `message`            | 文本、媒体、联系人、位置消息       |\n  | `message.reaction`   | 对消息的表情符号反应                   |\n  | `message.revoked`    | 已删除\u002F撤销的消息                      |\n  | `message.edited`     | 已编辑的消息                           |\n  | `message.ack`        | 投递和已读回执                         |\n  | `message.deleted`    | 用户删除的消息                         |\n  | `group.participants` | 群组成员加入\u002F离开\u002F晋升\u002F降级事件         |\n  | `group.joined`       | 您被添加到一个群组                     |\n  | `newsletter.joined`  | 您订阅了一个新闻通讯\u002F频道              |\n  | `newsletter.left`    | 您退订了一个新闻通讯                   |\n  | `newsletter.message` | 新闻通讯中发布的新消息                 |\n  | `newsletter.mute`    | 新闻通讯静音设置变更                   |\n  | `call.offer`         | 收到的来电                             |\n\n  如果未配置（为空），则所有事件都将被转发。\n- **Webhook TLS 配置**\n\n  如果您在使用 Webhook 时遇到 TLS 证书验证错误（例如使用 Cloudflare 隧道或自签名证书时）：\n\n  ```\n  tls: failed to verify certificate: x509: certificate signed by unknown authority\n  ```\n\n  您可以通过以下方式禁用 TLS 证书验证：\n  - `--webhook-insecure-skip-verify=true`\n  - 或环境变量： `WHATSAPP_WEBHOOK_INSECURE_SKIP_VERIFY=true`\n\n  **安全警告**：此选项会禁用 TLS 证书验证，仅应在以下情况下使用：\n  - 开发\u002F测试环境\n  - Cloudflare 隧道（它们本身提供安全层）\n  - 具有自签名证书的内部网络\n\n  **对于生产环境**，强烈建议使用正确的 SSL 证书（例如 Let's Encrypt），而不是禁用验证。\n\n## 配置\n\n您可以使用命令行标志（如上所示）或环境变量来配置应用程序。配置可以通过三种方式设置（按优先级顺序）：\n\n1. 命令行标志（最高优先级）\n2. 环境变量\n3. `.env` 文件（最低优先级）\n\n### 环境变量\n\n你可以使用环境变量来配置应用程序。配置可以通过三种方式设置（按优先级从高到低）：\n\n1. 命令行标志（最高优先级）\n2. 环境变量\n3. `.env` 文件（最低优先级）\n\n要使用环境变量，请按照以下步骤操作：\n\n1. 将 `.env.example` 复制到项目根目录下的 `.env` 文件中（`cp src\u002F.env.example src\u002F.env`）\n2. 根据你的需求修改 `.env` 文件中的值\n3. 或者将相同的变量设置为系统环境变量\n\n#### 可用的环境变量\n\n| 变量                                | 描述                                                   | 默认                                      | 示例                                       |\n|-----------------------------------------|---------------------------------------------------------------|----------------------------------------------|-----------------------------------------------|\n| `APP_PORT`                              | 应用程序端口                                              | `3000`                                       | `APP_PORT=8080`                               |\n| `APP_HOST`                              | 服务器绑定的主机地址                               | `0.0.0.0`                                    | `APP_HOST=127.0.0.1`                          |\n| `APP_DEBUG`                             | 启用调试日志                                          | `false`                                      | `APP_DEBUG=true`                              |\n| `APP_OS`                                | 操作系统名称（WhatsApp 中的设备名称）                             | `Chrome`                                     | `APP_OS=MyApp`                                |\n| `APP_BASIC_AUTH`                        | 基本认证凭据                              | -                                            | `APP_BASIC_AUTH=user1:pass1,user2:pass2`      |\n| `APP_BASE_PATH`                         | 用于子路径部署的基路径                              | -                                            | `APP_BASE_PATH=\u002Fgowa`                         |\n| `APP_TRUSTED_PROXIES`                   | 反向代理的信任代理 IP 范围                     | -                                            | `APP_TRUSTED_PROXIES=0.0.0.0\u002F0`               |\n| `DB_URI`                                | 数据库连接 URI                                       | `file:storages\u002Fwhatsapp.db?_foreign_keys=on` | `DB_URI=postgres:\u002F\u002Fuser:pass@host\u002Fdb`         |\n| `WHATSAPP_AUTO_REPLY`                   | 自动回复消息                                            | -                                            | `WHATSAPP_AUTO_REPLY=\"自动回复消息\"`    |\n| `WHATSAPP_AUTO_MARK_READ`               | 自动将收到的消息标记为已读                           | `false`                                      | `WHATSAPP_AUTO_MARK_READ=true`                |\n| `WHATSAPP_AUTO_DOWNLOAD_MEDIA`          | 自动下载来自收到消息的媒体                    | `true`                                       | `WHATSAPP_AUTO_DOWNLOAD_MEDIA=false`          |\n| `WHATSAPP_WEBHOOK`                      | 事件的 Webhook URL（逗号分隔）                   | -                                            | `WHATSAPP_WEBHOOK=https:\u002F\u002Fwebhook.site\u002Fxxx`   |\n| `WHATSAPP_WEBHOOK_SECRET`               | 用于验证的 Webhook 密钥                                 | `secret`                                     | `WHATSAPP_WEBHOOK_SECRET=super-secret-key`    |\n| `WHATSAPP_WEBHOOK_INSECURE_SKIP_VERIFY` | 跳过 Webhook 的 TLS 验证（不安全）                 | `false`                                      | `WHATSAPP_WEBHOOK_INSECURE_SKIP_VERIFY=true`  |\n| `WHATSAPP_WEBHOOK_EVENTS`               | 要转发的事件白名单（逗号分隔，空表示全部）       | -                                            | `WHATSAPP_WEBHOOK_EVENTS=message,message.ack` |\n| `WHATSAPP_ACCOUNT_VALIDATION`           | 启用账号验证                                           | `true`                                       | `WHATSAPP_ACCOUNT_VALIDATION=false`           |\n| `WHATSAPP_PRESENCE_ON_CONNECT`          | 连接时的状态：`available`、`unavailable` 或 `none`    | `unavailable`                                | `WHATSAPP_PRESENCE_ON_CONNECT=unavailable`    |\n| `CHATWOOT_ENABLED`                      | 启用 Chatwoot 集成                                   | `false`                                      | `CHATWOOT_ENABLED=true`                       |\n| `CHATWOOT_URL`                          | Chatwoot 实例的 URL                                         | -                                            | `CHATWOOT_URL=https:\u002F\u002Fapp.chatwoot.com`       |\n| `CHATWOOT_API_TOKEN`                    | Chatwoot API 访问令牌                                     | -                                            | `CHATWOOT_API_TOKEN=your-api-token`           |\n| `CHATWOOT_ACCOUNT_ID`                   | Chatwoot 账户 ID                                           | -                                            | `CHATWOOT_ACCOUNT_ID=12345`                   |\n| `CHATWOOT_INBOX_ID`                     | Chatwoot 收件箱 ID                                             | -                                            | `CHATWOOT_INBOX_ID=67890`                     |\n| `CHATWOOT_DEVICE_ID`                    | Chatwoot 的 WhatsApp 设备 ID（多设备设置）          | -                                            | `CHATWOOT_DEVICE_ID=628xxx@s.whatsapp.net`    |\n| `CHATWOOT_IMPORT_MESSAGES`              | 启用消息历史同步到 Chatwoot                           | `false`                                      | `CHATWOOT_IMPORT_MESSAGES=true`               |\n| `CHATWOOT_DAYS_LIMIT_IMPORT_MESSAGES`   | 要导入的历史天数                                     | `3`                                          | `CHATWOOT_DAYS_LIMIT_IMPORT_MESSAGES=7`       |\n\n**文档：**\n\n- 有关详细的 Webhook 负载模式、安全实现和集成示例，请参阅 [Webhook 负载文档](.\u002Fdocs\u002Fwebhook-payload.md)\n- 有关全面的 Chatwoot 集成指南，请参阅 [Chatwoot 集成文档](.\u002Fdocs\u002Fchatwoot.md)\n\n注意：命令行标志会覆盖在环境变量或 `.env` 文件中设置的任何值。\n\n- 更多命令信息请运行 `.\u002Fwhatsapp --help`\n\n## 要求\n\n### 系统要求\n\n- **Go 1.24.0 或更高版本**（用于从源代码构建）\n- **FFmpeg**（用于媒体处理）\n\n### 平台支持\n\n- Linux（x86_64、ARM64）\n- macOS（Intel、Apple Silicon）\n- Windows（x86_64）——建议使用 WSL\n\n### 依赖项（不使用 Docker）\n\n- macOS：\n  - `brew install ffmpeg webp`\n  - `export CGO_CFLAGS_ALLOW=\"-Xpreprocessor\"`\n- Linux：\n  - `sudo apt update`\n  - `sudo apt install ffmpeg webp`\n- Windows（不推荐，建议使用 [WSL](https:\u002F\u002Fdocs.microsoft.com\u002Fen-us\u002Fwindows\u002Fwsl\u002Finstall)）：\n  - 安装 FFmpeg：[在此下载](https:\u002F\u002Fwww.ffmpeg.org\u002Fdownload.html#build-windows)\n  - 安装 libwebp：[在此下载](https:\u002F\u002Fdevelopers.google.com\u002Fspeed\u002Fwebp\u002Fdownload)（解压后将 `bin` 文件夹添加到 PATH）\n  - 将两者都添加到[环境变量](https:\u002F\u002Fwww.google.com\u002Fsearch?q=windows+add+to+environment+path)\n\n> **注意**：`webp` 包提供了 `cwebp`（编码器）、`dwebp`（解码器）和 `webpmux`（帧提取工具）等工具。\n> FFmpeg 用于媒体处理。libwebp 工具（`webpmux` + `dwebp`）则用于支持动画 WebP 贴纸。\n\n## 使用方法\n\n### 基本用法\n\n1. 克隆本仓库：`git clone https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice`\n2. 通过命令行或终端打开克隆后的文件夹。\n3. 运行 `cd src`\n4. 运行 `go run . rest`（以 REST API 模式运行）\n5. 打开 `http:\u002F\u002Flocalhost:3000`\n\n### 使用 Docker（无需安装依赖）\n\n1. 克隆本仓库：`git clone https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice`\n2. 通过命令行或终端打开克隆后的文件夹。\n3. 运行 `docker-compose up -d --build`\n4. 打开 `http:\u002F\u002Flocalhost:3000`\n\n### 构建自己的二进制文件\n\n1. 克隆本仓库：`git clone https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice`\n2. 通过命令行或终端打开克隆后的文件夹。\n3. 运行 `cd src`\n4. 执行以下命令：\n    1. Linux 和 macOS：`go build -o whatsapp`\n    2. Windows（CMD \u002F PowerShell）：`go build -o whatsapp.exe`\n5. 运行：\n    1. Linux 和 macOS：`.\u002Fwhatsapp rest`（以 REST API 模式运行）\n        1. 运行 `.\u002Fwhatsapp --help` 查看更多详细选项\n    2. Windows：`.\\whatsapp.exe rest`（以 REST API 模式运行）\n        1. 运行 `.\\whatsapp.exe --help` 查看更多详细选项\n6. 在浏览器中打开 `http:\u002F\u002Flocalhost:3000`\n\n### MCP 服务器（模型上下文协议）\n\n本应用还可以作为 MCP 服务器运行，允许 AI 代理和工具通过标准化协议与 WhatsApp 交互。\n\n1. 克隆本仓库：`git clone https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice`\n2. 通过命令行或终端打开克隆后的文件夹。\n3. 运行 `cd src`\n4. 运行 `go run . mcp`，或者构建二进制文件后运行 `.\u002Fwhatsapp mcp`\n5. MCP 服务器默认会在 `http:\u002F\u002Flocalhost:8080` 启动\n\n#### MCP 服务器选项\n\n- `--host localhost`：设置 MCP 服务器的主机地址（默认：localhost）\n- `--port 8080`：设置 MCP 服务器的端口（默认：8080）\n\n#### 可用的 MCP 工具\n\nWhatsApp 的 MCP 服务器提供了一整套工具，供 AI 代理通过标准化协议与 WhatsApp 交互。以下是所有可用工具的完整列表：\n\n##### **📱 连接管理**\n\n- `whatsapp_connection_status`：检查 WhatsApp 客户端是否已连接并登录\n- `whatsapp_login_qr`：启动基于二维码的登录流程，并输出图片\n- `whatsapp_login_with_code`：生成配对码，用于通过手机号进行多设备登录\n- `whatsapp_logout`：注销当前 WhatsApp 会话\n- `whatsapp_reconnect`：尝试使用已保存的会话重新连接 WhatsApp\n\n##### **💬 消息与通信**\n\n- `whatsapp_send_text`：发送文本消息，支持回复和转发\n- `whatsapp_send_contact`：发送包含姓名和电话号码的联系人卡片\n- `whatsapp_send_link`：发送带有自定义标题的链接\n- `whatsapp_send_location`：发送位置坐标（经纬度）\n- `whatsapp_send_image`：发送图片，支持添加标题、压缩及阅后即焚功能\n- `whatsapp_send_sticker`：发送贴纸，自动转换为 WebP 格式（支持 JPG\u002FPNG\u002FGIF）\n\n##### **📋 聊天与联系人管理**\n\n- `whatsapp_list_contacts`：获取 WhatsApp 账户中的所有联系人\n- `whatsapp_list_chats`：获取最近的聊天记录，支持分页和搜索过滤\n- `whatsapp_get_chat_messages`：从特定聊天中获取消息，支持按时间及媒体类型筛选\n- `whatsapp_download_message_media`：下载消息中的图片或视频\n- `whatsapp_archive_chat`：归档或取消归档聊天对话\n\n##### **👥 群组管理**\n\n- `whatsapp_group_create`：创建新群组，可选择初始成员\n- `whatsapp_group_join_via_link`：通过邀请链接加入群组\n- `whatsapp_group_leave`：根据群组 ID 退出群组\n- `whatsapp_group_participants`：列出群组内的所有成员\n- `whatsapp_group_manage_participants`：添加、移除、提升或降级群组成员\n- `whatsapp_group_invite_link`：获取或重置群组邀请链接\n- `whatsapp_group_info`：获取详细的群组信息\n- `whatsapp_group_set_name`：更新群组显示名称\n- `whatsapp_group_set_topic`：更新群组描述或主题\n- `whatsapp_group_set_locked`：切换仅管理员可编辑群组信息模式\n- `whatsapp_group_set_announce`：切换仅公告模式\n- `whatsapp_group_join_requests`：列出待处理的入群申请\n- `whatsapp_group_manage_join_requests`：批准或拒绝入群申请\n\n#### MCP 端点\n\n- SSE 端点：`http:\u002F\u002Flocalhost:8080\u002Fsse`\n- 消息端点：`http:\u002F\u002Flocalhost:8080\u002Fmessage`\n\n### MCP 配置\n\n确保 MCP 服务器正在运行：`.\u002Fwhatsapp mcp`\n\n对于支持 MCP 和 SSE 的 AI 工具（如 Cursor），请添加以下配置：\n\n```json\n{\n  \"mcpServers\": {\n    \"whatsapp\": {\n      \"url\": \"http:\u002F\u002Flocalhost:8080\u002Fsse\"\n    }\n  }\n}\n```\n\n### 生产环境 REST 模式（Docker）\n\n使用 Docker Hub：\n\n```bash\ndocker run --detach --publish=3000:3000 --name=whatsapp --restart=always --volume=$(docker volume create --name=whatsapp):\u002Fapp\u002Fstorages aldinokemal2104\u002Fgo-whatsapp-web-multidevice rest --autoreply=\"Dont't reply this message please\"\n```\n\n使用 GitHub Container Registry：\n\n```bash\ndocker run --detach --publish=3000:3000 --name=whatsapp --restart=always --volume=$(docker volume create --name=whatsapp):\u002Fapp\u002Fstorages ghcr.io\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice rest --autoreply=\"Dont't reply this message please\"\n```\n\n### 生产模式 REST（Docker Compose）\n\n创建 `docker-compose.yml` 文件，配置如下：\n\n使用 Docker Hub：\n\n```yml\nservices:\n  whatsapp:\n    image: aldinokemal2104\u002Fgo-whatsapp-web-multidevice\n    container_name: whatsapp\n    restart: always\n    ports:\n      - \"3000:3000\"\n    volumes:\n      - whatsapp:\u002Fapp\u002Fstorages\n    command:\n      - rest\n      - --basic-auth=admin:admin\n      - --port=3000\n      - --debug=true\n      - --os=Chrome\n      - --account-validation=false\n\nvolumes:\n  whatsapp:\n```\n\n使用 GitHub Container Registry：\n\n```yml\nservices:\n  whatsapp:\n    image: ghcr.io\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\n    container_name: whatsapp\n    restart: always\n    ports:\n      - \"3000:3000\"\n    volumes:\n      - whatsapp:\u002Fapp\u002Fstorages\n    command:\n      - rest\n      - --basic-auth=admin:admin\n      - --port=3000\n      - --debug=true\n      - --os=Chrome\n      - --account-validation=false\n\nvolumes:\n  whatsapp:\n```\n\n或者使用环境变量文件（Docker Hub）：\n\n```yml\nservices:\n  whatsapp:\n    image: aldinokemal2104\u002Fgo-whatsapp-web-multidevice\n    container_name: whatsapp\n    restart: always\n    ports:\n      - \"3000:3000\"\n    volumes:\n      - whatsapp:\u002Fapp\u002Fstorages\n    environment:\n      - APP_BASIC_AUTH=admin:admin\n      - APP_PORT=3000\n      - APP_DEBUG=true\n      - APP_OS=Chrome\n      - APP_ACCOUNT_VALIDATION=false\n\nvolumes:\n  whatsapp:\n```\n\n或者使用环境变量文件（GitHub Container Registry）：\n\n```yml\nservices:\n  whatsapp:\n    image: ghcr.io\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\n    container_name: whatsapp\n    restart: always\n    ports:\n      - \"3000:3000\"\n    volumes:\n      - whatsapp:\u002Fapp\u002Fstorages\n    environment:\n      - APP_BASIC_AUTH=admin:admin\n      - APP_PORT=3000\n      - APP_DEBUG=true\n      - APP_OS=Chrome\n      - APP_ACCOUNT_VALIDATION=false\n\nvolumes:\n  whatsapp:\n```\n\n### 生产模式（二进制文件）\n\n- 从 [release](https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Freleases) 下载二进制文件\n\n您可以 fork 或编辑此源代码！\n\n## 当前 API\n\n### MCP（模型上下文协议）API\n\n- MCP 服务器为 AI 代理提供与 WhatsApp 交互的标准化工具。\n- 支持 Server-Sent Events (SSE) 传输。\n- 可用工具：`whatsapp_send_text`、`whatsapp_send_contact`、`whatsapp_send_link`、`whatsapp_send_location`。\n- 兼容支持 MCP 的 AI 工具和代理。\n\n### HTTP REST API\n\n- 详细 API 规范请参阅 [docs\u002Fopenapi.yml](.\u002Fdocs\u002Fopenapi.yaml)。\n- 使用 [SwaggerEditor](https:\u002F\u002Feditor.swagger.io) 可视化 API。\n- 可以使用 [openapi-generator](https:\u002F\u002Fopenapi-generator.tech\u002F#try) 生成 HTTP 客户端。\n\n| 功能       | 菜单                                   | 方法   | URL                                 |\n|------------|----------------------------------------|--------|-------------------------------------|\n| ✅        | 列出设备                               | GET    | \u002Fdevices                            |\n| ✅        | 添加设备                               | POST   | \u002Fdevices                            |\n| ✅        | 获取设备信息                           | GET    | \u002Fdevices\u002F:device_id                 |\n| ✅        | 删除设备                               | DELETE | \u002Fdevices\u002F:device_id                 |\n| ✅        | 设备登录（二维码）                     | GET    | \u002Fdevices\u002F:device_id\u002Flogin           |\n| ✅        | 设备登录（验证码）                     | POST   | \u002Fdevices\u002F:device_id\u002Flogin\u002Fcode      |\n| ✅        | 设备登出                               | POST   | \u002Fdevices\u002F:device_id\u002Flogout          |\n| ✅        | 重新连接设备                           | POST   | \u002Fdevices\u002F:device_id\u002Freconnect       |\n| ✅        | 获取设备状态                           | GET    | \u002Fdevices\u002F:device_id\u002Fstatus          |\n| ✅        | 使用扫描二维码登录                     | GET    | \u002Fapp\u002Flogin                          |\n| ✅        | 使用配对码登录                         | GET    | \u002Fapp\u002Flogin-with-code                |\n| ✅        | 登出                                   | GET    | \u002Fapp\u002Flogout                         |\n| ✅        | 重新连接                               | GET    | \u002Fapp\u002Freconnect                      |\n| ✅        | 设备列表                               | GET    | \u002Fapp\u002Fdevices                        |\n| ✅        | 连接状态                               | GET    | \u002Fapp\u002Fstatus                         |\n| ✅        | 用户信息                               | GET    | \u002Fuser\u002Finfo                          |\n| ✅        | 用户头像                               | GET    | \u002Fuser\u002Favatar                        |\n| ✅        | 更改用户头像                           | POST   | \u002Fuser\u002Favatar                        |\n| ✅        | 更改用户昵称                           | POST   | \u002Fuser\u002Fpushname                      |\n| ✅        | 用户我的群组*                          | GET    | \u002Fuser\u002Fmy\u002Fgroups                     |\n| ✅        | 用户我的新闻通讯                       | GET    | \u002Fuser\u002Fmy\u002Fnewsletters                |\n| ✅        | 用户隐私设置                           | GET    | \u002Fuser\u002Fmy\u002Fprivacy                    |\n| ✅        | 用户联系人                             | GET    | \u002Fuser\u002Fmy\u002Fcontacts                   |\n| ✅        | 用户检查                               | GET    | \u002Fuser\u002Fcheck                         |\n| ✅        | 用户企业资料                           | GET    | \u002Fuser\u002Fbusiness-profile              |\n| ✅        | 发送消息                               | POST   | \u002Fsend\u002Fmessage                       |\n| ✅        | 发送图片                               | POST   | \u002Fsend\u002Fimage                         |\n| ✅        | 发送音频                               | POST   | \u002Fsend\u002Faudio                         |\n| ✅        | 发送文件                               | POST   | \u002Fsend\u002Ffile                          |\n| ✅        | 发送视频                               | POST   | \u002Fsend\u002Fvideo                         |\n| ✅        | 发送贴纸                               | POST   | \u002Fsend\u002Fsticker                       |\n| ✅        | 发送联系人                             | POST   | \u002Fsend\u002Fcontact                       |\n| ✅        | 发送链接                               | POST   | \u002Fsend\u002Flink                          |\n| ✅        | 发送位置                               | POST   | \u002Fsend\u002Flocation                      |\n| ✅        | 发送投票\u002F民意调查                      | POST   | \u002Fsend\u002Fpoll                          |\n| ✅        | 发送在线状态                           | POST   | \u002Fsend\u002Fpresence                      |\n| ✅        | 发送聊天在线状态（打字提示）           | POST   | \u002Fsend\u002Fchat-presence                 |\n| ✅        | 撤回消息                               | POST   | \u002Fmessage\u002F:message_id\u002Frevoke         |\n| ✅        | 回复消息                               | POST   | \u002Fmessage\u002F:message_id\u002Freaction       |\n| ✅        | 删除消息                               | POST   | \u002Fmessage\u002F:message_id\u002Fdelete         |\n| ✅        | 编辑消息                               | POST   | \u002Fmessage\u002F:message_id\u002Fupdate         |\n| ✅        | 标记消息已读（私信）                   | POST   | \u002Fmessage\u002F:message_id\u002Fread           |\n| ✅        | 收藏消息                               | POST   | \u002Fmessage\u002F:message_id\u002Fstar           |\n| ✅        | 取消收藏消息                           | POST   | \u002Fmessage\u002F:message_id\u002Funstar         |\n| ✅        | 下载消息媒体                           | GET    | \u002Fmessage\u002F:message_id\u002Fdownload       |\n| ✅        | 使用链接加入群组                       | POST   | \u002Fgroup\u002Fjoin-with-link               |\n| ✅        | 通过链接获取群组信息                   | GET    | \u002Fgroup\u002Finfo-from-link               |\n| ✅        | 获取群组信息                           | GET    | \u002Fgroup\u002Finfo                         |\n| ✅        | 退出群组                               | POST   | \u002Fgroup\u002Fleave                        |\n| ✅        | 创建群组                               | POST   | \u002Fgroup                              |\n| ✅        | 列出群组成员                           | GET    | \u002Fgroup\u002Fparticipants                 |\n| ✅        | 添加群组成员                           | POST   | \u002Fgroup\u002Fparticipants                 |\n| ✅        | 移除群组成员                           | POST   | \u002Fgroup\u002Fparticipants\u002Fremove          |\n| ✅        | 提升群组成员等级                       | POST   | \u002Fgroup\u002Fparticipants\u002Fpromote         |\n| ✅        | 降低群组成员等级                       | POST   | \u002Fgroup\u002Fparticipants\u002Fdemote          |\n| ✅        | 导出群组成员（CSV）                    | GET    | \u002Fgroup\u002Fparticipants\u002Fexport          |\n| ✅        | 列出群组申请的成员                     | GET    | \u002Fgroup\u002Fparticipant-requests         |\n| ✅        | 批准群组申请的成员                     | POST   | \u002Fgroup\u002Fparticipant-requests\u002Fapprove |\n| ✅        | 拒绝群组申请的成员                     | POST   | \u002Fgroup\u002Fparticipant-requests\u002Freject  |\n| ✅        | 设置群组头像                           | POST   | \u002Fgroup\u002Fphoto                        |\n| ✅        | 设置群组名称                           | POST   | \u002Fgroup\u002Fname                         |\n| ✅        | 锁定群组                               | POST   | \u002Fgroup\u002Flocked                       |\n| ✅        | 开启群组公告模式                       | POST   | \u002Fgroup\u002Fannounce                     |\n| ✅        | 设置群组话题                           | POST   | \u002Fgroup\u002Ftopic                        |\n| ✅        | 获取群组邀请链接                       | GET    | \u002Fgroup\u002Finvite-link                  |\n| ✅        | 取消关注新闻通讯                       | POST   | \u002Fnewsletter\u002Funfollow                |\n| ✅        | 获取聊天列表                           | GET    | \u002Fchats                              |\n| ✅        | 获取聊天消息                           | GET    | \u002Fchat\u002F:chat_jid\u002Fmessages            |\n| ✅        | 为聊天标记                             | POST   | \u002Fchat\u002F:chat_jid\u002Flabel               |\n| ✅        | 置顶聊天                               | POST   | \u002Fchat\u002F:chat_jid\u002Fpin                 |\n| ✅        | 归档聊天                               | POST   | \u002Fchat\u002F:chat_jid\u002Farchive             |\n| ✅        | 设置阅后即焚消息                       | POST   | \u002Fchat\u002F:chat_jid\u002Fdisappearing        |\n\n```\n✅ = 可用\n❌ = 尚不可用\n* = 存在已知限制（见下方说明）\n```\n\n**说明：**\n\n- `*用户我的群组`: 由于 WhatsApp 协议的限制，最多返回 500 个群组。这是由 WhatsApp 服务器强制执行的，而非本 API 的限制。详情请参阅 [whatsmeow 源代码](https:\u002F\u002Fgithub.com\u002Ftulir\u002Fwhatsmeow\u002Fblob\u002Fmain\u002Fgroup.go)。\n\n\n\n## 用户界面\n\n### MCP UI\n\n- 设置 MCP（已在 cursor 中测试）\n  ![设置 MCP](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Faldinokemal_go-whatsapp-web-multidevice_readme_648e38987267.png)\n- 测试 MCP\n  ![测试 MCP](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Faldinokemal_go-whatsapp-web-multidevice_readme_df358bdb8fb7.png)\n- 成功设置 MCP\n  ![成功设置 MCP](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Faldinokemal_go-whatsapp-web-multidevice_readme_c218de966aae.png)\n\n### HTTP REST API UI\n\n| 描述          | 图片                                                         |\n|----------------------|---------------------------------------------------------------|\n| 首页             | ![首页](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Faldinokemal_go-whatsapp-web-multidevice_readme_843dcbfb87c2.png)                       |\n| 登录                | ![登录](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Faldinokemal_go-whatsapp-web-multidevice_readme_328e07df3610.png)                                 |\n| 使用验证码登录      | ![使用验证码登录](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Faldinokemal_go-whatsapp-web-multidevice_readme_f8afad443394.png)             |\n| 发送消息         | ![发送消息](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Faldinokemal_go-whatsapp-web-multidevice_readme_60d860adb65e.png)                   |\n| 发送图片           | ![发送图片](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Faldinokemal_go-whatsapp-web-multidevice_readme_7f51ae397b09.png)                       |\n| 发送文件            | ![发送文件](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Faldinokemal_go-whatsapp-web-multidevice_readme_2dbabb9fdb85.png)                         |\n| 发送视频           | ![发送视频](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Faldinokemal_go-whatsapp-web-multidevice_readme_2c41eb970eca.png)                       |\n| 发送贴纸         | ![发送贴纸](.\u002Fgallery\u002Fsend-sticker.png)                   |\n| 发送联系人         | ![发送联系人](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Faldinokemal_go-whatsapp-web-multidevice_readme_5f8f41e4f7bc.png)                   |\n| 发送位置        | ![发送位置](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Faldinokemal_go-whatsapp-web-multidevice_readme_68832e690ec2.png)                 |\n| 发送音频           | ![发送音频](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Faldinokemal_go-whatsapp-web-multidevice_readme_098bb1efa11d.png)                       |\n| 发送投票            | ![发送投票](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Faldinokemal_go-whatsapp-web-multidevice_readme_ef5bf8a1c731.png)                         |\n| 发送状态        | ![发送状态](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Faldinokemal_go-whatsapp-web-multidevice_readme_d20029dc77ef.png)                 |\n| 发送链接            | ![发送链接](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Faldinokemal_go-whatsapp-web-multidevice_readme_96eae4283b3e.png)                         |\n| 我的群组             | ![我的群组](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Faldinokemal_go-whatsapp-web-multidevice_readme_93c2e8a1de6d.png)                         |\n| 通过链接获取群信息 | ![通过链接获取群信息](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Faldinokemal_go-whatsapp-web-multidevice_readme_3c4b115055c8.png)   |\n| 创建群组         | ![创建群组](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Faldinokemal_go-whatsapp-web-multidevice_readme_d6cf70f93f5c.png)                   |\n| 通过链接加入群组 | ![通过链接加入群组](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Faldinokemal_go-whatsapp-web-multidevice_readme_fd9a8930ce3e.png)        |\n| 管理群成员        | ![管理群成员](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Faldinokemal_go-whatsapp-web-multidevice_readme_e69c347d58c1.png)       |\n| 我的新闻通讯        | ![我的新闻通讯](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Faldinokemal_go-whatsapp-web-multidevice_readme_fa63c30e1e2b.png)               |\n| 我的联系人          | ![我的联系人](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Faldinokemal_go-whatsapp-web-multidevice_readme_355febb4dac4.png)                    |\n| 商业资料     | ![商业资料](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Faldinokemal_go-whatsapp-web-multidevice_readme_ed732cc8532b.png)           |\n\n### Mac OS 注意事项\n\n- 如果遇到错误（`pkg-config --cflags` 中出现无效标志 `-Xpreprocessor`），请执行以下操作：\n  `export CGO_CFLAGS_ALLOW=\"-Xpreprocessor\"`\n\n## 重要提示\n\n- 本项目为非官方项目，与 WhatsApp 官方无任何关联。\n- 请使用 WhatsApp 官方 API，以避免任何问题。\n- 目前我们仅能运行 MCP 或 REST API，这是 whatsmeow 库的限制。独立的 MCP 功能将在未来推出。","# go-whatsapp-web-multidevice 快速上手指南\n\n`go-whatsapp-web-multidevice` 是一个基于 Go 语言构建的高效 WhatsApp 多设备网关。它支持通过 HTTP API 发送消息、接收 webhook 回调，并原生支持 MCP (Model Context Protocol)，非常适合用于构建 AI 助手或自动化工作流。\n\n## 环境准备\n\n### 系统要求\n- **架构支持**：完美支持 `ARM` (如树莓派、Apple Silicon) 和 `AMD` (x86_64) 架构。\n- **操作系统**：Linux, macOS, Windows。\n- **网络**：服务器需能访问 WhatsApp 官方服务（若在国内部署，可能需要配置代理）。\n\n### 前置依赖\n本工具提供编译好的二进制文件和 Docker 镜像，**无需**安装 Go 语言环境即可直接使用。\n- 若使用二进制文件：无额外依赖。\n- 若使用 Docker：需安装 Docker Engine 和 Docker Compose。\n\n---\n\n## 安装步骤\n\n你可以选择以下任意一种方式进行安装：\n\n### 方式一：下载二进制文件（推荐）\n\n1. 访问 [GitHub Releases](https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Freleases\u002Flatest) 页面。\n2. 根据你的系统架构下载对应的压缩包（例如 `go-whatsapp-web-multidevice_Linux_x86_64.tar.gz`）。\n3. 解压并赋予执行权限：\n\n```bash\ntar -xzf go-whatsapp-web-multidevice_Linux_x86_64.tar.gz\nchmod +x whatsapp\n```\n\n> **注意**：从 `v6` 版本开始，启动命令需指定模式。REST API 模式请使用 `.\u002Fwhatsapp rest`。\n\n### 方式二：使用 Docker\n\n直接从 Docker Hub 拉取镜像：\n\n```bash\ndocker pull aldinokemal2104\u002Fgo-whatsapp-web-multidevice:latest\n```\n\n或者使用 GitHub Container Registry：\n\n```bash\ndocker pull ghcr.io\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice:latest\n```\n\n---\n\n## 基本使用\n\n### 1. 启动服务\n\n#### 使用二进制文件启动\n运行以下命令启动 REST API 服务，监听 8000 端口：\n\n```bash\n.\u002Fwhatsapp rest --port 8000\n```\n\n常用参数示例（开启自动回复和 Webhook）：\n```bash\n.\u002Fwhatsapp rest --port 8000 --autoreply=\"收到消息，稍后回复\" --webhook=\"http:\u002F\u002Fyour-server.com\u002Fhandler\"\n```\n\n#### 使用 Docker 启动\n```bash\ndocker run -d \\\n  --name gowa \\\n  -p 8000:3000 \\\n  -v $(pwd)\u002Fdata:\u002Fapp\u002Fstorages \\\n  aldinokemal2104\u002Fgo-whatsapp-web-multidevice:latest rest\n```\n*注：默认容器内端口为 3000，上述命令将其映射到宿主机的 8000 端口。*\n\n### 2. 连接 WhatsApp 账号\n\n1. 在浏览器中访问 `http:\u002F\u002Flocalhost:8000`（或你设置的 IP 和端口）。\n2. 页面上将显示一个二维码。\n3. 打开手机 WhatsApp：\n   - **Android**: 点击右上角菜单 -> \"已连接的设备\" -> \"连接设备\"。\n   - **iOS**: 进入 \"设置\" -> \"已连接的设备\" -> \"连接设备\"。\n4. 扫描二维码进行绑定。支持同时绑定多个设备（多账号管理）。\n\n### 3. 发送第一条消息\n\n绑定成功后，你可以通过 HTTP API 发送消息。\n\n**示例：发送文本消息**\n\n```bash\ncurl -X POST http:\u002F\u002Flocalhost:8000\u002Fapi\u002Fsend-message \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"phone\": \"8613800138000\",\n    \"message\": \"你好，这是来自 Go WA 的测试消息！\"\n  }'\n```\n\n**示例：提及某人 (Mention)**\n\n```bash\ncurl -X POST http:\u002F\u002Flocalhost:8000\u002Fapi\u002Fsend-message \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"phone\": \"8613800138000@g.us\",\n    \"message\": \"Hello @8613900139000, 请查看此消息。\",\n    \"mentions\": [\"8613900139000@s.whatsapp.net\"]\n  }'\n```\n\n**示例：发送贴纸 (自动转换格式)**\n\n```bash\ncurl -X POST http:\u002F\u002Flocalhost:8000\u002Fapi\u002Fsend-sticker \\\n  -F \"phone=8613800138000\" \\\n  -F \"file=@\u002Fpath\u002Fto\u002Fimage.png\"\n```\n\n### 4. 配置 Webhook (接收消息)\n\n若要接收他人发来的消息，启动时添加 `--webhook` 参数：\n\n```bash\n.\u002Fwhatsapp rest --webhook=\"http:\u002F\u002Fyour-server.com\u002Fwebhook\" --webhook-secret=\"your_secret_key\"\n```\n\n当收到消息时，工具会向你的地址发送 JSON Payload，包含 `device_id` 和消息内容。\n\n---\n\n**提示**：更多高级功能（如 MCP 集成、n8n 节点安装、环境变量配置等）请参考项目官方文档。","一家中型电商公司的客服团队需要同时管理五个不同品牌的 WhatsApp 官方账号，并希望将消息自动同步到内部的 Chatwoot 客服系统进行统一处理。\n\n### 没有 go-whatsapp-web-multidevice 时\n- **多账号管理混乱**：需要在多台物理手机或模拟器上分别登录不同账号，无法在单一服务器实例中集中管控，运维成本极高。\n- **开发集成困难**：缺乏标准的 REST API，开发人员难以将 WhatsApp 消息流与公司现有的 Chatwoot 系统或自动化工作流（如 n8n）进行对接。\n- **资源消耗巨大**：传统方案常依赖重型浏览器自动化脚本，导致服务器内存占用过高，难以在低配置的 ARM 架构服务器上稳定运行。\n- **功能扩展受限**：无法通过代码灵活发送贴纸、状态更新或实现“幽灵提及”（Ghost Mentions）等高级交互功能，客户体验单一。\n\n### 使用 go-whatsapp-web-multidevice 后\n- **一站式多设备管控**：利用其原生的多设备支持特性，单个服务器实例即可通过 `\u002Fdevices` 接口同时连接并管理所有品牌账号，通过 `device_id` 轻松区分流量。\n- **无缝生态集成**：直接调用 REST API 或通过 n8n 社区节点，将消息实时推送至 Chatwoot，并利用 Webhooks 自动触发后续业务逻辑，开发效率大幅提升。\n- **极致性能优化**：基于 Golang 构建的高效内存管理机制，使得服务能在低成本的 ARM 服务器上流畅运行，显著降低了基础设施开支。\n- **丰富交互能力**：轻松实现自动发送 WebP 格式贴纸、发布状态更新以及在群聊中自动提及所有成员（@everyone），显著增强了客户互动的趣味性。\n\ngo-whatsapp-web-multidevice 通过高性能的多账号 API 支持，将分散的 WhatsApp 运营转化为可编排、低成本的自动化客户服务流程。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Faldinokemal_go-whatsapp-web-multidevice_648e3898.png","aldinokemal","Aldino Kemal","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Faldinokemal_d34c9f5d.jpg","Juru ketik profesional",null,"Yogyakarta, Indonesia","aldinokemal2104@gmail.com","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Faldinokemal\u002F","https:\u002F\u002Fgithub.com\u002Faldinokemal",[82,86,90,94,98,102],{"name":83,"color":84,"percentage":85},"Go","#00ADD8",70.8,{"name":87,"color":88,"percentage":89},"JavaScript","#f1e05a",26.4,{"name":91,"color":92,"percentage":93},"HTML","#e34c26",1.8,{"name":95,"color":96,"percentage":97},"CSS","#663399",0.9,{"name":99,"color":100,"percentage":101},"Dockerfile","#384d54",0.1,{"name":103,"color":104,"percentage":105},"Shell","#89e051",0,3778,890,"2026-04-17T08:52:07","MIT","Linux, macOS, Windows","不需要 GPU","未说明（基于 Go 语言特性，内存占用通常较低）",{"notes":114,"python":115,"dependencies":116},"该工具是使用 Go 语言编写的独立二进制程序，无需安装 Python 或复杂的深度学习库。支持 ARM 和 AMD 架构。可通过下载预编译二进制文件、使用 Docker 容器或从源码编译运行。配置可通过命令行参数、环境变量或 .env 文件完成。主要功能是作为 WhatsApp 多设备协议的 API 网关和 MCP 服务器。","不需要 Python",[117,118,119],"Go (编译语言，无运行时依赖)","SQLite 或 PostgreSQL (数据库)","Docker (可选)",[121,26,15],"其他",[123,124,125,126,127,128,129,130,131,132,133,134],"whatsapp","whatsapp-api","whatsapp-api-go","golang","golang-whatsapp","golang-whatsapp-api","whatsapp-web-multi-device","bot","go","whatsapp-multi-device","rest","rest-api","2026-03-27T02:49:30.150509","2026-04-18T00:47:16.764967",[138,143,148,153,158,163],{"id":139,"question_zh":140,"answer_zh":141,"source_url":142},38240,"如何通过 API 发送图片以避免缩略图尺寸不一致的问题？","在旧版本（如 v5.2.0）中，通过 API 发送图片生成的缩略图在 Android 和 Web 端显示大小不一致。\n解决方案：\n请升级项目至 v5.3.1 或更高版本。维护者在该版本中修复了图片处理和缩略图生成的逻辑，确保发送效果与 WhatsApp Web 原生发送保持一致。","https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Fissues\u002F253",{"id":144,"question_zh":145,"answer_zh":146,"source_url":147},38239,"发送投票请求时遇到 Error 479 错误，如何解决？","Error 479 通常发生在向使用 LID（Link Identifier）寻址模式的群组发送投票时。这是 WhatsApp Web 底层实现（whatsmeow 库）的协议级问题，而非应用本身的 bug。\n解决方案：\n1. 检查您的群组寻址模式是否为 'lid'。如果您的账号寻址模式不是 lid，通常不会遇到此问题。\n2. 尝试升级到最新版本（如 v7.0 或更高），维护者已在后续版本中针对此类协议问题进行了适配和修复。\n参考讨论：该问题与 whatsmeow 库的已知问题类似。","https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Fissues\u002F294",{"id":149,"question_zh":150,"answer_zh":151,"source_url":152},38241,"是否支持多设备同时登录（多账号管理）？","是的，该功能已支持。\n解决方案：\n从 v8 版本开始，项目增加了客户端存储到数据库的功能（支持 SQLite 或 PostgreSQL）。现在可以存储多个客户端会话，允许服务同时接受和管理多个设备的登录连接。请确保您使用的是 v8 或更新版本以使用此功能。","https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Fissues\u002F190",{"id":154,"question_zh":155,"answer_zh":156,"source_url":157},38242,"收到消息回复时，Webhook 返回的数据为 null 怎么办？","这是一个已知的新增功能回归问题，曾在 v4.4.4 中出现（Webhook 事件未发送）。\n解决方案：\n请将系统升级至 v4.4.5 或更高版本。维护者已在该版本中修复了消息回复（Reply）字段在 Webhook 载荷中丢失或为 null 的问题。","https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Fissues\u002F53",{"id":159,"question_zh":160,"answer_zh":161,"source_url":162},38243,"如何集成 Chatwoot CRM？是否有相关文档？","Chatwoot 集成功能已在 v8.2.0 版本中加入。\n现状与建议：\n1. 确认您已升级到 v8.2.0 或以上版本。\n2. 目前官方文档中关于 Chatwoot 的具体配置步骤（如在 Chatwoot 中创建何种类型的收件箱：Website 还是 API）尚不完善。\n3. 建议参考 WAHA 项目的集成文档作为配置思路参考，或在社区中寻求已成功案例的配置细节（如 Inbox 类型选择）。","https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Fissues\u002F312",{"id":164,"question_zh":165,"answer_zh":166,"source_url":167},38244,"机器人回复群消息时，是否会触发被静音成员的通知？","有用户反馈在移除聊天存储（WHATSAPP_CHAT_STORAGE）后，机器人回复会导致静音群成员收到通知。\n当前结论：\n维护者已按照提供的步骤（创建群组、加入 Bot、成员静音、发送消息并回复）进行了本地测试，未能复现该问题。在测试中，静音成员并未收到通知。如果您仍遇到此问题，请提供可稳定复现的详细步骤以便进一步排查，否则可能属于特定环境下的偶发情况。","https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Fissues\u002F355",[169,174,179,184,189,194,199,204,209,214,219,224,229,234,239,244,249,254,259,264],{"id":170,"version":171,"summary_zh":172,"released_at":173},306395,"v8.3.5","## 🐛 问题修复\n\n### Docker 权限修复 (#621)\n- 修复在 Docker 部署中发送群消息时出现的 `尝试写入只读数据库` 错误\n- 根本原因：v8.3.4 引入了一个非 root 用户 (`gowauser`)，但绑定挂载的卷仍保留宿主机的所有权，导致 SQLite 发送方密钥写入失败\n\n### 群聊反应功能 (#615)\n- 通过正确使用带有参与者 JID 的 `BuildReaction`，修复群聊中反应无法送达的问题\n\n---\n\n## 🔧 技术改进\n\n### Docker 安全性与可靠性\n- 添加 `entrypoint.sh` 脚本，在启动时通过 `chown` 自动修复绑定挂载权限\n- 使用 `su-exec` 实现干净的权限降级（从 root 切换到 gowauser）\n- 使用独立的 uid\u002Fgid (20001\u002F20000) 避免与 BusyBox `adduser` 冲突\n- 在 `docker-compose.yml` 中添加数据卷挂载，以实现数据库和媒体文件的持久化\n- 更新 `.dockerignore` 文件，将 `docker\u002F` 目录包含在构建上下文中\n\n---\n\n## 变更内容\n\n- 修复：Docker 权限问题导致群消息出现只读数据库 (#621)，由 @aldinokemal 提供\n- 修复：为群聊反应功能使用 `BuildReaction` (#615)，由 @aldinokemal 提供\n- 杂项：更改赞助商信息，由 @aldinokemal 提供\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Fcompare\u002Fv8.3.4...v8.3.5","2026-03-26T23:01:10",{"id":175,"version":176,"summary_zh":177,"released_at":178},306396,"v8.3.4","## ✨ 新功能\n\n### 通过 Webhook 发送打字事件\n- 将传入的 ChatPresence（打字\u002F暂停）事件通过 Webhook 转发，实现实时的状态感知\n\n### 文档缩略图预览\n- 自动为文档消息生成并附加缩略图预览（支持 PDF 格式，依赖 poppler-utils）\n\n### 聊天存储中的媒体元数据\n- 将已发送消息的媒体元数据（文件名、MIME 类型等）存储在聊天存储中，以更好地追踪聊天历史\n\n---\n\n## 🐛 错误修复\n\n- **Opus 音频扩展名**：正确解析 `.opus` 文件扩展名，用于音频消息\n- **取消反应**：允许在反应请求中使用空表情符号，以支持取消反应操作\n- **文档缩略图安全**：修复缩略图生成过程中的安全性和稳定性问题\n- **群组成员电话号码**：解决 `\u002Fgroup\u002Fparticipants` 和 `\u002Fgroup\u002Fparticipant-requests` 接口中 `@lid` JID 的 `phone_number` 显示错误的问题\n\n---\n\n## 🔧 技术改进\n\n### 依赖库更新\n- `go.mau.fi\u002Fwhatsmeow`：升级至最新版本\n- 所有 Go 依赖库均保持最新状态\n\n### 构建与 Docker\n- 优化了 Dockerfile，并添加了 `poppler-utils` 以支持 PDF 缩略图功能\n\n---\n\n## 变更内容\n\n- 修复：由 @du-cki 在 https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Fpull\u002F612 中完成，正确解析 Opus 文件扩展名\n- 修复：由 @Hanake0 在 https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Fpull\u002F608 中完成，允许在反应请求中使用空表情符号以实现取消反应\n- 功能：由 @pedroscardua 在 https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Fpull\u002F617 中完成，为文档消息添加缩略图预览\n- 功能：由 @matfire 在 https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Fpull\u002F547 中完成，通过 Webhook 转发传入的 ChatPresence（打字）事件\n- 修复：由 @aldinokemal 完成，将已发送消息的媒体元数据存储到聊天存储中\n- 修复：由 @aldinokemal 完成，修复文档缩略图相关的安全和稳定性问题\n- 修复：由 @aldinokemal 完成，解决 `\u002Fgroup\u002Fparticipants` 和 `\u002Fgroup\u002Fparticipant-requests` 接口中 `@lid` JID 的 `phone_number` 显示错误的问题\n- 杂项：由 @aldinokemal 完成，优化 Dockerfile 并添加 `poppler-utils` 以支持 PDF 缩略图\n- 杂项：由 @aldinokemal 完成，将 whatsmeow 更新至最新版本\n\n## 新贡献者\n\n- @du-cki 在 https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Fpull\u002F612 中完成了首次贡献\n- @Hanake0 在 https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Fpull\u002F608 中完成了首次贡献\n- @pedroscardua 在 https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Fpull\u002F617 中完成了首次贡献\n- @matfire 在 https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Fpull\u002F547 中完成了首次贡献\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Fcompare\u002Fv8.3.3...v8.3.4","2026-03-26T01:04:45",{"id":180,"version":181,"summary_zh":182,"released_at":183},306397,"v8.3.3","## v8.3.3 新增内容\n\n🛠️ **补丁版本：归档聊天过滤、链接元数据修复、DB_URI 引号处理及历史同步改进**\n\n此版本新增了归档聊天过滤功能，修复了在获取链接元数据时被反机器人机制拦截的问题，解决了 DB_URI 解析中带引号值的错误，避免了群组历史同步中发送者 JID 错误的情况，并更新了依赖项和 CI 工作流。\n\n---\n\n## ✨ 新特性\n\n### 聊天：归档聊天过滤 (#600，修复 #598)\n- **新增**：通过向后兼容的模式迁移，在 `chats` 表中添加了 `archived` 布尔字段\n- **过滤**：`GET \u002Fchats` 现在支持 `?archived=true\u002Ffalse` 查询参数，用于筛选归档聊天\n- **事件同步**：新增了 `events.Archive` 事件监听器，whatsmeow 在 AppStateSync 和实时更新中会原生处理该事件\n- **领域层**：在 `domainChatStorage.Chat` 中加入了 `Archived` 字段，并在 `ChatFilter` 中添加了可选的 `IsArchived` 指针过滤器\n- **向后兼容**：现有的 SQLite 存储会通过 `ALTER TABLE` 自动升级\n\n### 工具：为链接元数据请求添加类似浏览器的头部信息 (#602，关闭 #592)\n- **修复**：`GetMetaDataFromURL()` 现在会发送类似浏览器的 User-Agent 和 Accept 头部信息，以避免在抓取 `\u002Fsend\u002Flink` 的链接预览元数据时因反机器人保护机制而被阻止（403\u002F429 错误）\n- **新辅助函数**：`newBrowserRequest()` 使用 Chrome UA 和标准浏览器头部\n- **应用范围**：同时应用于页面抓取和图片下载请求\n- **测试**：新增了 `TestGetMetaDataFromURLSendsBrowserHeaders` 测试用例\n\n---\n\n## 🐛 问题修复\n\n### 数据库：处理带引号的 DB_URI 值 (#613)\n- **修复**：在检测数据库类型之前，先去除 `DB_URI` 周围的引号，从而修复当 `.env` 值被引号括起来时出现的“未知数据库类型”错误（例如 `DB_URI=\"file:data.db?_pragma=foreign_keys(1)\"`）\n- **文档**：更新了 `.env.example` 文件，移除了 `DB_URI` 和 `DB_KEYS_URI` 中不必要的引号\n\n### 历史同步：跳过无发送者信息的群组消息 (#609)\n- **修复**：现在会在历史同步过程中跳过没有参与者信息的群组消息，防止群组 JID 被错误地存储为 `sender_jid`\n\n---\n\n## 🔧 技术改进\n\n### 依赖项更新\n- **go.mau.fi\u002Fwhatsmeow**：升级至最新版本\n- 所有 Go 依赖项均保持最新状态\n\n### 构建与 CI\n- **ARM 构建运行器**：将 ARM 构建运行器从自托管的 `[ARM64]` 切换到 `ubuntu-24.04-arm`\n- **工作流清理**：统一 YAML 文件中的引号格式，修剪 goreleaser 配置文件中的尾部空格\n\n---\n\n## 变更概览\n* feat: 添加归档聊天过滤功能 (#598) 由 @aldinokemal 在 https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Fpull\u002F600 中实现\n* feat(utils): 为元数据获取请求添加类似浏览器的头部信息 由 @aldinokemal 在 https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Fpull\u002F602 中实现\n* fix: 处理带引号的 DB_URI 并跳过无发送者信息的群组历史消息 由 @aldinokemal 实现\n* chore: 将 whatsmeow 更新至最新版本 由 @aldinokemal 实现\n* ci: 更新工作流，使用 ARM 运行器并进行格式化修复 由 @aldinokemal 实现\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Faldinoke","2026-03-15T06:14:50",{"id":185,"version":186,"summary_zh":187,"released_at":188},306398,"v7.11.4","## v7.11.4 新增内容\n\n🛠️ 补丁发布：核心依赖更新及版本号提升\n\n此版本将 WhatsApp 核心引擎及其他 Go 依赖库更新至最新版本，以提升 v7 分支的稳定性和性能。\n\n## 🔧 技术改进\n\n### 依赖库更新\n- **go.mau.fi\u002Fwhatsmeow**：升级至最新版本（c9652e4448a2）\n- **github.com\u002Fgofiber\u002Ffiber\u002Fv2**：v2.52.11 → v2.52.12\n- **github.com\u002Fmark3labs\u002Fmcp-go**：v0.43.2 → v0.44.1\n- **go.mau.fi\u002Futil**：v0.9.5 → v0.9.6\n- **github.com\u002Fmattn\u002Fgo-runewidth**：v0.0.19 → v0.0.20\n- **github.com\u002Fvektah\u002Fgqlparser\u002Fv2**：v2.5.31 → v2.5.32\n- **golang.org\u002Fx\u002Fexp**：更新至最新版本 v0.0.0-20260218203240\n- 其他所有 Go 依赖库均已保持最新状态。\n\n### 维护工作\n- **.gitignore**：添加 `src\u002Fgowa`，防止本地构建生成的二进制文件被追踪。\n- **版本号**：在设置中将 AppVersion 提升至 v7.11.4。\n\n## 变更内容\n- chore(release)：由 @aldinokemal 将版本号提升至 v7.11.4，并更新依赖库。\n- chore：由 @aldinokemal 忽略 gowa 二进制文件。\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Fcompare\u002Fv7.11.3...v7.11.4","2026-02-27T22:18:01",{"id":190,"version":191,"summary_zh":192,"released_at":193},306399,"v8.3.2","## v8.3.2 新增内容\n\n🛠️ **补丁版本：ContactsArray Webhook、显示名称修复及媒体历史改进**\n\n此版本新增对多联系人 webhook 负载的支持，修复了显示名称解析问题，改进了聊天记录中的媒体展示，并更新了核心依赖项。\n\n---\n\n## ✨ 新功能\n\n### Webhook：支持 ContactsArrayMessage (#594)\n- **新增**：当用户一次分享多个联系人时，webhook 现在会包含一个 `contacts_array` 字段，其中列出所有共享的联系人。\n- **格式**：每个条目包含 `displayName` 和 `vcard` 字段，与现有的单个 `contact` 字段保持一致。\n- **显示文本**：`BuildEventMessage` 现在会为多联系人消息显示类似 `👥 3 contacts` 的摘要。\n- **向后兼容**：现有用于单个联系人的 `contact` 字段保持不变；不处理 `contacts_array` 的 webhook 消费者不受影响。\n- **贡献者**：感谢 @lowprofix 的贡献！\n\n---\n\n## 🐛 问题修复\n\n### 显示名称与用户信息解析 (#595，修复 #590)\n- **修复**：当推送名称不可用时，回退逻辑现在会使用干净的电话号码，从而避免将设备内部 ID 显示为聊天名称。\n- **API 增强**：在 `\u002Fuser\u002Finfo` 响应中新增了 `name` 字段。\n- **数据持久化**：`User` 用例现在会查询本地聊天存储，以便在实时 WhatsApp 查询返回空值时提供推送名称。\n- **同步改进**：历史同步现在会在收到推送名称时主动创建聊天条目，以确保未来查找时可用。\n\n### 聊天记录中的媒体展示 (#597，修复 #596)\n- **文档**：当未提供描述时，现在会在历史记录中使用实际文件名（例如 `📄 report.pdf`），而不是通用的 `📄 Document` 标签。\n- **文档**：对用于文档展示的回退文件名进行了修剪，以避免出现多余空格。\n- **图片**：移除了用户提供的描述中多余的 `🖼️ ` 前缀，使历史记录更加整洁。\n- **入站支持**：增强了 `ExtractMessageTextFromEvent` 函数，使其能够在描述为空时从传入的 WhatsApp 消息中提取文件名。\n\n---\n\n## 🔧 技术改进\n\n### 依赖项更新\n- **go.mau.fi\u002Fwhatsmeow**：已更新至最新版本。\n- 所有 Go 依赖项均已保持最新状态。\n\n---\n\n## 新贡献者\n* @lowprofix 在 https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Fpull\u002F594 中做出了首次贡献。\n\n## 变更概览\n* 功能：@lowprofix 在 https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Fpull\u002F594 中添加了 webhook 负载中的 ContactsArrayMessage 支持。\n* 修复：@aldinokemal 在 https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Fpull\u002F595 中解决了显示名称问题及用户信息缺失的问题（#590）。\n* 修复：@aldinokemal 在 https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Fpull\u002F597 中改进了聊天记录中的媒体展示（#596）。\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Fcompare\u002Fv8.3.1...v8.3.2","2026-02-27T22:18:40",{"id":195,"version":196,"summary_zh":197,"released_at":198},306400,"v8.3.1","## v8.3.1 版本更新内容\n\n🛠️ **补丁版本：修复 Webhook 字幕、MCP 设备上下文及依赖项更新**\n\n此版本修复了 Webhook 负载中缺失的媒体字幕问题，解决了 MCP 处理程序中的设备上下文注入问题，更新了 Go 依赖项，并将发布工作流升级至 Go 1.25。\n\n---\n\n## 🐛 错误修复\n\n### Webhook：在负载中包含媒体字幕 (#586)\n- **修复**：Webhook 负载现在会包含来自媒体消息（图片、视频、文档、PTV）的字幕。\n- **新增工具函数**：`ExtractMediaCaption` 辅助函数用于从各类媒体消息中提取字幕。\n- **body 字段**：当没有文本对话时，Webhook 负载中的 `body` 字段将从媒体字幕中填充。\n- **向后兼容**：`buildAutoDownloadPayload` 现在会返回字符串路径（无字幕）或包含 `path` 和 `caption` 的映射（当存在字幕时）。\n- **测试**：为 Webhook 负载中的媒体字幕提取添加了单元测试。\n- **文档**：更新了 `docs\u002Fwebhook-payload.md` 文件，以反映新的字幕行为。\n\n### MCP：在处理程序中注入设备上下文 (#583, #582)\n- **修复**：解决了 MCP 处理程序中“需要设备标识”的错误。\n- **新增辅助函数**：在 `src\u002Fui\u002Fmcp\u002Fhelpers\u002Fcontext.go` 中新增了 `ContextWithDefaultDevice` 函数，用于解析并注入默认的 WhatsApp 设备到上下文中。\n- **应用范围**：已应用于 `group.go`、`query.go` 和 `send.go` 中的所有 MCP 处理程序方法。\n\n---\n\n## 🔧 技术改进\n\n### 依赖项更新\n- **go.mau.fi\u002Fwhatsmeow**：升级至最新版本 (7ae702b1eed4)。\n- **github.com\u002Fvektah\u002Fgqlparser\u002Fv2**：从 v2.5.31 更新至 v2.5.32。\n- **golang.org\u002Fx\u002Fexp**：更新至 v0.0.0-20260218203240。\n- 所有 Go 依赖项均已保持最新状态。\n\n### 构建与 CI\n- **Go 版本**：将发布工作流从 Go 1.24 升级至 Go 1.25，以提升兼容性和性能。\n\n---\n\n## 变更概览\n* 修复：在 Webhook 负载中包含媒体字幕，并在 MCP 处理程序中注入设备上下文——由 @aldinokemal 完成。\n* 杂项：更新 Go 依赖项（whatsmeow 及其他）——由 @aldinokemal 完成。\n* 杂项：将发布工作流中的 Go 版本更新至 1.25——由 @aldinokemal 完成。\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Fcompare\u002Fv8.3.0...v8.3.1","2026-02-23T08:14:17",{"id":200,"version":201,"summary_zh":202,"released_at":203},306401,"v7.11.3","## 更改日志\n* 58f0cd7 杂项：在发布工作流和 go.mod 文件中将 Go 版本更新至 1.25.0\n\n","2026-02-12T23:14:14",{"id":205,"version":206,"summary_zh":207,"released_at":208},306402,"v8.3.0","## v8.3.0 新增内容\n\n🚀 **功能发布：自动拒绝来电、Chatwoot 历史同步、幽灵提及等功能**\n\n本次发布新增了来电自动拒绝功能、Chatwoot 消息历史同步、支持幽灵提及（`@everyone`）、WhatsApp 在线状态配置以及 LID（Linked ID）解析功能。\n\n---\n\n## ✨ 新特性\n\n### 自动拒绝来电 (#563)\n- **新功能**：自动拒绝 WhatsApp 来电\n- **配置**：通过 `WHATSAPP_AUTO_REJECT_CALL` 环境变量或 `--auto-reject-call` CLI 标志位进行设置（默认为 `false`）\n- **Webhook**：新增 `call.offer` webhook 事件，在收到呼叫时触发，包含 `auto_rejected` 字段，用于反映实际的拒绝结果\n\n### Chatwoot 消息历史同步与 Webhook 认证修复 (#565)\n- **历史同步**：将本地聊天存储中的消息历史同步至 Chatwoot（类似于 Evolution API）\n- **新端点**：\n  - `POST \u002Fchatwoot\u002Fsync`：触发后台消息历史同步任务\n  - `GET \u002Fchatwoot\u002Fsync\u002Fstatus`：查看同步进度\n- **新配置**：\n  - `CHATWOOT_IMPORT_MESSAGES`：启用设备连接时的自动同步\n  - `CHATWOOT_DAYS_LIMIT_IMPORT_MESSAGES`：配置要同步的历史天数\n- **功能特点**：\n  - 支持媒体附件（图片、视频、音频、文档）\n  - 适用于单聊和群聊\n  - 提供状态端点以跟踪同步进度\n  - 实施速率限制以防止 API 被滥用\n  - 在群聊中可正确归属发送者\n- **Webhook 认证修复**：将 `\u002Fchatwoot\u002Fwebhook` 排除在基本认证之外（Chatwoot 发送 webhook 时不带凭证）\n- **发送消息**：自动转发至 Chatwoot，并附带 `is_from_me` 字段以防止回环\n\n### 幽灵提及（`@everyone`）支持 (#570)\n- **MCP 工具**：在 `whatsapp_send_text` 工具中新增 `mentions` 参数（电话号码\u002FJID 数组）\n- **幽灵提及**：通知用户但不在消息文本中显示 `@phone`\n- **格式支持**：同时接受纯电话号码和 JID 格式\n\n### 连接时配置 WhatsApp 在线状态\n- **新功能**：可在 WhatsApp 连接时配置发送的在线状态\n- **配置**：通过 `WHATSAPP_PRESENCE_ON_CONNECT` 环境变量进行设置（选项：`available`、`unavailable`、`none`）\n- **默认值**：`available`（保持现有行为）\n\n### LID（Linked ID）解析\n- **新功能**：支持将 LID（Linked ID）解析为电话号码，反之亦然\n- **函数**：提供 `ResolveLIDToPhone` 和 `ResolvePhoneToLID` 两个双向转换函数\n- **UI**：更新用户信息展示界面，显示解析后的电话号码和 LID 信息\n- **表单**：新增 LID 作为消息接收人类型选项\n\n---\n\n## 📚 文档更新\n\n- 更新了 README 和 `.env.example` 文件，加入来电自动拒绝的配置说明\n- 更新了 Chatwoot 相关文档，添加历史同步的设置与配置说明\n- 新增了 `call.offer` 事件的 webhook 请求体文档\n- 更新了 CLAUDE.md 文件，补充了设备管理细节及数据库配置信息\n\n---\n\n## 🔧 技术改进\n\n### ","2026-02-12T22:57:34",{"id":210,"version":211,"summary_zh":212,"released_at":213},306403,"v8.2.1","## v8.2.1 新增内容\n\n📚 **文档与配置发布：Chatwoot 功能增强**\n\n此补丁版本为 Chatwoot 集成添加了详尽的文档，并引入了用于设备管理和 Webhook 控制的新配置选项。\n\n---\n\n## ✨ 新特性\n\n### 新配置选项\n- **`CHATWOOT_DEVICE_ID`**：在多设备设置中，指定用于 Chatwoot 集成的 WhatsApp 设备\n- **`WHATSAPP_WEBHOOK_INCLUDE_OUTGOING`**：控制是否将出站消息包含在 Webhook 通知中\n\n---\n\n## 📚 文档\n\n### Chatwoot 集成文档\n- **新增指南**：添加了完整的 `docs\u002Fchatwoot.md` 集成指南\n- **先决条件**：详细说明 Chatwoot 设置所需的要求\n- **配置**：环境变量和命令行参数的完整示例\n- **设置流程**：创建 API 通道和配置 Webhook 的分步指南\n- **故障排除**：常见问题及解决方案，包括出站消息和设备管理相关问题\n\n---\n\n## 🔧 技术改进\n\n### 配置更新\n- 更新了 `.env.example` 文件，加入了新的 Chatwoot 配置选项\n- 对 Chatwoot Webhook 处理程序进行了小幅优化\n- 更新了依赖项\n\n---\n\n## 变更内容\n* feat: 由 @aldinokemal 添加全面的 Chatwoot 集成文档\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Fcompare\u002Fv8.2.0...v8.2.1","2026-02-04T22:29:02",{"id":215,"version":216,"summary_zh":217,"released_at":218},306404,"v8.2.0","## v8.2.0 新增内容\n\n🚀 **功能发布：Chatwoot 集成与增强的 Webhook 事件**\n\n本次发布引入了 Chatwoot 集成，用于客户支持工作流，并扩展了针对新闻通讯和群组的 Webhook 事件覆盖范围。\n\n---\n\n## ✨ 新特性\n\n### Chatwoot 集成\n- **全新集成**：全面集成 Chatwoot 客户支持平台，用于 WhatsApp 消息传递\n- **配置**：新增用于 Chatwoot 设置的环境变量：\n  - `CHATWOOT_ENABLED`：启用或禁用 Chatwoot 集成\n  - `CHATWOOT_URL`：您的 Chatwoot 实例 URL\n  - `CHATWOOT_API_TOKEN`：用于身份验证的 API 令牌\n  - `CHATWOOT_ACCOUNT_ID`：您的 Chatwoot 账户 ID\n  - `CHATWOOT_INBOX_ID`：用于对话的目标收件箱 ID\n- **功能**：\n  - WhatsApp 与 Chatwoot 之间的双向消息同步\n  - 自动创建联系人和对话\n  - 支持从外部 URL 发送文件\n  - 电话号码规范化为 E.164 格式\n  - 群组名称缓存以提升性能\n- **Webhook 处理器**：新增用于接收 Chatwoot Webhook 的 REST 端点\n\n### 新闻通讯 Webhook 事件 (#478)\n新增针对 WhatsApp 新闻通讯\u002F频道事件的 Webhook 通知：\n- `newsletter.joined`：订阅新闻通讯\u002F频道时触发\n- `newsletter.left`：退订新闻通讯时触发\n- `newsletter.message`：新闻通讯中发布新消息时触发\n- `newsletter.mute`：新闻通讯静音设置变更时触发\n\n### 群组加入 Webhook 事件\n- `group.joined`：当您被添加到 WhatsApp 群组时触发\n\n---\n\n## 📚 文档\n\n### WhatsApp 群组列表限制\n- 添加了关于 WhatsApp 限制的明确说明：您必须先与某个群组互动，该群组才会显示在群组列表中。\n- 更新了 OpenAPI 规范、README 和代码注释，以反映此行为。\n\n---\n\n## 🔧 技术改进\n\n### 依赖项更新\n- **Go**：升级至最新版本\n- **go.mau.fi\u002Fwhatsmeow**：升级至最新版本\n\n---\n\n## 变更内容\n* 功能：由 @aldinokemal 添加新闻通讯和 group.joined 的 Webhook 事件\n* 文档：由 @aldinokemal 在代码、OpenAPI 和 README 中澄清 WhatsApp 群组列表限制，并更新 Go 和 whatsmeow 版本\n* 功能：由 @aldinokemal 添加 Chatwoot 集成\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Fcompare\u002Fv8.1.2...v8.2.0","2026-01-28T22:53:11",{"id":220,"version":221,"summary_zh":222,"released_at":223},306405,"v7.11.2","**Full Changelog**: https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Fcompare\u002Fv7.11.1...v7.11.2","2026-01-28T22:17:50",{"id":225,"version":226,"summary_zh":227,"released_at":228},306406,"v8.1.2","## What's New in v8.1.2\n\n🔧 **Patch Release: Security Fix & Bug Fixes**\n\nThis patch release includes an important security fix and several bug fixes.\n\n---\n\n## 🔒 Security Fixes\n\n### Prevent Cross-Device Data Leak in Chat Message Queries (#525)\n- **Issue**: Device A could potentially read chat history belonging to Device B when they share the same target JID\n- **Fix**: Add device_id filtering to message queries with fail-fast validation\n- **Impact**: Ensures complete data isolation between devices at multiple layers (usecase, wrapper, and repository)\n- **Changes**:\n  - Add DeviceID field to MessageFilter struct\n  - Require device_id in GetMessages\u002FSearchMessages\n  - Add early deviceID validation in GetChatMessages usecase\n  - Remove race-prone state mutations in wrapper repositories\n\n---\n\n## 🐛 Bug Fixes\n\n### React to Other Users' Messages (#535)\n- **Issue**: ReactMessage was hardcoded with `FromMe=true`, which only worked for reacting to your own messages\n- **Fix**: Look up the message in the database to get the correct `IsFromMe` value\n- **Impact**: Users can now properly react to messages sent by others\n\n### Webhook Event Whitelist Filtering (#539)\n- **Issue**: After setting whitelist env to just `message`, webhook was still receiving `message.ack` events from groups\n- **Fix**: Properly route group events through whitelist filter and fix event name mismatches\n- **Impact**: Webhook event filtering now works correctly for all event types\n- **Changes**:\n  - Fixed event names to match documented names (`message.ack`, `message.deleted`, etc.)\n  - Group events now properly go through whitelist filtering\n  - Added comprehensive test coverage for whitelist filtering\n- **Breaking Change ⚠️**: The `message.deleted` payload structure changed from flat to nested format to align with other webhook events\n\n---\n\n## 🔧 Technical Improvements\n\n### Dependency Updates\n- **go.mau.fi\u002Fwhatsmeow**: Updated to latest version\n- **golang.org\u002Fx\u002Fcrypto**: Updated to v0.47.0\n- **golang.org\u002Fx\u002Fnet**: Updated to v0.49.0\n- **golang.org\u002Fx\u002Fimage**: Updated to v0.35.0\n- **github.com\u002Fsirupsen\u002Flogrus**: Updated to v1.9.4\n- **github.com\u002Fklauspost\u002Fcompress**: Updated to v1.18.3\n- **Other Dependencies**: Various Go module updates for stability\n\n---\n\n## What's Changed\n* fix(security): prevent cross-device data leak in chat message queries by @aldinokemal in https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Fpull\u002F525\n* fix: react to other users' messages by looking up IsFromMe from database by @aldinokemal in https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Fpull\u002F535\n* fix: webhook event whitelist filtering for groups and proper event names by @aldinokemal in https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Fpull\u002F539\n\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Fcompare\u002Fv8.1.1...v8.1.2","2026-01-18T05:16:07",{"id":230,"version":231,"summary_zh":232,"released_at":233},306407,"v7.11.1","## What's New in v7.11.1\n\n🔧 **Dependency Updates**\n  - **WhatsApp Protocol Update**: Updated whatsmeow library to latest version\n    - **whatsmeow**: Updated to v0.0.0-20260107124630-ccfa04f8e445\n    - **Protocol Compatibility**: Latest WhatsApp Web protocol changes\n    - **Bug Fixes**: Includes upstream bug fixes and improvements\n\n  - **Core Dependencies**: Updated supporting libraries\n    - **fasthttp**: Updated from v1.68.0 to v1.69.0\n    - **go-sqlite3**: Updated from v1.14.32 to v1.14.33\n    - **golang.org\u002Fx\u002Fsys**: Updated from v0.39.0 to v0.40.0\n    - **golang.org\u002Fx\u002Ftext**: Updated from v0.32.0 to v0.33.0\n\n## 🎯 **What This Means for You**\n\n### For All Users\n- **Better Compatibility**: Latest WhatsApp Web protocol support\n- **Improved Stability**: Updated dependencies with bug fixes\n- **Security Updates**: Latest security patches from upstream libraries\n- **Performance**: Minor performance improvements from updated libraries\n\n## Important Notes\n\n✅ **Breaking Changes**\n- None - all changes are backward compatible\n- Existing deployments continue to work without configuration changes\n\n🔧 **Recommended Actions**\n- Update to v7.11.1 for the latest WhatsApp protocol compatibility\n- No configuration changes required\n\n## Summary\n\nVersion 7.11.1 is a maintenance release that updates the WhatsApp protocol library (whatsmeow) and other dependencies to their latest versions, ensuring continued compatibility with WhatsApp Web and incorporating upstream bug fixes and security improvements.\n\n## What's Changed\n* feat: update wa proto in https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Fcommit\u002F4d9b2f2\n\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Fcompare\u002Fv7.11.0...v7.11.1","2026-01-12T14:36:52",{"id":235,"version":236,"summary_zh":237,"released_at":238},306408,"v8.1.1","## What's New in v8.1.1\r\n\r\n🔧 **Patch Release: Bug Fixes & Audio Enhancements**\r\n\r\nThis patch release includes important bug fixes and audio message improvements.\r\n\r\n---\r\n\r\n## ✨ New Features & Enhancements\r\n\r\n### Audio Message Improvements\r\n- **Waveform Generation**: Audio messages now include visual waveform data for better UI display\r\n- **MIME Type Resolution**: Automatic detection of audio file MIME types\r\n- **Duration Retrieval**: Audio duration is now automatically extracted and included in messages\r\n- **Fixes #501**: Resolves audio handling issues\r\n\r\n---\r\n\r\n## 🐛 Bug Fixes\r\n\r\n### DeviceMiddleware APP_BASE_PATH Fix (#519)\r\n- **Issue**: DeviceMiddleware was blocking requests when `APP_BASE_PATH` was configured\r\n- **Fix**: Properly handle custom base paths in device middleware routing\r\n- **Impact**: Users can now use custom base paths without middleware blocking\r\n- **Contributor**: @hanifbg\r\n\r\n### Store Phone-Sent Messages in Chat History (#526)\r\n- **Issue**: Messages sent from the phone were not being stored in chat history\r\n- **Fix**: Properly capture and store messages sent from the mobile device\r\n- **Impact**: Complete chat history including phone-originated messages\r\n\r\n### Device List Ordering (#528)\r\n- **Issue**: Device list ordering was inconsistent in the UI\r\n- **Fix**: Sort device list by `created_at` timestamp for stable ordering\r\n- **Impact**: Predictable and consistent device list display\r\n\r\n---\r\n\r\n## 🔧 Technical Improvements\r\n\r\n### Dependency Updates\r\n- **golang.org\u002Fx\u002Ftext**: Updated to v0.33.0 for security and performance improvements\r\n- **Other Dependencies**: Various Go module updates for stability\r\n\r\n---\r\n\r\n## New Contributors\r\n* @hanifbg made their first contribution in https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Fpull\u002F519\r\n\r\n---\r\n\r\n## What's Changed\r\n* fix(device.go): Fix DeviceMiddleware to allow if APP_BASE_PATH is change by @hanifbg in https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Fpull\u002F519\r\n* fix: store phone-sent messages in chat history (issue #526) by @aldinokemal in https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Fpull\u002F530\r\n* fix(device): sort device list by created_at for stable UI ordering by @aldinokemal in https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Fpull\u002F528\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Fcompare\u002Fv8.1.0...v8.1.1","2026-01-12T14:32:01",{"id":240,"version":241,"summary_zh":242,"released_at":243},306409,"v8.1.0","## What's New in v8.1.0\r\n\r\n🚀 **Feature Release: Enhanced Messaging & Stability Improvements**\r\n\r\nThis release introduces new messaging features, important bug fixes for multi-device stability, and security improvements.\r\n\r\n---\r\n\r\n## ✨ New Features & Enhancements\r\n\r\n### Ghost Mentions for Group Messages\r\n- **Invisible Mentions**: Mention users in group messages without displaying the mention text\r\n- **API Support**: New `ghost_mentions` parameter in the send message endpoint\r\n- **Use Cases**: Useful for notifying users without cluttering the message with @mentions\r\n\r\n### Chat Archive & Unarchive\r\n- **Archive Chats**: New API endpoint to archive conversations\r\n- **Unarchive Chats**: Restore archived chats when needed\r\n- **MCP Support**: Available in both REST API and MCP server modes\r\n\r\n### Push-to-Talk (PTT) Audio Messages\r\n- **Voice Message Support**: Send audio messages as push-to-talk\u002Fvoice notes\r\n- **API Parameter**: New `ptt` option when sending audio files\r\n- **UI Enhancement**: Toggle PTT mode in the web interface\r\n\r\n### Whitelist Event Webhook\r\n- **Event Filtering**: Configure which webhook events to receive\r\n- **New Configuration**: `WHATSAPP_WEBHOOK_WHITELIST_EVENTS` environment variable\r\n- **Reduced Noise**: Only receive the events you care about\r\n\r\n### WebP Sticker Improvements\r\n- **Enhanced Processing**: Improved WebP sticker handling and conversion\r\n- **Better Compatibility**: More reliable sticker sending across devices\r\n\r\n### Enhanced Avatar Retrieval for Community Groups\r\n- **Community Support**: Fixed avatar retrieval for community group types (#514)\r\n- **Improved Logic**: Better handling of group avatar requests\r\n\r\n---\r\n\r\n## 🐛 Bug Fixes\r\n\r\n### Critical: Data Leak Between Devices (#513)\r\n- **Issue**: `status@broadcast` was resolving to contact names from different devices\r\n- **Fix**: Proper device isolation for contact resolution in multi-device setup\r\n- **Impact**: Critical security fix for multi-device users\r\n\r\n### False Connection State & Duplicate Messages (#509)\r\n- **Issue**: Device showed \"Connected\" after mobile logout; messages duplicated between devices\r\n- **Fix**: Proper connection state tracking and message deduplication\r\n- **Impact**: Improved reliability for multi-device setups\r\n\r\n### User Check Returning True for Invalid Numbers (#496)\r\n- **Issue**: User check always returned \"User is on WhatsApp\" regardless of input\r\n- **Fix**: Proper validation of phone numbers before checking\r\n- **Impact**: Accurate user existence verification\r\n\r\n### Device ID with Unicode Characters (#512)\r\n- **Issue**: Could not delete devices with non-ASCII characters in Device ID\r\n- **Fix**: Proper URL encoding for device IDs in the UI\r\n- **Impact**: Full Unicode support for device identifiers\r\n\r\n### Request Timeouts\r\n- **Issue**: API requests could hang indefinitely\r\n- **Fix**: Added request timeouts and proper error handling\r\n- **Impact**: More responsive API with predictable timeout behavior\r\n\r\n---\r\n\r\n## 🔧 Technical Improvements\r\n\r\n### Stability Enhancements\r\n- **Request Timeouts**: Prevent indefinite hangs with configurable timeouts\r\n- **Recovery Middleware**: Improved panic recovery in REST API\r\n- **Error Handling**: New generic error types for better error management\r\n\r\n### Multi-Device Reliability\r\n- **Connection Tracking**: Better tracking of device connection states\r\n- **Event Handling**: Improved message event processing\r\n- **Database Isolation**: Enhanced device data separation\r\n\r\n---\r\n\r\n## 📚 API Changes\r\n\r\n### New Endpoints\r\n\r\n**Chat Archive\u002FUnarchive:**\r\n```bash\r\n# Archive a chat\r\nPOST \u002Fchat\u002Farchive\r\n{\r\n  \"phone\": \"6281234567890\",\r\n  \"archive\": true\r\n}\r\n\r\n# Unarchive a chat\r\nPOST \u002Fchat\u002Farchive\r\n{\r\n  \"phone\": \"6281234567890\",\r\n  \"archive\": false\r\n}\r\n```\r\n\r\n### Updated Endpoints\r\n\r\n**Send Message with Ghost Mentions:**\r\n```bash\r\nPOST \u002Fsend\u002Fmessage\r\n{\r\n  \"phone\": \"120363123456789@g.us\",\r\n  \"message\": \"Hello everyone!\",\r\n  \"ghost_mentions\": [\"6281234567890\", \"6289876543210\"]\r\n}\r\n```\r\n\r\n**Send Audio with PTT:**\r\n```bash\r\nPOST \u002Fsend\u002Faudio\r\n{\r\n  \"phone\": \"6281234567890\",\r\n  \"audio\": \"\u003Cbase64-encoded-audio>\",\r\n  \"ptt\": true\r\n}\r\n```\r\n\r\n---\r\n\r\n## ⚙️ Configuration\r\n\r\n**Webhook Event Whitelist:**\r\n```bash\r\n# Only receive message and connection events\r\nWHATSAPP_WEBHOOK_WHITELIST_EVENTS=message,connection\r\n\r\n# Receive all events (default)\r\nWHATSAPP_WEBHOOK_WHITELIST_EVENTS=\r\n```\r\n\r\n---\r\n\r\n## ⚠️ Important Notes\r\n\r\n- This release includes critical security fixes for multi-device setups\r\n- Users running v8.0.0 with multiple devices should upgrade immediately\r\n- All fixes are backward compatible with v8.0.0\r\n\r\n---\r\n\r\n## What's Changed\r\n* feat: add chat archive and unarchive functionality in https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Fcommit\u002F935262c\r\n* feat: add whitelist event in https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Fcommit\u002F5087c11\r\n* feat: add PTT support for audio messages in https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Fcommit\u002Ffb2a9fa\r\n* fix: resolve false ","2026-01-01T12:20:25",{"id":245,"version":246,"summary_zh":247,"released_at":248},306410,"v7.11.0","## What's New in v7.10.2\r\n\r\n✨ **New Features & Enhancements**\r\n  - **Disappearing Messages Management**: Added full support for managing disappearing messages in chats\r\n    - **New API Endpoint**: `POST \u002Fchat\u002Fdisappearing` to configure disappearing message timers\r\n    - **UI Component**: New ChatDisappearingManager.js for visual management\r\n    - **Multiple Timer Options**: Support for 24 hours, 7 days, and 90 days timers\r\n    - **OpenAPI Documentation**: Full API specification for the new endpoint\r\n\r\n  - **Enhanced Group Request Participants**: Improved group join request handling\r\n    - **Phone Number Field**: Added `phone_number` field to group request participants response\r\n    - **Display Name Field**: Added `display_name` field resolved from contacts or verified business names\r\n    - **Better Context**: More information when reviewing group join requests\r\n\r\n🔧 **Refactoring & Improvements**\r\n  - **JID Normalization**: Centralized JID handling for better consistency\r\n    - **New `NormalizeJIDFromLID` Function**: Exported function in whatsapp\u002Finit.go for consistent JID handling\r\n    - **Code Cleanup**: Removed duplicated normalization logic from sqlite_repository.go\r\n    - **Better Maintainability**: Single source of truth for JID normalization\r\n\r\n  - **Dependency Updates**: Updated Go module dependencies\r\n    - Improved security and performance\r\n    - Better compatibility with WhatsApp protocol changes\r\n\r\n## 🎯 **What This Means for You**\r\n\r\n### For Disappearing Messages Users\r\n- **Configure Timer**: Set messages to disappear after 24 hours, 7 days, or 90 days\r\n- **API Access**: Programmatically manage disappearing message settings\r\n- **UI Control**: Visual interface for managing disappearing messages\r\n- **Consistent Behavior**: Works with individual chats and groups\r\n\r\n### For Group Administrators\r\n- **Better Join Request Review**: See phone numbers and display names when reviewing join requests\r\n- **Enhanced Context**: Make informed decisions about who to accept\r\n- **Contact Integration**: Display names resolved from your contacts\r\n\r\n### For All Users\r\n- **Improved Stability**: Centralized JID handling reduces edge cases\r\n- **Better Code Quality**: Cleaner architecture and maintainability\r\n- **Updated Dependencies**: Latest security and performance improvements\r\n\r\n## Important Notes\r\n\r\n✅ **Disappearing Messages API**\r\n- **Endpoint**: `POST \u002Fchat\u002Fdisappearing`\r\n- **Parameters**: `phone` (chat JID) and `timer` (24 hours, 7 days, 90 days, or off)\r\n- **Authentication**: Uses existing API authentication\r\n- **Backward Compatible**: No changes to existing functionality\r\n\r\n✅ **Group Request Participants**\r\n- **New Fields**: `phone_number` and `display_name` added to response\r\n- **Optional Fields**: Fields may be empty if information is not available\r\n- **No Breaking Changes**: Existing integrations continue to work\r\n\r\n✅ **Breaking Changes**\r\n- None - all changes are backward compatible\r\n- Existing deployments continue to work without configuration changes\r\n\r\n🔧 **Recommended Actions**\r\n- Update to v7.10.2 to get disappearing messages support\r\n- Update webhook handlers if you want to process the new fields\r\n- Review the updated OpenAPI documentation for new API details\r\n\r\n## Configuration Examples\r\n\r\n**Set Disappearing Messages (API):**\r\n```bash\r\ncurl -X POST \"http:\u002F\u002Flocalhost:3000\u002Fchat\u002Fdisappearing\" \\\r\n  -H \"Content-Type: application\u002Fjson\" \\\r\n  -d '{\"phone\": \"6281234567890\", \"timer\": \"7 days\"}'\r\n```\r\n\r\n**Disable Disappearing Messages:**\r\n```bash\r\ncurl -X POST \"http:\u002F\u002Flocalhost:3000\u002Fchat\u002Fdisappearing\" \\\r\n  -H \"Content-Type: application\u002Fjson\" \\\r\n  -d '{\"phone\": \"6281234567890\", \"timer\": \"off\"}'\r\n```\r\n\r\n**Timer Options:**\r\n- `24 hours` - Messages disappear after 24 hours\r\n- `7 days` - Messages disappear after 7 days\r\n- `90 days` - Messages disappear after 90 days\r\n- `off` - Disable disappearing messages\r\n\r\n## Summary\r\n\r\nVersion 7.10.2 introduces disappearing messages management with a new API endpoint and UI component, enhanced group join request handling with phone numbers and display names, and refactored JID normalization for better code maintainability. All changes are backward compatible, requiring no configuration updates for existing deployments.\r\n\r\n## What's Changed\r\n* refactor: normalize JID handling and clean up unused code in https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Fcommit\u002F1b7bd40\r\n* feat: add disappearing messages management for chats via new API endpoint and UI component in https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Fcommit\u002F871442f\r\n* feat: enhance group request participants with phone number and display name in https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Fcommit\u002Fe17d720\r\n* chore: bump API version to 6.13.1 and add phone number and display name fields in https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Fcommit\u002F10b548f\r\n* feat: update mod golang in https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Fcommit\u002Ffe2ca83\r\n\r\n**Full Changelog**: htt","2025-12-24T02:05:33",{"id":250,"version":251,"summary_zh":252,"released_at":253},306411,"v8.0.0","## What's New in v8.0.0\n\n🚀 **Major Release: Multi-Device Support**\n\nThis major release introduces the ability to manage **multiple WhatsApp accounts** in a single server instance, along with significant architectural improvements and new APIs.\n\n✨ **New Features & Enhancements**\n\n### Multi-Device Management\n  - **Multiple WhatsApp Accounts**: Connect and manage multiple WhatsApp accounts simultaneously on a single server\n  - **Device Management API**: New `\u002Fdevices` endpoints for complete device lifecycle management\n    - `GET \u002Fdevices` - List all registered devices\n    - `POST \u002Fdevices` - Add a new device\n    - `GET \u002Fdevices\u002F{device_id}` - Get device details\n    - `DELETE \u002Fdevices\u002F{device_id}` - Remove a device\n    - `POST \u002Fdevices\u002F{device_id}\u002Flogin` - Login with QR code\n    - `POST \u002Fdevices\u002F{device_id}\u002Flogin-with-code` - Login with pairing code\n    - `POST \u002Fdevices\u002F{device_id}\u002Flogout` - Logout device\n    - `POST \u002Fdevices\u002F{device_id}\u002Freconnect` - Reconnect device\n  - **Device Scoping**: All REST API calls and WebSocket connections now support device-specific routing via `X-Device-ID` header\n  - **Device Manager UI**: New visual interface for managing multiple devices\n  - **Auto-Connect All Devices**: Server automatically reconnects all available devices on startup\n\n### New API Endpoints\n  - **Connection Status**: `GET \u002Fapp\u002Fstatus` to check device connection and login status\n  - **Media Download**: `GET \u002Fmessage\u002F{message_id}\u002Fdownload` for downloading media from messages\n  - **APP_HOST Configuration**: New `APP_HOST` environment variable to specify server binding address\n\n### Enhanced Webhook System\n  - **Device Identification**: All webhook payloads now include `device_id` for multi-device identification\n  - **Consistent Payload Structure**: Updated webhook format with event type and device context\n  - **Improved Event Handling**: Better JID normalization and sender resolution\n\n🔧 **Refactoring & Improvements**\n\n### Architecture Overhaul\n  - **Modular Code Structure**: Split monolithic `init.go` into focused modules:\n    - `device_manager.go` - Device lifecycle management\n    - `device_instance.go` - Individual device state\n    - `event_handler.go` - Centralized event handling\n    - `history_sync.go` - Message history synchronization\n    - `cleanup.go` - Database cleanup operations\n    - `auto_reply.go` - Auto-reply functionality\n    - `jid_utils.go` - JID normalization utilities\n  - **Context-Based Client Access**: Refactored services to use WhatsApp client from context\n  - **Database Compatibility**: Replaced SQLite-specific ON CONFLICT with cross-database compatible patterns\n  - **Race Condition Prevention**: Enhanced database cleanup with proper locking\n  - **Goroutine Leak Prevention**: Added timeouts and buffered channels for QR code handling\n\n### CI\u002FCD Improvements\n  - **Docker Build Updates**: Upgraded docker\u002Fbuild-push-action to v6\n  - **New Workflow**: Added workflow for setting latest Docker image tag\n  - **Cleanup**: Removed obsolete code review workflows\n\n## 🎯 **What This Means for You**\n\n### For Multi-Account Users\n- **Single Server, Multiple Accounts**: Run one server instance to manage all your WhatsApp accounts\n- **Isolated Sessions**: Each device maintains its own session and message history\n- **Centralized Management**: UI dashboard for managing all devices\n- **Scalable Architecture**: Add or remove accounts without server restart\n\n### For API Users\n- **Device Selection**: Use `X-Device-ID` header to target specific devices\n- **Backward Compatible**: Without header, uses default device behavior\n- **Enhanced Webhooks**: Identify which device triggered each webhook event\n- **New Endpoints**: Check connection status and download media programmatically\n\n### For Webhook Users\n- **Device Context**: Know exactly which account received\u002Fsent each message\n- **Consistent Format**: Standardized payload structure across all events\n- **Better Debugging**: Improved event metadata for troubleshooting\n\n## ⚠️ Breaking Changes\n\n### API Version\n- **Version Bump**: API version updated to 8.0.0\n- **Webhook Payload Changes**: New top-level structure includes `event_type` and `device_id`\n\n### Migration Guide\n\n**Webhook Handlers:**\nUpdate your webhook handlers to handle the new payload structure:\n```json\n{\n  \"event_type\": \"message\",\n  \"device_id\": \"device-123\",\n  \"data\": {\n    \u002F\u002F existing payload fields\n  }\n}\n```\n\n**API Calls with Multiple Devices:**\nAdd `X-Device-ID` header to target specific devices:\n```bash\ncurl -X POST \"http:\u002F\u002Flocalhost:3000\u002Fsend\u002Fmessage\" \\\n  -H \"X-Device-ID: device-123\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"phone\": \"6281234567890\", \"message\": \"Hello\"}'\n```\n\n## Configuration Examples\n\n**Add APP_HOST Configuration:**\n```bash\nAPP_HOST=0.0.0.0\nAPP_PORT=3000\n```\n\n**Multi-Device Setup:**\n```bash\n# Start server\n.\u002Fwhatsapp rest\n\n# Add first device via API\ncurl -X POST \"http:\u002F\u002Flocalhost:3000\u002Fdevices\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"id\": \"account-1\"}'\n\n# Login first device\n","2025-12-24T02:11:56",{"id":255,"version":256,"summary_zh":257,"released_at":258},306412,"v7.10.1","## What's New in v7.10.1\n\n✨ **New Features & Enhancements**\n  - **Push-To-Video (PTV) Message Support**: Added full support for WhatsApp video notes\n    - **Video Notes Handling**: Automatically processes and handles PTV (Push-To-Video) messages\n    - **Webhook Integration**: PTV messages are now properly forwarded to configured webhooks\n    - **Media Extraction**: Enhanced media extraction to generate filenames and extract details for video notes\n    - **Auto-Download Support**: Respects `WHATSAPP_AUTO_DOWNLOAD_MEDIA` configuration for PTV messages\n    - **Complete Metadata**: Extracts URL, media keys, and file information for video notes\n\n🔧 **Maintenance & Updates**\n  - **Dependency Updates**: Updated Go module dependencies to latest stable versions\n    - Improved security and performance\n    - Better compatibility with WhatsApp protocol changes\n    - Enhanced stability and reliability\n\n## 🎯 **What This Means for You**\n\n### For Video Note Users\n- **Seamless Support**: Video notes (PTV messages) are now fully supported\n- **Webhook Delivery**: Video notes are delivered to webhooks with complete metadata\n- **Automatic Downloads**: Video notes can be automatically downloaded based on your configuration\n- **API Compatibility**: Video notes appear in message events with proper media information\n\n### For Webhook Users\n- **Enhanced Payload**: Webhook payloads now include PTV message data\n- **Media Information**: Access to video note URLs, media keys, and metadata\n- **Consistent Format**: PTV messages follow the same webhook format as other media types\n\n### For All Users\n- **Better Stability**: Updated dependencies improve overall system reliability\n- **Protocol Compatibility**: Enhanced compatibility with latest WhatsApp features\n- **Future-Proof**: Foundation for upcoming WhatsApp message types\n\n## Important Notes\n\n✅ **PTV (Push-To-Video) Messages**\n- **What are PTV Messages**: Video notes sent in WhatsApp (circular video messages)\n- **Automatic Processing**: No configuration changes needed - works out of the box\n- **Media Download**: Controlled by existing \\`WHATSAPP_AUTO_DOWNLOAD_MEDIA\\` setting\n- **Webhook Format**: PTV data appears in webhook payload similar to video messages\n- **API Access**: Available through standard message retrieval endpoints\n\n✅ **Configuration**\n- **Auto-Download PTV**: Set \\`WHATSAPP_AUTO_DOWNLOAD_MEDIA=true\\` to download video notes automatically\n- **Webhook Support**: Video notes are included in webhook events when \\`WHATSAPP_WEBHOOK\\` is configured\n- **Backward Compatible**: All existing configurations continue to work\n\n✅ **Breaking Changes**\n- None - all changes are backward compatible\n- Existing deployments continue to work without configuration changes\n- Default behavior unchanged\n\n🔧 **Recommended Actions**\n- Update to v7.10.1 to receive video note support\n- No configuration changes required\n- Verify webhook handlers can process the new PTV message type\n- Check media storage if auto-download is enabled\n\n## Configuration Examples\n\n**Enable Auto-Download for Video Notes (Environment Variables):**\n\\`\\`\\`bash\nWHATSAPP_AUTO_DOWNLOAD_MEDIA=true\nPATH_MEDIA=.\u002Fstatics\u002Fmedia\n\\`\\`\\`\n\n**Webhook with Video Note Support:**\n\\`\\`\\`bash\nWHATSAPP_WEBHOOK=https:\u002F\u002Fyour-webhook.com\u002Fhandler\nWHATSAPP_WEBHOOK_SECRET=super-secret-key\n\\`\\`\\`\n\n**Docker Compose:**\n\\`\\`\\`yaml\nenvironment:\n  - WHATSAPP_AUTO_DOWNLOAD_MEDIA=true\n  - WHATSAPP_WEBHOOK=https:\u002F\u002Fyour-webhook.com\u002Fhandler\n  - PATH_MEDIA=\u002Fapp\u002Fstatics\u002Fmedia\n\\`\\`\\`\n\n## Webhook Payload Example for PTV Messages\n\nWhen a video note is received, the webhook payload includes:\n\\`\\`\\`json\n{\n  \"message_id\": \"...\",\n  \"from\": \"1234567890@s.whatsapp.net\",\n  \"ptv\": {\n    \"url\": \"https:\u002F\u002F...\",\n    \"filename\": \"ptv-message-12345.mp4\",\n    \"media_key\": \"...\",\n    \"file_sha256\": \"...\",\n    \"file_length\": 12345\n  },\n  \"timestamp\": \"2025-12-04T00:00:00Z\"\n}\n\\`\\`\\`\n\n## Summary\n\nVersion 7.10.1 introduces support for WhatsApp's Push-To-Video (PTV) messages, commonly known as video notes. This enhancement ensures that video notes are properly handled, forwarded to webhooks, and can be automatically downloaded based on configuration settings. The release also includes dependency updates for improved stability and protocol compatibility. All changes are backward compatible, requiring no configuration updates for existing deployments.\n\n## What's Changed\n* feat: add support for Push-To-Video (PTV) messages in https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Fcommit\u002F045d34f\n* chore: update dependencies and bump app version to v7.10.1 in https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Fcommit\u002Fcac76e0\n\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Fcompare\u002Fv7.10.0...v7.10.1","2025-12-03T23:55:13",{"id":260,"version":261,"summary_zh":262,"released_at":263},306413,"v7.10.0","## What's New in v7.10.0\n\n✨ **New Features & Enhancements**\n  - **Webhook TLS Configuration**: Added optional TLS certificate verification control for webhooks\n    - **Insecure Skip Verify Option**: New `WHATSAPP_WEBHOOK_INSECURE_SKIP_VERIFY` environment variable and `--webhook-insecure-skip-verify` CLI flag\n    - **Cloudflare Tunnel Support**: Resolves TLS certificate verification errors when using Cloudflare tunnels\n    - **Self-Signed Certificate Support**: Enables webhooks to work with self-signed certificates in development\u002Finternal environments\n    - **Secure by Default**: Verification remains enabled by default, opt-in only for specific use cases\n    - **Comprehensive Documentation**: Added security warnings and usage guidelines in README and .env.example\n\n🐛 **Bug Fixes & Improvements**\n  - **Auto-Reconnect Stability**: Fixed WhatsApp client auto-reconnect mechanism\n    - **Null Pointer Prevention**: Ensures WhatsApp client exists before attempting auto-reconnect\n    - **Root Cause Fix**: Addresses the underlying issue causing reconnection failures\n    - **Enhanced Stability**: Prevents crashes during automatic reconnection attempts\n    - **Better Error Handling**: Improved error detection and recovery in reconnection logic\n\n## 🎯 **What This Means for You**\n\n### For Cloudflare Tunnel Users\n- **No More TLS Errors**: Webhook delivery now works seamlessly with Cloudflare tunnels\n- **Simple Configuration**: Just set `WHATSAPP_WEBHOOK_INSECURE_SKIP_VERIFY=true` in your environment\n- **Maintained Security**: Cloudflare tunnels provide their own security layer\n\n### For Self-Signed Certificate Users\n- **Development Friendly**: Use webhooks with self-signed certificates in test environments\n- **Internal Deployments**: Support for internal certificate authorities\n- **Clear Warnings**: Security implications clearly documented\n\n### For All Users\n- **More Reliable Connections**: Auto-reconnect now handles edge cases properly\n- **Fewer Crashes**: Null pointer errors in reconnection logic eliminated\n- **Better Stability**: Enhanced connection management and error handling\n\n## Important Notes\n\n✅ **Webhook TLS Configuration**\n- **Default Behavior**: TLS verification is ENABLED by default (secure)\n- **Opt-In Only**: Must explicitly enable InsecureSkipVerify for specific use cases\n- **For Development**: Set `WHATSAPP_WEBHOOK_INSECURE_SKIP_VERIFY=true`\n- **For Production**: Strongly recommended to use proper SSL certificates (e.g., Let's Encrypt)\n- **Security Warning**: Disabling verification exposes webhooks to man-in-the-middle attacks\n\n✅ **When to Use InsecureSkipVerify**\n- Development\u002Ftesting environments\n- Cloudflare tunnels (which provide their own security)\n- Internal networks with self-signed certificates\n- **NOT recommended** for production with public webhooks\n\n✅ **Breaking Changes**\n- None - all changes are backward compatible\n- Existing deployments continue to work without configuration changes\n- Default behavior unchanged (TLS verification enabled)\n\n🔧 **Recommended Actions**\n- If using Cloudflare tunnels and experiencing TLS errors, enable InsecureSkipVerify\n- For production deployments, use proper SSL certificates from trusted CAs\n- Update your `.env` file based on the updated `.env.example`\n- Review webhook configuration if you've had connection issues\n\n## Configuration Examples\n\n**Cloudflare Tunnel Setup (Environment Variables):**\n\\`\\`\\`bash\nWHATSAPP_WEBHOOK=https:\u002F\u002Fyour-tunnel.trycloudflare.com\u002Fwebhook\nWHATSAPP_WEBHOOK_SECRET=super-secret-key\nWHATSAPP_WEBHOOK_INSECURE_SKIP_VERIFY=true\n\\`\\`\\`\n\n**Self-Signed Certificate (CLI Flags):**\n\\`\\`\\`bash\n.\u002Fwhatsapp rest --webhook=\"https:\u002F\u002Finternal.example.com\u002Fwebhook\" --webhook-insecure-skip-verify=true\n\\`\\`\\`\n\n**Production with Proper SSL (Recommended):**\n\\`\\`\\`bash\nWHATSAPP_WEBHOOK=https:\u002F\u002Fapi.yourdomain.com\u002Fwebhook\nWHATSAPP_WEBHOOK_SECRET=super-secret-key\n# WHATSAPP_WEBHOOK_INSECURE_SKIP_VERIFY=false (default - verification enabled)\n\\`\\`\\`\n\n**Docker Compose:**\n\\`\\`\\`yaml\nenvironment:\n  - WHATSAPP_WEBHOOK=https:\u002F\u002Fyour-webhook.com\u002Fhandler\n  - WHATSAPP_WEBHOOK_INSECURE_SKIP_VERIFY=true  # Only for Cloudflare\u002Fdev\u002Fself-signed\n\\`\\`\\`\n\n## Summary\n\nVersion 7.10.0 introduces critical webhook TLS configuration options and auto-reconnect stability improvements. The new webhook TLS skip verification feature resolves certificate validation issues commonly encountered with Cloudflare tunnels and self-signed certificates, while maintaining secure defaults. The auto-reconnect fix prevents null pointer errors and enhances overall connection stability. This release focuses on improving webhook reliability and connection management while maintaining full backward compatibility.\n\n## What's Changed\n* Fix: ensure whatsapp client exists before auto reconnect—captures the root cause and the stabilization. by @donnimsipa in https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Fpull\u002F462\n* feat: add webhook TLS configuration option to support Cloudflare tunnels and self-signed certi","2025-11-29T00:45:35",{"id":265,"version":266,"summary_zh":267,"released_at":268},306414,"v7.9.0","## What's New in v7.9.0\n\n✨ **New Features & Enhancements**\n  - **Reverse Proxy Support**: Added comprehensive support for reverse proxy deployments\n    - **Trusted Proxy Configuration**: New `APP_TRUSTED_PROXIES` environment variable and `--trusted-proxies` CLI flag\n    - **Correct URL Generation**: Properly reads `X-Forwarded-Host` and `X-Forwarded-Proto` headers from trusted proxies\n    - **Fixes QR Code URLs**: Resolves issue where QR code URLs showed internal container hostnames instead of public domains\n    - **Flexible Configuration**: Supports specific IP ranges\u002FCIDRs or trust all proxies with `0.0.0.0\u002F0`\n  - **Auto-Download Media Control**: New configuration option to control automatic media downloads\n    - **Configurable Behavior**: `--auto-download-media` flag and `WHATSAPP_AUTO_DOWNLOAD_MEDIA` environment variable\n    - **Defaults to Enabled**: Auto-download is enabled by default, maintaining backward compatibility\n    - **Media Type Coverage**: Affects audio, documents, images, stickers, and video messages\n  - **Enhanced Webhook Payload**: Message editing webhook now includes `original_message_id`\n    - **Better Tracking**: Easier to track which message was modified in your database\n    - **Database Update Support**: Simplifies updating records when messages are edited\n\n🐛 **Bug Fixes & Improvements**\n  - **Database Cleanup Fix**: Fixed \"file is being used by another process\" error during logout\n    - **Proper Connection Closure**: Database connections are now properly closed before file deletion\n    - **Both Databases Handled**: Closes both main database and keys database connections\n    - **Cross-Platform Support**: Resolves file locking issues on Windows and other platforms\n  - **WhatsApp Client Assignment**: Fixed WhatsApp client initialization\n    - **Correct Assignment**: Properly assigns the client returned by `InitWaCLI` to `whatsappCli`\n    - **Prevents Nil References**: Ensures the client is correctly initialized for all operations\n  - **Timezone Configuration**: Added proper timezone handling and configuration\n\n## 🎯 **What This Means for You**\n\n### For Reverse Proxy Users (Caddy, nginx, Kong, Traefik, etc.)\n- **Correct Public URLs**: API responses now return your public domain URLs instead of internal container names\n- **Easy Configuration**: Simply set `APP_TRUSTED_PROXIES=0.0.0.0\u002F0` in your environment or use the CLI flag\n- **Secure Deployment**: Specify exact IP ranges for enhanced security in production\n\n### For All Users\n- **Reliable Logout**: No more \"file in use\" errors when logging out\n- **Better Media Control**: Choose whether to automatically download media or download on-demand\n- **Enhanced Webhooks**: Track message edits more easily with the original message ID\n- **Improved Stability**: Multiple bug fixes for more reliable operation\n\n## Important Notes\n\n✅ **Reverse Proxy Configuration**\n- Set `APP_TRUSTED_PROXIES` to enable proxy header support\n- For development: `APP_TRUSTED_PROXIES=0.0.0.0\u002F0` (trust all)\n- For production: Specify your proxy IP ranges like `APP_TRUSTED_PROXIES=10.0.0.0\u002F8,172.16.0.0\u002F12`\n- Can also use CLI flag: `.\u002Fwhatsapp rest --trusted-proxies=\"0.0.0.0\u002F0\"`\n\n✅ **Media Download Configuration**\n- Default behavior unchanged: media is auto-downloaded\n- To disable: Set `WHATSAPP_AUTO_DOWNLOAD_MEDIA=false` or use `--auto-download-media=false`\n- Affects: audio, documents, images, stickers, videos from incoming messages\n\n✅ **Breaking Changes**\n- None - all changes are backward compatible\n- Existing deployments will continue to work without configuration changes\n\n🔧 **Recommended Actions**\n- If deploying behind a reverse proxy, configure `APP_TRUSTED_PROXIES` for correct URL generation\n- Update your `.env` file based on the updated `.env.example`\n- If experiencing high storage usage, consider disabling auto-download media\n\n## Configuration Examples\n\n**Using Environment Variables:**\n```bash\nAPP_TRUSTED_PROXIES=0.0.0.0\u002F0\nWHATSAPP_AUTO_DOWNLOAD_MEDIA=true\n```\n\n**Using CLI Flags:**\n```bash\n.\u002Fwhatsapp rest --trusted-proxies=\"0.0.0.0\u002F0\" --auto-download-media=false\n```\n\n**Docker Compose:**\n```yaml\nenvironment:\n  - APP_TRUSTED_PROXIES=0.0.0.0\u002F0\n  - WHATSAPP_AUTO_DOWNLOAD_MEDIA=true\n```\n\n## Summary\n\nVersion 7.9.0 is a feature-rich release that adds critical reverse proxy support, giving users full control over media downloads, and fixing important bugs related to database cleanup and client initialization. The new trusted proxy configuration resolves URL generation issues for users deploying behind reverse proxies like Caddy, nginx, or Kong. The auto-download media feature provides flexibility for managing storage and bandwidth usage. Combined with bug fixes for logout operations and client initialization, this release improves both functionality and reliability for all deployment scenarios.\n\n## What's Changed\n* Fix: assign the client returned by InitWaCLI to whatsappCli. (#467) by @moz4rtdev in https:\u002F\u002Fgithub.com\u002Faldinokemal\u002Fgo-whatsapp-web-multidevice\u002Fpull\u002F468\n* Fix logout","2025-11-18T06:44:06"]