如何通过Telegram消息触发AWS Lambda函数?
实现Telegram频道消息触发AWS Lambda的可行方案
核心思路是利用Telegram Webhook结合AWS API Gateway实现自动触发——SNS/SQS无法直接接收Telegram的主动推送,因此不适用该场景。具体落地步骤如下:
第一步:创建并配置Telegram Bot
- 在Telegram中搜索
@BotFather,发送/newbot指令创建新Bot,按引导完成设置后获取专属API Token。 - 将该Bot添加到目标频道,并赋予管理员权限(至少需开启读取消息权限)。
- 在Telegram中搜索
第二步:通过API Gateway为Lambda生成公开HTTP端点
- 登录AWS控制台,进入API Gateway服务,选择「REST API」创建新API。
- 创建资源(例如
/telegram-webhook),并添加POST方法。 - 在方法集成设置中,选择「Lambda函数」作为集成类型,指定目标Lambda函数,保存后确认自动添加Lambda调用权限。
- 将API部署到指定阶段(例如
prod),记录部署后的Invoke URL(格式类似https://xxxxxx.execute-api.<region>.amazonaws.com/prod/telegram-webhook)。
第三步:配置Telegram Webhook
发送HTTP POST请求到Telegram API,将Webhook指向你的API Gateway URL:curl -X POST "https://api.telegram.org/bot<你的API Token>/setWebhook" -d "url=<你的API Gateway Invoke URL>"可额外添加
allowed_updates=["message"]参数,仅接收消息类型的更新,减少无效请求。第四步:调整Lambda函数处理Telegram请求
Lambda的事件参数会包含Telegram推送的JSON payload,以下是Python示例解析代码:import json def lambda_handler(event, context): # 解析Telegram消息内容 telegram_payload = json.loads(event['body']) message_content = telegram_payload.get('message', {}).get('text', '') channel_id = telegram_payload.get('message', {}).get('chat', {}).get('id', '') # 插入你的业务逻辑 print(f"收到频道{channel_id}的消息:{message_content}") # 必须返回200状态码,否则Telegram会重复推送 return { 'statusCode': 200, 'body': json.dumps('处理完成') }第五步:验证权限与排查问题
- 确认API Gateway的IAM角色拥有调用Lambda的权限,Lambda执行角色拥有CloudWatch Logs权限(用于排查执行日志)。
- 发送测试消息到频道,查看CloudWatch Logs中的Lambda执行记录,确认触发状态。
常见问题排查
- Webhook设置失败:检查API Gateway URL是否可公开访问(若Lambda部署在VPC内,需确保API Gateway能穿透VPC或Lambda配置为公网访问)。
- 无消息推送:确认Bot在频道中拥有足够权限,无权限时Telegram不会推送消息。
- Lambda重复触发:检查是否返回了200状态码,Telegram会在未收到正确响应时重试推送。
内容的提问来源于stack exchange,提问作者apo keskin
相关产品推荐
相关产品推荐

