
Partager:
Je suis développeur JavaScript et éducateur de développeurs chez Vonage. Au fil des ans, j'ai été très intéressé par les modèles, Node.js, les applications Web progressives et les stratégies offline-first, mais ce que j'ai toujours aimé, c'est une API utile et bien documentée. Mon objectif est de faire en sorte que votre expérience de l'utilisation de nos API soit la meilleure possible.
Comment permettre la commande automatisée avec WhatsApp et Node.js
Temps de lecture : 5 minutes
La commande automatisée est un excellent moyen de commencer à offrir à vos clients la possibilité d'interagir avec votre organisation via WhatsApp. Si votre liste de produits est relativement courte, il est tout à fait possible de passer une commande par messagerie. Les clients peuvent ainsi passer leur commande pendant qu'ils font la queue. Et comme votre système utilise WhatsApp, vous pouvez toujours compléter le processus de commande avec des éléments tels que des médias ou des données de localisation qui pourraient apparaître de manière incohérente sur les SMS.
Pour l'essayer, vous pouvez créer un service Node.js à l'aide de la sandbox WhatsApp de le bac à sable WhatsApp de Vonage. Dans cet exemple, imaginons que vous êtes une pharmacie. Vos clients peuvent vous envoyer un message pour recevoir une liste de leurs ordonnances disponibles pour un renouvellement, puis envoyer un message à la personne de leur choix pour la commander.
Conditions préalables
L'un des avantages de l'utilisation de l'API Sandbox de Messages de Vonage est que vous n'avez pas besoin de votre propre compte professionnel WhatsApp pour tester cette solution. Si vous avez installé Node et un compte Vonage Developer vous pouvez commencer avec un peu d'installation, de copier et de coller. Vous aurez besoin de :
Node et npm
Express et l'intergiciel body-parser
Un appareil équipé de WhatsApp, inscrit sur la liste blanche de [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 vous voulez encore moins d'étapes que cela, vous pouvez remixer l'exemple sur Glitch.
Créer une application Node
Pour commencer, créez un nouveau répertoire pour votre application et exécutez npm init pour créer un fichier package.json. Installez les paquets que vous utiliserez avec npm install express body-parser node@beta -s. Créez ensuite un fichier server.js et commencez à coder !
Le serveur de cet exemple ressemble beaucoup à un serveur Express.js ordinaire, utilisant body-parseret écoutant sur le port 3000. Vous pouvez créer des points de terminaison pour vos webhooks et une fonction d'aide dont nous parlerons plus bas. A part cela, votre serveur n'aura pas besoin de grand chose :
// 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); Ajouter des données de test
Pour que votre application fonctionne, vous aurez besoin de vos identifiants API pour créer un client Nexmo qui se connectera à l'API de Vonage, et vous aurez besoin de quelques données de test.
Le client Nexmo est initialisé avec votre clé API et votre secret, un identifiant d'application et la clé privée de l'application. Vous trouverez la clé et le secret de l'API sur le site Web de Nexmo. Démarrage dans votre tableau de bord. Vous pouvez utiliser l'une de vos applications existantes à partir de la page "Vos applications" du tableau de bord. Vos applications du tableau de bord, ou en créer une nouvelle. La clé privée que vous fournissez au client Nexmo peut être soit la clé elle-même, soit le chemin d'accès à un fichier qui la contient.
Dans ce cas, vous ajouterez une option importante au client Nexmo, en changeant l'option apiHost pour le bac à sable. Cela vous permettra d'envoyer des messages au numéro de test de la sandbox au lieu de devoir fournir votre propre compte professionnel WhatsApp :
// 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'
});Vous n'avez pas besoin de données de test très sophistiquées pour simuler le système de commande d'ordonnances. Même le système le plus simple du monde réel utiliserait sans aucun doute une sorte de magasin de données, mais vous pouvez coder en dur quelques tableaux imitant les données relationnelles. Créez un tableau avec vos numéros WhatsApp sur liste blanche et un autre avec certains médicaments. Une troisième prescriptions peut les mettre en correspondance, en utilisant les index des tableaux comme identifiants. Enfin, vous pouvez laisser un tableau vide pour les commandes entrantes :
var customers = ['441234567890', '15121234567'];
var medications = ['paracetamol','infant paracetamol','ibuprofen','throat lozenges'];
var prescriptions = [[1,2],[0,1,3]];
var orders = []; Écouter les messages
Dans le Messages API Sandbox vous avez la possibilité de mettre en place des webhooks. Vous aurez besoin de l'option Inbound pour que vos clients puissent vous envoyer des messages. Si vous ne l'avez pas encore fait, ajoutez un point de terminaison de la forme https://[YOUR-SERVER]/answer. Ce n'est pas essentiel pour cet exemple, mais vous pouvez également ajouter un point de terminaison de type Statut qui ressemble à https://[YOUR-SERVER]/event.
Messages entrants
Le point de terminaison /answer que vous avez déjà créé dans votre serveur recevra des requêtes contenant le numéro qui a envoyé le message et le texte du message. Déclarez quelques variables pour stocker ces informations, ainsi que l'index du client associé au numéro. Vous aurez également besoin d'une variable pour le texte de la réponse.
Avant d'exécuter une quelconque logique, vérifiez que la personne qui vous envoie un message est bien votre client. Si c'est le cas, vous pouvez vérifier si son message contient l'identifiant de l'un des médicaments pour lesquels il dispose d'une ordonnance. S'il n'y a pas d'ordonnance, vous pouvez lui envoyer une liste des médicaments disponibles. Dans le cas contraire, vous pouvez ajouter la commande à votre système.
Une fois votre texte de réponse défini, vous pouvez envoyer un message WhatsApp à l'aide du client Nexmo. Vous devez fournir l'original from_number en tant que numéro auquel l'envoyer, le numéro de la sandbox en tant que numéro d'origine, et un contenu de type text avec votre réponse générée.
Enfin, n'oubliez pas d'accuser réception du message et de terminer votre réponse :
// 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();
});
Messages d'état
Le point d'arrivée /event ne fait rien dans cet exemple, mais vous pouvez l'ajouter au cas où vous en auriez besoin ultérieurement. Pour l'instant, tout ce qu'il doit faire, c'est renvoyer un 2xx et mettre fin à la réponse :
// this endpoint receives information about events in the app
app.post('/event', function(req, res) {
res.status(204).end();
}); Ajouter des commandes
Comme vous utilisez des tableaux de données de test, l'ajout d'une commande est assez rapide. La vérification des erreurs est minimale dans cette application et l'on suppose que tout a fonctionné. Ainsi, votre fonction addOrder est donc courte, mais elle serait plus longue avec un vrai magasin de données.
Vous vérifiez d'abord que le client est autorisé à passer la commande. Si ce n'est pas le cas, vous lui enverrez une notification d'erreur. S'il est autorisé, vous pouvez ajouter la commande à votre tableau orders et générer un numéro de commande qui n'est autre que le nombre de commandes. Dans cet exemple sans fioritures, la commande apparaît simplement dans la console pour que votre pharmacie la prépare. La fonction renvoie un message au client pour l'informer que la commande est en cours de préparation :
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.';
}
}
Prochaines étapes
Vous pouvez maintenant tester votre application en démarrant le serveur dans Node avec node server.js. Si vous envoyez un message au numéro de la sandbox avec WhatsApp, vous devriez recevoir la liste de vos ordonnances en réponse. Si vous répondez à nouveau avec l'un des identifiants proposés, vous devriez recevoir une confirmation.
Lorsque vous testez, veillez à ce que la console soit également ouverte. Votre notification de commande du côté de la pharmacie y apparaîtra.
Maintenant que vous disposez d'un système de base, vous pouvez bien sûr le remplacer par des données et une logique réelles. Vous pouvez également aller au-delà du simple texte et envoyer des médias, des informations de localisation ou d'autres données pertinentes pour votre entreprise. Une fois que vous aurez constaté que votre système fonctionne, vous pourrez demander un profil d'entreprise WhatsApp et proposer votre système de commande en direct à vos clients sur WhatsApp.
Partager:
Je suis développeur JavaScript et éducateur de développeurs chez Vonage. Au fil des ans, j'ai été très intéressé par les modèles, Node.js, les applications Web progressives et les stratégies offline-first, mais ce que j'ai toujours aimé, c'est une API utile et bien documentée. Mon objectif est de faire en sorte que votre expérience de l'utilisation de nos API soit la meilleure possible.
