簡體   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