0

我想维护单独的 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 的请求对象。此帐户处于免费试用阶段。任何人都可以向我指出正确的文档来解析传入的消息。

4

2 回答 2

2

Twilio 开发人员布道者在这里。

正如 Alan 所指出的,Twilio webhook 请求以 form 形式发送数据application/x-www-form-urlencoded,与 web 表单发布数据的格式相同。它不是 JSON。Twilio 还希望您的应用程序的响应为application/xml.

因此,您应该从中读取数据,request.form并且因为看起来您不希望告诉 Twilio 对请求做进一步的处理,所以返回一个空的<Response> TwiML 元素

像这样的东西应该工作:

@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' }
于 2021-04-09T00:11:35.557 回答
0

网络钩子是application/x-www-form-urlencoded

Webhook 常见问题解答

对于入站文本消息,Twilio 将向您的服务器发送一个 HTTP POST 请求,其正文使用 application/x-www-form-urlencoded 编码。查看该请求中发送的参数列表。

于 2021-04-08T19:24:10.960 回答