Dialogflow CX - использование веб-перехватчика для ответа пользователю

https://i.stack.imgur.com/oqT5V.png https://i.stack.imgur.com/r3thU.png

{
  "currentPage": {
    "displayName": "Start Page",
    "name": "projects/agent3-293107/locations/global/agents/5ca68c8a-abfc-4b35-a06a-f50cd4b697bd/flows/00000000-0000-0000-0000-000000000000/pages/START_PAGE"
  },
  "diagnosticInfo": {
    "Triggered Transition Names": [
      "e03439ef-fc0c-49f1-943e-2b5d46d68474"
    ],
    "Execution Sequence": [
      {
        "Step 1": {
          "InitialState": {
            "FlowState": {
              "Name": "Default Start Flow",
              "PageState": {
                "Name": "Start Page",
                "Status": "TRANSITION_ROUTING"
              }
            },
            "MatchedIntent": {
              "Type": "NLU",
              "DisplayName": "Default Welcome Intent",
              "Active": true,
              "Id": "00000000-0000-0000-0000-000000000000",
              "Score": 1
            }
          },
          "Type": "INITIAL_STATE"
        }
      },
      {
        "Step 2": {
          "Type": "STATE_MACHINE",
          "StateMachine": {
            "TriggeredIntent": "Default Welcome Intent",
            "FlowState": {
              "PageState": {
                "Name": "Start Page",
                "Status": "TRANSITION_ROUTING"
              },
              "Version": 0,
              "Name": "Default Start Flow"
            },
            "TransitionId": "e03439ef-fc0c-49f1-943e-2b5d46d68474"
          }
        }
      },
      {
        "Step 3": {
          "Type": "FUNCTION_EXECUTION",
          "FunctionExecution": {
            "Responses": [],
            "Webhook": {
              "Status": "OK",
              "Latency": "95 ms"
            }
          }
        }
      },
      {
        "Step 4": {
          "Type": "STATE_MACHINE",
          "StateMachine": {
            "FlowState": {
              "Name": "Default Start Flow",
              "Version": 0,
              "PageState": {
                "Name": "Start Page",
                "Status": "TRANSITION_ROUTING"
              }
            }
          }
        }
      }
    ],
    "Transition Targets Chain": [],
    "Webhook Latencies (ms)": [
      95
    ],
    "Alternative Matched Intents": [
      {
        "Id": "00000000-0000-0000-0000-000000000000",
        "DisplayName": "Default Welcome Intent",
        "Type": "NLU",
        "Score": 1,
        "Active": true
      }
    ]
  },
  "intent": {
    "displayName": "Default Welcome Intent",
    "name": "projects/agent3-293107/locations/global/agents/5ca68c8a-abfc-4b35-a06a-f50cd4b697bd/intents/00000000-0000-0000-0000-000000000000"
  },
  "intentDetectionConfidence": 1,
  "languageCode": "en",
  "match": {
    "confidence": 1,
    "intent": {
      "displayName": "Default Welcome Intent",
      "name": "projects/agent3-293107/locations/global/agents/5ca68c8a-abfc-4b35-a06a-f50cd4b697bd/intents/00000000-0000-0000-0000-000000000000"
    },
    "matchType": "INTENT",
    "modelType": "MODEL_TYPE_STANDARD",
    "resolvedInput": "hi"
  },
  "sentimentAnalysisResult": {
    "magnitude": 0.3,
    "score": 0.3
  },
  "text": "hi",
  "webhookPayloads": [
    {}
  ],
  "webhookStatuses": [
    {}
  ]
}

Я изучаю, как использовать веб-перехватчик в рамках выполнения диалогового процесса CX. Приведенный выше код является исходным ответом внутри симулятора тестового агента dialogflow CX. Шаг 3 говорит, что мой статус веб-перехватчика в порядке, но ответа нет. Верно ли возвращаемое содержимое JSON? Как dialogflow CX анализирует свой ответ иначе, чем ES?


person Lim Kai Wei    schedule 23.10.2020    source источник


Ответы (2)


Веб-перехватчики Dialogflow CX похожи на веб-перехватчики Dialogflow ES, за исключением того, что запрос и поля ответа были изменен для поддержки функций Dialogflow CX. По этой причине Dialogflow CX анализирует свой ответ иначе, чем Dialogflow ES.

Как видно из прикрепленных снимков экрана, вы использовали только параметр поля text в своем объекте вместо fillment_response.messages [] для представления ответного сообщения, которое может быть возвращено вашим диалоговым агент. Чтобы получить желаемый ответ веб-перехватчика для вашего варианта использования, убедитесь, что вы следуете формат ответа веб-перехватчика Dialogflow CX. Если вы используете Flask, рассмотрите возможность использования метода jsonify, как показано ниже:

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

@app.route('/', methods=['GET', 'POST'])
def hello_world():
    tag = request.json['fulfillmentInfo']['tag']
    fulfillmentResponse = {
        'fulfillmentResponse': {
            'messages': [{
                'text': {
                    'text': 'Hello World!'
                }
            }]
            },
    'sessionInfo':request.json['sessionInfo']
    }
    return jsonify(fulfillmentResponse)

@app.route('/webhook', methods=['GET', 'POST'])
def webhook():
    tag = request.json['fulfillmentInfo']['tag']
    fulfillmentResponse = {
        'fulfillmentResponse': {
            'messages': [{
                'text': {
                    'text': 'Hi there'
                }
            }]
        },
    'sessionInfo':request.json['sessionInfo']
    }
    return jsonify(fulfillmentResponse)

    app.run(host='0.0.0.0', port=8080)

Вот результат:

введите описание изображения здесь

Ответ Webhook в формате JSON Результат:

{
   "fulfillmentResponse":{
      "messages":[
         {
            "text":{
               "text":[
                  "Hello World"
               ]
            }
         }
      ]
   },
   "sessionInfo":{
      "session":"projects/project-id/locations/location-id/agents/agent-id/sessions/sessions-id"
   }
}

Кроме того, исходный ответ, который вы получили в Dialogflow CX, является возвращенным содержимым ответа после обработки веб-перехватчика.

person Leri    schedule 29.10.2020
comment
ваш ответ выглядит запутанным. форматирование осуществляется с помощью умных кавычек, и вы продублировали строки на fulfillmentResponse = { 'fulfillmentResponse'= { - person dcsan; 15.12.2020
comment
@dcsan, спасибо за исправление. Я отредактировал и исправил синтаксис кода сообщения. - person jess; 15.01.2021

По состоянию на 5 марта 2021 года я смог использовать приведенный ниже фрагмент в облачной функции GCP в качестве выполнения веб-перехватчика.

Важно отметить, что мне пришлось переключиться с camelCase на snake_case, чтобы агент правильно обрабатывал ответ веб-перехватчика, например с fulfillmentResponse на fulfillment_response.

from flask import jsonify

def process_call(request):


  request_json = request.get_json()
  print(request_json)
  response_dict = {
       "fulfillment_response":{
            "messages":[
              {
                  "text":{
                    "text":[
                        "This is a text example where we explore the importance of webhooks and session variables. The amount due is $session.params.amount_due."
                    ]
                  }
              }
            ]
        } ,
        "session_info":{
          "parameters": {
            "amount_due": 500
          }
        } 
  }

  print(response_dict)

  return jsonify(response_dict)

person Vykthur D .    schedule 06.03.2021