2016-07-07 1 views
0

J'essaye de construire un bot Facebook Messenger avec Meteor. Le programme d'installation inclut la recherche du jeton de vérification et répond avec le défi envoyé dans la demande GET de vérification. Dans Facebook exemple d'application (non-Meteor), le code suivant est utilisé:Meteor Facebook Messenger Bot webhook

app.get('/webhook', function(req, res) { 
    if (req.query['hub.mode'] === 'subscribe' && 
     req.query['hub.verify_token'] === VALIDATION_TOKEN) { 
    console.log("Validating webhook"); 
    res.status(200).send(req.query['hub.challenge']); 
    } else { 
    console.error("Failed validation. Make sure the validation tokens match."); 
    res.sendStatus(403);   
    } 
}); 

Lorsque je tente d'obtenir la même fonctionnalité en utilisant le code suivant (Meteor), je reçois l'erreur ci-dessous.

var bodyParser = Meteor.npmRequire('body-parser'); 

// Add two middleware calls. The first attempting to parse the request body as 
// JSON data and the second as URL encoded data. 
Picker.middleware(bodyParser.json()); 
Picker.middleware(bodyParser.urlencoded({ extended: false })); 

// ------------------------------------------------------------ 
// HANDLE THE INITIAL HANDSHAKE WITH FACEBOOK VIA A GET REQUEST 
// ------------------------------------------------------------ 
var getRoutes = Picker.filter(function(req, res) { 
    // you can write any logic you want. 
    // but this callback does not run inside a fiber 
    // at the end, you must return either true or false 
    return req.method == "GET"; 
}); 

getRoutes.route('/webhook', function(params, req, res, next) { 
    if (params.query['hub.verify_token'] === '78750') { 
     console.log(params.query['hub.verify_token']); 
     // res.end(); 
     res.end(params.query['hub.challenge']); 
    } 
}); // end getRoutes 

Erreur:

The URL couldn't be validated. Response does not match challenge, expected value = '1127215706', received='<!DOCTYPE html> <htm... 

Peut-être ce problème est dû à son exécution sur le client plutôt que le serveur? Si oui, où dois-je mettre ce code afin qu'il puisse être exécuté sur le serveur?

En outre, ma console de navigateur a l'erreur suivante: 12 fois

Mixed Content: The page at 'https://pfbe.meteorapp.com/' was loaded over HTTPS, but requested an insecure font 'http://themes.googleusercontent.com/static/fonts/inconsolata/v5/BjAYBlHtW3CJxDcjzrnZCIbN6UDyHWBl620a-IRfuBk.woff'. This request has been blocked; the content must be served over HTTPS. 

Que puis-je faire pour résoudre ce problème?

+0

Que voulez-vous dire par _ « étant exécuté sur le client plutôt que le serveur » _? Facebook envoie la requête, donc c'est le client ici, et votre serveur est celui auquel il est envoyé. // 'received = ' ...' est assez évident - votre point de terminaison renvoie un document HTML complet (qu'il s'agisse d'un modèle par défaut, ou peut-être un document d'erreur, ne peut être dit à partir de cet extrait) valeur de défi comme il est censé. – CBroe

Répondre

0

Utilisez Restivus -Vous avez besoin de répondre dans le corps avec défi et revenir comme parsedInt