Skip to content

Commit

Permalink
chore: Dialogflow cx v3 webhook validate form parameter (#410)
Browse files Browse the repository at this point in the history
* chore: update region tag for webhook validate form parameter snippet

* update snippet and test for consistency with NodeJS implementation

* linting
  • Loading branch information
nicain authored Jun 29, 2022
1 parent ca90f59 commit b20018d
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 48 deletions.
46 changes: 9 additions & 37 deletions Dialogflow-CX/webhook_validate_form_parameter.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,58 +14,30 @@

""" DialogFlow CX: webhook to validate or invalidate form parameters snippet."""

# [START dialogflow_v3beta1_webhook_validate_form_parameter]

# TODO (developer): change entry point to validate_parameter in Cloud Function

# [START dialogflow_cx_v3_webhook_validate_form_parameter]

def validate_parameter(request):
"""Webhook to validate or invalidate parameter based on conditions configured by the user."""

request_dict = request.get_json()
param_to_validate = request_dict["pageInfo"]["formInfo"]["parameterInfo"][0][
"value"
]

if param_to_validate > 15:
text = "That is too many! Please pick another number."
param_state = "INVALID"
else:
text = "That is a number I can work with!"
param_state = "VALID"

json_response = {
"fulfillment_response": {
"messages": [
{
"text": {
"text": [
text
], # fulfillment text response to be sent to the agent
},
},
],
},
"""Webhook will validate or invalidate parameter based on logic configured by the user."""
return {
"page_info": {
"form_info": {
"parameter_info": [
{
"displayName": "paramToValidate",
"displayName": 'orderNumber',
"required": True,
"state": param_state,
"state": 'INVALID',
"value": 123,
},
],
},
},
"sessionInfo": {
"parameters": {
# Set session parameter to null if your agent needs to reprompt the user
"paramToValidate": None
# Set session parameter to None if the form parameter is 'INVALID' and your agent needs to reprompt the user
"orderNumber": None,
},
},
}

return json_response


# [END dialogflow_v3beta1_webhook_validate_form_parameter]
# [END dialogflow_cx_v3_webhook_validate_form_parameter]
15 changes: 4 additions & 11 deletions Dialogflow-CX/webhook_validate_form_parameter_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,21 +25,14 @@ def fixture_app():
return flask.Flask(__name__)


@pytest.mark.parametrize(
"value,expected_response",
[
(15, "That is a number I can work with!"),
(16, "That is too many! Please pick another number."),
],
)
def test_validate_parameter(value, expected_response, app):
def test_validate_parameter(app):
"""Parameterized test for validate form parameter webhook snippet."""

request = {"pageInfo": {"formInfo": {"parameterInfo": [{"value": value}]}}}
request = {"pageInfo": {"formInfo": {"parameterInfo": [{"value": 123}]}}}

with app.test_request_context(json=request):
res = validate_parameter(flask.request)
assert (
res["fulfillment_response"]["messages"][0]["text"]["text"][0]
== expected_response
res["page_info"]["form_info"]["parameter_info"][0]["state"]
== 'INVALID'
)

0 comments on commit b20018d

Please sign in to comment.