【问题标题】:Dialogflow fulfillment webhook using Azure web app gives error使用 Azure Web 应用程序的 Dialogflow 实现 webhook 出现错误
【发布时间】:2020-05-22 12:30:06
【问题描述】:

我已经使用 Python Flask 为 Dialogflow 创建了实现代码,并将其部署为 Azure Web App。代码在 Azure 提供的 url 上运行良好。 但是,如果我在 Dialog Flow 的 Fulfillment webhook 中使用相同的 url,我会收到一条错误消息:“Webhook call failed.Error: UNKNOWN.”

这是我作为 Web 应用程序部署在 Azure 中的简单 Python Flask 代码。

from flask import Flask, request, make_response, jsonify
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

@app.route("/webhook")
def webhook():
    return jsonify("Webhook Successfull")

if __name__ == "__main__":
    app.run()

DialogFlow 中的 Webhook 网址:

【问题讨论】:

    标签: python azure flask


    【解决方案1】:

    对于您的 python 代码,我认为您遇到了两个问题。首先是Flask中的路由默认设置为支持GET。所以你需要手动设置 POST 请求。参数详见here:

    默认情况下,规则只侦听 GET(隐式 HEAD)。开始 在 Flask 0.6 中,OPTIONS 被隐式添加并由 标准请求处理。

    另一个是你通过函数jsonify返回消息。它将 JSON 输出转换为具有application/json mime 类型的响应对象,但您只需提供 ita 字符串。所以POST响应会遇到冲突。这可能是您遇到的问题。

    您可以像这样更改代码:

    from flask import Flask, request, make_response, jsonify
    app = Flask(__name__)
    
    @app.route("/", methods=["GET", "POST"])
    def hello():
            return "Hello World!"
    
    @app.route("/webhook", methods=["GET", "POST"])
    def webhook():
        return jsonify(response="Webhook Successfull")
    
    if __name__ == "__main__":
        app.run()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多