kik bot 服务器接收 POST 但 bot.onTextMessage(...) 没有响应

kik bot server receiving POST but bot.onTextMessage(...) is not responding

我 运行 node.js (v5.10.1) 在 ubuntu 服务器 (14.04.4 LTS) 上。 并且已经安装了 npm (@kikinteractive/kik)。 (https://www.npmjs.com/package/@kikinteractive/kik)

这是我写的 server.js 文件:

'use strict';

const util = require('util');
const http = require('http');
const Bot  = require('@kikinteractive/kik');

const port = 80;

let bot = new Bot({
    username: 'botnamehere',
    apiKey: 'blablabla-1001-0110-1001-2112blablabla'
});

bot.onTextMessage((message)=>{
    message.reply(message.body);
});


var server = http.createServer(bot.incoming());
server.on('request', function (request, response) {
    bot.incoming();
    // I added this to write the request 
    //   so that I could verify my server was receiving from kik
    console.log(request.method);
    console.log(request.headers);
    console.log(request.url);
    var fs = require('fs');
    fs.writeFile("./logfile.log", JSON.stringify(request.headers), function(err) {
        if(err) {
            return console.log(err);
        }
        console.log("The kik request was saved!");
    }); 

});

server.listen(port);

注意:kik 配置 webhook 使用了一个 IP 地址,服务器正在侦听端口 80。

我知道我的 kik 配置似乎是正确的,因为来自 kik 应用程序的文本消息会在我的服务器上产生 POST 请求,如下所示(关键数据已被替换为已发布的问题):

{ "host": "ipaddressofhost", "x-kik-signature": "8EEBLA44C3BB9769BLAE56E7E9CBLA2BA4179445", "content-type": "application/json", "x-kik-username": "botname", "x-cloud-trace-context": "272c0f7616d6189bla9540d1e47668f5/5407793903926111947", "content-length": "307", "connection": "Keep-alive", "user-agent": "AppEngine-Google; (+http://code.google.com/appengine; appid: s~bot-dashboard)", "accept-encoding": "gzip,deflate,br" }

而且我知道我的服务器可以向 kik 发送消息,因为我已经测试了以下内容并确认了在 kik 应用程序中收到的消息:

bot.send(Bot.Message.text('What!'), 'username');

所以问题是:如果我的配置看起来正确,因为我能够在我的服务器上验证 POST,并且 kik npm 安装正确,因为我能够从我的服务器发送消息对于 kik,为什么 bot.incoming() 和 bot.onTextMessage 只是坐在那里使我的服务器成为一个又大又笨又昂贵的砖块?我错过了什么?

非常感谢任何帮助。

谢谢。

let server = http
    .createServer(bot.incoming())
    .listen(process.env.PORT || 8080);

这个有用吗?

我不确定确切的问题是什么,但它是否确实有效。

您提到为您的 webhook 使用 IP 地址。如果该 IP 是本地 IP,则 Kik API 将无法向您的服务器发送消息。

我建议在开发过程中使用 https://ngrok.com/ 之类的服务向 Kik 公开您的服务器。您所要做的就是在您的终端中 运行 ngrok start 8080,您将得到一个 URL,它将所有内容重定向到本地计算机上的 8080 端口。

检查您是否正确设置了 webhook。 在您的代码段中,您没有指定 incomingPath 选项,因此它将默认为 /incoming,因此请确保您的 webhook 设置为 http://1.2.3.5:80/incoming。所有对另一条路径的请求都将被丢弃。

否则,您可以通过

指定
let bot = new Bot({
    username: '...',
    apiKey: '...',
    incomingPath: '/yourincomingpath'
});