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队列 -失败时重试的持久队列
- 🔐 会话保持 -首次登录后不扫描二维码
运作原理
- 接收:Bot通过监听
whatsapp-web.js为了@mota提及 - 队列:消息已添加到SQLite队列
- 过程:每5秒:
- 从队列中提取问题 - 发送给Claude AI - 获取克劳德的回复
- 发送:使用WhatsApp MCP发送回复(引用到原始消息)
- 完成:从队列中删除
设置
1.安装依赖项
npm install2.获取Anthropic API密钥
- 首选https://console.anthropic.com/settings/keys
- 创建新的API密钥
- 复制密钥
3.启动WhatsApp MCP服务器
该机器人需要WhatsApp MCP服务器来发送消息:
# In another terminal, start your WhatsApp MCP server on port 8080
# Example: whatsapp-mcp with streamable HTTP transport4.配置环境变量
创建一个 .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 settings5.启动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-直接提问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服务器必须:
- ✅ 公开HTTP端点(默认值:http://localhost:8080)
- ✅ 支持
send_message工具 - ✅ 接受
jid,message,以及quoted_id参数 - ✅ 通过身份验证并连接到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
