# @agentcomms/whatsapp 中文文档

规范地址：https://npmcn.com/package/%40agentcomms/whatsapp/

版本：0\.37\.0
npm 元数据更新时间：2026-10-28T22:10:51.304Z
中文译文更新时间：2026-11-06T05:44:39.105Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40agentcomms/whatsapp
原文对照：https://npmcn.com/package/%40agentcomms/whatsapp/?lang=original
源码仓库：https://github.com/crissmoldovan/agent-communications

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：3.6 MB，18 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- Node.js 要求：\>=22\.16\.0
- 运行依赖：1 个
- 首次发布：2026-09-27T12:14:57.399Z
- 最新版本发布：2026-10-28T22:10:50.485Z
- 近 30 天下载量：4710（2026-10-05 至 2026-11-03，npm 官方下载统计）
- 已发布版本数：45（近 12 个月 45 个）

## 中文简介

编码代理的WhatsApp,只读:列表,读取并搜索Mac在此Mac上保存的聊天内容,并起草答复作为链接对象发送. 没有网络客户端; 它从不发送.

## 安装

```sh
npm install @agentcomms/whatsapp
```

也可以使用：`pnpm add @agentcomms/whatsapp`、`yarn add @agentcomms/whatsapp`、`bun add @agentcomms/whatsapp`

## README

# @ agentcomms/ whatsapp (英语)

什么App的编码代理, **只读**。代理可以列出、读取和搜索聊天内容 继续使用您的 Mac , 并起草一个回复 —— 它作为链接回来, 打开 WhatsApp 与填入的文本 . **你按发送.** 该软件包没有网络客户端,没有WhatsApp会话,也没有任何发送方式.

```sh
npm install -g @agentcomms/whatsapp    # or run it with npx -y @agentcomms/whatsapp <command>
```

这需要 **macOS 带有 Mac 的 WhatsApp** 安装并签名于 **节点22.16或更新** (读取节点) 拥有自22.16起完成的SQLite;一个较老的节点被拒绝安装什么).

本地事件守护进程, [`@agentcomms/events-daemon`](https://npmcn.com/package/%40agentcomms/events-daemon/README.md),可能称此包的内部 在选中的本地副本上只读事件操作 . 它没有添加WhatsApp命令或MCP工具,因此无法发送.

## 它做什么,它从来没有做什么, 用简单的语言

-   **它只读本地文件.** 阅读、搜索、起草或保持其清单与WhatsApp的连接,或 没有插座 没有HTTP 没有DNS 它的表态是:没有宿主的`"hosts": []`) (中文(简体) ). 一个测试构建已发布 捆绑和检查其中没有网络模块;另一个运行这些命令和每个工具 网络被切断,以及 `mcp install` 仅使用 `--print`安装是例外,它到达npm,永远不会 何为App: `npm install`,以及 `mcp install`,默认从 npm 安装到代理comms 自己的软件包 运行时间( 与 `--launcher npx`,客户端每次启动服务器时都会从npm中获取.
-   **它从不发送,标记为已读,反应,或显示为在线或打字.** 没有代码可以。 草案 是一个 `whatsapp://send` 或者说 `https://wa.me/` 链接; WhatsApp 填写信件并等待您.
-   **它从来不给WhatsApp的档案写信.** 它复制了信息商店及其写头日志,读取了副本 删除它。 测试检查WhatsApp的文件夹为字节和mtime在同步后不变.
-   **它读了一个文件.** 仅 `ChatStorage.sqlite` 它的日志被打开 确切的名字。 同样的文件夹持有 使Mac成为链接设备的加密密钥(`Axolotl.sqlite`、联系人和媒体;从未读过.
-   **媒体被描述,从未打开**:类型、大小和文件名.

**何等为阿普说.** 何为App禁止非官方客户和自动化,并禁止其捕获的号码——包括: 低容量,只使用回复。 通常的构建方式,一个记录为链接设备的库,就是 一种客户(和一份恶意副本), `lotusbail`,在2025年12月盗取了56,000个安装的会话). 这么说吧 这不起作用:它读了一个文件 官方应用程序已经写给你的Mac了,它没有达到 WhatsApp的服务器. 这是一个设计选择,而不是法律建议. **不要把它和任何寄来的东西配对** - 另一个 WhatsApp MCP服务器,一个输入WhatsApp的脚本——或者保护已消失; `mcp install` 警告任何 其他它发现注册的WhatsApp服务器.

**你放弃什么,说清楚了.**

-   **您的消息被复制到本地索引**,在纯文本中,所以一个代理可以搜索它们. 仅限所有者 (0600在一个0700文件夹中,如果有任何松动它的话放回),只保留您的列表让代理看到,以及 `remove` 删除它。 没错 **未加密**,它没有保护 WhatsApp自己的文件夹有: macOS在应用程序读取WhatsApp的文件夹之前询问,在读取这个索引之前不会询问. 任何东西 尽你所能去读它。 (为什么不加密:节点的 SQLite 无法打开加密数据库或从中加载一个) 内存,所以索引必须被解密为每个读取的磁盘——反正是平正文本副本——和密钥 将坐在一个商店里 每一个程序运行,你可以读。 )
-   **macOS 将请求权限阅读 WhatsApp 的数据**,对于这个应用在下面。 如果你同意的话 **满 磁盘访问** 相反,你把它授予你的整个终端或MCP客户端, 它比WhatsApp要宽得多.
-   **一个特工读别人的留言给你听.** 隐藏聊天 `deny`,或者只允许其中的一些 `allow`。 。 。 . 团体是可见的,除非你把它们藏起来,而你所否认的人,在你们所没有的团体中仍然可见: 让一个团体远离特工, 否认该团体.
-   **消息不可信.** 任何有你号码的人都可以给探员发短信 每条消息,名称和 文件名在不可信内容信封内到达,删除了无形和双向字符 并且计算在内;剩余风险是遵循指示的模型——这就是为什么发送留在你身边的原因.

## 开始

在终点站,这些是你们的,每个都拒绝代理:

```sh
agent-whatsapp add personal/whatsapp             # names WhatsApp for Mac's store; macOS may ask: choose Allow
agent-whatsapp sync --account personal/whatsapp  # copy, check, index, delete the copy
agent-whatsapp status
agent-whatsapp deny +15555550102 --account personal/whatsapp   # optional: a chat agents never see
agent-whatsapp mcp install --client claude-code --account personal/whatsapp
```

`mcp install` 在您的客户端注册服务器, 并刻入该账户, 作为您批准的更改: 在终端 键 `yes` 显示内容; 由代理操作它退出 `10` 带有预览和批准标识,以及同一命令 与 `--approval <id>` 在你同意之后登记 在 `confirm` 更改您赞同的政策 批准命令结果,代之以代码。 事后重新启动客户端. 从聊天,核心服务器的 `comms_server_install` 与 `channel: "whatsapp"` 财务报告和审定财务报表 `account` 是相同的变化.

对于WhatsApp Business,加入它的商店与 `--source ~/Library/Group\ Containers/group.net.whatsapp.WhatsAppSMB.shared/ChatStorage.sqlite`。 。 。 .

## macOS 权限

macOS保护了其他应用程序的数据. 关于最近版本(从macOS 15.2中为组装容器报告),第一次a 进程读取WhatsApp的文件夹 macOS 询问 **"希望从其他应用程序获取数据"** - 在哪个地方 `<app>` 这是 一个负责进程:您运行命令的终端,或者启动服务器的MCP客户端—— 从来没有节点本身。 直到有人回答, 阅读等待。 旧版本可能根本不会问,或者允许读取,或者 拒绝.

-   **允许** 修复它用于应用的会话。 背景 MCP 服务器不能点击, 答案并不总是 持续开展背景进程——如此运行 `add` 和第一个 `sync` 在终端.
-   **完整磁盘访问** 使其粘接:系统设置 → 隐私和安全 → 完整磁盘访问,添加终端(或 MCP客户端),然后退出并重新打开. 它比WhatsApp要广泛得多;当你不再需要的时候就取消它.

包裹上写着:拒绝作为退出回来 `77` 编号 : `AUTH_REQUIRED` 与步骤,以及当环境 说它是什么应用程序,它的名字; 12秒后没有人回答失败的对话框作为退出 `75` 与“ 寻找对话框 ” 而不是挂起; 一个缺失的商店说, "WhatsApp for Mac"可能不会被安装.

仅 `add` 财务报告和审定财务报表 `sync` (和 `status`,除非 `--no-check`)触取WhatsApp的文件夹. `chats`, (中文(简体) ), `read` 财务报告和审定财务报表 `search` 打开 只有索引——所以他们不能提出一个对话框, 他们继续工作, 上一个同步,如果WhatsApp关闭, 更新或消失.

## 命令和工具

| 命令 | MCP 工具 | 它会做什么 |
| --- | --- | --- |
| `add <org/whatsapp> [--source]` | —— 说 | 一个给商店取名的人; 第一个读取, 当macOS 询问时 |
| `remove <org/whatsapp>` | —— 说 | 忘记它,它的聊天列表和索引; WhatsApp的自有商店没有被触动 |
| `allow <chat> --account` | —— 说 | 让代理员看到此聊天; 一旦允许进行, 只有允许的聊天才可见 |
| `deny <chat> --account` | —— 说 | 完全隐藏此聊天内容 |
| `clear [chat] --account` | —— 说 | 从两个列表中取出一个聊天, 或者没有空聊天 |
| `status [--account] [--no-check]` | `whatsapp_status` | 设置什么,是否可以读取,指数持有什么 |
| `sync --account` | `whatsapp_sync` | 复制、检查、索引、删除复制件 |
| `chats --account [--kind] [--limit]` | `whatsapp_chats` | 聊天, 最新第一; 状态更新仅与 `--kind status` |
| `read <chat> --account [--before] [--limit]` | `whatsapp_read` | 一聊一聊,最新鲜的第一 |
| `search <words> --account [--chat] [--sender] [--kind] [--limit]` | `whatsapp_search` | 全文:文本、标题、文件名、发送者和聊天名称 |
| `draft <to> <text> [--account] [--open]` | `whatsapp_draft` | (单位:千美元) `whatsapp://send` (单位:千美元) `https://wa.me/` 链接; 个人发送 |
| `approve <id>` | —— 说 | 批准在终端上更改——注册或运行此服务器 |
| `mcp [--account]` | —— 说 | 在 stdio 上的 MCP 服务器,在 `--account` 给出 |
| `mcp install`, (中文(简体) ), `mcp prune` | `comms_server_install`, (中文(简体) ), `comms_server_prune` (核心数) | 用客户端注册服务器; 删除旧运行时间 |

每个命令及其工具运行相同的操作,以及 `capabilities.json` 抓住他们 没有命令 工具是人物的本意: 代理机读取的Mac上的文件, 以及其中的聊天, 不是代理机的 决定,无论朝哪个方向 -- `add`, (中文(简体) ), `remove`, (中文(简体) ), `allow`, (中文(简体) ), `deny` 财务报告和审定财务报表 `clear` 也拒绝命令行的代理. `draft --open` 被拒绝给代理商:一个装入的信息盒在屏幕上登陆,有人在别处打字 即为离所派遣的《古兰经》.

`draft` 需要电话号码或任何身份证明 `chats` 财务报告和审定财务报表 `read` 打印。 一个团体没有号码,所以它的草案作为文本回来 与隐藏号码的人聊天(`@lid`),广播列表和频道. 状态更新不是任何人写信聊天,而是被拒绝.

无法使用草稿来发现您隐藏的聊天内容 。 虽然你的名单中隐藏了什么, 草稿只用于聊天 一个代理人可以读取——在索引中,可以看得见——一个隐蔽的代理人被拒绝读取,而一个隐蔽的代理人被拒绝读取同样的内容 `NOT_FOUND` 作为聊天 他们不在那里;他们不隐瞒任何事物,而任何数字都是用来报答的。 没有账户名称,每个账户的清单都适用. 每一个账户 **拒绝** 列表适用于每个草案,是否指定账户:草案是与数字的链接,而不是与 一个帐号,所以你所否认的号码,不是用来记名的。 一个被绑定的服务器会自己咨询 账户单.

**一个被绑定的服务器** (单位:千美元)`agent-whatsapp mcp --account personal/whatsapp`,哪个 `mcp install --account` (写作) 不论一个叫它名字的人是否拒绝任何其他名字,也不论任何其他帐户的名称——不是在它的问候中, 没有在 `whatsapp_status`。该指针通过重命名跟踪账户.

**有点闲聊.** 从其编号: `direct` (单位:千美元)`…@s.whatsapp.net`, (中文(简体) ), `hidden-number` (单位:千美元)`…@lid`, (中文(简体) ), `group` (单位:千美元)`…@g.us`, (中文(简体) ), `channel` (单位:千美元)`…@newsletter`, (中文(简体) ), `broadcast` (单位:千美元)`…@broadcast`和 `status` (WhatsApp的状态反馈,每届1次) 联系人的职位). 状态更新已索引, 但是 `chats` 财务报告和审定财务报表 `search` 除非有要求,否则不要带 `--kind status`; 以其代号命名的被读取与其他聊天一样. 这些比赛都没有 `unknown`。 。 。 .

## 账户,聊天代理商可能看到

账户是Agentcomms自己的记录 `config.json`除了Gmail的邮箱 和Slack的工作空间 `organisation/whatsapp`。它只通过建筑读取(`mode: "read"`,此频道的唯一模式),命名 由稳定编号存储( )`group.net.whatsapp.WhatsApp.shared` 以什么盟誓,而毫无秘密 引用为 `whatsapp:none:<id>`,没有名字,以及 `agentcomms secrets migrate` 动也无所取取. 因为 这是核心的记录, 一个更名的账户的旧名 用它的新名来回答 `comms_server_install` 检查a 针指向它.

每个账户可以携带两个列表,通过聊天id或电话号码. 名单上的号码需要其国家代码,用 `+` 或者说 `00` (单位:千美元)`+1 555 555 0102`, (中文(简体) ), `00 1 555 555 0102`没有一个人, `(555) 555-0102` 在任何国家都可以是数字, 并且一个没有聊天的条目 也不会在说的时候隐藏任何东西 所以被拒绝了 每个条目在 索引和它所显示的聊天名称; 一个没有保存的聊天名称—— 您可以在它之前隐藏一个数字 写, (凡取出数字之处, `00` 表示 `+`,然后从单数开始 `0` 作为国民被拒绝。 )

-   **拒绝** ——聊天 经纪人绝不能看见. 未列出、搜索、阅读、起草或计数;请按编号填写 得到同样的 `NOT_FOUND`,逐个字,作为不存在的聊天.
-   **允许** 一旦上面有东西, 唯一的聊天 代理看到。 被拒绝者胜出.

电话号码上一个人的名字而不是一个聊天:他们的一对一聊天,他们自己的状态帖子,在状态下 feed,他们写的文章。 状态帖与作者对照检查,所以它需要一个:一个WhatsApp记录没有 作者可能是任何人的, 包括你否认的人, 所以,无论列表 有任何内容 隐藏,和 `status` 说多少人(`unattributedStatus`) (中文(简体) ). 您的岗位总是显示。 一个作者WhatsApp录制 隐藏编号下(`…@lid`)与该id相匹配,而不是与其号码相匹配:也否认该id.

一个团体是聊天,允许或拒绝整个团体:拒绝某人不带走他们从一个团体中写出的东西 代理商可能 看看他们是否被WhatsApp记录为作者. 这是决定,不是疏忽。 隐藏一个人 字行会留下他人的答复并引用描述这些答复的出处; 成员可以在隐藏编号代号下出现 数字不匹配;允许名单上的一组将失去所有不在名单上的人。 让一个团体远离 特工们 拒绝组织.

清单立即适用于两地的每一个阅读,以及 `sync` 也应用它们,留下它们隐藏的东西 索引——如其完成时那样: 列表更改,同步运行在新索引之前再次被读取 替换旧的,如果更改,索引将再次构建. `status` 报告每个列表中有多少聊天,从没有.

名单保存在 `whatsapp-chats.json` 旁边 `config.json`,以账号编号表示——不在 `config.json`。所有内容 文件被保存在每封信中,但只有少数设置 _判断_ 当写作放松的时候 拒绝列表可能被任何程序空出 。 在自己的文件中,只写 读取一个无法读取的文件 而不是每次聊天, 他们留下来的人.

## 从悬崖上移动

如果你运行未公布的悬赏,它的账户在 `whatsapp-spike.json`。此命令或服务器的第一个启动 释放它们 `config.json`,一次:同一个账户 id,所以所构建的指针被读取为没有 新的同步(每个聊天的种类都取自它的id,所以钉子的 `unknown` 状态会话读作状态更新 聊天列表在账户出现前已移动; 名称已取出, 且未移动, 并随其地址 索引——它现在没有读取的信件的简洁文本副本——留给您删除 旧文件保存为 `whatsapp-spike.json.migrated-<time>`; 审计日志中的一行(`agentcomms audit tail`和一个在 师曰. 它既不读WhatsApp的商店 也不读Spoke的索引 旧平面名称上的配置 等待到 `agentcomms names migrate` 已经运行.

## 书店怎么读的

麦克的什么店 `~/Library/Group Containers/group.net.whatsapp.WhatsApp.shared/ChatStorage.sqlite`, (中文(简体) ), 磁盘上未加密, 运行时以 SQLite 的 WAL 模式打开: 最近的消息坐入 `ChatStorage.sqlite-wal` 直到应用程序将其折叠入主文件.

1.  **收到,不要打开.** 商店及其日志被复制, 字节为字节, 复制到代理comms 下的私人文件夹中 状态目录,仅限所有者。 没有任何东西用 SQLite 打开, 扣上锁, 或者触摸应用程序 `-shm` 文档。 SQLite 的游戏 `mode=ro` 被拒绝,因为只读连接仍然取出锁并写入已读标记 应用程序 `-shm` 文档; `immutable=1` 因为它忽略了日志, 缺少了最新的消息, 并且可以读取已撕取 页面时, 应用程序会写 .
2.  **打开一次,从不通过链接.** 每个文件打开一次,只读一次,拒绝符号链接,每个字节 是从打开的文件复制的 —— 它的名字从此不再打开, 因此一个名称交换到密钥存储的链接 在支票和副本之间没有任何变化。 有第二个名字的文件( 硬链接, 可能是关键) socket's)或此为非正则文件被拒绝. 成本:节点的复制品,在APFS上复制,取名并取出 将再次打开, 因此字节被复制到磁盘上 —— 商店的大小, 直到同步删除它 .
3.  **一致的,或完全没有.** 每个打开的文件都有指纹(device,inode,链接,大小,纳秒 mtime) 复制前和复制后,每个名字都会被再次查看,以便找到一个来、去或被替换的文件 中间写着什么,副本被丢弃再取出,最多取出5次,然后被拒绝. 打开 核对副本(`quick_check`) (中文(简体) ).
4.  **阅读前检查布局 .** 缺少所需的表格或列拒绝按名称进行整个同步( 退出) `65`, (中文(简体) ), 并且上一个指数保持不变。 缺失的可选部分会关闭一个命名的功能并被报告.
5.  **索引,然后删除副本.** 该索引在新文件中被重建并被重新命名为位置,仅所有者. 副本是 删除任何发生的情况; 下一次同步将删除一个遗留的崩溃 . `remove` 锁定与 `sync`:它等待正在运行的同步(最多一分钟),然后删除与其它同步的索引, 和在后面等待的同步 发现账户不见了,写什么.

WhatsApp可以不经通知而改变这种布局. 读者拒绝,而不是猜测所需部分何时消失; 无法捕捉的风险是 保留它的名字并改变它的意义的一栏 所以用眼睛检查一下几下聊天 在WhatsApp更新后,如果有什么问题.

## 计划来自哪里

没有人开个真正的商店来写这个——不是主人的,甚至连它的布局也没有. 每个表格和栏 读者使用的是公开、开源的读者 `ChatStorage.sqlite` 按名称查询(承诺被钉入) `src/source/schema.ts`:

| 来源 | 它的建立 |
| --- | --- |
| [kenn-io/ msgvault (英语)](https://github.com/kenn-io/msgvault) `internal/whatsapp/apple.go` | 页:1 **马科斯** 应用 : `ZWACHATSESSION` (单位:千美元)`ZCONTACTJID`, (中文(简体) ), `ZPARTNERNAME`, (中文(简体) ), `ZSESSIONTYPE`, (中文(简体) ), `ZLASTMESSAGEDATE`, (中文(简体) ), `ZWAGROUPMEMBER` (单位:千美元)`ZMEMBERJID`, (中文(简体) ), `ZCONTACTNAME`, (中文(简体) ), `ZFIRSTNAME`, (中文(简体) ), `@lid` 聊天,2001-01-01起核心数据秒 |
| [广播/推广](https://github.com/raycast/extensions) `extensions/whatsapp/src/services/readLocalDatabase.ts` | 页:1 **马科斯** 路径; `ZSESSIONTYPE = 0` 一对一聊天 |
| [KnugiHK/什么App-Chat-出口商](https://github.com/KnugiHK/WhatsApp-Chat-Exporter) `ios_handler.py` | `ZWAMESSAGE` (单位:千美元)`ZISFROMME`, (中文(简体) ), `ZMESSAGEDATE`, (中文(简体) ), `ZTEXT`, (中文(简体) ), `ZMESSAGETYPE`, (中文(简体) ), `ZSTANZAID`, (中文(简体) ), `ZGROUPMEMBER`, (中文(简体) ), `ZWAMEDIAITEM`, (中文(简体) ), `ZWAPROFILEPUSHNAME`; 时代 978307200 |
| [布里尼诺尼/iLEAPP](https://github.com/abrignoni/iLEAPP) `scripts/artifacts/whatsApp.py` | `ZFROMJID`, (中文(简体) ), `ZTOJID`, (中文(简体) ), `ZMEDIAITEM`, (中文(简体) ), `ZGROUPEVENTTYPE`; 第 5 类是一个位置 |
| [sepinf-inc/ IPED 数据](https://github.com/sepinf-inc/IPED) `ExtractorIOS.java` | `ZWAMEDIAITEM.ZFILESIZE`· ; `ZTITLE` 旧店里不见了 |
| [法医网](https://github.com/Alessiop01/ForensicWace-ServerEdition) `globalConstants.py`, (中文(简体) ), [勘探者](https://github.com/ludufre/wa-explorer) `docs/IOS_STORAGE.md` | 页:1 `ZMESSAGETYPE` 数值; `ZVCARDSTRING` 持有媒体项目的 MIME 类型 |

MacOS应用是为Mac所构建的iOS应用,这也是iOS阅读器应用的原因;前两个阅读了Mac文件 自己来 事实取自这些项目,而不是代码。 消息来源什么也没有说——大多数 `ZMESSAGETYPE` 数字 - 读者报告 `unknown:<n>` 而不是猜测.

**媒体才是重要的.** 什么App保持一个 `ZWAMEDIAITEM` 排行远不止媒体:一个被引用的信息生命 (KnugiHK从中读取答复) `ZMETADATA`iLEAPP数为1,350行),第1跑对正行 商店在大多数短信和每通电话中都找到一个,没有类型、大小和文件。 所以一个人排队不是 媒体。 讯息是媒体 没有文件, 仍然是相片 —— 或当其行名为已存储文件时(`ZMEDIALOCALPATH`,测试 KnugiHK 和 iLEAPP的使用). 其他一切——文字,一通电话,一通地点——没有显示媒体行,也不算作媒体. 一个电话是 显示为调用, 不持续时间 : KnugiHK 和 iLEAPP 都读取调用时间从 `CallHistory.sqlite`,单独的 文件此阅读器从不打开.

## 许可证

[麻省理工学院](https://npmcn.com/package/%40agentcomms/whatsapp/LICENSE)。捆绑的依赖性通知包含在 `THIRD_PARTY_LICENSES`。 。 。 .

## 常见问题

### @agentcomms/whatsapp 是什么？

编码代理的WhatsApp,只读:列表,读取并搜索Mac在此Mac上保存的聊天内容,并起草答复作为链接对象发送\. 没有网络客户端; 它从不发送\.

### 如何安装 @agentcomms/whatsapp？

在项目目录运行 npm install @agentcomms/whatsapp，或使用 pnpm add / yarn add / bun add。它还提供命令行工具 agent-whatsapp，可以用 npx agent-whatsapp 直接运行。

### @agentcomms/whatsapp 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @agentcomms/whatsapp 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### @agentcomms/whatsapp 需要什么版本的 Node\.js？

package\.json 的 engines 字段要求 Node\.js \>=22\.16\.0。版本不符时 npm 默认只给出警告，开启 engine-strict 后会拒绝安装。

### @agentcomms/whatsapp 可以商用吗？

@agentcomms/whatsapp 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @agentcomms/whatsapp 的下载量有多少？

根据 npm 官方下载统计，@agentcomms/whatsapp 在 2026/10/05 – 2026/11/03 这 30 天内被下载 4,710 次，日均约 157 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @agentcomms/whatsapp 还在维护吗？

最新版本 0\.37\.0 发布于 2026/10/29（9 天前）；至今共发布 45 个版本，其中过去 12 个月发布了 45 个；首次发布于 2026/09/27。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

