AWS Lambda对接Slack事件订阅无挑战参数响应失败问题咨询
排查思路
1. 校验API Gateway配置
- 确认API Gateway对应资源允许
POST请求:你之前用curl测试的是GET请求,Slack事件订阅发送的是POST请求,如果API Gateway只开放了GET方法,POST请求会直接被拦截返回4xx/5xx错误,既不会走到Lambda逻辑,也不会返回你预期的Hello World内容。 - 确认开启了
Lambda代理集成:如果没开启该配置,Slack发送的POST请求体、请求头会被API Gateway过滤,不会完整透传给Lambda,自然拿不到challenge参数。 - 查看API Gateway访问日志,确认Slack请求的到达情况和返回状态码:如果返回4xx错误,大概率是请求方法不允许、权限配置错误;如果返回5xx错误,大概率是Lambda执行报错或集成配置异常。
2. 添加入参日志确认Lambda实际接收内容
修改Lambda代码打印全量入参到CloudWatch日志,参考代码如下:
import json def lambda_handler(event, context): # 打印全量入参排查实际收到的请求内容 print(json.dumps(event)) return { 'statusCode': 200, 'body': json.dumps('Hello from Lambda!') }
重新触发Slack验证请求后,去CloudWatch对应Lambda日志组查看打印的event内容:如果没有对应请求记录,说明请求在API Gateway层就被拦截,没有到达Lambda。
3. 校验Slack端配置
- 确认你填写的请求URL拼写完全正确,路径、大小写都要和API Gateway的配置一致。
- 确认你是在事件订阅模块的
Enable Events下填写的URL,而非其他配置项的输入框。 - 确认你没有给Slack应用配置额外的自定义验证规则,导致请求发送异常。
4. 调整返回头适配Slack校验规则
Slack的验证请求要求返回的Content-Type为application/json,如果返回头不符合要求,Slack会判定返回无效,提示请求失败。你可以调整Lambda返回值添加响应头:
import json def lambda_handler(event, context): print(json.dumps(event)) return { 'statusCode': 200, 'headers': { 'Content-Type': 'application/json' }, 'body': json.dumps('Hello from Lambda!') }
内容的提问来源于stack exchange,提问作者DeveloperPadawan
相关产品推荐
相关产品推荐

