2016-04-13 13 views
0

Ich verwende node.js (v5.10.1) auf einem Ubuntu Server (14.04.4 LTS). Und die npm (@ kikinteractive/kik) wurde installiert. (https://www.npmjs.com/package/@kikinteractive/kik)kik Bot Server empfängt POST, aber bot.onTextMessage (...) antwortet nicht

Hier ist die server.js Datei, die ich geschrieben habe:

'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); 

Hinweis: Eine IP-Adresse wurde für die kik Konfiguration Webhook verwendet wird, und der Server lauscht auf Port 80

ich weiß, dass meine kik Konfiguration korrekt, da die Textnachrichten aus dem kik App Ergebnis in POST-Anfragen an meinem Server, hier gezeigt zu sein scheint (Schlüsseldaten für diese geposteten Frage ersetzt wurden):

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

Und ich weiß, dass mein Server Nachrichten an Kik senden kann, wie ich Folgendes getestet habe und bestätigte die Nachricht in der kik App erhalten:

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

die Frage ist also: Wenn meine Konfiguration richtig scheint, dass ich einen POST auf meinem Server verifizieren kann, und der kik npm korrekt installiert ist, da ich Nachrichten von meinem Server an kik senden kann, warum sitzen bot.incoming() und bot.onTextMessage gerade da und rendern meinen Server ein großer, dummer, teurer Ziegelstein? Was vermisse ich?

Jede Hilfe wird sehr geschätzt.

Vielen Dank.

+0

tun Um zu klären: Egal, was ich in der onTextMessage Handler versucht haben, alle Beispiele unter Verwendung von Kik docs zur Verfügung gestellt, und alle, die ich habe an anderer Stelle, keiner der gefunden server.js-Beispiele funktionierten wie erwartet auf meinem Server. aber wenn ich console.log (Anfrage hinzufügen.Header), kann ich sehen, dass mein Server einen POST von Kik erhält. Was in dem was? – tbmac3

Antwort

0

Überprüfen Sie, ob Sie Ihren Webhaken richtig eingestellt haben. In Ihrem Snippet geben Sie nicht die Option incomingPath an, daher wird standardmäßig /incoming angezeigt. Stellen Sie daher sicher, dass Ihr Webhook auf http://1.2.3.5:80/incoming eingestellt ist. Alle Anfragen an einen anderen Pfad werden gelöscht.

Andernfalls können Sie es an, indem

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

Der incomingPath war nicht genau das Problem, aber es hat auf das Problem hingewiesen. Die Dokumentation scheint darauf hinzuweisen, dass baseUrl optional ist, also habe ich das weggelassen, vorausgesetzt, es würde einfach auf die baseUrl der laufenden App zurückgreifen, wo ich sowieso hinhörte. Ich habe drei Dinge gemacht: Ich habe meine Konfiguration geändert, um Port 8080 zu verwenden (was wahrscheinlich nicht notwendig war, aber ich habe es trotzdem gemacht, um dem Beispiel zu entsprechen); Ich habe die neueste Version von @ kikinteractive/kik (v2.0.2) aktualisiert. und ich habe die baseUrl auf den Webhook in der kik-Konfiguration als "h ttp: // ipaddress: 8080" eingestellt. Jetzt funktioniert es. Vielen Dank! – tbmac3

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

Funktioniert das?

Ich bin mir nicht sicher, was das genaue Problem ist, aber wenn das definitiv funktionieren sollte.

0

Sie erwähnten die Verwendung einer IP-Adresse für Ihren Webhook. Wenn diese IP lokal ist, können die Kik-APIs keine Nachrichten an Ihren Server senden.

Ich würde vorschlagen, einen Dienst wie https://ngrok.com/ zu verwenden, um Ihren Server Kik während der Entwicklung verfügbar zu machen. Alles, was Sie tun müssen, ist ngrok start 8080 in Ihrem Terminal laufen und Sie erhalten eine URL, die alles auf den 8080-Port auf Ihrem lokalen Rechner umleiten wird.

+0

Die IP-Adresse ist öffentlich. Mein Server empfängt zwar den POST vom kik-Benutzer, aber die onTextMessage löst keine Antwort auf den kik-Benutzer aus. – tbmac3