Telegram
本文介绍如何通过 BotFather 创建 Telegram Bot,将消息通过 Webhook 发送到腾讯云 EdgeOne Makers ,由 Agent 生成回复并返回原聊天。
前提条件和适用范围
1. 已有 Telegram 账号,可访问官方 BotFather。
2. 已开通 Makers。
3. 本地已安装 Python 3,用于执行本文的 Webhook 注册脚本。
4. 本文验证私聊文本及群组定向命令,不包含频道发帖、支付、附件或 Telegram Mini Apps。
创建 Bot 并取得 Token
1. 在 Telegram 中打开官方 BotFather,确认用户名为 `@BotFather`。
2. 发送 `/newbot`,按提示输入显示名称,例如 `Makers Assistant`。
3. 输入唯一的 Bot 用户名;按 BotFather 要求使用以 `bot` 结尾的用户名。
4. 创建成功后,复制返回的 Bot Token,安全保存。
5. 记录 Bot 用户名,后续用来打开私聊或指定群组命令的接收对象。
确定权限与会话范围
Telegram 不使用 OAuth Scope 表。本文采用以下最小配置:
场景 | 所需操作 | 权限说明 |
用户私聊 | 用户先打开 Bot 并单击 **Start** 或发送 `/start` | Bot 不能主动开启与从未联系过它的用户的私聊 |
群组定向命令 | 将 Bot 添加到测试群,发送 `/ask@<Bot 用户名> 问题` | 保留 Privacy Mode,Bot 无需管理员身份 |
回复消息 | 允许 Bot 在所在群组发送消息 | 不能处于禁言或禁止发消息状态 |
部署 Makers 模板
1. 打开 Makers Agent for IM 模板。
2. 在项目环境变量设置中填写以下变量(负责一份.env.example 为.env)。
环境变量 | 是否必填 | 填写说明 |
TELEGRAM_BOT_TOKEN | 是 | BotFather 返回的 Token |
TELEGRAM_WEBHOOK_SECRET_TOKEN | 是 | 生成的 Webhook Secret |
3. 保存配置并部署
4. 复制生产环境 HTTPS 域名,在末尾添加 /telegram
5. 注意服务应该部署在全球可用区,telecom 服务才能正确访问。
注册 Webhook
1. 在本地终端执行以下完整命令,创建并运行注册脚本。脚本通过隐藏输入读取 Token 和 Webhook Secret;
2. 输入的 Secret 必须与 Makers 中的 `TELEGRAM_WEBHOOK_SECRET_TOKEN` 一致。脚本会将当前 Bot 的消息接收地址设置为您输入的 URL,并查询注册结果;
3. 请使用本次新建的测试 Bot。
cat > register-telegram-webhook.py <<'PY'import getpassimport jsonimport reimport urllib.errorimport urllib.parseimport urllib.requestbot_token = getpass.getpass('Bot Token(隐藏输入):').strip()secret = getpass.getpass('Webhook Secret(与 Makers 一致):').strip()webhook_url = input('完整 HTTPS 回调 URL:').strip()if not re.fullmatch(r'[A-Za-z0-9_-]{1,256}', secret):raise SystemExit('Webhook Secret 只能包含字母、数字、下划线和连字符,长度 1~256。')if not webhook_url.startswith('https://') or not webhook_url.endswith('/telegram'):raise SystemExit('请填写生产 HTTPS 域名加 /telegram。')def api(method, fields):request = urllib.request.Request('https://api.telegram.org/bot' + bot_token + '/' + method,data=urllib.parse.urlencode(fields).encode(),method='POST',)try:with urllib.request.urlopen(request, timeout=30) as response:result = json.load(response)except urllib.error.HTTPError as error:raise SystemExit(f'Telegram HTTP {error.code},请检查 Token 和网络。') from Noneexcept urllib.error.URLError:raise SystemExit('无法连接 Telegram Bot API,请检查网络。') from Noneif not result.get('ok'):raise SystemExit('Telegram 拒绝请求,请检查 URL、证书及参数。')return result['result']api('setWebhook', {'url': webhook_url,'secret_token': secret,'allowed_updates': json.dumps(['message']),})info = api('getWebhookInfo', {})print('Webhook URL:', info.get('url'))print('Pending updates:', info.get('pending_update_count', 0))print('Last error time:', info.get('last_error_date', 'none'))print('注册完成,请继续发送消息验证。')PYpython3 register-telegram-webhook.py
发送消息并验证
1. 根据 BotFather 提供的链接打开 Bot,单击 Start。
2. 发送 `请用一句话介绍腾讯云 EdgeOne Makers。`。
3. 确认聊天中出现 `Thinking…`,随后更新为最终回复。
4. 再发送 `请把上一条回答缩短为十个字以内。`,确认第二轮回复。
