WhatsApp AI聊天机器人

一款集成Claude AI的WhatsApp群聊机器人,通过@mota触发响应并使用MCP服务器发送消息。

  • by akshatsonic
  • JavaScript
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 akshatsonic/whatsapp-bot

使用说明

WhatsApp机器人与克劳德AI(@mota)

一个WhatsApp机器人,使用Claude AI来回应群聊中提到的@mota。与WhatsApp MCP服务器集成,用于消息发送。

建筑

WhatsApp Group → whatsapp-web.js (receives) → Bot → Claude AI
                                               ↓
                                          MCP Server → WhatsApp (sends)

特性

  • 🤖 Claude AI集成 -由Anthropic的克劳德3.5十四行诗提供支持
  • 📥 排队系统 -进程@mota每5秒提及一次
  • 🔌 WhatsApp MCP集成 -使用MCP服务器发送消息
  • 💬 引用的回复 -回复与原始问题相关的消息
  • 💾 SQLite队列 -失败时重试的持久队列
  • 🔐 会话保持 -首次登录后不扫描二维码

运作原理

  1. 接收:Bot通过监听 whatsapp-web.js 为了 @mota 提及
  2. 队列:消息已添加到SQLite队列
  3. 过程:每5秒:
    • 从队列中提取问题
    • 发送给Claude AI
    • 获取克劳德的回复
  4. 发送:使用WhatsApp MCP发送回复(引用到原始消息)
  5. 完成:从队列中删除

设置

1.安装依赖项

npm install

2.获取Anthropic API密钥

  1. 首选https://console.anthropic.com/settings/keys
  2. 创建新的API密钥
  3. 复制密钥

3.启动WhatsApp MCP服务器

该机器人需要WhatsApp MCP服务器来发送消息:

# In another terminal, start your WhatsApp MCP server on port 8080
# Example: whatsapp-mcp with streamable HTTP transport

4.配置环境变量

创建一个 .env 项目根目录中的文件:

# Anthropic API Key (required)
ANTHROPIC_API_KEY=sk-ant-api03-your-key-here

# WhatsApp MCP Server URL (optional, default: http://localhost:8080)
WHATSAPP_MCP_URL=http://localhost:8080

# Claude Model (optional, default: sonnet)
CLAUDE_MODEL=claude-3-5-sonnet-20241022

或者从示例中复制:

cp .env.example .env
# Then edit .env and add your settings

5.启动Bot

npm start

第一次:

  • 出现提示时扫描二维码
  • 会话将被保存以备将来启动

后续开始:

  • 无需二维码!
  • Bot自动加载已保存的会话

用法

在WhatsApp群聊中:

User: @mota what is the capital of France?
Bot: [Quoted reply via MCP] Paris is the capital of France...

User: @mota explain quantum computing
Bot: [Quoted reply via MCP] Quantum computing is a type of computation that...

检测模式:

  • @mota <question> -直接提问
  • hey @mota what's up -嵌入式提及
  • 必须在a 群聊 (DM被忽略)

MCP集成

为什么选择MCP?

使用WhatsApp MCP服务器发送提供:

  • ✅ 关注点分离(接收与发送)
  • ✅ 更好的可靠性和错误处理
  • ✅ 可以重用现有的MCP基础设施
  • ✅ 支持通过以下方式引用回复 quoted_id 参数

MCP消息格式

机器人使用JSON-RPC 2.0发送消息:

{
  "jsonrpc": "2.0",
  "id": 1234567890,
  "method": "tools/call",
  "params": {
    "name": "send_message",
    "arguments": {
      "jid": "916388394774-1578743792@g.us",
      "message": "Claude's response here",
      "quoted_id": "original_message_id"
    }
  }
}

MCP服务器要求

您的WhatsApp MCP服务器必须:

  1. ✅ 公开HTTP端点(默认值:http://localhost:8080)
  2. ✅ 支持 send_message 工具
  3. ✅ 接受 jid, message,以及 quoted_id 参数
  4. ✅ 通过身份验证并连接到WhatsApp

数据库

机器人使用SQLite来管理队列:

地点: ./whatsapp_bot.db

架构:

mota_queue:
  - id (auto-increment)
  - message_id (unique)
  - chat_id, chat_name, group_id
  - sender_id, sender_name
  - message_text, question
  - timestamp, status (pending/processing)

检查队列:

node check_db.js

配置

选择您的克劳德模型

该机器人支持三种克劳德模型:

型号 速度 成本 最适合
俳句 (claude-3-5-haiku-20241022) ⚡⚡⚡ $ 简单问答,量大
十四行诗 (claude-3-5-sonnet-20241022) ⚡⚡ $$ 通用 (默认)
作品 (claude-3-opus-20240229) ⚡ $$$ 复杂推理

更改模型 .env:

# Fast & cheap
CLAUDE_MODEL=claude-3-5-haiku-20241022

# Balanced (default)
CLAUDE_MODEL=claude-3-5-sonnet-20241022

# Most capable
CLAUDE_MODEL=claude-3-opus-20240229

看 CLAUDE_MODELS.md 用于详细比较和成本估算。

环境变量

变量 必填 默认 描述
ANTHROPIC_API_KEY ✅ 是 - 您的人类API密钥
WHATSAPP_MCP_URL ⚠️ 可选 http://localhost:8080 WhatsApp MCP服务器URL
CLAUDE_MODEL ⚠️ 可选 claude-3-5-sonnet-20241022 克劳德模型(俳句/十四行诗/小品)

队列处理间隔

默认值:每5秒

要更改,请编辑 index.js:

setInterval(() => processMotaQueue(), 5000); // milliseconds

最大令牌数

默认值:每个响应1024个令牌

要更改,请编辑 index.js:

max_tokens: 1024, // increase for longer responses

文件结构

whatsapp-bot/
├── index.js           # Main bot logic
├── db.js              # Database management
├── check_db.js        # Queue inspection tool
├── .env               # API keys & config (gitignored)
├── .env.example       # Template for .env
├── package.json       # Dependencies
├── whatsapp_bot.db    # SQLite database (gitignored)
└── .wwebjs_auth/      # WhatsApp session (gitignored)

故障排除

“找不到ANTHROPIC_API_KEY”

  • 确保 .env 文件存在于项目根目录中
  • 检查是否设置了API密钥: ANTHROPIC_API_KEY=sk-...
  • 添加密钥后重新启动机器人

“无法连接到WhatsApp MCP”

  • 确保您的WhatsApp MCP服务器正在运行
  • 在中检查URL .env: WHATSAPP_MCP_URL=http://localhost:8080
  • 验证MCP服务器是否经过身份验证并已连接

机器人不响应@mota

  • 确保它是一个 群聊 (非DM)
  • 检查队列: node check_db.js
  • 查看机器人日志中的错误消息
  • 验证两个WhatsApp会话都处于活动状态(接收和MCP)

每次出现二维码

  • 检查是否 .wwebjs_auth/ 文件夹存在
  • 不要删除此文件夹
  • 确保机器人正常关闭(Ctrl+C)

API成本

拟人克劳德定价(截至2024年):

  • 克劳德3.5十四行诗:每百万输入代币约3美元,每百万输出代币约15美元
  • 平均消息:每个响应约0.01-0.03美元

监控使用情况:https://console.anthropic.com/settings/usage

发展

调试队列

node check_db.js

测试MCP连接

curl -X POST http://localhost:8080 \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
      "name": "send_message",
      "arguments": {
        "jid": "YOUR_CHAT_ID",
        "message": "Test message"
      }
    }
  }'

清除队列

sqlite3 whatsapp_bot.db "DELETE FROM mota_queue;"

重置所有内容

rm -rf whatsapp_bot.db .wwebjs_auth/
npm start
# Will need to scan QR code again

许可证

ISC