Criar um bot meteorológico do WhatsApp geolocalizado com Ruby, Sinatra e Twilio
Tempo de leitura: 5 minutos
Vimos como escrever um chatbot de texto usando a API da Twilio para WhatsApp com o Ruby, mas o WhatsApp também oferece suporte ao envio e recebimento de dados de localização por meio de sua API. Nesta publicação, veremos como criar um bot do WhatsApp que possa receber e responder a mensagens de localização.
Vamos criar um bot meteorológico para que você possa enviar sua localização ao bot e obter a previsão meteorológica da sua região.
De que você vai precisar
Para codificar acompanhando esta publicação e criar seu próprio bot do WhatsApp com reconhecimento de localização, você precisará de:
- Ruby e Bundler instalados
- ngrok para que possamos expor nossos endpoints locais para receber webhooks de entrada
- Uma conta do WhatsApp
- Uma conta gratuita da Dark Sky API para fazer solicitações de previsão do tempo
- Uma conta da Twilio (se ainda não tiver uma, inscreva-se em uma conta nova da Twilio aqui e receba US$ 10 de crédito ao fazer o upgrade)
Como configurar o sandbox do WhatsApp
Se você quiser iniciar um bot no WhatsApp, precisará de aprovação do WhatsApp. No entanto, a Twilio permite que você crie e teste seus bots do WhatsApp usando nosso sandbox. Vamos começar configurando o sandbox para usar com sua conta do WhatsApp.
Se você ainda não configurou seu sandbox do WhatsApp, acesse o Sandbox do WhatsApp no console da Twilio e siga as instruções em minha publicação anterior. Você estará pronto para continuar assim que receber uma mensagem de volta pelo WhatsApp.
Como configurar o aplicativo Ruby
No final da última publicação, tínhamos um bom aplicativo base com o qual podemos começar a trabalhar agora. Para obter essa configuração, basta cloná-la do GitHub e migrá-la para o diretório:
Instale as dependências:
Copie config/env.yml.example
para config/env.yml
e preencha seu Auth Token (token de autenticação) da Twilio (disponível no Console da Twilio).
Copie o diretório base
para um diretório chamado location_bot
.
Abra location_bot/config.ru
e altere a última linha para:
Abra location_bot/bot.rb
. Altere o nome da classe para LocationBot
e confira o conteúdo atual:
Isso configura um endpoint em /bot
para receber webhooks de entrada da Twilio e responder com uma mensagem em uma resposta TwiML. Ele também protege o endpoint contra intrusos pela validação da assinatura. Execute o aplicativo com:
Tudo estará pronto para funcionar assim que o servidor de aplicativos inicializar.
Como receber mensagens de localização no WhatsApp
Sempre que um usuário enviar uma mensagem para o seu número de WhatsApp, a Twilio o transformará em um webhook para o endpoint que você configurou no console. O webhook é uma solicitação HTTP com todos os detalhes sobre a mensagem de entrada. Anteriormente, trabalhamos com o corpo da mensagem, mas desta vez queremos lidar com mensagens de localização.
O WhatsApp permite que um usuário envie texto ou localização, mas não ambos ao mesmo tempo. Quando um usuário envia uma localização, o webhook de entrada incluirá os parâmetros Latitute
e Longitude
. Você também pode receber os parâmetros Label
e Address
se o usuário decidir compartilhar uma localização nomeada. Podemos acessar todos esses bits de dados no Sinatra por meio do hash params
.
Podemos dar uma olhada nesses dados após o logout. Adicione o seguinte a location_bot/bot.rb
:
Reinicie o aplicativo ou execute-o com:
Para testar isso, precisaremos abrir um túnel para nosso servidor em execução na máquina. Eu recomendo usar o ngrok para isso. Se você não o tiver instalado, siga as instruções em ngrok.com e, quando estiver pronto, execute:
Isso abrirá um túnel apontado para a porta 9292 do localhost, onde o Sinatra estará hospedado por padrão usando rackup
. Você encontrará um URL público do ngrok que agora aponta para seu aplicativo local. Abra o WhatsApp Sandbox no Console da Twilio e insira esse URL mais o caminho /bot
no campo When a message comes in (Quando uma mensagem é recebida).
Envie a mensagem de localização para o número do Sandbox, pressionando o botão plus (mais) e escolhendo a localização a ser compartilhada.
No terminal, você verá as informações de localização.
Vamos usar esses dados de localização para retornar um relatório de clima localizado. Para esta publicação do blog, usaremos a API Dark Sky. É uma API simples, e você pode se inscrever para obter uma chave de API gratuita aqui. Depois de obter sua chave de API, abra config/env.yml
e adicione a chave de API Dark Sky abaixo do seu Auth Token (token de autenticação) da Twilio.
Vamos escrever uma pequena classe que pode fazer solicitações HTTP à API, a fim de encontrar o clima da latitude e longitude que estamos recebendo da mensagem de localização do WhatsApp.
Como chamar a API Dark Sky
O formato de URL da API Dark Sky tem a seguinte aparência:
Na última publicação do blog, usamos a biblioteca http.rb para fazer solicitações a várias APIs sobre cães e gatos. Podemos usá-la novamente para fazer solicitações à API Dark Sky. Portanto, vamos construir uma pequena classe para isso. Na parte inferior de location_bot/bot.rb
, adicione o seguinte:
Este é um bom ponto de partida que nos dá uma classe que podemos inicializar com nossa chave de API. Ele armazenou o URL base da API, e nós temos um método de previsão que usa a latitude e a longitude. Complete o método de previsão com o seguinte:
A primeira linha do método inclui alguns parâmetros de solicitação. Nesse caso, estamos solicitando unidades SI (métricas) para as respostas e estamos excluindo alguns detalhes da resposta. Em seguida, criamos o URL que codifica os parâmetros de consulta usando o URI#encode_www_form método
da biblioteca padrão. Passamos o URL para o método HTTP.get
para obter uma resposta e, em seguida, analisamos esse corpo de resposta como JSON, retornando o resultado.
Agora, podemos usar essa classe em nosso bot.
Como enviar uma previsão do tempo com base na localização do WhatsApp
Retorne ao código que responde à mensagem de WhatsApp recebida. Agora, queremos saber se a mensagem recebida é uma mensagem de localização verificando os parâmetros Latitude
e Longitude
. Se for o caso, faremos a chamada para a API Dark Sky usando a classe que acabamos de escrever. Caso contrário, retornaremos uma mensagem solicitando a localização do usuário.
Comece removendo a depuração das chamadas puts
e, em seguida, crie o condicional.
Acima, usamos a previsão retornada pela API Dark Sky para criar uma mensagem composta pelo resumo do clima atual e pela temperatura seguida pelo resumo da previsão de hora em hora. Isso se parece com:
Sucesso! Recebemos uma mensagem de localização do WhatsApp e a transformamos em uma previsão do tempo para esse local.
Como potencializar os bots com a localização
A localização pode ser extremamente útil com bots, e esse é um recurso que a API da Twilio para WhatsApp oferece em outros canais, como SMS. Se você quiser ver o código inteiro desse bot e de outros, confira o repositório do GitHub aqui. Você pode encontrar o bot de localização no diretório de localização.
Há muitas outras coisas que você pode fazer com um bot com reconhecimento de localização. Você pode encontrar lojas próximas, enviar direções ou fornecer insights locais para seus usuários. Eu adoraria ouvir as ideias que você também tem para bots baseados em localização. Deixe suas ideias nos comentários ou no Twitter em @luisleao.
Publicações relacionadas
Recursos relacionados
Twilio Docs
De APIs a SDKs e aplicativos de amostra
Documentação de referência de API, SDKs, bibliotecas auxiliares, guias de início rápido e tutoriais para sua linguagem e plataforma.
Centro de Recursos
Os mais recentes e-books, relatórios do setor e webinars
Aprenda com especialistas em engajamento do cliente para melhorar sua própria comunicação.
Ahoy
Centro da comunidade de desenvolvedores da Twilio
Melhores práticas, exemplos de código e inspiração para criar comunicações e experiências de engajamento digital.