Ausgabe
Dies ist das erste Mal, dass ich die Frage poste. Bitte geben Sie Feedback, um die Frage zu verbessern.
Der Facebook-Webhook erwähnt, dass der Endpunkt zuerst verifiziert werden sollte, bevor der Webhook-Endpunkt Ereignisbenachrichtigungen empfangen kann.
Die Dokumentation für Verification Request stellt keine Antwortstruktur für die API bereit. Es sagt uns einfach, dass wir den hub.challenge-Parameter zurücksenden sollen.
Da ich NodeJS verwende, versuche ich es mit dem folgenden Code. Der Webhook vom Facebook-Dashboard wird jedoch nicht überprüft.
Wie sollen wir die Antwort an die Überprüfung des Webhook zurücksenden?
app.get('/webhook', (req, res) => {
const challenge = req.query['hub.challenge'];
const verify_token = req.query['hub.verify_token'];
if (verify_token === process.env.FACEBOOK_VERIFICATION_TOKEN) {
return res.status(200).send({message: "Success", challenge: challenge});
}
return res.status(400).send({message: "Bad request!"});
})
Lösung
Der Verifizierungsendpunkt von Facebook erfordert, dass der Inhaltstyp der Antwort text/html
. Dies wird in den Dokumenten nicht erwähnt; sie hätten eine Struktur bereitstellen sollen. Sie können den Header so einstellen, dass er text/html
explizit verwendet wird.
Wenn Sie jedoch Express verwenden, können Sie direkt nur den Challenge-Wert zurückgeben.
app.get('/webhook', (req, res) => {
const challenge = req.query['hub.challenge'];
const verify_token = req.query['hub.verify_token'];
if (verify_token === process.env.FACEBOOK_VERIFICATION_TOKEN) {
return res.status(200).send(challenge); // Just the challenge
}
return res.status(400).send({message: "Bad request!"});
})
Wenn Sie das Fastify-Set verwenden:
res.header('Content-Type', 'text/html; charset=utf-8');
return res.send('' + challenge);
Beantwortet von – LEXTRA33
Antwort geprüft von – Cary Denson (FixError Admin)