CodeBuddy CLI 接入 其他 Channel 笔记

举报
Tony Ren 发表于 2026/10/25 19:59:32 2026/10/25
【摘要】 CodeBuddy CLI 接入 Telegram Channel 完全指南 简要Telegram 是官方支持的 4 个 Channel 之一。 ⚠️ 但目前处于 Beta 阶段,功能和接口可能调整。CodeBuddy CLI 支持 4 个 Channel:Channel类型是否需要装插件微信内置❌ 无需(通过微信 ClawBot,扫码绑定)Telegram插件✅ 需要Discord插件✅...

CodeBuddy CLI 接入 Telegram Channel 完全指南

简要

Telegram 是官方支持的 4 个 Channel 之一。 ⚠️ 但目前处于 Beta 阶段,功能和接口可能调整。

CodeBuddy CLI 支持 4 个 Channel:

Channel 类型 是否需要装插件
微信 内置 ❌ 无需(通过微信 ClawBot,扫码绑定)
Telegram 插件 ✅ 需要
Discord 插件 ✅ 需要
fakechat 插件(演示) ✅ 需要,本地 localhost 聊天 UI,无需认证

💡 一句话理解 Channel:一种特殊的 MCP 服务器,把外部消息/告警/Webhook 推送进正在运行的 CodeBuddy Code 会话,并可通过同一 Channel 回复——相当于一个「聊天桥」。


一、Telegram Channel 接入(5 步,官方流程)

第 1 步:创建 Telegram Bot 拿 token

  1. 在 Telegram 里搜索并打开 @BotFather
  2. 发送 /newbot,按提示设置 bot 名称与用户名
  3. 创建成功后,BotFather 会返回一串 HTTP API Token(形如 123456789:AAF-xxxx...),复制保存

第 2 步:安装官方插件

在 CodeBuddy Code 中执行:

/plugin install telegram@claude-plugins-official

第 3 步:配置 token

/telegram:configure <你的 bot token>

第 4 步:带 Channel 启动 CLI

codebuddy --channels plugin:telegram@claude-plugins-official

可以同时加载多个 Channel,逗号分隔:

codebuddy --channels plugin:telegram@claude-plugins-official,plugin:discord@claude-plugins-official

第 5 步:配对(把你的账号加入白名单)

  1. 在 Telegram 里给你的 bot 发任意一条消息
  2. bot 会回复一个配对码
  3. 回到 CodeBuddy Code 执行:
/telegram:access pair <配对码>
  1. 配对完成,你的发送者 ID 进入白名单,之后即可正常对话

二、它能干什么(能力边界)

能力 说明
双向对话 Telegram 发消息 → 进入 CLI 会话;CLI 通过 reply 工具回复 → 内容出现在 Telegram
终端显示 终端只显示工具调用与确认(如 “sent”),真正的回复内容在 Telegram 里
权限中继 远程可在 Telegram 审批/拒绝 Bash、Write、Edit 等工具调用(需白名单用户)
持续运行 事件仅在会话打开时到达;要常驻需放在后台进程或持久终端(如 tmux)中运行
消息格式 会话中显示为 #telegram · <发送者>: <内容> 形式

典型场景

  • 在手机 Telegram 上给 CodeBuddy 下任务,实际工作在你自己的机器和真实文件上执行
  • CI / 监控告警的 Webhook 到达时,CodeBuddy 已经打开着你的文件并记得你在调试什么

三、安全机制(必读)

机制 说明
发送者白名单 插件 Channel 维护白名单,未配对者的消息被静默丢弃
配对流程 发消息 → 收配对码 → CLI 执行 /telegram:access pair <code> → ID 入白名单
权限中继受白名单约束 白名单用户可审批/拒绝工具调用,所以只把可信的人加入白名单
双重开关 只在 .mcp.json 里配置不足以推送消息,还必须在 --channels 中指定
组织管控 由 channelsEnabled 设置统一控制

⚠️ 关于 Prompt 注入:未做发送者校验的 Channel 是注入攻击入口。自建 Channel 时,务必用 message.from.id(发送者)而非 message.chat.id(群组)做校验——群聊里两者不同,按群组校验等于放行群里所有人。


四、组织/企业管控

计划类型 默认行为
个人用户 可用,用户通过 --channels 按会话启用
团队 / 企业 默认禁用,管理员需显式启用

管理员在 settings.json 中设置:

{
  "channelsEnabled": true
}

设为 false 则完全禁用 Channel(MCP 服务器仍连接、工具仍可用,但 Channel 消息不会到达)。


五、自建 Telegram Channel(进阶,官方协议)

官方已有 Telegram 插件,但如果你想自己实现(比如加自定义逻辑、接企业内网),协议是开放的。

核心三要素

  1. 声明 claude/channel capability
  2. 发送 notifications/claude/channel 事件
  3. 通过 stdio 传输连接(CodeBuddy Code 作为父进程启动它)

Server 配置选项

字段 类型 说明
capabilities.experimental['claude/channel'] object 必填,始终 {}。声明后 CLI 注册通知监听器
capabilities.experimental['claude/channel/permission'] object 可选,始终 {}。声明可接收权限中继请求
capabilities.tools object 双向 Channel 必填,标准 MCP 工具能力
instructions string 推荐。注入 system prompt,告诉 CLI 如何处理该 Channel 的事件

最小骨架(以 Webhook 接收器为例,可直接改成 Telegram 轮询)

#!/usr/bin/env bun
import { Server } from '@modelcontextprotocol/sdk/server/index.js'
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'

const mcp = new Server(
  { name: 'webhook', version: '0.0.1' },
  {
    capabilities: { experimental: { 'claude/channel': {} } },
    instructions: '来自 webhook 的事件以 <channel> 标签到达。单向通道,只需阅读并处理。',
  },
)

await mcp.connect(new StdioServerTransport())

Bun.serve({
  port: 8788,
  hostname: '127.0.0.1',
  async fetch(req) {
    const body = await req.text()
    await mcp.notification({
      method: 'notifications/claude/channel',
      params: {
        content: body,
        meta: { path: new URL(req.url).pathname, method: req.method },
      },
    })
    return new Response('ok')
  },
})

注册到 .mcp.json:

{
  "mcpServers": {
    "webhook": { "command": "bun", "args": ["./webhook.ts"] }
  }
}

通知格式

await mcp.notification({
  method: 'notifications/claude/channel',
  params: {
    content: 'build failed on main',
    meta: { severity: 'high', run_id: '1234' },
  },
})

到达 CLI 后渲染为:

<channel source="webhook" severity="high" run_id="1234">
build failed on main
</channel>

meta 的键名只允许字母、数字、下划线,含连字符等其他字符的键会被静默丢弃。

双向:暴露 reply 工具

import { ListToolsRequestSchema, CallToolRequestSchema } from '@modelcontextprotocol/sdk/types.js'

mcp.setRequestHandler(ListToolsRequestSchema, async () => ({
  tools: [{
    name: 'reply',
    description: '通过此 channel 发送回复消息',
    inputSchema: {
      type: 'object',
      properties: {
        chat_id: { type: 'string', description: '要回复的对话 ID' },
        text: { type: 'string', description: '要发送的消息' },
      },
      required: ['chat_id', 'text'],
    },
  }],
}))

mcp.setRequestHandler(CallToolRequestSchema, async req => {
  if (req.params.name === 'reply') {
    const { chat_id, text } = req.params.arguments as { chat_id: string; text: string }
    await sendToPlatform(chat_id, text)   // 调用你的聊天平台 API
    return { content: [{ type: 'text', text: 'sent' }] }
  }
  throw new Error(`unknown tool: ${req.params.name}`)
})

权限中继(远程审批工具调用)

Server 构造器加一行:

capabilities: {
  experimental: {
    'claude/channel': {},
    'claude/channel/permission': {},   // 启用权限中继
  },
  tools: {},
},
  • CLI 发出 notifications/claude/channel/permission_request,含 request_id(5 个小写字母,排除 l)、tool_name、description、input_preview(截断 200 字符)
  • 你的 Channel 回复裁决:
await mcp.notification({
  method: 'notifications/claude/channel/permission',
  params: { request_id: '<收到的 request_id>', behavior: 'allow' },  // 或 'deny'
})
  • 在 Telegram 侧识别用户回复:
// 匹配 "y abcde" / "yes abcde" / "n abcde" / "no abcde"
// [a-km-z] 为 CLI 使用的 ID 字母表(小写,跳过 'l')
const PERMISSION_REPLY_RE = /^\s*(y|yes|n|no)\s+([a-km-z]{5})\s*$/i

本地终端与远程 Channel 的对话框同时打开,先回答的生效,另一个自动关闭。

开发调试与发布

# 开发阶段:绕过允许列表白名单
codebuddy --dangerously-load-development-channels server:my-webhook
  • 该标志只绕过允许列表检查,channelsEnabled 组织策略仍然生效
  • 提交到官方市场并通过安全审查后,会被加入允许列表,之后可直接用 --channels 加载
  • 打包成插件后用 /plugin install 安装,再用 --channels plugin:<name>@<marketplace> 启用

六、Channel vs 其他功能(别用错)

功能 作用 适用场景
标准 MCP 服务器 CLI 在任务中主动查询它,不推送到会话 按需读取或查询系统
Remote Control 从远程控制本地会话 离开桌面时操控进行中的会话
Channel 把外部事件推送到已运行的本地会话 聊天桥、Webhook 接收、告警响应

七、上手建议(推荐路线)

  1. 先玩 fakechat(零成本、无需任何 token):
    /plugin install fakechat@claude-plugins-official
    codebuddy --channels plugin:fakechat@claude-plugins-official
    
    打开 http://localhost:8787 即可体验完整双向流程。
  2. 确认流程跑通后,再按第一节 5 步接入 Telegram。
  3. 需要常驻:把 codebuddy --channels plugin:telegram@... 放进 tmux / 后台进程,否则关掉终端就收不到消息。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。