首页 > 解决方案 > 使用 Python 设置状态回调 URL - Flask

问题描述

我正在尝试使用 Python - Flask 在 Twilio 中测试 StatusCallback,但是,我没有得到任何结果,不确定我缺少什么。我也在使用 ngrok。

这是代码:

from flask import Flask, request, abort
import logging

logging.basicConfig(level=logging.INFO)
app = Flask(__name__)

@app.route('/webhook', methods =['POST', 'GET'])
def webhook():
    status=request.values.get(['CallSid', 'From', 'To', 'Direction'])
    logging.info('Status: {}'.format(status))
    return ('', 204)

if __name__ == '__main__':
    app.run(debug=True)

当我打电话时,从我附上的图片中,你会注意到我没有得到任何结果。你能告诉我我可能会错过什么吗?谢谢。

附件

标签: pythonflasktwilio

解决方案


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

当您使用 ngrok 创建隧道时,会设置一个类似于 的 URL https://RANDOMSUBDOMAIN.ngrok.io,请确保您使用的是整个 URL,包括子域。

当 ngrok 运行时,还有一个仪表板,您可以检查以确保正在向您的 ngrok URL 发出请求。您可以通过 访问此仪表板http://localhost:4040。您还可以使用它来检查正在发送的请求参数。

request.values.get最后,您可能在传递和传递一组键时遇到问题。的get方法request.values只需要一个键,而不是一个数组。

正如您在评论中指出的那样,您可以使用request.form.to_dict(flat=False)来获取参数字典。如果您想在一行中将其进一步解构为单独的变量,您可以使用itemgetteroperator module,如下所示:

from operator import itemgetter

@app.route('/webhook', methods =['POST', 'GET'])
def webhook():
    parameters=request.form.to_dict(flat=False)
    CallSid, From, To, Direction = itemgetter('CallSid', 'From', 'To', 'Direction')(parameters)
    logging.info('CallSid: {}'.format(CallSid))
    return ('', 204)

推荐阅读