
Compartilhar:
Software Developer who loves building awesome tools and products. I currently work with Laravel, PHP and Vue.
Crie um bot de conversão de moedas para o WhatsApp com Node.js
Tempo de leitura: 8 minutos
Neste tutorial, veremos como criar um bot simples para o WhatsApp usando Node.js e Vonage. O bot será responsável por converter qualquer quantidade de unidades em uma moeda base para o valor equivalente na moeda preferida.
O bot será desenvolvido utilizando a Messages API da Vonage, juntamente com Express, o framework do Node.
Aqui está um exemplo de uma conversa minha com o bot:

Pré-requisitos
Ngrok que permite expor seu servidor web local à internet. Para saber mais sobre como configurar seu ambiente local com o Ngrok, você pode consultar nossa documentação.
Crie um account comercial do WhatsApp ou configure o ambiente de testes da Messages API, como faremos neste tutorial, para colocar os números na lista de permissões.
Configure seu aplicativo
Comece clonando o repositório para o seu computador: https://github.com/Dotunj/vonage-whatsapp-bot.
Em seguida cd para o diretório do projeto e execute o seguinte comando para instalar as dependências do projeto:
Criação do bot
Sempre que nosso bot receber uma mensagem no WhatsApp, a Vonage enviará uma solicitação HTTP POST para um endpoint. A solicitação conterá o conteúdo da mensagem.
app.post("/webhooks/inbound-message", (req, res) => {
eventEmitter.emit("inbound-message", req.body);
return res.send("Received Webhook successfully");
});
Acima, definimos uma rota em /webhooks/inbound-message que emite o inbound-message evento usando o módulo Event do Node.js e, em seguida, retorna uma resposta 200 para a Vonage.
O módulo Event do Node.js inclui a EventEmitter classe que é usada para gerar e tratar eventos. Você pode saber mais sobre como tratar e despachar eventos no Node.js aqui.
eventEmitter.on("inbound-message", (body) => {
performCurrencyConversion(body).catch((err) => console.log(err));
});
Sempre que o inbound-message evento é emitido, o eventEmitter.on() método também é acionado. Essa função registra uma função ouvinte, que simplesmente invoca o performCurrencyConversion() método, passando a carga útil da mensagem.
function standardResponse() {
let response = "Welcome to the WhatsApp Bot For Currency Conversion \n";
response += "Please use the following format to chat with the Bot \n";
response += "Convert 5 USD to CAD \n";
response +=
"Where 5 is the number of units to convert, USD is the base currency and CAD is the currency you would like to convert to.";
return response;
}A standardResponse função é uma resposta genérica que informa ao usuário como se comunicar com o bot.
O performCurrencyConversion() método é responsável por decifrar o conteúdo da mensagem enviada ao bot e enviar uma resposta de volta ao usuário.
O conteúdo da mensagem recebida é convertido em uma matriz usando split(). De acordo com o formato de mensagens combinado, o número de itens contidos na matriz deve ser 5.
Se, após o conteúdo da mensagem ter sido dividido em um array, o número de itens contidos nesse array for inferior a 5, uma resposta padrão é enviada ao usuário, informando-o sobre como utilizar o bot.
Se a verificação do comprimento do conteúdo da mensagem for bem-sucedida, podemos agora presumir com segurança que os itens contidos nos índices 1º, 2º e 4º da matriz serão as unidades, a moeda base e a moeda para a qual você deseja converter.
Conversão com a Coinbase
Agora que temos a moeda de base e a moeda para a qual você está convertendo, podemos verificar se esses códigos de moeda são válidos e se são suportados pela Coinbase.
A API da Coinbase oferece pontos de interface para lidar com moedas e taxas de câmbio. Você pode ler mais sobre a API da Coinbase aqui.
async function getCurrencyCode(baseCurrency, toCurrency) {
try {
const currency = await axios.get(`${coinbaseUrl}/currencies`);
const currencyCode = currency.data.data;
const isSupportedCurrencyCodes = currencyCode.filter(
(c) => c.id === baseCurrency || c.id === toCurrency
);
if (isSupportedCurrencyCodes.length < 2) return;
return isSupportedCurrencyCodes;
} catch (error) {
console.error(error);
}
}
É aqui que entra a getCurrencyCode() função entra em ação.
Ele aceita o baseCurrency juntamente com o toCurrency e, em seguida, faz uma chamada de API para https://api.coinbase.com/v2/currencies para obter uma lista de todas as moedas suportadas. Em seguida, é realizada uma verificação para garantir que tanto o baseCurrency e o toCurrency estejam presentes na lista de moedas suportadas.
Se nenhum deles ou ambos não forem encontrados, é enviada uma resposta ao usuário informando-o para fornecer um código de moeda válido.
Em seguida, após validar os códigos de moeda com a getCurrencyCode() função, o getBaseExchangeRate() método é chamado.
async function getBaseExchangeRate(baseCurrency, toCurrency) {
try {
const response = await axios.get(
`${coinbaseUrl}/exchange-rates?currency=${baseCurrency}`
);
const rates = response.data.data.rates;
const baseRate = rates[toCurrency];
return baseRate;
} catch (error) {
console.error(error);
}
}Esse método aceita o baseCurrency juntamente com o toCurrency também.
Em seguida, é feita uma chamada de API para o https://api.coinbase.com/v2/exchange-rates ponto de extremidade, passando o baseCurrency código como valor do currency parâmetro de consulta.
Este endpoint retorna as taxas para uma unidade da moeda-base. Em seguida, basta retornar a taxa equivalente para a toCurrency.
Aqui está um exemplo da resposta recebida ao chamar o endpoint usando USD como baseCurrency:
"data": {
"currency": "USD",
"rates": {
"AED": "3.673015",
"AFN": "77.06341",
"ALGO": "1.5885623510722797",
"ALL": "104.873298",
"AMD": "481.616228",
"ANG": "1.794578",
"AOA": "589.0",
"ARS": "73.1365",
...Depois de obter a taxa básica, basta multiplicar as unidades pela taxa básica para obter o valor equivalente na moeda para a qual o usuário está tentando converter e, em seguida, arredondar o valor para duas casas decimais. Em seguida, é enviada uma resposta ao usuário informando a taxa de câmbio.
A sendWhatsAppMessage() função envia uma resposta ao usuário pelo WhatsApp.
É enviada uma solicitação HTTP POST para o https://messages-sandbox.nexmo.com/v0.1/messages ponto de extremidade, especificando o from, to, e message .
O from campo é o número do Sandbox da API do WhatsApp. Vou mostrar a vocês como obtê-lo em breve, e vamos adicioná-lo como parte das nossas variáveis de ambiente. O to campo é o número que enviou a mensagem inicial e é obtido a partir do conteúdo da mensagem.
Para fazer a autenticação na API, especificamos nossa chave de API da Vonage e também a chave secreta. Da mesma forma, obteremos esses valores em breve e os adicionaremos como parte de nossas variáveis de ambiente.
Configurando o Ngrok
Como nosso aplicativo ainda é local, não há como a Vonage enviar solicitações POST para o endpoint que acabamos de criar sempre que nosso bot receber uma mensagem. Podemos usar o Ngrok para configurar uma URL pública temporária, de modo que nosso aplicativo fique acessível pela web.
Para iniciar o aplicativo, execute o seguinte comando no terminal:
Com o aplicativo em execução, execute o seguinte comando em uma segunda janela de terminal para iniciar o ngrok:
Neste comando, 3000 refere-se à porta na qual sua aplicação Express está atualmente escutando.
Agora você deve ver uma tela semelhante à que aparece abaixo:

Anote a segunda URL de encaminhamento, pois é ela que será usada para configurar nosso Webhook da Vonage.
Configurando o WhatsApp Sandbox
Vamos utilizar o Vonage WhatsApp Sandbox para esta demonstração, já que sua empresa precisa ser aprovada pelo WhatsApp antes que você possa usar a API deles em produção.
Acesse o Sandbox da Messages API para adicionar seu número do WhatsApp à lista de permissões, para que possamos testar o bot.

Para adicionar seu número do WhatsApp e começar a receber e enviar mensagens, você pode escanear o código QR pelo WhatsApp ou clicar no link exibido e clicar em “Enviar” na mensagem já preenchida. Anote o número do WhatsApp Sandbox, pois vamos adicioná-lo à nossa variável de ambiente em breve.
Em seguida, na mesma tela, configure a URL do Webhook de entrada colando a URL do Ngrok que anotamos anteriormente. Não se esqueça de acrescentar /webhooks/inbound-message no final da URL.

Acesse o seu página de configurações do painel e anote seu API Key e API Secret.
Adicionando variáveis de ambiente
Como já anotamos todas as variáveis de ambiente de que nosso bot precisará, juntamente com seus valores, agora podemos adicioná-las ao nosso projeto. Na raiz do diretório do seu projeto, crie um .env arquivo e adicione os seguintes valores:
VONAGE_API_KEY=xxxx
VONAGE_API_SECRET=xxxx
VONAGE_FROM_NUMBER=xxxxNão se esqueça de substituir xxxx pelos valores reais que anotamos anteriormente.
Testes
Você pode testar o funcionamento do bot enviando mensagens para ele pelo seu smartphone usando o WhatsApp.
Conclusão
Neste tutorial, vimos como podemos criar um chatbot simples no WhatsApp para realizar conversões de moeda usando as taxas de câmbio fornecidas pela Coinbase. Este tutorial pode servir como um guia inicial para aprender a receber e enviar mensagens pelo WhatsApp usando a Messages API da Vonage.