
Compartir:
Soy desarrollador de JavaScript y educador de desarrolladores en Vonage. A lo largo de los años me han entusiasmado las plantillas, Node.js, las aplicaciones web progresivas y las estrategias offline-first, pero lo que siempre me ha encantado es una API útil y bien documentada. Mi objetivo es hacer que tu experiencia usando nuestras APIs sea la mejor posible.
Cómo enviar un mensaje de Facebook Messenger con Node.js
Tiempo de lectura: 3 minutos
Con Facebook Messenger, las personas conectadas a tu organización en Facebook pueden acceder a útiles servicios automatizados. Puedes tomar pedidos, proporcionar actualizaciones o responder preguntas. Si es la primera vez que te comunicas de esta manera o has confiado exclusivamente en Facebook para tu presencia en la web hasta ahora, es posible que desees probarlo primero usando Vonage Messages API Sandbox de Vonage.
Requisitos previos
En este ejemplo, configurará un servicio rápido para responder a los mensajes de Messenger con una recomendación de qué almorzar. Messenger es un poco inusual en el sentido de que tu cliente tiene que iniciar la conversación contigo antes de que puedas enviarle un mensaje. Por lo tanto, no podemos probarlo simplemente enviando un mensaje, primero tenemos que escuchar un mensaje recibido. Para hacer eso, necesitaremos un servidor Node además de los prerrequisitos generales para usar el sandbox:
Node y npm
A Desarrollador de Vonage Account
Una lista blanca de Messenger para probarlo
Express.js y el body-parser middleware
axios para enviar mensajes
Para recibir mensajes, su servidor deberá estar disponible públicamente. Puede hacerlo en su máquina de desarrollo con ngroko utilizar Glitch como he hecho con el código de ejemplo.
Crear un servidor
Cree un nuevo server.js en su directorio de trabajo. Tu servidor se parecerá mucho a la mayoría de los servidores Express mínimos. Requerirás el paquete y obtendrás una instancia, y también requerirás body-parser y axios. Luego configurarás el middleware y escucharás en el puerto 3000 al final.
El propósito del servidor aquí es proporcionar puntos finales para sus webhooks. También puedes añadirlos: uno para los mensajes entrantes y otro para los estados. Por ahora, sólo pueden responder con una confirmación de que la solicitud llegó a su destino:
const express = require('express');
const app = express();
const bodyParser = require('body-parser');
const axios = require('axios');
app.use(bodyParser.json());
// when someone messages the number linked to this app, this endpoint "answers"
app.post('/answer', function(req, res) {
res.status(204).end();
});
// this endpoint receives information about events in the app
app.post('/event', function(req, res) {
res.status(204).end();
});
app.listen(3000);Nota: No olvides configurar los puntos finales de tu webhook en tu panel de control. Puede configurar ambos en el Mensajes API Sandbox. Para este ejemplo, deberían ser peticiones POST del tipo https://YOUR-SERVER/answer y https://YOUR-SERVER/event.
Añadir algunos datos
Para enviar mensajes, necesitarás tus credenciales de API y el ID del Messenger sandbox desde el que enviar el mensaje. Puedes obtener todos esos valores del comando cURL en la página página del sandbox. Como vas a enviar sugerencias de almuerzos, también puedes crear una matriz de diez almuerzos para los datos de prueba.
No verás el ID de Messenger de tu usuario final hasta que te haya enviado un mensaje. Una vez que su /answer recibe una solicitud, puede obtener el from_id del cuerpo de la solicitud. Puedes guardarlo para utilizarlo como ID "para" en tu mensaje:
var user = '12ab3456';
var password = '123AbcdefghIJklM';
var my_id = '123456789012345';
var lunches = ['bbq','teriyaki','salad','a bagel','curry','dumplings','tacos','a sub','bibimbap','pizza'];
// when someone messages the number linked to this app, this endpoint "answers"
app.post('/answer', function(req, res) {
var from_id = req.body.from.id;
res.status(204).end();
}); Responder a los mensajes entrantes
Ahora tienes todas las piezas en su lugar para construir una respuesta a tu usuario. Para este ejemplo puntual puedes usar axios para hacer la petición. Le proporcionarás la URL del sandbox, un objeto de datos y tu clave y contraseña de la API. El objeto de datos contiene el ID del sandbox desde el que enviar el mensaje, el ID del usuario almacenado al que enviarlo, y algún texto que contenga una sugerencia de comida aleatoria.
Después de enviar la solicitud, puede esperar una respuesta o algún error. En circunstancias ideales, no verás nada allí aparte de la confirmación de lo que enviaste:
// when someone messages the number linked to this app, this endpoint "answers"
app.post('/answer', function(req, res) {
var from_id = req.body.from.id;
axios.post('https://messages-sandbox.nexmo.com/v0.1/messages',{
"from": { "type": 'messenger', "id": my_id },
"to": { "type": 'messenger', "id": from_id },
"message": {
"content": {
"type": 'text',
"text": 'You should have ' +
lunches[Math.floor(Math.random() * 10)] + ' for lunch.'
}
}
},{
auth: {
username: user,
password: password
}
})
.then(function (response) {
console.log('Status: ' + response.status);
console.log(response.data);
})
.catch(function (error) {
console.error(error);
});
res.status(204).end();
}); Pruébelo
Inicie su servidor con node server.js si aún no se está ejecutando. Desde tu cliente de Messenger de la lista blanca, envía un mensaje a la cuenta del sandbox de Vonage. (No importa lo que diga.) Deberías recibir un mensaje de vuelta, y las confirmaciones en tu consola.
Messenger Sandbox
Ahora que ha visto cómo comunicaciones con Messenger puedes comenzar a incorporarlas en tus aplicaciones del mundo real. Puedes usar el Sandbox de Messages API de Vonage para el desarrollo con el SDK de Vonage Node.js. Cuando estés listo, puedes conectar tu propia página de Facebook y comenzar a usarla.
Ver y remezclar el ejemplo en Glitch para ver todo el código junto.
Compartir:
Soy desarrollador de JavaScript y educador de desarrolladores en Vonage. A lo largo de los años me han entusiasmado las plantillas, Node.js, las aplicaciones web progresivas y las estrategias offline-first, pero lo que siempre me ha encantado es una API útil y bien documentada. Mi objetivo es hacer que tu experiencia usando nuestras APIs sea la mejor posible.