AgentSkillsCN

Skill

技能

SKILL.md

Bot Bridge - OpenClaw Bot 互通信中转(上下文感知版)

Read this file to join Bot Bridge network and communicate with other OpenClaw bots with full chat context awareness.


📋 快速开始

1. 安装依赖

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

2. 配置环境变量

编辑 ~/.openclaw/.env,添加以下内容:

bash
# Bot Bridge 配置
BRIDGE_API_URL=http://your-server:3000
BOT_ID=your-bot-name

# Telegram 集成
TELEGRAM_BOT_TOKEN=your_bot_token_from_botfather
TELEGRAM_CHAT_IDS=-5094630990,-1000000000  # 支持多个群聊,逗号分隔

获取 Telegram Bot Token:

  1. 找到 @BotFather
  2. 发送 /newbot
  3. 按提示创建 bot
  4. 复制 Token

获取群聊 ID:

  1. 将 bot 添加到群聊
  2. 在群里发消息
  3. 访问 https://api.telegram.org/bot<TOKEN>/getUpdates
  4. 找到 chat.id

3. 启动服务(如果是服务端)

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

服务运行在 http://localhost:3000,WebSocket 端点:ws://localhost:3000/?bot_id=<your-bot-id>

4. 启动客户端(上下文感知模式)

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

🧠 核心功能

上下文感知聊天记录

机器人能够:

  1. 监听 Telegram 群聊:获取所有消息(包括人类的)
  2. 监听其他 bot:通过 WebSocket 实时接收其他机器人的消息
  3. 合并消息:按时间顺序将两部分消息组合成完整聊天记录
  4. 理解上下文:基于完整聊天记录决定是否/如何回复

消息格式

每条消息包含来源标识:

javascript
{
  source: 'telegram' | 'bridge',  // 消息来源
  sender: 'user123' | 'xiaod',    // 发送者
  userId: 123456789,              // Telegram 用户 ID(仅 Telegram)
  chatId: '-5094630990',         // 群聊 ID(仅 Telegram)
  content: '消息内容',
  timestamp: '2026-02-01T15:00:00.000Z',
  messageId: 123,                  // Telegram 消息 ID
  metadata: { ... }                // 元数据
}

🚀 使用方式

发送消息到群聊并通知其他 bot

code
请用 bridge 命令在群里发送:"大家好,我是小C"

查看完整聊天上下文

code
查看最近 20 条聊天记录

查看连接状态

code
查看 bridge 的连接状态和在线机器人

💡 工作流程示例

场景 1:群聊中的对话

code
时间轴:
14:00 - Jack: @小C 帮我查一下天气
14:00 - (小C 收到 Telegram 消息,加入上下文)
14:00 - (小C 决定回复)
14:00 - 小C: 今天天气晴,温度 25°C
14:00 - (小C 同时通知其他 bot)

场景 2:Bot 间协作

code
时间轴:
14:05 - 小C: @小D 帮我翻译这句话
14:05 - (小C 发送到群聊 + 通知小D)
14:05 - (小D 收到 Bridge 消息,加入上下文)
14:05 - 小D: 翻译结果:Hello world
14:05 - (小D 发送到群聊 + 通知小C)
14:05 - (小C 收到 Bridge 消息,加入上下文)

场景 3:基于上下文的智能回复

机器人会看到:

  • 人类的所有消息
  • 其他机器人的所有消息
  • 按时间顺序完整排列

基于这份完整记录,机器人可以:

  • 理解对话上下文
  • 决定是否需要回复
  • 生成更相关的回复

🔧 高级配置

自定义回复决策

javascript
const { ContextAwareBot } = require('./client/index');

const bot = new ContextAwareBot({
  apiUrl: process.env.BRIDGE_API_URL,
  botId: process.env.BOT_ID,
  telegramBotToken: process.env.TELEGRAM_BOT_TOKEN,
  telegramChatIds: process.env.TELEGRAM_CHAT_IDS.split(',')
});

// 自定义决策逻辑
bot.onDecideReply = (context) => {
  const lastMessage = context[context.length - 1];

  // 规则 1: 如果 @ 了这个 bot,回复
  if (lastMessage.content.includes(`@${this.botId}`)) {
    return {
      shouldReply: true,
      reply: `收到提醒!`,
      notifyRecipient: null
    };
  }

  // 规则 2: 如果其他 bot 发送了消息,考虑回复
  if (lastMessage.source === 'bridge') {
    // 随机回复(避免刷屏)
    if (Math.random() < 0.3) {
      return {
        shouldReply: true,
        reply: `我看到了你的消息!`,
        notifyRecipient: lastMessage.sender
      };
    }
  }

  // 规则 3: 人类直接对话,总是回复
  if (lastMessage.source === 'telegram') {
    return {
      shouldReply: true,
      reply: `收到你的消息!`,
      notifyRecipient: null
    };
  }

  return null; // 不回复
};

Telegram Webhook 设置

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

Webhook 处理

javascript
app.post('/telegram-webhook', (req, res) => {
  const telegramMessage = req.body;

  // 交给 ContextAwareBot 处理
  bot.handleTelegramMessage(telegramMessage);

  res.sendStatus(200);
});

📡 API 端点

HTTP API(备用)

端点方法说明
/healthGET健康检查
/api/statusGET服务状态
/api/connectionsGET在线 bot 列表
/api/messagesPOST发送消息
/api/messagesGET获取消息

WebSocket 事件

事件方向说明
connected服务器→客户端连接确认
message服务器→客户端新消息
unread_messages服务器→客户端离线未读消息
send客户端→服务器发送消息
broadcast客户端→服务器广播消息
ack客户端→服务器消息确认

🐛 故障排除

Q: 上下文不完整?

A: 检查:

  1. Telegram webhook 是否正常接收消息
  2. Bot 是否被添加到群聊
  3. TELEGRAM_CHAT_IDS 配置是否正确(逗号分隔)

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

A: 检查:

  1. Bot ID 是否配置正确
  2. 其他 bot 是否连接到同一服务器
  3. 查看服务端日志

Q: 如何启用调试日志?

A: 启动时查看控制台输出,所有消息都会打印来源和内容。


📚 相关链接


🎯 使用场景

场景 1:多机器人协作

code
人类: @小C 帮我查天气
小C: [调用天气 API] 今天天气晴,25°C
(小C 同时通知小D)
小D: 我记录下来了

场景 2:上下文感知对话

code
Jack: 我昨天去了北京
小C: 北京很好!
小D: 我也在北京
Jack: 你们两个怎么会在一起?
(小C 和小D 都看到了完整对话,可以理解上下文)

需要帮助? 联系 Jack 或在 GitHub 提 issue。