问题描述
我想维护单独的 twilio 电话取消订阅者列表,这可以在通过 twilio 控制台配置 webhook 以接收传入消息时完成。当有人输入“STOP”时,我只会解析这些消息。我已经成功配置了 webhook
现在,当我在我的 twilio 号码上输入“STOP”时,我总是收到错误的请求。我的代码如下
@app.route('/twilio/unsubscribes_incremental',methods=['POST','GET'])
def phone_unsubscribes_incremental():
print("start")
print("The arguments are ",request.args)
payload = request.get_json(force=True)
print("The payload is ",payload)
#resp = MessagingResponse()
if payload.get('Body') in twilio_unsubscribe_list:
stream_data_to_bq(payload)
#resp.message("")
#return str(resp)
return jsonify({"status":"ok"})
我的python控制台显示如下
我的ngrok控制台显示如下
我的 twilio 控制台日志显示如下
由于某种原因,我无法解析发送到我的 webhook 的请求对象。此帐户处于免费试用状态。任何人都可以向我指出解析传入消息的正确文档。
解决方法
这里是 Twilio 开发者布道者。
正如 Alan 指出的那样,Twilio webhook 请求以 application/x-www-form-urlencoded
形式发送数据,与网络表单发布数据的格式相同。它不是 JSON。 Twilio 还希望您的应用程序的响应为 application/xml
。
因此,您应该从 request.form
读取数据,并且由于您似乎并不希望告诉 Twilio 对请求执行任何进一步操作,因此返回一个空的 <Response>
{{3 }}。
这样的事情应该可以工作:
@app.route('/twilio/unsubscribes_incremental',methods=['POST','GET'])
def phone_unsubscribes_incremental():
print("start")
print("The arguments are ",request.args)
payload = request.form
print("The payload is ",payload)
if payload.get('Body') in twilio_unsubscribe_list:
stream_data_to_bq(payload)
resp = MessagingResponse()
return str(resp),{ 'Content-Type': 'application/xml' }
,
网络钩子是 application/x-www-form-urlencoded
对于入站文本消息,Twilio 将发送一个 HTTP POST 请求到 您的服务器的主体使用 application/x-www-form-urlencoded 编码。查看名单 该请求中发送的参数。