跳到主要内容

Telegram Bot 绑定

每个 SayClaw 实例可以绑定一个专属 Telegram Bot,绑定后用户可以直接在 Telegram 与 AI 对话。

功能概览

  • 自助操作:用户在 Portal 自行完成,无需管理员介入
  • 一实例一 Bot:每个实例绑定一个独立 Bot Token
  • 白名单访问:仅绑定时指定的 Telegram ID 可以与 Bot 对话
  • 随时解绑:解绑后 Bot 停止响应,实例恢复空闲状态

前提条件

  1. 已在 Portal 领取实例(每人限一个)
  2. 准备好 Telegram Bot Token — 在 @BotFather 发送 /newbot 创建
  3. 知道自己的 Telegram 数字 ID — 与 @getmyid_bot 对话获取

绑定步骤

1. 打开 Portal

访问 app.sayclaw.ai(PC)或 m.sayclaw.ai(手机),登录账号。

2. 进入实例卡片

在工作台找到你的实例卡片,点击「绑定 Telegram」按钮(或点击 TG 状态区域)。

3. 填写信息

在弹出的配置面板中填写:

字段说明示例
Bot Token从 @BotFather 获取的完整 Token123456789:AAxxxxxxxxxxxxxxxx
你的 Telegram ID你的数字 ID(非用户名)6057436537

4. 保存配置

点击「保存配置」,系统会:

  1. 验证 Bot Token 有效性(调用 Telegram API)
  2. SSH 到实例服务器自动写入配置
  3. 重启实例服务

整个过程约 10–30 秒,看到「绑定成功」提示后即可使用。

5. 开始对话

直接在 Telegram 搜索你的 Bot 用户名,发送消息即可。


解绑

在实例卡片点击「解绑」→ 确认后系统清除 Bot 配置并重启实例。


底层实现

API 接口

POST /api/v1/me/instances/:id/tg-setup

请求体:

{
"bot_token": "123456789:AAxxxxxxxxxxxxxxxx",
"tg_user_id": "6057436537"
}

响应:

{
"code": "0000",
"data": {
"bot_username": "my_ai_bot",
"bound_at": "2026-03-07T00:00:00Z"
}
}

其他接口:

方法路径说明
GET/me/tg/status?instance_id=xxx查询绑定状态
DELETE/me/tg/unbind?instance_id=xxx解绑

数据存储

绑定信息存储在 sayclaw_portal.user_instances 表:

字段说明
tg_bot_tokenBot Token(脱敏,仅首尾可见)
tg_bot_usernameBot 用户名(如 @my_ai_bot
tg_user_id用户的 Telegram 数字 ID
tg_bound_at绑定时间

实例配置

绑定成功后,portal-api 通过 SSH 自动写入实例的 openclaw.json

{
"channels": {
"telegram": {
"enabled": true,
"botToken": "123456789:AAxxxxxxxxxxxxxxxx",
"allowedUserIds": [6057436537],
"network": {
"autoSelectFamily": false,
"dnsResultOrder": "ipv4first"
}
}
}
}

network 配置为 IPv4 优先,解决 GCP Japan 区域 IPv6 不稳定导致 Bot 静默断线的问题。


常见问题

Q:Bot 绑定后没有响应?

等待 10–20 秒让实例完成重启。如果仍无响应,检查:

  • Bot Token 是否填写正确(完整复制,包含冒号和后面部分)
  • Telegram ID 是否是数字 ID(不是用户名 @xxx)
  • 实例状态是否为「运行中」

Q:能不能多人使用同一个 Bot?

当前版本仅支持单用户白名单。如需多人共用,需要管理员在后台手动编辑 allowedUserIds 数组(后续版本将支持多人配置)。

Q:Bot Token 安全吗?

Token 在数据库中脱敏存储(仅首尾可见),API 响应中不返回完整 Token。实例配置文件存储在隔离的服务器目录中。

Q:换一个 Bot 怎么操作?

先解绑现有 Bot,再重新走绑定流程填写新 Token 即可。