
Compartilhar:
Sou desenvolvedor de JavaScript e instrutor de desenvolvimento na Vonage. Ao longo dos anos, tenho me interessado muito por modelos, Node.js, aplicativos web progressivos e estratégias “offline-first”, mas o que sempre adorei de verdade é uma API útil e bem documentada. Meu objetivo é tornar a sua experiência com nossas APIs a melhor possível.
Como habilitar pedidos automatizados com o WhatsApp e o Node.js
Tempo de leitura: 5 minutos
Os pedidos automatizados são um ótimo ponto de partida para oferecer aos seus clientes a possibilidade de interagir com a sua empresa por meio do WhatsApp. Se você tiver uma lista relativamente curta de produtos, é perfeitamente possível concluir um pedido por meio de troca de mensagens. Dessa forma, as pessoas podem fazer seus pedidos enquanto estão na fila. E, como seu sistema usa o WhatsApp, você sempre pode aprimorar o processo de pedidos com recursos como mídia ou dados de localização, que podem não funcionar de maneira consistente por SMS.
Para testar, você pode criar um serviço em Node.js usando a sandbox do WhatsApp da Vonage. Neste exemplo, vamos supor que você seja uma farmácia. Seus clientes podem enviar uma mensagem para receber uma lista de suas receitas médicas disponíveis para renovação e, em seguida, enviar uma mensagem de texto com a seleção para fazer o pedido.
Pré-requisitos
Uma vantagem de usar o Sandbox da Messages API da Vonage é que você não precisa ter sua própria conta comercial do WhatsApp para testar isso. Se você tiver o Node instalado e um conta de desenvolvedor da Vonage , você pode começar com algumas etapas de instalação, cópia e colagem. Você precisará de:
Node e npm
Express e o middleware body-parser
Um dispositivo com o WhatsApp, incluído na lista de permissões da [Sandbox da Messages API]
Se você quiser ainda menos etapas do que isso, pode remixar o exemplo no Glitch.
Criar um aplicativo Node
Para começar, crie um novo diretório para seu aplicativo e execute npm init para criar um package.json. Instale os pacotes que você usará com npm install express body-parser node@beta -s. Em seguida, crie um server.js arquivo e vamos começar a programar!
O servidor deste exemplo se parece bastante com um servidor Express.js básico, que usa body-parser, e escutando na porta 3000. Você pode simular endpoints para seus webhooks e uma função auxiliar que discutiremos a seguir. Fora isso, seu servidor não precisará de muito mais:
// 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); Adicionar alguns dados de teste
Para que seu aplicativo funcione, você precisará de suas credenciais de API para criar um cliente Nexmo que se conectará à API da Vonage, além de alguns dados de teste.
O cliente Nexmo é inicializado com sua chave e segredo de API, um ID de aplicativo e a chave privada do aplicativo. Você pode encontrar a chave e o segredo de API na página “Introdução” no seu painel de controle. Você pode usar um dos seus aplicativos existentes na seção Seus aplicativos do painel, ou criar uma nova ali mesmo. A chave privada que você fornece ao cliente Nexmo pode ser a própria chave ou o caminho para um arquivo que a contenha.
Nesse caso, você adicionará uma opção importante ao cliente Nexmo, alterando o apiHost para o ambiente de teste. Isso permitirá que você envie mensagens para o número de teste do ambiente de teste, em vez de precisar fornecer sua própria conta comercial do 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'
});Você não precisa de dados de teste muito sofisticados para simular o sistema de pedidos de receitas médicas. Mesmo o sistema mais simples do mundo real, sem dúvida, usaria algum tipo de banco de dados, mas você pode codificar diretamente alguns arrays que imitem dados relacionais. Crie um array com os números do WhatsApp da sua lista de permissões e outro com alguns medicamentos. Uma terceira prescriptions matriz pode mapeá-los, usando os índices das matrizes como IDs. Por fim, você pode deixar uma matriz vazia para os pedidos recebidos:
var customers = ['441234567890', '15121234567'];
var medications = ['paracetamol','infant paracetamol','ibuprofen','throat lozenges'];
var prescriptions = [[1,2],[0,1,3]];
var orders = []; Fique atento às mensagens
No Sandbox da Messages API , você tem a opção de configurar alguns webhooks. Você precisará do webhook de entrada para que seus clientes possam enviar mensagens para você. Se ainda não tiver feito isso, adicione um endpoint no formato https://[YOUR-SERVER]/answer. Não é essencial para este exemplo, mas você também pode adicionar um ponto de extremidade que tenha a seguinte forma https://[YOUR-SERVER]/event.
Mensagens recebidas
O /answer endpoint que você já criou no seu servidor receberá solicitações contendo o número que enviou a mensagem e o texto da mensagem. Declare algumas variáveis para armazenar esses dados, bem como o índice do cliente associado ao número. Você também precisará de uma variável para o texto da sua resposta.
Antes de executar qualquer lógica, verifique se a pessoa que está enviando a mensagem é realmente seu cliente. Se for o caso, você pode verificar se a mensagem contém o código de identificação de um dos medicamentos para os quais ela possui receita médica. Se não houver nenhum pedido, você pode enviar a ela uma lista dos medicamentos disponíveis. Caso contrário, você pode adicionar o pedido ao seu sistema.
Depois de definir o texto da resposta, você pode enviar uma mensagem pelo WhatsApp usando o cliente Nexmo. É preciso informar o número original from_number como destinatário, o número da sandbox como remetente e algum conteúdo do tipo text com sua resposta gerada.
Por fim, certifique-se de confirmar o recebimento da mensagem e encerrar sua resposta:
// 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();
});
Mensagens de status
O /event endpoint não faz nada neste exemplo, mas você pode adicioná-lo caso precise dele mais adiante. Por enquanto, tudo o que ele precisa fazer é retornar um 2xx status e encerrar a resposta:
// this endpoint receives information about events in the app
app.post('/event', function(req, res) {
res.status(204).end();
}); Adicionar pedidos
Como você está usando matrizes de dados de teste, adicionar um pedido é bem rápido. Há uma verificação mínima de erros neste aplicativo, e simplesmente se presume que tudo funcionou. Portanto, sua addOrder função é curta, mas seria mais longa com um banco de dados real.
Primeiro, você verificará se o cliente está autorizado a fazer o pedido. Caso contrário, você enviará a ele uma notificação do erro. Se estiver autorizado, você poderá adicionar o pedido ao seu orders matriz e gerar um número de pedido que corresponde simplesmente ao número de pedidos. Neste exemplo simples, o pedido simplesmente aparece no console para que sua farmácia o prepare. A função retorna uma mensagem para o cliente informando que o pedido está sendo preparado:
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 passos
Agora você pode testar seu aplicativo iniciando o servidor no Node com node server.js. Se você enviar uma mensagem para o número da sandbox pelo WhatsApp, deverá receber a lista das suas prescrições como resposta. Se você responder novamente com um dos IDs que ele oferece como opção, deverá receber uma confirmação.
Ao fazer o teste, certifique-se também de ter o console aberto. A notificação do seu pedido, referente à parte da farmácia, aparecerá lá.
Agora que você já tem um sistema básico, é claro que pode substituí-lo por dados e lógica reais. Você também pode ir além do texto para enviar arquivos de mídia, informações de localização ou outros dados que possam ser relevantes para o seu negócio. Assim que verificar que está funcionando, você pode se inscrever para um perfil comercial no WhatsApp e disponibilizar seu sistema de pedidos para seus clientes no WhatsApp.
Compartilhar:
Sou desenvolvedor de JavaScript e instrutor de desenvolvimento na Vonage. Ao longo dos anos, tenho me interessado muito por modelos, Node.js, aplicativos web progressivos e estratégias “offline-first”, mas o que sempre adorei de verdade é uma API útil e bem documentada. Meu objetivo é tornar a sua experiência com nossas APIs a melhor possível.