【问题标题】:Facebook messenger bot error Unexpected token ' in JSON at position 0Facebook Messenger bot错误意外的令牌'在JSON中的位置0
【发布时间】:2018-08-08 19:44:10
【问题描述】:

我正在尝试使用 NodeJS 和 Express 创建一个 Facebook Messenger 机器人。

我正在关注facebook guide,当我尝试运行此命令时

curl -H "Content-Type: application/json" -X POST "localhost:4000/" -d '{"object": "page", "entry": [{"messaging": [{"message": "TEST_MESSAGE"}]}]}'

我收到此错误SyntaxError: Unexpected token ' in JSON at position 0

这是我的代码:

    var express = require('express');
    var bodyParser = require('body-parser');
    var request = require("request")

    var app = express();
    var port = process.env.PORT || 4000;

    app.use(bodyParser.json());
    app.use(bodyParser.urlencoded({ extended: true }));

    app.get('/', function(req, res) {
        if (req.query['hub.verify_token'] === '22222') {
            res.send(req.query['hub.challenge']);
            console.log("GET")
            res.sendStatus(200)
        }

        console.log("Error: wrong token")
    })

    app.post('/', function(req, res) {
        messaging_events = req.body.entry[0].messaging;
        console.log("post")
        for (i = 0; i < messaging_events.length; i++) {
            event = req.body.entry[0].messaging[i];
            sender = event.sender.id;
            if (event.message && event.message.text) {
                text = event.message.text;
                sendTextMessage(sender, "Text received, echo: " + text.substring(0, 200));
            }
        }
        res.sendStatus(200);
    });

    app.listen(port, function() {
        console.log('Listening on port ' + port);
    });

    var token = "<token>";

    function sendTextMessage(sender, text) {
        messageData = {
            text: text
        }
        request({
            url: 'https://graph.facebook.com/v2.6/me/messages',
            qs: { access_token: token },
            method: 'POST',
            json: {
                recipient: { id: sender },
                message: messageData,
            }
        }, function(error, response, body) {
            if (error) {
                console.log('Error sending message: ', error);
            } else if (response.body.error) {
                console.log('Error: ', response.body.error);
            }
        });
    }

我忽略了这个错误并启动了机器人。我通过 ngrok 连接的 Webhooks。我确定在 Facebook 上我设置了一切正确。但我没有收到从 facebook 发送到我的 webhook 的消息信息。]

编辑:'{"object": "page", "entry": [{"messaging": [{"message": "TEST_MESSAGE"}]}]}'这是错误行

【问题讨论】:

  • 您是否也获得了关于错误发生位置的行号?
  • 尝试使用 messenger-bot npm 包
  • @EdwinBabu 我尝试了很多包,但没有不起作用
  • 我测试了代码并且它对我来说正常工作。
  • @EdwinBabu 你能告诉我你是如何在 facebook 上设置 Messenger 的吗?

标签: node.js facebook facebook-messenger-bot


【解决方案1】:

尝试:

curl -H "Content-Type: application/json" -X POST "localhost:4000/" -d "{""object"": ""page"", ""entry"": [{""messaging"": [{""message"": ""TEST_MESSAGE""}]}]}"

【讨论】:

  • 提供一些解释。
  • 在windows命令提示符下,我们使用"来引用字符串而不是',并使用双引号""来转义",至少我遇到了同样的问题但是通过这种方式解决了
  • @ZephyrLee 我遇到了一段时间的麻烦,然后我设法找到了这个问题。谢谢,对引号的更改也适用于本教程的更新版本。 developers.facebook.com/docs/messenger-platform/getting-started/…
【解决方案2】:

试试这个:

curl -H "Content-Type: application/json" -X POST "localhost:4000/webhook" -d "{\"object\": \"page\", \"entry\": [{\"messaging\": [{\"message\":\"TEST_MESSAGE\"}]}]}"

使用 \" 因为 json 解析器需要双引号 (" ") 来进行 json 解析这里我们传递
单引号(' ') 这就是解析器无法解析我们传递的 json 的原因

"{\"object\": \"page\", \"entry\": [{\"messaging\": [{\"message\":\"TEST_MESSAGE\"}]}]}"

检查一下,这会起作用。

谢谢

【讨论】:

    猜你喜欢
    • 2016-12-13
    • 2022-07-11
    • 2020-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-20
    • 2020-02-05
    • 2021-09-12
    相关资源
    最近更新 更多