S.Jo
S.Jo

Reputation: 58

Dialogflow fulfillment webhook using Azure web app gives error

I have created fulfillment code for Dialogflow with Python Flask and deployed it as Azure Web App. Code is working fine with the url provided by Azure. But if I use the same url in Dialog Flow's Fulfillment webhook, I get an error saying "Webhook call failed. Error: UNKNOWN."

Here's my simple Python Flask Code which is deployed in Azure as Web App.

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()

Webhook url in DialogFlow: enter image description here

Upvotes: 0

Views: 108

Answers (1)

Charles Xu
Charles Xu

Reputation: 31384

For your python code, there are two issues I think you met. First is that the route in the Flask just set to support the GET in default. So you need to set for the POST request manually. See the details here for the parameters:

By default a rule just listens for GET (and implicitly HEAD). Starting with Flask 0.6, OPTIONS is implicitly added and handled by the standard request handling.

Another is that you return the message via the function jsonify. It turns the JSON output into a Response object with the application/json mime-type, but you just give ita string. So the POST response will meet the conflict. This may be the problem you met.

You can change the code like this:

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()

Upvotes: 1

Related Questions