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

时间:2016-04-13 02:52:08

标签: node.js api chat chatbot kik

我在ubuntu服务器(14.04.4 LTS)上运行node.js(v5.10.1)。 并安装了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);

注意:一个IP地址用于kik配置webhook,服务器正在侦听端口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;(+ {{3 } 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只是坐在那里渲染我的服务器一个大的,愚蠢的,昂贵的砖?我错过了什么?

非常感谢任何帮助。

谢谢。

3 个答案:

答案 0 :(得分:0)

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

这有用吗?

我不确定究竟是什么问题,但如果确实有效的话。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

检查您是否正确设置了网络连接。 在您的代码段中,您未指定incomingPath选项,因此默认为/incoming,因此请确保您的webhook设置为http://1.2.3.5:80/incoming。所有对其他路径的请求都将被删除。

否则,您可以通过执行

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