ユーザー名、電子メールなど、dialogflow(api.ai)にパラメーターを送信しようとしていますが、理解できませんでした。問題は、Dialogflow v2 Nodejs SDKで特定のデータ(ユーザー名、メールなど)を取得/設定できないことです。 queryParams.payload(v1:originalRequest)を使用しようとしましたが、どういうわけか機能しませんでした。また、データでカスタムイベントをトリガーしようとしましたが、応答でイベントデータを取得できませんでした。誰かがdialogFlowのセッショントークのために特定のデータを送信する方法を知っていますか?
ペイロードの例
const projectId = 'test-bot-test-1111';
const sessionId = user.uuid;
const languageCode = 'en-GB';
const sessionClient = new dialogFlow.SessionsClient();
const sessionPath = sessionClient.sessionPath(projectId, sessionId);
const request = {
session: sessionPath,
queryInput: {
text: {
text: query,
languageCode
}
},
queryParams: {
payload: {
data: {
username: 'bob',
email: '[email protected]'
}
}
}
};
let resultReq;
console.log('request :: ', request, '\n\n');
try {
resultReq = await sessionClient.detectIntent(request);
} catch (err) {
// eslint-disable-next-line no-console
return console.error('ERROR:', err);
}
イベントの例
const projectId = 'test-bot-test-1111';
const sessionId = user.uuid;
const languageCode = 'en-GB';
const sessionClient = new dialogFlow.SessionsClient();
const sessionPath = sessionClient.sessionPath(projectId, sessionId);
const request = {
session: sessionPath,
queryInput: {
event: {
name: 'custom_event',
languageCode,
parameters: {
name: 'sam',
user_name: 'sam',
a: 'saaaa'
}
}
},
queryParams: {
payload: {
data: user
}
}
};
let resultReq;
console.log('request :: ', request, '\n\n');
try {
resultReq = await sessionClient.detectIntent(request);
} catch (err) {
// eslint-disable-next-line no-console
return console.error('ERROR:', err);
}
Dialogflowのv2 APIはgRPCを使用しており、いくつかの癖があります。 Node.jsライブラリのサンプルを見ると、これを回避する方法がわかります。 JavaScriptオブジェクトをプロトタイプ構造に変換するか、単にコピーするためにjsonToStructProto
メソッドを実装する必要があります _structjson.js
_ファイル サンプル中 この要点で 。以下は、_structjson.js
_ファイルを使用した完全に機能する例です。
_// Imports the Dialogflow library
const dialogflow = require('dialogflow');
// Import the JSON to gRPC struct converter
const structjson = require('./structjson.js');
// Instantiates a sessison client
const sessionClient = new dialogflow.SessionsClient();
// The path to identify the agent that owns the created intent.
const sessionPath = sessionClient.sessionPath(projectId, sessionId);
// The text query request.
const request = {
session: sessionPath,
queryInput: {
event: {
name: eventName,
parameters: structjson.jsonToStructProto({foo: 'bar'}),
languageCode: languageCode,
},
},
};
sessionClient
.detectIntent(request)
.then(responses => {
console.log('Detected intent');
logQueryResult(sessionClient, responses[0].queryResult);
})
.catch(err => {
console.error('ERROR:', err);
});
_