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'
});
我 运行 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'
});