![](/img/trans.png)
[英]How to invoke an intent through a custom event by calling it from the dialogflow's inline fulfillment code?
[英]DialogFlow event
我在從 api 發送參數化事件時遇到問題。DF 響應不是我期望的響應。 該事件似乎正確地調用了意圖,但它沒有將參數傳遞給它。 當我使用 DialogFlow 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
]
圖片
我根據 Prisoner 的建議更改了 Intent,但沒有用,事件達到了意圖但沒有達到參數。
[
{
"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
]
重命名事件以降低復雜性,但行為是相同的。
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 控制台測試請求時,它工作正常。
使用 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
]
圖片
我根據囚犯的建議更改了意圖,但沒有奏效,事件達到意圖但未達到參數。
[
{
"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
]
重命名事件以降低復雜性,但行為是相同的。
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.