Desenvolvimento reativo do Telegram bot

Bom dia, Habr'ovchan.

Em busca de várias informações sobre o desenvolvimento de um bot para o bate-papo do Telegram na Internet, descobri que todos os tutoriais estão cheios de diferentes mecanismos de interação com a biblioteca do telegram-bot-api , ninguém chegou à conclusão de que a vida dos camaradas sempre deveria ser melhorada. lado da facilitação do trabalho (programadores são preguiçosos por natureza), então decidi escrever meu próprio tutorial usando minha própria biblioteca de wrappers , que no momento só pode ler mensagens e enviar respostas para elas, mas primeiro as primeiras coisas.

Por que os chatbots são necessários?



O tópico de desenvolvimento de chatbots em nosso tempo para várias redes sociais é uma questão delicada, desde a introdução de um chatbot:

  1. Reduz o tempo de resposta do usuário para a pergunta em que ele está interessado (e no seu interesse, contato rápido com ele)
  2. Reduz a carga na carteira N da empresa para manter um funcionário processando aplicativos manuais

A introdução de um chatbot não significa absolutamente que uma pessoa não seja necessária, pois sempre existem certas situações que exigem a participação da pessoa responsável por resolver um problema específico, mas simplifica e automatiza o problema de resolver problemas domésticos, processar aplicativos e fornecer informações a pessoas responsáveis, mantendo estatísticas e outras coisas que a alma deseja.

Como a introdução de assistentes virtuais não é tão ativa e já estamos entrando gradualmente na 2ª década do século 21, considero necessário diminuir o limiar para entrar neste tópico.

Vamos começar.

Atenção

Um projeto que usa a biblioteca de wrapper implementada não usa o webhook, mas o pool longo, uma vez que não tem o objetivo de implantar em serviços específicos como o heroku (no entanto, possui funcionalidade básica para que o projeto fique mais ou menos longo e não adormeça na primeira chamada do distribuidor tempo de operação de vários serviços de outros usuários heroku). A idéia principal do projeto era simplificar o desenvolvimento e reduzir o número de "gestos" ao desenvolver um chatbot com a funcionalidade básica - processar solicitações de entrada de usuários.

Como isso funciona nesta biblioteca?




A principal fonte de dados é o dicionário no qual o chatbot se baseia (contido em um arquivo JSON do formato), mas também implica o processamento de mensagens do usuário escrevendo sua própria lógica de programa.

Primeiro, você precisa criar um bot no BotFather (assumiremos que você criou o bot e recebeu o token). Agora você precisa "pegar" a biblioteca para si mesmo executando o comando
go get "github.com/liquiddeath13/reactivetgbot" .

Em seguida, você precisa criar um arquivo no formato .go e colocar o seguinte código lá:

 package main import ( reactivetgbot "github.com/liquiddeath13/reactivetgbot" ) func main() { BotInstance := reactivetgbot.Init("YOUR_BOT_TOKEN", "PATH_TO_JSON_DICTIONARY") if BotInstance != nil { go BotInstance.Logic() //if we need host our application on Heroku and shouldn't think about uptime reactivetgbot.HerokuServiceUP("Telegram ChatBot by liquiddeath13") } } 

A variável BotInstance contém um link para uma instância do chatbot com o token especificado e um caminho para um dicionário que armazena perguntas e respostas.

Exemplo de dicionário:

 [ { "Question" : "/about", "Answer" : "ChatBot created by liquiddeath13 in 2019 year" }, { "Question" : "Hello, how can i contact with your company?", "Answer" : "Hello, you can contact us by provided mail address. Email: coolnickname@hostname.domain" } ] 

Em seguida, o chatbot começa a trabalhar com a API do Telegram e, a partir daí, obtém informações sobre os eventos que ocorrem nos chats em que está localizado. Se a mensagem descrita no dicionário no campo Pergunta chegar ao endereço do bot, ela responderá à mensagem com as respostas emparelhadas no campo Resposta (ou seja, a mensagem "Olá, como posso entrar em contato com sua empresa?" neste exemplo, o bot responderá "Olá, você pode entrar em contato conosco pelo endereço de email fornecido. Email: coolnickname@hostname.domain").

Além disso, como mencionado anteriormente, os camaradas avançados podem determinar o comportamento de um bot ao receber uma mensagem adicionando um manipulador, por exemplo:

 package main import ( "fmt" reactivetgbot "github.com/liquiddeath13/reactivetgbot" ) func main() { BotInstance := reactivetgbot.Init("YOUR_BOT_TOKEN", "PATH_TO_JSON_DICTIONARY") AskCounter := 0 if BotInstance != nil { BotInstance.AppendHandler("how much time people asked you?", func(Msg reactivetgbot.TGMessage) string { AskCounter++ return fmt.Sprintf("Hello.\n%d - so many time people asked me", AskCounter) }) go BotInstance.Logic() reactivetgbot.HerokuServiceUP("Telegram ChatBot by liquiddeath13") } } 

Este exemplo descreve o mecanismo para processar a pergunta "quanto tempo as pessoas perguntaram a você?". Como resposta, o bot fornecerá ao usuário um valor que mostra quantas vezes os usuários fizeram a pergunta especificada, após aumentar o contador.

Implantação no Heroku (sem anúncios)


Por algum motivo, os chatbots não se sentem bem em serviços como o heroku, porque uma pequena funcionalidade foi escrita para impedir que o serviço "adormeça" cedo, ou seja, emular a atividade de rede (acessar um recurso da web a cada cinco minutos)
Para colocar o projeto no Heroku, precisamos do utilitário godep, que "empacotará" as dependências do projeto. Você pode "buscá-lo" com o comando go get github.com/tools/godep , pode empacotar dependências executando o comando godep save na pasta do projeto.

Em seguida, precisamos criar uma conta no Heroku e familiarizar-nos com o guia oficial de implantação . Se você não tem muito tempo para ler ou deseja "tudo de uma vez em um só lugar", tudo se resume à seguinte série de comandos:

  1. Autorização no recurso Heroku usando sua CLI executando o comando heroku login
  2. Executando o comando git init na pasta do projeto
  3. A execução do git remote add heroku ** git' , Heroku**
  4. Executando o comando git add . para adicionar todos os arquivos ao repositório local
  5. Executando o comando git commit -m " , commit'"
  6. Colocando o repositório local no repositório heroku usando o git push heroku master

Após as ações concluídas, nada mais precisa ser feito - o Heroku montará o projeto no modo automático e o bot fará todo o trabalho de rotina para você ou seus subordinados.
Para monitorar o ciclo de vida de um serviço da Web, o Heroku possui um heroku logs --tail , que permite monitorar o log de ações recentes.

Considerações adicionais sobre desenvolvimento


Está planejado pelo menos introduzir suporte para manipuladores que retornam não apenas uma sequência, mas uma mensagem gerada (aprimoramento para suportar vários anexos na forma de arquivos).

upd: cheguei à conclusão de que o mecanismo de emulação aplicado não funciona conforme o esperado e o serviço permanece em funcionamento por apenas 30 minutos e depois "adormece" até ser batido diretamente (um link para o projeto está sempre no escritório do projeto no estilo Heroku) hosters), embora provavelmente valha a pena reescrever no webhook . Deixe meus próprios desejos, bem como o ódio e as idéias de melhoria por qualquer meio conveniente - ficarei feliz em ouvir de você.

(Provavelmente) links úteis


Página do Projeto da Biblioteca de Wrapper
Página do projeto da biblioteca da API do telegrama

Source: https://habr.com/ru/post/pt480296/


All Articles