
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 permitir pedidos automatizados con WhatsApp y Node.js
Tiempo de lectura: 5 minutos
Los pedidos automatizados son un buen punto de partida para ofrecer a sus clientes la posibilidad de interactuar con su organización a través de WhatsApp. Si tienes una lista de productos bastante corta, completar un pedido mediante mensajes de ida y vuelta es totalmente posible. De esta manera, la gente puede hacer su pedido mientras están de pie en la cola. Y como tu sistema utiliza WhatsApp, siempre puedes aumentar el proceso de pedido con elementos como medios de comunicación o datos de ubicación que podrían aparecer de forma incoherente a través de SMS.
Para probarlo, puedes crear un servicio Node.js utilizando sandbox de WhatsApp de Vonage. En este ejemplo, imaginemos que eres una farmacia. Tus clientes pueden enviarte un mensaje para recibir una lista de sus recetas disponibles para rellenar y, a continuación, enviar un mensaje de texto con su selección para pedirla.
Requisitos previos
Una ventaja de usar Messages API Sandbox de Vonage es que no necesitas tu propia cuenta empresarial de WhatsApp para probarlo. Si tienes Node instalado y una cuenta de Vonage Developer Account, puedes empezar con un poco de instalación, copiar y pegar. Necesitarás:
Node y npm
Express y el middleware body-parser
Un dispositivo con WhatsApp, en la lista blanca del [Messages API Sandbox].
Vonage API Account
To complete this tutorial, you will need a Vonage API account. If you don’t have one already, you can sign up today and start building with free credit. Once you have an account, you can find your API Key and API Secret at the top of the Vonage API Dashboard.
Si quieres incluso menos pasos que eso, puedes remezclar el ejemplo de Glitch.
Crear una aplicación de nodo
Para empezar, cree un nuevo directorio para su aplicación y ejecute npm init para crear un directorio package.json. Instala los paquetes que vayas a utilizar con npm install express body-parser node@beta -s. Luego crea un archivo server.js y empecemos a programar.
El servidor para este ejemplo se parece mucho a un simple servidor Express.js, usando body-parserescuchando en el puerto 3000. Puedes crear puntos finales para tus webhooks y una función de ayuda que discutiremos más adelante. Aparte de eso, tu servidor no necesitará mucho:
// init server
const express = require('express');
const app = express();
const bodyParser = require('body-parser');
app.use(express.static('public'));
app.use(bodyParser.json());
// create a Nexmo client
// when someone messages the number linked to this app, this endpoint "answers"
app.post('/answer', function(req, res) {});
// this endpoint receives information about events in the app
app.post('/event', function(req, res) {});
function addOrder(customer, order) {}
app.listen(3000); Añada algunos datos de prueba
Para hacer que tu aplicación funcione, necesitarás tus credenciales de API para crear un cliente Nexmo que se conectará a la API de Vonage, y necesitarás algunos datos de prueba.
El cliente Nexmo se inicializa con su clave y secreto API, un ID de aplicación y la clave privada de la aplicación. Puede encontrar la clave y el secreto de la API en la sección Primeros pasos de su panel de control. Puede utilizar una de sus aplicaciones existentes desde la sección Tus aplicaciones o crear una nueva. La clave privada que proporcione al cliente Nexmo puede ser la propia clave o la ruta a un archivo que la contenga.
En este caso, añadirá una opción importante al cliente Nexmo, cambiando el apiHost para el sandbox. Esto le permitirá enviar mensajes al número de prueba sandbox en lugar de tener que proporcionar su propia cuenta de WhatsApp negocio:
// create a Nexmo client
const Nexmo = require('nexmo');
const nexmo = new Nexmo({
apiKey: '12ab3456',
apiSecret: '12345abcdeFGH',
applicationId: '12a34b5c-6789-0d12-34e5-6fa789bcde0f',
privateKey: __dirname + '/private.key'
}, {
apiHost: 'messages-sandbox.nexmo.com'
});No necesitas datos de prueba muy sofisticados para simular el sistema de pedido de recetas. Incluso el sistema más simple del mundo real utilizaría sin duda algún tipo de almacén de datos, pero puedes codificar algunas matrices imitando datos relacionales. Cree una matriz con los números de WhatsApp de su lista blanca y otra con algunos medicamentos. Una tercera prescriptions matriz puede mapearlos juntos, usando índices de matriz como IDs. Por último, puedes dejar una matriz vacía para los pedidos entrantes:
var customers = ['441234567890', '15121234567'];
var medications = ['paracetamol','infant paracetamol','ibuprofen','throat lozenges'];
var prescriptions = [[1,2],[0,1,3]];
var orders = []; Escuchar los mensajes
En el Mensajes API Sandbox tienes la opción de configurar algunos webhooks. Necesitará la función Entrada para que tus clientes puedan enviarte mensajes. Si aún no lo has hecho, añade un endpoint de la forma https://[YOUR-SERVER]/answer. No es esencial para este ejemplo, pero también puedes añadir un endpoint de Estado con el aspecto siguiente https://[YOUR-SERVER]/event.
Mensajes entrantes
El endpoint /answer que ya ha creado en su servidor recibirá solicitudes que contengan el número que envió el mensaje y el texto del mensaje. Declare algunas variables para almacenar estos datos, así como el índice de cliente asociado al número. También querrás una variable para el texto de respuesta.
Antes de ejecutar cualquier lógica, compruebe que la persona que le envía el mensaje es realmente su cliente. Si lo es, puedes ver si su mensaje contiene el ID de uno de los medicamentos para los que tiene receta. Si no hay ningún pedido, puedes enviarle una lista de sus medicamentos disponibles. Si no, puedes añadir el pedido a tu sistema.
Una vez configurado el texto de respuesta, puedes enviar un mensaje de WhatsApp utilizando el cliente Nexmo. Tienes que proporcionar el original from_number como el número al que enviarlo, el número sandbox como el número del que procede, y algún contenido de tipo text con tu respuesta generada.
Por último, asegúrate de acusar recibo del mensaje y termina tu respuesta:
// when someone messages the number linked to this app, this endpoint "answers"
app.post('/answer', function(req, res) {
var from_number = req.body.from.number;
var customer = customers.indexOf(from_number);
var message = req.body.message.content.text;
var reply;
if (customer > -1) {
// check to see if this is an order
var order = parseInt(message);
if (isNaN(order)) {
// if not, list available prescriptions
reply = 'Available prescriptions:\n' +
prescriptions[customer].map(p => medications[p] + ' (press ' + p + ')');
} else {
reply = addOrder(customer, order);
}
nexmo.channel.send({
type: 'whatsapp',
number: from_number
}, {
type: 'whatsapp',
number: '14151234567'
}, {
content: {
type: 'text',
text: reply
}
}, console.log);
}
res.status(204).end();
});
Mensajes de estado
El endpoint /event no hace nada en este ejemplo, pero puedes añadirlo en caso de que lo necesites más adelante. Por ahora todo lo que tiene que hacer es devolver un estado 2xx y finalizar la respuesta:
// this endpoint receives information about events in the app
app.post('/event', function(req, res) {
res.status(204).end();
}); Añadir pedidos
Dado que se utilizan matrices de datos de prueba, añadir un pedido es bastante rápido. La comprobación de errores en esta aplicación es mínima y se asume que todo ha funcionado. Así que su función addOrder es corta, pero sería más larga con un almacén de datos real.
Primero comprobarás que el cliente puede realizar el pedido. Si no, le enviarás una notificación del error. Si lo está, puedes añadir el pedido a tu array orders y generar un número de pedido que no es más que el recuento de pedidos. En este ejemplo sin florituras, el pedido simplemente aparece en la consola para que su farmacia lo prepare. La función devuelve un mensaje al cliente informándole de que se está preparando el pedido:
function addOrder(customer, order) {
if (prescriptions[customer].indexOf(order) > -1) {
orders.push({customer: customer, medication: order});
var orderNum = orders.length;
console.log('New order received: order #' + orderNum + ', ' + medications[order]);
return 'Thank you, you can pick up ' + medications[order] + ' in one hour. ' +
'Reference order number ' + orderNum + '.';
} else {
return 'You don\'t have a prescription matching that number. Please try again.';
}
}
Próximos pasos
Ahora puedes probar tu aplicación iniciando el servidor en Node con node server.js. Si envías un mensaje al número del sandbox con WhatsApp, deberías recibir como respuesta la lista de tus recetas. Si vuelves a responder con uno de los ID que te da como opción deberías recibir una confirmación.
Cuando hagas la prueba, asegúrate también de tener la consola abierta. Allí aparecerá su notificación de pedido para la farmacia.
Ahora que dispone de un sistema básico, puede, por supuesto, cambiarlo por datos reales y lógica. También puedes ir más allá del mero texto para enviar medios, información de localización u otros datos que puedan ser relevantes para tu negocio. Una vez que vea que funciona, puede solicitar un perfil empresarial de WhatsApp y llevar tu sistema de pedidos a tus clientes a través de WhatsApp.
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.
