Событие DialogFlow - PullRequest
       3

Событие DialogFlow

0 голосов
/ 13 марта 2020

У меня проблемы с отправкой параметризованного события из API. Ответ DF не тот, который я ожидаю. Кажется, что событие правильно вызывает намерение, но оно не передает ему параметры. Когда я тестирую запрос с помощью консоли DialogFlow API, он работает правильно.

JS Код - DetectIntent API

Использование npm: диалоговое окно 1.2.0

const sessionClient = new dialogflow.SessionsClient({projectId, credentials}); 
const sessionPath = sessionClient.sessionPath(projectId, sessionId + update.sender.id);
const body_req = {
  session: sessionPath,            
  queryInput: {
    event: {
      name: '01_EVENT_USER',
      parameters: {
        fullname:'Bruno'
      },  
      languageCode: languageCode,
    }
  }            
};

sessionClient.detectIntent(body_req).then(response => { 
    console.log('Request : ', JSON.stringify(body_req));
    console.log('Response : ', JSON.stringify(response));
}, function(err) { console.error("Execute error", err); });

Запрос и ответ

#CONSOLE LOG - REQUEST
{
   "session":"projects/PROJECT-xxxxxxxxxxxx/agent/sessions/PROJECTXXXX-bb97ab4d-bc98-4c32-88cc-bfbc3fcd4d50",
   "queryInput":{
      "event":{
         "name":"01_EVENT_USER",
         "parameters":{
            "fullname":"Bruno"
         },
         "languageCode":"es-419"
      }
   }
}


#CONSOLE LOG - RESPONSE

[
  {
    "responseId": "78bf0e26-9d1d-4b54-9f84-02d69979251d-19db3199",
    "queryResult": {
      "fulfillmentMessages": [
        {
          "platform": "PLATFORM_UNSPECIFIED",
          "text": {
            "text": [
              ""
            ]
          },
          "message": "text"
        }
      ],
      "outputContexts": [],
      "queryText": "01_EVENT_USER",
      "speechRecognitionConfidence": 0,
      "action": "",
      "parameters": {
        "fields": {
          "event_param_01": {
            "stringValue": "",
            "kind": "stringValue"
          }
        }
      },
      "allRequiredParamsPresent": true,
      "fulfillmentText": "",
      "webhookSource": "",
      "webhookPayload": null,
      "intent": {
        "inputContextNames": [],
        "events": [],
        "trainingPhrases": [],
        "outputContexts": [],
        "parameters": [],
        "messages": [],
        "defaultResponsePlatforms": [],
        "followupIntentInfo": [],
        "name": "projects/PROJECT-xxxxxxxxxxxx/agent/intents/4e4c0355-1738-41c3-b0b8-7b2c6a59e120",
        "displayName": "test param",
        "priority": 0,
        "isFallback": false,
        "webhookState": "WEBHOOK_STATE_UNSPECIFIED",
        "action": "",
        "resetContexts": false,
        "rootFollowupIntentName": "",
        "parentFollowupIntentName": "",
        "mlDisabled": false
      },
      "intentDetectionConfidence": 1,
      "diagnosticInfo": null,
      "languageCode": "es",
      "sentimentAnalysisResult": null
    },
    "webhookStatus": null,
    "outputAudio": {
      "type": "Buffer",
      "data": []
    },
    "outputAudioConfig": null
  },
  null,
  null
]

Изображения

  1. API консоли диалогового потока
  2. Намерение

1) Отредактированное намерение

Я изменил Намерение, в соответствии с рекомендацией Заключенного, и не сработало, событие достигло намерения, но не параметра.

  1. Отредактировано намерение

Ответ

[
   {
      "responseId":"b0f4a3a9-dd67-49dc-9d80-1c4262ac39e9-19db3199",
      "queryResult":{
         "fulfillmentMessages":[
            {
               "platform":"PLATFORM_UNSPECIFIED",
               "text":{
                  "text":[
                     "Hola #01_EVENT_USER.fullname"
                  ]
               },
               "message":"text"
            }
         ],
         "outputContexts":[

         ],
         "queryText":"01_EVENT_USER",
         "speechRecognitionConfidence":0,
         "action":"",
         "parameters":{
            "fields":{

            }
         },
         "allRequiredParamsPresent":true,
         "fulfillmentText":"Hola #01_EVENT_USER.fullname",
         "webhookSource":"",
         "webhookPayload":null,
         "intent":{
            "inputContextNames":[

            ],
            "events":[

            ],
            "trainingPhrases":[

            ],
            "outputContexts":[

            ],
            "parameters":[

            ],
            "messages":[

            ],
            "defaultResponsePlatforms":[

            ],
            "followupIntentInfo":[

            ],
            "name":"projects/PROJECT-XXXXXXXXX/agent/intents/4e4c0355-1738-41c3-b0b8-7b2c6a59e120",
            "displayName":"test param",
            "priority":0,
            "isFallback":false,
            "webhookState":"WEBHOOK_STATE_UNSPECIFIED",
            "action":"",
            "resetContexts":false,
            "rootFollowupIntentName":"",
            "parentFollowupIntentName":"",
            "mlDisabled":false
         },
         "intentDetectionConfidence":1,
         "diagnosticInfo":null,
         "languageCode":"es",
         "sentimentAnalysisResult":null
      },
      "webhookStatus":null,
      "outputAudio":{
         "type":"Buffer",
         "data":[

         ]
      },
      "outputAudioConfig":null
   },
   null,
   null
]

2) Отредактировано намерение (просто)

Переименовано событие чтобы уменьшить сложность, но поведение то же самое.

  1. Простое намерение
  2. Код
          const sessionClient = new dialogflow.SessionsClient({projectId, credentials}); 
          const sessionPath = sessionClient.sessionPath(projectId, sessionId + update.sender.id);
          const body_req = {
            session: sessionPath,            
            queryInput: {
              event: {
                name: 'eventuser',
                parameters: {
                  fullname:'Bruno'
                },  
                languageCode: languageCode,
              }
            }            
          };

          sessionClient.detectIntent(body_req).then(response => {
            console.log('Request : ', JSON.stringify(body_req));
            console.log('Response : ', JSON.stringify(response));
          }, function(err) { console.error("Execute error", err); });

Ответ

[
   {
      "responseId":"a53732b8-bed0-4ae8-8858-81399f7b58e5-19db3199",
      "queryResult":{
         "fulfillmentMessages":[
            {
               "platform":"PLATFORM_UNSPECIFIED",
               "text":{
                  "text":[
                     "Hola #eventuser.fullname"
                  ]
               },
               "message":"text"
            }
         ],
         "outputContexts":[

         ],
         "queryText":"eventuser",
         "speechRecognitionConfidence":0,
         "action":"",
         "parameters":{
            "fields":{

            }
         },
         "allRequiredParamsPresent":true,
         "fulfillmentText":"Hola #eventuser.fullname",
         "webhookSource":"",
         "webhookPayload":null,
         "intent":{
            "inputContextNames":[

            ],
            "events":[

            ],
            "trainingPhrases":[

            ],
            "outputContexts":[

            ],
            "parameters":[

            ],
            "messages":[

            ],
            "defaultResponsePlatforms":[

            ],
            "followupIntentInfo":[

            ],
            "name":"projects/apex-way-ar-dev-hgjgyp/agent/intents/4e4c0355-1738-41c3-b0b8-7b2c6a59e120",
            "displayName":"test param",
            "priority":0,
            "isFallback":false,
            "webhookState":"WEBHOOK_STATE_UNSPECIFIED",
            "action":"",
            "resetContexts":false,
            "rootFollowupIntentName":"",
            "parentFollowupIntentName":"",
            "mlDisabled":false
         },
         "intentDetectionConfidence":1,
         "diagnosticInfo":null,
         "languageCode":"es",
         "sentimentAnalysisResult":null
      },
      "webhookStatus":null,
      "outputAudio":{
         "type":"Buffer",
         "data":[

         ]
      },
      "outputAudioConfig":null
   },
   null,
   null
]

Ответы [ 3 ]

0 голосов
/ 16 марта 2020

Я думаю, что ваше намерение настроено как для события, так и для параметров фразы . Если вы указываете Событие, вам не нужно указывать параметры таким образом.

Я не знаю наверняка, но я не удивлюсь, что при указании параметров система будет попытка сопоставить пустой ввод с параметрами и ошибка.

Вы можете полностью пропустить раздел параметров.

Кому указать параметры события в своем ответе вы бы использовали формат

#event-name.parameter-name

Таким образом, в вашем разделе ответа будет что-то вроде

Hola #01_EVENT_USER.fullname

Обновление после того, как вы сделали выше.

Звучит так по крайней мере, мы на правильном пути, поскольку сейчас обнаруживает правильное намерение. Но вы правы, это не похоже на правильную обработку события или параметров события.

Первое, что я бы попробовал, это изменить имя события на что-то более простое - иметь буквы впереди , без подчеркивания, и используйте все строчные. Возможно, что-то вроде

eventuser

И посмотрите, работает ли это. Если это так, попробуйте несколько вариантов, чтобы увидеть, где проблема может быть. (Я предполагаю, что именно цифры вызывают проблемы, но это предположение. Начните с него как можно проще и добавьте сложности, чтобы увидеть.)

0 голосов
/ 16 марта 2020

Я обнаружил, что в Dialogflow v2 API используется gRP C. Вам понадобится метод jsonToStructProto для преобразования вашего JavaScript объекта в протоструктуру.

Вот пример кода:

          const sessionClient = new dialogflow.SessionsClient({projectId, credentials}); 
          const sessionPath = sessionClient.sessionPath(projectId, sessionId + update.sender.id);
          const body_req = {
            session: sessionPath,            
            queryInput: {
              event: {
                name: 'eventuser',
                parameters:structjson.jsonToStructProto({fullname: 'Bruno'}),  //Dialogflow's v2 API uses gRPC. You'll need a jsonToStructProto method to convert your JavaScript object to a proto struct.
                languageCode: languageCode,
              }
            }            
          };
0 голосов
/ 13 марта 2020

В документации Dialogflow вместо использования события вы должны использовать followupEventInput

Например:

{
  "followupEventInput": {
    "name": "event-name",
    "parameters": {
      "parameter-name-1": "parameter-value-1",
      "parameter-name-2": "parameter-value-2"
    },
    "languageCode": "en-US"
  }
}

https://cloud.google.com/dialogflow/docs/events-custom

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...