本文档详细说明如何将 Telegram 群组与照片墙系统进行集成。
- 已完成照片墙系统部署(
./deploy.sh) - 拥有 Telegram 账号
- 已安装 AWS CLI 并配置好凭证
| 项目 | 值 |
|---|---|
| CloudFront URL | https://<YOUR_DOMAIN> |
| Webhook URL 模板 | https://<YOUR_DOMAIN>/api/webhook/{groupId} |
如果你重新部署了栈,请通过
aws cloudformation describe-stacks --stack-name TelegramPhotoWallStack --query "Stacks[0].Outputs"获取最新的 URL。
-
打开 Telegram,搜索 @BotFather 并进入对话
-
发送
/newbot -
按提示输入:
- Bot 名称(显示名):例如
My Photo Wall Bot - Bot 用户名(唯一标识,必须以
bot结尾):例如my_photo_wall_bot
- Bot 名称(显示名):例如
-
创建成功后,BotFather 会返回一个 Bot Token,格式如下:
7123456789:AAH1234567890abcdefghijklmnopqrstuv -
记下这个 Token,后续步骤需要使用
默认情况下,Bot 无法读取群组中的所有消息。需要关闭 Privacy Mode:
- 在 BotFather 对话中发送
/mybots - 选择你刚创建的 Bot
- 点击 Bot Settings → Group Privacy
- 点击 Turn off
关闭 Privacy Mode 后,Bot 才能接收群组中所有用户发送的消息。如果不关闭,Bot 只能接收
/开头的命令消息。
将 Bot Token 安全存储到 AWS Secrets Manager 中(不要硬编码在任何配置文件中):
aws secretsmanager create-secret \
--name "telegram/bot-token/demo-group" \
--secret-string "7123456789:AAH1234567890abcdefghijklmnopqrstuv" \
--region us-west-2将上面的 Token 替换为你自己的 Bot Token。
demo-group对应cdk.json中配置的secretName。
如果 secret 已存在,使用 update 命令:
aws secretsmanager update-secret \
--secret-id "telegram/bot-token/demo-group" \
--secret-string "7123456789:AAH1234567890abcdefghijklmnopqrstuv" \
--region us-west-2aws secretsmanager get-secret-value \
--secret-id "telegram/bot-token/demo-group" \
--query SecretString --output text \
--region us-west-2部署时系统自动生成了一个 64 位随机字符串作为 Webhook 验证密钥,用于确保只有 Telegram 的请求能被系统接受:
WEBHOOK_SECRET=$(aws secretsmanager get-secret-value \
--secret-id "telegram/webhook-secret" \
--query SecretString --output text \
--region us-west-2)
echo $WEBHOOK_SECRET告诉 Telegram 将消息推送到我们的系统:
BOT_TOKEN="7123456789:AAH1234567890abcdefghijklmnopqrstuv"
WEBHOOK_URL="https://<YOUR_DOMAIN>/api/webhook/demo-group"
curl -X POST "https://api.telegram.org/bot${BOT_TOKEN}/setWebhook" \
-H "Content-Type: application/json" \
-d "{
\"url\": \"${WEBHOOK_URL}\",
\"secret_token\": \"${WEBHOOK_SECRET}\",
\"allowed_updates\": [\"message\"]
}"期望返回:
{"ok":true,"result":true,"description":"Webhook was set"}curl -s "https://api.telegram.org/bot${BOT_TOKEN}/getWebhookInfo" | python3 -m json.tool期望输出(关键字段):
{
"ok": true,
"result": {
"url": "https://<YOUR_DOMAIN>/api/webhook/demo-group",
"has_custom_certificate": false,
"pending_update_count": 0,
"last_error_date": null,
"last_error_message": null
}
}如果
last_error_message不为空,说明 Telegram 推送消息时遇到了错误,请根据错误信息排查。
- 打开你想要同步消息的 Telegram 群组
- 点击群组名称进入设置 → 添加成员
- 搜索你创建的 Bot 用户名(例如
@my_photo_wall_bot) - 将 Bot 添加到群组
添加成功后,在群组中发送一条测试消息(文字或图片),然后访问照片墙页面查看是否同步:
https://<YOUR_DOMAIN>/wall/demo-group
如果需要为多个 Telegram 群组配置独立的照片墙,按以下步骤操作:
一个 Bot 只能设置一个 Webhook URL。如果需要对接多个群组,每个群组需要一个独立的 Bot。
aws secretsmanager create-secret \
--name "telegram/bot-token/marketing" \
--secret-string "NEW_BOT_TOKEN_HERE" \
--region us-west-2{
"context": {
"telegramGroups": [
{
"groupId": "demo-group",
"chatId": "-1001234567890",
"name": "Demo Photo Wall",
"secretName": "telegram/bot-token/demo-group"
},
{
"groupId": "marketing",
"chatId": "-1009876543210",
"name": "市场部照片墙",
"secretName": "telegram/bot-token/marketing"
}
]
}
}字段说明:
| 字段 | 说明 | 示例 |
|---|---|---|
groupId |
照片墙的 URL 标识符(英文、数字、下划线、连字符) | marketing |
chatId |
Telegram 群组的 Chat ID(见下方获取方法) | -1001234567890 |
name |
照片墙页面显示的标题 | 市场部照片墙 |
secretName |
Secrets Manager 中 Bot Token 的名称 | telegram/bot-token/marketing |
npx cdk deploy --require-approval neverNEW_BOT_TOKEN="新 Bot 的 Token"
curl -X POST "https://api.telegram.org/bot${NEW_BOT_TOKEN}/setWebhook" \
-H "Content-Type: application/json" \
-d "{
\"url\": \"https://<YOUR_DOMAIN>/api/webhook/marketing\",
\"secret_token\": \"${WEBHOOK_SECRET}\",
\"allowed_updates\": [\"message\"]
}"方法一:通过 Bot API
- 将 Bot 加入群组
- 在群组中发送任意一条消息
- 执行:
curl -s "https://api.telegram.org/bot${BOT_TOKEN}/getUpdates" | python3 -m json.tool- 在返回的 JSON 中找到
message.chat.id,该值即为 Chat ID(群组的 Chat ID 通常为负数,如-1001234567890)
方法二:通过 @userinfobot
- 将
@userinfobot添加到群组 - 它会自动回复群组的 Chat ID
- 获取后可将其移出群组
如果需要临时移除 Webhook:
curl -X POST "https://api.telegram.org/bot${BOT_TOKEN}/deleteWebhook"aws logs tail /ecs/telegram-photo-wall --follow --region us-west-2Q: 消息发送了但照片墙上看不到?
- 确认 Bot 已添加到群组
- 确认 Bot 的 Privacy Mode 已关闭(BotFather → Bot Settings → Group Privacy → Turn off)
- 检查 Webhook 状态:
curl -s "https://api.telegram.org/bot${BOT_TOKEN}/getWebhookInfo" - 查看 ECS 日志是否有报错
Q: 图片显示不出来?
- 图片通过 S3 预签名 URL 访问,有效期 1 小时,刷新页面会获取新的 URL
- 检查 ECS Task Role 是否有 S3 读写权限(CDK 自动配置,正常情况不需要手动调整)
Q: Webhook 返回 403?
- 确认
secret_token设置正确(必须与 Secrets Manager 中的telegram/webhook-secret一致) - 确认 Webhook URL 中的
groupId与cdk.json中配置的groupId一致