2016-04-13 34 views
0

我在ubuntu服務器(14.04.4 LTS)上運行node.js(v5.10.1)。 已安裝npm(@ kikinteractive/kik)。 (https://www.npmjs.com/package/@kikinteractive/kikkik bot服務器接收POST但bot.onTextMessage(...)沒有響應

這是我寫的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配置網絡掛接一個IP地址,服務器偵聽端口80

我知道我的KIK配置似乎是正確的,因爲從KIK應用結果在我的服務器,這裏顯示POST請求的文本消息(關鍵數據已被替換爲這個貼出的問題):

{「主機」 :「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應用程序收到消息:

bot.send(Bot.Message.text( '什麼!'), '用戶名');

所以,問題是:如果我的配置似乎是正確的,因爲我能夠在我的服務器上驗證POST,並且kik npm已正確安裝,因爲我可以將消息從我的服務器發送到kik,爲什麼bot.incoming()和bot.onTextMessage只是坐在那裏呈現我的服務器一個大的,笨的,昂貴的磚塊?我錯過了什麼?

任何幫助,非常感謝。

謝謝。

+0

澄清指定:無論我在onTextMessage處理器都試過了,使用Kik的文檔提供的所有例子,任何我在其他地方發現的,沒有的server.js示例在我的服務器上按預期工作;但是當我添加console.log(請求。頭文件),我可以看到我的服務器確實收到了來自Kik的POST。什麼? – tbmac3

回答

0

檢查您是否正確設置了webhook。 在你的代碼片段中,你沒有指定incomingPath選項,所以它將默認爲/incoming,所以請確保你的webhook設置爲http://1.2.3.5:80/incoming。所有到另一個路徑的請求都將被刪除。

否則,您可以通過執行

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

incomingPath不完全是問題,但它指出了這個問題。該文檔似乎表明baseUrl是可選的,所以我將其忽略了,假設它只是默認爲正在運行的應用程序的baseUrl,而這正是我正在監聽的地方。我做了三件事:我改變了我的配置使用端口8080(這可能沒有必要,但我反正只是爲了配合他們的例子);我更新了@ kikinteractive/kik(v2.0.2)的最新版本;我設置baseUrl以匹配kik配置中的webhook作爲「h ttp:// ipaddress:8080」。現在它可以工作。謝謝! – tbmac3

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

這種工作?

我不確定確切的問題是什麼,但如果這應該肯定工作。

0

您提到使用您的webhook的IP地址。如果該IP是本地的,那麼Kik API將無法將消息發送到您的服務器。

我會建議使用像https://ngrok.com/這樣的服務在開發過程中將服務器暴露給Kik。您只需在終端中運行ngrok start 8080,您將獲得一個URL,將所有內容重定向到本地機器上的8080端口。

+0

該IP地址是公開的。我的服務器確實收到來自kik用戶的POST,但onTextMessage不會觸發對kik用戶的任何回覆。 – tbmac3