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

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

我目前为预订餐厅餐桌创建了一个聊天机器人。我的问题是在提交 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);
        },});
    }
  });
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?