我在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只是坐在那里渲染我的服务器一个大的,愚蠢的,昂贵的砖?我错过了什么?
非常感谢任何帮助。
谢谢。
答案 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'
});