无法使用 AWS lambda 验证 Twilio 传入 SMS Webhook

问题描述 投票:0回答:1

我正在尝试将我的应用程序与 Twilio 集成以提供短信服务。 我希望每次收到短信时都能收到通知。

这就是我所做的

1-我定义了带有代理集成的 lambda 和 ApiGateway

2-我将端点 url 添加到 Twilio 控制台中的 Webhook 设置

一旦我向 Twilio 号码发送短信,lambda 确实会被触发,并且我能够处理该消息。

但是,当我尝试使用 Twilio 验证器来验证时,即使我不断收到事件无效的信息

这是处理帖子请求验证的代码片段

validator = RequestValidator(<'auth token'>)
post_body_dict  = {key: value[0] for key, value in parse_qs(body).items()}
url = <'url as defined in Twilio's console'>
sig = event['headers'].get("X-Twilio-Signature")
is_valid = validator.validate(url, params, sig)

注释

1 - 请求正文作为查询参数字符串到达,即使它是 POST 请求 (param1=val1¶m2=val2...)

2 - 我还尝试在处理正文字符串时删除“+”(电话号码中的 + 前缀除外)

3 - 我也尝试过获取请求,但查询参数不是作为参数字符串而是作为解析的字典到达。

4 - 如果我没有使用 lambda,我只能验证请求,然后请求将来自发送者的原始查询参数字符串连接到 url,但我无法复制这是一个 lambda 环境。

我查看了 Twilio 的文档,但在我看来,当我使用 GET 请求时,即使从 api 网关到达,我也会丢失 lambda 中查询参数的原始顺序。关于帖子,我不知道为什么我无法使其发挥作用。

我尝试过的资源: 无法在 AWS Lambda 自定义授权方中验证 Twilio 请求Twilio 请求验证对于语音通话始终失败(但适用于短信)twilio webhook:无法验证签名https://www.twilio.com/docs/messaging/guides/webhook-requesttwilio RequestValidator 无法在 python wsgi 中工作

还有其他一些。

validation aws-lambda twilio webhooks
1个回答
0
投票

在 Twilio 支持的帮助下,我能够解决这个问题(仅适用于 POST 请求,所以这是我将使用的)。 问题是,当获取 url 编码的帖子正文时,我将其转换为字典,但没有空值。

parsed_dict = parse_qs(event["body"])
result_dict = {key: value[0] for key, value in parsed_dict.items()}

我应该做的是

parsed_dict = parse_qs(event["body"], keep_blank_values=True)
result_dict = {key: value[0] for key, value in parsed_dict.items()}

然后验证器(url = url,params = result_dict,signiture = sig)工作了

关于 GET,我仍然不确定如何使其与 api gateway lambda 一起工作

© www.soinside.com 2019 - 2024. All rights reserved.