Construindo um bot do Telegram na Yandex.Cloud

Construindo um bot do Telegram na Yandex.Cloud

Hoje, com materiais disponíveis, vamos montar em Yandex.Cloud bot do Telegram usando Yandex Cloud Functions (ou funções Yandex — para simplificar) e Yandex Object Storage (ou armazenamento de objetos — para clareza). O código estará em Node.js. No entanto, há uma situação peculiar - uma organização chamada, por assim dizer, RosKomZenzura (a censura é proibida pelo artigo 29 da Constituição da Federação Russa), não permite que os provedores de internet na Rússia façam solicitações ao Telegram API no endereço: https://api.telegram.org/. Bem, não vamos fazer isso — se não puder, não faremos. Afinal, temos em nossa bolsa os chamados webhooks — com a ajuda deles, não fazemos solicitações a um endereço específico, apenas enviamos nossa solicitação como resposta a qualquer solicitação recebida. Ou seja, como em Odessa — respondemos a uma pergunta com outra pergunta. Portanto, Telegram API não constará em nosso código.

Isenção de responsabilidadeOs nomes mencionados neste artigo de quaisquer organizações governamentais são fictícios, e eventuais coincidências com nomes de organizações reais são aleatórias.

Então, vamos criar um bot que nos fornecerá pensamentos inteligentes. Exatamente como na imagem:

Construindo um bot do Telegram na Yandex.Cloud

Você pode testá-lo na prática — aqui está o nome: @SmartThoughtsBot. Notou o botão "Habilidade da Alice"? Это потому, что бот является своеобразным «компаньоном» для одноименного habilidade da Alice, ou seja, ele executa as mesmas funções que habilidade da Alice e, possivelmente, poderão coexistir pacificamente promovendo um ao outro. Sobre como criar a habilidade Pensamentos Inteligentes é discutido no artigo Alice adquire uma habilidade. Agora (depois de algumas alterações feitas após a publicação do artigo mencionado acima) no smartphone, essa habilidade parecerá mais ou menos assim:

Construindo um bot do Telegram na Yandex.Cloud

Criando um bot

Gostaria que este tutorial fosse útil para todos, incluindo os iniciantes em "bot construção". Portanto, nesta seção, descreverei em detalhes como criar bots em Telegram‘e. Para aqueles a quem essa informação não é necessária — passem para as seções seguintes.

Abrindo o aplicativo Telegaram, chamamos o pai de todos os bots (eles são como humanos) — @BotFather — e, para começar, vamos dar a ele o comando /help, para relembrar o que podemos fazer. Agora, estaremos interessados no comando /newbot.

Construindo um bot do Telegram na Yandex.Cloud

Como o bot descrito aqui já foi criado, para fins de demonstração, vou criar temporariamente outro bot (depois o apagarei). Vou chamá-lo de DemoHabrBot. Os nomes (nome de usuário) de todos os bots do Telegram devem terminar com a palavra bot, por exemplo: MyCoolBot ou my_cool_bot — isso é para bots. Mas primeiro, vamos dar um nome ao bot (nome) — e isso é para as pessoas. O nome pode ser em qualquer idioma, conter espaços, e não precisa terminar com a palavra bot, e também não precisa ser único. Neste exemplo, eu nomeei este bot Demo Habr.

Construindo um bot do Telegram na Yandex.Cloud

Agora vamos escolher um nome para o bot (nome de usuário, aquele que é para bots). Vamos chamá-lo de DemoHabrBot. Tudo que diz respeito ao nome do bot (nome) não se relaciona de forma alguma ao seu nome — nome de usuário (ou se relaciona, mas de forma inversa). Após a criação bem-sucedida de um nome único para o bot, precisamos copiar e guardar (em total segredo!) o token que aparece na captura de tela com a seta vermelha. Com ele, mais tarde, configuraremos o webhooks para Telegrama nossa Função Yandex.

Construindo um bot do Telegram na Yandex.Cloud

Agora vamos dar um comando ao pai de todos os bots: /mybots, e ele nos mostrará a lista de todos os bots que criamos. Por enquanto, vamos deixar o bot recém-criado em paz Demo Habr (ele foi criado para mostrar como criar bots, mas ainda usaremos ele hoje para outros fins de demonstração), e vamos olhar o bot Pensamentos Inteligentes (@SmartThoughtsBot). Clicamos no nome do bot na lista.

Construindo um bot do Telegram na Yandex.Cloud

Aqui podemos configurar nosso bot. Ao clicar no botão Editar... vamos para a edição de uma opção específica. Por exemplo, ao clicar no botão Editar Nome podemos mudar o nome do bot, digamos, ao invés de Pensamentos Inteligentes, escrever Ideias Absurdo. Botpic — este é o avatar do bot, deve ter pelo menos 150 x 150 px. Descrição — esta é uma breve descrição que o usuário vê ao iniciar o bot pela primeira vez, como resposta à pergunta: O que este bot pode fazer? Sobre — uma descrição ainda mais curta que é enviada com o link para o bot (https://t.me/SmartThoughtsBot) ou ao visualizar informações sobre ele.

Construindo um bot do Telegram na Yandex.Cloud

Agora só precisamos configurar os comandos. Para isso, clique no botão Editar Comandos. Para padronizar a prática do usuário Telegram recomenda-se sempre usar dois comandos: /start e /help, e se o bot precisar de configurações — um comando adicional /settings. Nosso bot é simples, como uma bola, então ele ainda não precisa de configurações. Vamos definir os dois primeiros comandos, que depois processaremos no código. Agora, se no campo de entrada o usuário digitar uma barra (o sinal de barra: /), aparecerá uma lista de comandos para seleção rápida. Tudo como na imagem: à esquerda — configuramos os comandos através do bot-pai; à direita, esses comandos já estão disponíveis para os usuários em nosso bot.

Construindo um bot do Telegram na Yandex.Cloud

Função Yandex

Agora que nosso bot foi criado, vamos para Yandex.Cloud, para criar uma função que executará o código do nosso bot. Se você ainda não trabalhou com Yandex.Cloud , leia o material Alice no País do Bitrix, e depois — As funções do Yandex enviam e-mails. Estou quase certo de que esses dois artigos relativamente pequenos serão suficientes para você entender o assunto basicamente.

Assim, no console do Yandex.Cloud , no menu de navegação à esquerda, selecionamos a opção Cloud Functions, e em seguida clicamos no botão Criar função. Damos um nome a ela, e para nós mesmos — uma breve descrição.

Construindo um bot do Telegram na Yandex.Cloud

Após clicar no botão Criar , e após alguns segundos, a nova função aparecerá na lista de todas as funções. Clique no seu nome — isso nos levará à página Visão geral da nossa função. Aqui, precisamos ativar (Ativar) o alternador Função pública, para que ela fique acessível do mundo externo (para do Yandex.Cloud) o mundo, e o valor dos campos Link para chamada e Identificador — deve ser mantido em segredo profundo de todos, exceto você mesmo e do Telegram, para que sua função não possa ser chamada por vários golpistas.

Construindo um bot do Telegram na Yandex.Cloud

Agora, usando o menu à esquerda, vamos para o Editor da função. Por ora, vamos deixar de lado nossos Pensamentos Inteligentes, e criar uma função-template mínima para verificar o funcionamento do nosso bot… No entanto, neste contexto, essa função é nosso bot… Em poucas palavras, agora mesmo, aqui e agora, nós faremos um bot muito simples que 'espelhará' (ou seja, enviará de volta) as solicitações dos usuários. Este template pode ser usado sempre que criamos novos bots do Telegram, para garantir que a conexão com o Telegramestá funcionando corretamente. Clicamos em Criar arquivo, chamamos de index.js, e no Editor de código online , colamos o seguinte código neste arquivo:

module.exports.bot = async (event) => {
  
  const body = JSON.parse(event.body);

  const msg = {
    'method': 'sendMessage',
    'chat_id': body.message.chat.id,
    'text': body.message.text
  };

  return {
    'statusCode': 200,
    'headers': {
      'Content-Type': 'application/json'
    },
    'body': JSON.stringify(msg),
    'isBase64Encoded': false
  };
};

No console do Yandex.Cloud, isso deve parecer aproximadamente assim:

Construindo um bot do Telegram na Yandex.Cloud

Em seguida, um pouco mais abaixo, indicamos Ponto de entrada — index.bot, onde index é o nome do arquivo (index.js), e bot — nome da função (module.exports.bot). Todos os outros campos deixamos 'como estão', e no canto superior direito clicamos no botão Criar versão. Após alguns segundos, esta versão da função será criada. Em breve, após o teste do webhook, criaremos uma nova versão — Pensamentos Inteligentes.

Construindo um bot do Telegram na Yandex.Cloud

armazenamento de objetos

Agora que temos criado Função Yandex, vamos, enquanto estamos no console do Yandex.Cloud, criar um chamado bucket (bucket, ou seja, um balde em russo, de forma alguma um buquê) para armazenar arquivos de imagem que serão usados em nosso bot Pensamentos Inteligentes. No menu de navegação à esquerda, selecionamos a opção Object Storage, clicamos no botão Criar bucket, pensamos em um nome, por exemplo, img-bucket, e, o mais importante, O acesso de leitura aos objetos deve ser público — caso contrário, o Telegram não verá nossas imagens. Todos os outros campos permanecem inalterados. Clicamos no botão Criar bucket.

Construindo um bot do Telegram na Yandex.Cloud

Após isso, a lista de todos os buckets pode parecer algo assim (se este for o seu único bucket):

Construindo um bot do Telegram na Yandex.Cloud

Agora sugiro clicar no nome do bucket e dentro dele criar uma pasta para organizar o armazenamento de imagens para diferentes aplicações suas. Por exemplo, para o bot do Telegram Pensamentos Inteligentes eu criei uma pasta chamada tg-bot-smart-thoughts (não se preocupe, eu entenderei essa cifra). Crie também alguma.

Construindo um bot do Telegram na Yandex.Cloud

Agora você pode clicar no nome da pasta, entrar nela e fazer o upload de arquivos:

Construindo um bot do Telegram na Yandex.Cloud

E ao clicar no nome do arquivo — obter seu URL para uso em nosso bot, e, de fato, — em qualquer lugar (mas, não publique esse URL desnecessariamente, pois o tráfego do Object Storage é cobrado).

Construindo um bot do Telegram na Yandex.Cloud

E isso é tudo sobre Object Storage. Agora você saberá o que fazer quando vir um chamado para enviar arquivos lá.

Webhook

Agora vamos configurar um webhook — ou seja, quando o bot receber uma atualização (como uma mensagem de um usuário), será enviado do servidor Telegram para o nosso Função Yandex uma solicitação (request) com os dados. Aqui está a linha que você pode simplesmente colar na barra de endereços do navegador e depois atualizar a página (isso deve ser feito apenas uma vez): https://api.telegram.org/bot{bot_token}/setWebHook?url={webhook_url}
Basta substituir {bot_token} pelo token que recebemos do bot pai ao criar nosso bot, e {webhook_url} — por URL o nosso funções Yandex. Um momento! Mas RosKomZenzura proíbe provedores na Rússia de atender o endereço https://api.telegram.org. Sim, está certo. Mas você pode pensar em algo. Afinal, pode-se, por exemplo, pedir à sua avó na Ucrânia, Israel ou Canadá — lá não existem 'censuras russas', e só Deus sabe como as pessoas vivem sem isso. No final, a solicitação-resposta ao configurar o webhook deve parecer assim:

Construindo um bot do Telegram na Yandex.Cloud

Testando. Deve "espelhar".

Construindo um bot do Telegram na Yandex.Cloud

E é verdade. Nossas congratulações — agora Função Yandex se tornou Telegram-bot!

Pensamentos Inteligentes

E agora vamos fazer Pensamentos Inteligentes. O código está aberto e disponível em GitHub. Ele está bem comentado e tem apenas cerca de cem linhas. Leia-o como uma diva de ópera lê um libreto!

Construindo um bot do Telegram na Yandex.Cloud

Clone o projeto e instale as dependências:

git clone https://github.com/stmike/tg-bot-smart-thoughts.git
cd tg-bot-smart-thoughts
npm i

Faça as alterações necessárias no arquivo index.js (opcional; você pode não precisar alterar nada). Crie um zip-arquivo, com o arquivo index.js e a pasta node_modules dentro, por exemplo, com o nome smart.zip.

Construindo um bot do Telegram na Yandex.Cloud

Agora, vá para o nosso console funções Yandex, selecione a guia Arquivo ZIP, clique no botão Selecionar arquivo, e faça o upload do nosso arquivo zip smart.zip. Finalmente, no canto superior direito, clique no botão Criar versão.

Construindo um bot do Telegram na Yandex.Cloud

Após alguns segundos, quando a função for atualizada, vamos testar novamente nosso bot. Agora ele não está mais "espelhando", mas entrega pensamentos inteligentes!

Construindo um bot do Telegram na Yandex.Cloud

Por hoje é isso. Outros artigos virão. Para quem acha interessante ler isso, inscreva-se para notificações sobre novos artigos. Você pode se inscrever aqui ou no Telegram-canal IT Tutorial Zakhar, ou Twitter @mikezaharov.

Links

Código no GitHub
Yandex Cloud Functions
Yandex Object Storage
Bots: uma introdução para desenvolvedores
Telegram Bot API

Doações

Construindo um bot do Telegram na Yandex.Cloud

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster