![](/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.