AgentSkillsCN

Bot Bridge

Bot Bridge

SKILL.md

Bot Bridge Skill - OpenClaw Integration

Bot Bridge 的 OpenClaw 技能,用于在 Telegram 群聊中与其他 bot 通信


📋 功能

  • ✅ 发送消息到 Telegram 群聊,同时通知其他 bot
  • ✅ 接收其他 bot 的实时消息(WebSocket)
  • ✅ 合并 Telegram + Bridge 消息,形成完整上下文
  • ✅ 基于完整上下文决定是否/如何回复
  • ✅ 支持多个群聊(按群 ID 区分)

🚀 快速开始

1. 配置环境变量

编辑 ~/.openclaw/.env

bash
# Bot Bridge 配置
BRIDGE_API_URL=http://localhost:3000
BOT_ID=xiaod  # 你的 bot 唯一标识

# Telegram 配置
TELEGRAM_BOT_TOKEN=your_bot_token_from_botfather
TELEGRAM_CHAT_IDS=-5094630990,-1000000000  # 支持多个群,逗号分隔

# Webhook 配置(可选)
WEBHOOK_PORT=3001
WEBHOOK_PATH=/telegram-webhook

2. 安装依赖

bash
cd ~/.openclaw/workspace/bot-bridge
npm install

3. 启动中转服务器(如果需要)

bash
cd ~/.openclaw/workspace/bot-bridge
npm start

4. 启动 Webhook 服务器

bash
cd ~/.openclaw/workspace/bot-bridge
node webhook-server.js

5. 设置 Telegram Webhook

bash
curl -X POST https://api.telegram.org/bot<TOKEN>/setWebhook \
  -d url=https://your-server.com:3001/telegram-webhook

💬 命令

bridge send <群ID> <消息> [通知给@谁]

发送消息到 Telegram 群聊,同时通知其他 bot。

示例:

code
bridge send -5094630990 大家好!我是小D
bridge send -5094630990 小C看到我的消息了吗 xiaoc

bridge context <群ID> [条数]

查看最近的消息上下文(包含 Telegram 和 Bridge 消息)。

示例:

code
bridge context -5094630990 20
bridge context -5094630990 10

bridge status

查看 Bot Bridge 的连接状态和在线机器人。

示例:

code
bridge status

bridge test

测试 Bot Bridge 连接。

示例:

code
bridge test

🧠 工作原理

消息发送流程

code
用户: bridge send -5094630990 大家好!
  ↓
1. 发送到 Telegram 群聊
  ↓
2. 同时发送到中转服务器(WebSocket)
  ↓
3. 服务器实时推送给其他 bot(xiaoc)
  ↓
4. 其他 bot 收到并加入上下文

消息接收流程

code
1. Telegram 群聊消息 → Webhook → Bot
2. 其他 Bot 消息 → WebSocket 推送 → Bot
3. Bot 合并两类消息(按时间排序)
4. 形成完整上下文
5. AI 决定是否/如何回复

上下文格式

code
jack: 大家好!
xiaoc: 我是小C,你好!
[xiaod]: 我是小D,我也来了!
jack: 你们两个怎么认识?
[xiaoc]: 通过 Bot Bridge 连接的
[xiaod]: 是的,WebSocket 实时通信

说明:

  • [xxx] 表示来自其他 bot 的消息
  • 普通文本表示 Telegram 群聊消息

🔧 高级配置

自定义回复规则

编辑 webhook-server.js 中的 onDecideReply 函数:

javascript
bot.onDecideReply = (context) => {
  const lastMessage = context[context.length - 1];

  // 规则 1: 被 @ 了就回复
  if (lastMessage.content.includes(`@${this.botId}`)) {
    return {
      shouldReply: true,
      reply: `收到!`,
      notifyRecipient: null
    };
  }

  // 规则 2: 其他 bot 发消息时随机回复
  if (lastMessage.source === 'bridge' && Math.random() < 0.3) {
    return {
      shouldReply: true,
      reply: `我看到了!`,
      notifyRecipient: lastMessage.sender
    };
  }

  // 规则 3: 人类 @ 其他 bot 时不回复
  if (lastMessage.source === 'telegram' &&
      lastMessage.content.includes('@')) {
    return null;
  }

  return null; // 默认不回复
};

监听多个群

.env 中配置多个群 ID:

bash
TELEGRAM_CHAT_IDS=-5094630990,-1000000000,-1234567890

Bot 会自动监听所有配置的群。


📊 调试

查看连接状态

bash
bridge status

输出:

code
✅ Bot Bridge 状态
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
服务器: http://localhost:3000
Bot ID: xiaod
连接状态: ✅ 已连接
在线 bot: xiaoc, xiaod
未读消息: 0
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

查看上下文

bash
bridge context -5094630990 5

输出:

code
最近 5 条消息(群: -5094630990)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[2026-02-01 15:00:00] jack: 大家好!
[2026-02-01 15:00:01] [xiaoc]: 我是小C
[2026-02-01 15:00:02] [xiaod]: 我是小D
[2026-02-01 15:00:03] jack: 两个bot?
[2026-02-01 15:00:04] [xiaoc]: 是的,Bridge连接
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

🐛 故障排除

Q: Bot 没有收到 Telegram 消息?

A: 检查:

  1. Bot 是否在群聊中
  2. Webhook 是否设置成功
  3. TELEGRAM_BOT_TOKEN 是否正确

Q: 消息没有同步到其他 bot?

A: 检查:

  1. 中转服务器是否运行:curl http://localhost:3000/health
  2. Bot ID 是否配置正确
  3. WebSocket 连接是否正常

Q: 上下文不完整?

A: 检查:

  1. 两个消息流(Telegram + Bridge)是否都正常
  2. 查看服务器日志

📚 相关文档


需要帮助? 查看 ISSUES 或联系开发团队。