使用来自 webview 的数据发送 Messenger 聊天机器人消息

时间:2021-06-15 23:58:41

标签: facebook-messenger facebook-sdk-4.0 facebook-chatbot facebook-webhooks

我目前为预订餐厅餐桌创建了一个聊天机器人。我的问题是在提交 webview 表单后,我无法为用户发回消息(消息包含从 webview 输入的数据)。每当我提交表单时,日志发送如下,但在 Messenger 上没有发送消息。

2021-06-15T23:36:37.504744+00:00 app[web.1]: message sent!
2021-06-15T23:36:39.038022+00:00 heroku[router]: at=info method=POST path="/post-reserve" host=fb-appointment.herokuapp.com request_id=3934228c-ed83-4349-a2e9-02ac73ceb958 fwd="171.224.179.85" dyno=web.1 connect=933ms service=7387ms status=200 bytes=223 protocol=https
2021-06-15T23:36:40.585283+00:00 app[web.1]: message sent!

这一刻,我不知道我哪里错了。这是我的代码:

  • 发布 webview 表单数据的路由
app.post('/post-reserve',  webhookController.handlePostReserveService);
  • handlePostReserveService() 函数:
let handlePostReserveService = async (req, res) => {
  try {
    let response1 = {
      text: "Thanks for your reserve! We will contact soon.",
    };
    let response2 = {
      text: `---Reserve information---
          \nCustomer name: ${req.body.customerName},
          \nPhone number: ${req.body.phoneNumber},
          \nReserve date: ${req.body.reserveDate},
          \nReserve time: ${req.body.reserveTime},
          \nPeople number: ${req.body.peopleNumber}.
          `,
    };

    await chatBotService.callSendAPI(req.body.psid, response1);
    await chatBotService.callSendAPI(req.body.psid, response2);
    return res.status(200).json({
      message: "ok",
    });
  } catch (e) {
    return res.status(500).json({
      message: "Error server resevre",
    });
  }
};
  • 用于提交 webview 表单的 javascript 文件:
// Include the Messenger Extensions JS SDK 
(function (d, s, id) {
  var js,
    fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) {
    return;
  }
  js = d.createElement(s);
  js.id = id;
  js.src = "//connect.facebook.net/en_US/messenger.Extensions.js";
  fjs.parentNode.insertBefore(js, fjs);
})(document, "script", "Messenger");

window.extAsyncInit = function () {
  // the Messenger Extensions JS SDK is done loading

  MessengerExtensions.getContext(
    "AppID",
    function success(thread_context) {
      // success
      //set psid to input
      $("#psid").val(thread_context.psid);
      handleClickButtonReserve();
    },
    function error(err) {
      // error
      console.log("Reserve error:", err);
    }
  );
};

function handleClickButtonReserve() {
  $("#btnReserve").on("click", function (e) {
    let check = validateInputFields();
    let data = {
      psid: $("#psid").val(),
      customerName: $("#customerName").val(),
      phoneNumber: $("#phoneNumber").val(),
      reserveDate: $("#reserveDate").val(),
      reserveTime: $("#reserveTime").val(),
      peopleNumber: $("#peopleNumber").val(),
      // service: $("#service").val()
    };

    if (!check) {
      //close webview
      MessengerExtensions.requestCloseBrowser(
        function success() {
          // webview closed
        },
        function error(err) {
          // an error occurred
          console.log(err);
        }
      );

      //send data to node.js server
      $.ajax({
        url: `${window.location.origin}/post-reserve`,
        method: "POST",
        data: data,
        success: function (data) {
          console.log(data);
        },
        error: function (error) {
          console.log(error);
        },
      });
    }
  });
}

0 个答案:

没有答案