2016-04-13 1 views
0

Je lance node.js (v5.10.1) sur un serveur ubuntu (14.04.4 LTS). Et le npm (@ kikinteractive/kik) a été installé. (https://www.npmjs.com/package/@kikinteractive/kik)Le serveur bot kik recevant le POST mais bot.onTextMessage (...) ne répond pas

Voici le fichier server.js je l'ai écrit:

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

Note: Une adresse IP a été utilisée pour la configuration de kik webhook, et le serveur est à l'écoute sur le port 80.

Je sais que ma configuration Kik semble être correct que les messages texte à partir du résultat de l'application de kik dans les requêtes POST à ​​mon serveur, ici (données clés a été remplacé pour cette question posée):

{ « host » : "ipaddressofhost", "x-kik-signature": "8EEBLA44C3BB9769BLAE56E7E9CBLA2BA4179445", "type-de-contenu": "application/json", "nom-utilisateur-kik": "nom-bot", "x-cloud-trace-context" : "272c0f7616d6189bla9540d1e47668f5/5407793903926111947", "contenu-longueur": "307", "connexion": "Keep-alive", "user-agent": "AppEngine-Google; (+ http://code.google.com/appengine; appid: s ~ bot-dashboard) "," accept-encoding ":" gzip, deflate, br "}

Et je sais que mon serveur peut envoyer des messages à kik, comme j'ai testé ce qui suit et a confirmé le message reçu dans l'application Kik:

bot.send (Bot.Message.text ('Quoi!'), 'nom d'utilisateur');

la question est la suivante: Si ma configuration semble correcte, en ce que je suis en mesure de vérifier un POST sur mon serveur, et le kik npm est installé correctement que je suis capable d'envoyer des messages de mon serveur à kik, pourquoi bot.incoming() et bot.onTextMessage juste assis là rendant mon serveur une grosse brique, bête, chère? Que manque-t-elle?

Toute aide est grandement appréciée.

Merci.

+0

Pour clarifier: Peu importe ce que j'ai essayé dans le gestionnaire onTextMessage, en utilisant tous les exemples fournis par Kik docs, et tout ce que je ne trouve ailleurs, aucun des Les exemples server.js ont fonctionné comme prévu sur mon serveur; mais quand j'ajoute console.log (demande.en-têtes), je peux voir que mon serveur reçoit un POST de Kik. Quoi dans le quoi? – tbmac3

Répondre

0

Vérifiez que vous avez correctement défini votre webhook. Dans votre extrait, vous ne spécifiez pas l'option incomingPath. Par défaut, il sera /incoming. Assurez-vous que votre webhook est défini sur http://1.2.3.5:80/incoming. Toutes les demandes à un autre chemin seront supprimées.

Sinon, vous pouvez le spécifier en faisant

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

Le paramètre incomingPath n'était pas exactement le problème, mais il a signalé le problème. La documentation semble indiquer que baseUrl est optionnel, donc je l'ai laissé de côté, en supposant qu'il serait simplement par défaut à la baseUrl de l'application en cours d'exécution, qui est où j'écoutais quand même. J'ai fait trois choses: j'ai changé ma configuration pour utiliser le port 8080 (ce qui n'était probablement pas nécessaire mais je l'ai fait de toute façon juste pour correspondre à leur exemple); J'ai mis à jour la dernière version de @ kikinteractive/kik (v2.0.2); et j'ai mis le baseUrl pour faire correspondre le webhook dans la configuration de kik comme "h ttp: // ipaddress: 8080". Maintenant ça marche. Merci! – tbmac3

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

Est-ce que cela fonctionne?

Je ne sais pas exactement quel est le problème mais si cela devrait fonctionner.

0

Vous avez mentionné l'utilisation d'une adresse IP pour votre webhook. Si cette adresse IP est locale, les API Kik ne pourront pas envoyer de messages à votre serveur.

Je suggère d'utiliser un service comme https://ngrok.com/ pour exposer votre serveur à Kik pendant le développement. Tout ce que vous avez à faire est d'exécuter ngrok start 8080 dans votre terminal et vous obtiendrez une URL qui redirigera tout vers le port 8080 sur votre machine locale.

+0

L'adresse IP est publique. Mon serveur reçoit le POST de l'utilisateur kik, mais onTextMessage ne déclenche aucune réponse à l'utilisateur kik. – tbmac3