我正在将 Facebook ChatBot 更新到 DialogFlow 版本 2。我的按钮有问题,它们第一次不起作用,但如果用户发送文本消息,然后再试一次,按钮就会开始工作。我正在使用 Heroku 和 Node.js,这些是 heroku 日志的结果
这是我的函数 sendToDialogFlow
async function sendToDialogFlow(sender, textString, params) {
try {
const sessionPath = sessionClient.sessionPath(
config.GOOGLE_PROJECT_ID,
sessionIds.get(sender)
);
const request = {
session: sessionPath,
queryInput: {
text: {
text: textString,
languageCode: config.DF_LANGUAGE_CODE,
},
},
queryParams: {
payload: {
data: params
}
}
};
const responses = await sessionClient.detectIntent(request);
const result = responses[0].queryResult;
handleDialogFlowResponse(sender, result);
} catch (e) {
console.log('error');
console.log(e);
}
}
这里是 handleDialogFlowResponse 函数
function handleDialogFlowResponse(sender, response) {
let responseText = response.fulfillmentMessages.fulfillmentText;
let messages = response.fulfillmentMessages;
let action = response.action;
let contexts = response.outputContexts;
let parameters = response.parameters;
var delay = 4000;
if (isDefined(action)) {
sendTypingOn(sender);
setTimeout(function(){
sendTypingOff(sender);
handleDialogFlowAction(sender, action, messages, contexts, parameters);
},delay);
} else if (isDefined(messages) && (messages.length == 1 && messages[0].type != 0 || messages.length > 1) ) {
sendTypingOn(sender);
setTimeout(function(){
sendTypingOff(sender);
handleMessages(messages, sender);
},delay);
} else if (responseText == '' && !isDefined(action)) {
} else if (isDefined(responseText)) {
sendTypingOn(sender);
setTimeout(function(){
sendTypingOff(sender);
sendTextMessage(sender, responseText);
},delay);
}
}
谢谢
