繁体   English   中英

对话流事件

[英]DialogFlow event

我在从 api 发送参数化事件时遇到问题。DF 响应不是我期望的响应。 该事件似乎正确地调用了意图,但它没有将参数传递给它。 当我使用 DialogFlow API 控制台测试请求时,它工作正常。

JS代码-DetectIntent API

使用 npm:dialogflow 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)意图编辑

我根据 Prisoner 的建议更改了 Intent,但没有用,事件达到了意图但没有达到参数。

  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
]

我发现 Dialogflow 的 v2 API 使用了 gRPC。 您需要一个 jsonToStructProto 方法将 JavaScript object 转换为原型结构。

这是您的代码示例:

          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,
              }
            }            
          };

我认为正在发生的事情是您的 Intent 配置了 Event 和phrase parameters 如果您要指定事件,则不需要以这种方式指定参数。

我不确定,但我不会对通过指定参数感到惊讶,系统随后会尝试将空输入与参数匹配并失败。

您可以完全省略参数部分。

在回复中指定事件参数,您可以使用以下格式

#event-name.parameter-name

所以你的回复部分会有类似

Hola #01_EVENT_USER.fullname

完成上述操作后更新

听起来我们走在正确的轨道上,至少,因为它现在正在检测正确的 Intent。 但你是对的,听起来它没有正确处理事件或事件参数。

我会尝试的第一件事是将事件名称更改为更简单的名称 - 前面有字母,没有下划线,并且全部使用小写字母。 也许像

eventuser

看看这是否有效。 如果是,请尝试一些变体以查看问题可能出在哪里。 (我的猜测是前面的数字导致了问题,但这是一个猜测。从尽可能简单的开始,然后引入复杂性以查看。)

我在从 api 发送参数化事件时遇到问题。 DF 响应不是我所期望的。 该事件似乎正确地调用了意图,但它没有将参数传递给它。 当我使用 DialogFlow API 控制台测试请求时,它工作正常。

JS 代码 - DetectIntent API

使用 npm:dialogflow 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
]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM