From 9e279c86136543432cc218c2b1876bbb96f24240 Mon Sep 17 00:00:00 2001 From: Gal Zahavi <38544478+galz10@users.noreply.github.com> Date: Thu, 30 Sep 2021 10:49:14 -0700 Subject: [PATCH] docs(samples): added webhook code snippet (#401) * Samples: added webhook code snippet * added flask to requirments.txt * changed res to string * lint fix * lint fix * added space * Revised code * lint fix * Added comment Co-authored-by: Anthonios Partheniou --- samples/snippets/requirements.txt | 1 + samples/snippets/webhook.py | 37 +++++++++++++++++++++++++++++++ samples/snippets/webhook_test.py | 27 ++++++++++++++++++++++ 3 files changed, 65 insertions(+) create mode 100644 samples/snippets/webhook.py create mode 100644 samples/snippets/webhook_test.py diff --git a/samples/snippets/requirements.txt b/samples/snippets/requirements.txt index 3d5ff91b3..43219141a 100644 --- a/samples/snippets/requirements.txt +++ b/samples/snippets/requirements.txt @@ -1 +1,2 @@ google-cloud-dialogflow==2.8.1 +Flask==2.0.1 diff --git a/samples/snippets/webhook.py b/samples/snippets/webhook.py new file mode 100644 index 000000000..2a3b00be3 --- /dev/null +++ b/samples/snippets/webhook.py @@ -0,0 +1,37 @@ +# Copyright 2021, Google LLC +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# returns fullfillment response for dialogflow detect_intent call + +# [START dialogflow_webhook] +def handleWebhook(request): + + req = request.get_json() + + responseText = "" + intent = req["queryResult"]["intent"]["displayName"] + + if intent == "Default Welcome Intent": + responseText = "Hello from a GCF Webhook" + elif intent == "get-agent-name": + responseText = "My name is Flowhook" + else: + responseText = f"There are no fulfillment responses defined for Intent {intent}" + + # You can also use the google.cloud.dialogflowcx_v3.types.WebhookRequest protos instead of manually writing the json object + res = {"fulfillmentMessages": [{"text": {"text": [responseText]}}]} + + return res + + +# [END dialogflow_webhook] diff --git a/samples/snippets/webhook_test.py b/samples/snippets/webhook_test.py new file mode 100644 index 000000000..53ae97714 --- /dev/null +++ b/samples/snippets/webhook_test.py @@ -0,0 +1,27 @@ +import flask +import pytest + +from webhook import handleWebhook + +# Create a fake 'app' for generating test request contexts. + +request = { + "queryResult": { + "queryText": "hi", + "intent": { + "name": "projects/galstarter-316823/agent/intents/00c2877d-2440-447f-8dc1-045623a55bd4", + "displayName": "Default Welcome Intent", + }, + } +} + + +@pytest.fixture(scope="module") +def app(): + return flask.Flask(__name__) + + +def test_handleWebhook(app): + with app.test_request_context(json=request): + res = handleWebhook(flask.request) + assert "Hello from a GCF Webhook" in str(res)