Python 配置Twilio webhook时始终接收400:错误请求

Python 配置Twilio webhook时始终接收400:错误请求,python,flask,twilio,twilio-programmable-chat,twilio-python,Python,Flask,Twilio,Twilio Programmable Chat,Twilio Python,我想维护单独的twilio电话退订者列表,这可以在通过twilio控制台配置webhook以接收传入消息时完成。当有人输入“STOP”时,我只解析这些消息。我已成功配置webhook 现在从我的手机上,当我在我的twilio号码上键入“停止”时,我总是收到错误的请求。我的代码如下所示 @app.route('/twilio/unsubscribes_incremental', methods=['POST', 'GET']) def phone_unsubscribes_incremental

我想维护单独的twilio电话退订者列表,这可以在通过twilio控制台配置webhook以接收传入消息时完成。当有人输入“STOP”时,我只解析这些消息。我已成功配置webhook

现在从我的手机上,当我在我的twilio号码上键入“停止”时,我总是收到错误的请求。我的代码如下所示

@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的请求对象。这个帐户是免费试用的。有人能给我指出解析传入消息的正确文档吗。

webhook是
application/x-www-form-urlencoded

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


webhook是
application/x-www-form-urlencoded

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


这里是Twilio开发者福音传道者

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

因此,您应该从
request.form
读取数据,并且,由于您似乎不希望告诉Twilio对请求做任何进一步的处理,因此返回一个空的

像这样的方法应该会奏效:

@app.route('/twilio/unsubscribes\u incremental',方法=['POST','GET']
def phone_取消订阅_增量():
打印(“开始”)
打印(“参数为”,request.args)
有效载荷=request.form
打印(“有效负载为”,有效负载)
如果twilio取消订阅列表中的payload.get('Body'):
将数据流传送至负载(有效负载)
resp=消息响应()
返回str(resp),{'Content-Type':'application/xml'}

这里是Twilio开发者福音传道者

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

因此,您应该从
request.form
读取数据,并且,由于您似乎不希望告诉Twilio对请求做任何进一步的处理,因此返回一个空的

像这样的方法应该会奏效:

@app.route('/twilio/unsubscribes\u incremental',方法=['POST','GET']
def phone_取消订阅_增量():
打印(“开始”)
打印(“参数为”,request.args)
有效载荷=request.form
打印(“有效负载为”,有效负载)
如果twilio取消订阅列表中的payload.get('Body'):
将数据流传送至负载(有效负载)
resp=消息响应()
返回str(resp),{'Content-Type':'application/xml'}

谢谢你的代码。它的工作原理是告诉你代码。在这里,它的工作是一个改进,用于从Python脚本中以编程方式启动和控制
ngrok
。在这里,作为一个改进,用于从Python脚本中以编程方式启动和控制
ngrok