events - 对话流事件
问题描述
我在从 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) 意图编辑
我更改了Intent,根据Prisoner的建议并没有工作,事件达到了意图但没有达到参数。
回复
[
{
"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)意图编辑(简单)
重命名事件以降低复杂性,但行为相同。
- 简单的意图
- 代码
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 对象转换为 proto 结构。
这是您的代码示例:
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,
}
}
};
推荐阅读
- typescript - 如何将一个类注入另一个类以用作 es6 类中的构造函数
- python - 如何覆盖 AWS Athena 表
- c# - 如何在潜在危险请求的情况下覆盖来自 WebAPI 的默认 HTML 页面响应
- c++ - FindWindow() 失败,但 GetLastError 返回 0
- python-3.x - 难以将 numpy 数组转换为张量。使用 tf.convert_to_tensor 和 .to(device) 的问题
- oracle - 优化 PL/SQL 中的代码。使其正确。代码正在运行但不正确
- node.js - Validator.js 模块未找到 - 无法在客户端解析 http
- markdown - WebStorm 的降价编辑器中缺少换行符
- ruby - 如何使用 ruby 在 SketchUp 中更改组件的 LenX/Y/Z 属性?
- mongodb - 使用 Spring Data 在 Mongo DB 中展开和拆分多个子文档