3

我正在将 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);
  }
  }

谢谢

4

0 回答 0