Costruiamo un bot di Telegram in Yandex.Cloud

Costruiamo un bot di Telegram in Yandex.Cloud

Oggi, con materiali di fortuna, assembleremo in Yandex.Cloud bot di Telegram con l'uso di Yandex Cloud Functions (o Funzioni Yandex — per brevità) e Yandex Object Storage (o Storage oggetti — per chiarezza). Il codice sarà in Node.js. Tuttavia, c'è una questione piccante: c'è un'organizzazione chiamata, diciamo così, Roskomnadzor (la censura è vietata dall'articolo 29 della Costituzione della Federazione Russa), che non consente ai provider internet in Russia di inviare richieste a Telegram API all'indirizzo: https://api.telegram.org/. Ma noi non lo faremo — se non è possibile, non è possibile. Dopotutto, nel nostro bagaglio abbiamo i cosiddetti webhook — con cui non facciamo richieste a un indirizzo specifico, ma semplicemente inviamo la nostra richiesta come risposta a qualsiasi richiesta che ci viene fatta. Cioè, come a Odessa — rispondiamo a una domanda con un'altra domanda. Pertanto, Telegram API non sarà presente nel nostro codice.

DisclaimerI nomi di eventuali organizzazioni governative menzionati in questo articolo sono fittizi, e qualsiasi coincidenza con i nomi di organizzazioni realmente esistenti è puramente casuale.

Quindi, creeremo un bot che ci fornirà pensieri intelligenti. Proprio come nell'immagine:

Costruiamo un bot di Telegram in Yandex.Cloud

Puoi metterlo alla prova — ecco il nome: @SmartThoughtsBot. Ho notato il pulsante «Abilità di Alice»? Это потому, что бот является своеобразным «компаньоном» для одноименного abilità di Alice, cioè svolge le stesse funzioni di abilità di Alice e, forse, potranno coesistere pubblicizzandosi a vicenda. Come creare l'abilità Pensieri Intelligenti è spiegato nell'articolo Alice acquisisce un'abilità. Adesso (dopo aver apportato alcune modifiche già dopo la pubblicazione dell'articolo sopra citato) sullo smartphone, questa abilità apparirà più o meno così:

Costruiamo un bot di Telegram in Yandex.Cloud

Creazione di un bot

Spero che questo tutorial sia utile a tutti, compresi i principianti «costruttori di bot». Pertanto, in questa sezione descriverò piuttosto dettagliatamente come creare Telegrambot. Per coloro che non hanno bisogno di queste informazioni — passate alle sezioni successive.

Apriamo l'app Telegaram, chiamiamo il padre di tutti i bot (loro sono come le persone) — @BotFather — e per cominciare diamo il comando /help, per rinfrescare la memoria su cosa possiamo fare. Ora ci interessa il comando /newbot.

Costruiamo un bot di Telegram in Yandex.Cloud

Poiché il bot descritto qui è già stato creato, per scopi dimostrativi creerò temporaneamente un altro bot (poi lo eliminerò). Lo chiamerò DemoHabrBot. I nomi (username) di tutti i bot di Telegram devono finire con la parola bot, ad esempio: MyCoolBot o my_cool_bot — questo è per i bot. Ma prima diamo un nome al bot (name) — e questo è per le persone. Il nome può essere in qualsiasi lingua, contenere spazi e non è necessario che finisca con la parola bot, e non è nemmeno necessario che sia unico. In questo esempio ho chiamato questo bot Demo Habr.

Costruiamo un bot di Telegram in Yandex.Cloud

Ora scegliamo un nome per il bot (username, quello per i bot). Lo chiameremo DemoHabrBot. Tutto ciò che riguarda il nome del bot (name) non ha nulla a che fare con il suo nome — username (o lo ha, ma in modo opposto). Dopo aver creato con successo un nome unico per il bot, dobbiamo copiare e mantenere (in assoluta segretezza!) il token mostrato nello screenshot dalla freccia rossa. Con esso installeremo tra poco il webhook da Telegram‘a sulla nostra funzione Yandex.

Costruiamo un bot di Telegram in Yandex.Cloud

Ora diamo il comando al padre di tutti i bot: /mybots, e lui ci mostrerà l'elenco di tutti i bot che abbiamo creato. Lasciamo per ora in pace il nostro bot appena sfornato Demo Habr (è stato creato per mostrare come creare bot, ma lo utilizzeremo oggi per altri scopi dimostrativi), e consideriamo il bot Pensieri Intelligenti (@SmartThoughtsBot). Clicchiamo sul pulsante con il suo nome nell'elenco dei bot.

Costruiamo un bot di Telegram in Yandex.Cloud

Qui possiamo configurare il nostro bot. Cliccando il pulsante Modifica… passeremo alla modifica di un'opzione. Ad esempio, facendo clic sul pulsante Modifica Nome possiamo cambiare il nome del bot, ad esempio invece di Pensieri Intelligenti, scrivere Idee Strampalate. Botpic è l'avatar del bot, deve essere di almeno 150 x 150 px. Descrizione è una breve descrizione che l'utente vede al primo avvio del bot, come risposta alla domanda: Cosa può fare questo bot? Informazioni è una descrizione ancora più breve che viene inviata con il link al bot (https://t.me/SmartThoughtsBot) o quando si visualizzano le informazioni su di esso.

Costruiamo un bot di Telegram in Yandex.Cloud

Ci resta solo da impostare i comandi. A questo scopo, facciamo clic sul pulsante Modifica Comandi. Per standardizzare la pratica degli utenti Telegram si raccomanda di utilizzare sempre due comandi: /start e /help, e se il bot ha bisogno di impostazioni, un ulteriore comando /settings. Il nostro bot è semplice come una palla, quindi per ora non ha bisogno di impostazioni. Scriviamo i primi due comandi, che poi elaboreremo nel codice. Ora, se nel campo di input l'utente inserisce uno slash (il simbolo della barra obliqua: /), apparirà un elenco di comandi per una rapida selezione. Tutto come nella figura: a sinistra impostiamo i comandi tramite il bot padre; a destra questi comandi sono già disponibili per gli utenti nel nostro bot.

Costruiamo un bot di Telegram in Yandex.Cloud

Funzione Yandex

Ora che il nostro bot è stato creato, passiamo a Yandex Cloud, per creare una funzione che eseguirà il codice del nostro bot. Se non hai mai lavorato con Yandex.Cloud leggi il materiale Alice nel paese di Bitrix, e poi — Le funzioni di Yandex inviano e-mail. Sono quasi sicuro che questi due articoli relativamente brevi siano sufficienti per una comprensione di base dell'argomento.

Quindi, nella console di Yandex.Cloud nel menu di navigazione a sinistra, seleziona l'elemento Cloud Functions, quindi premi il pulsante Crea funzione. Assegna un nome e per te — una breve descrizione.

Costruiamo un bot di Telegram in Yandex.Cloud

Dopo aver premuto il pulsante Crea e dopo qualche secondo, la nuova funzione apparirà nell'elenco di tutte le funzioni. Clicca sul suo nome — questo ci porterà alla pagina Panoramica della nostra funzione. Qui devi attivare (On) l'interruttore Funzione pubblica, affinché sia accessibile dal mondo esterno (per Yandex.Cloud), e i valori dei campi Collegamento per chiamata e Identificatore devono rimanere segreti, lontano da tutti tranne che da te e Telegram, per evitare che vari truffatori possano chiamare la tua funzione.

Costruiamo un bot di Telegram in Yandex.Cloud

Ora, usando il menu a sinistra, andiamo a Editor funzioni. Mettiamo da parte per un breve momento i nostri Pensieri Intelligenti, e creiamo una funzione base per testare il funzionamento del nostro bot… Comunque, in questo contesto, questa funzione è il nostro bot… In breve, adesso e proprio qui faremo il nostro semplice bot che "rispecchierà" (cioè rimanderà) le richieste degli utenti. Questo template può essere sempre utilizzato quando si creano nuovi bot di Telegram, per assicurarsi che la connessione con Telegram’funzioni correttamente. Clicchiamo su Crea file, lo chiamiamo index.js, e nell'editor di codice online inseriamo nel file il seguente codice: 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 }; };

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
  };
};

Nella console di Yandex.Cloud dovrebbe apparire circa così:

Costruiamo un bot di Telegram in Yandex.Cloud

Scendiamo un po' più in basso e indichiamo Il punto di ingressoindex.bot, dove index è il nome del file (index.js), e bot — il nome della funzione (module.exports.bot). Tutti gli altri campi li lasciamo «così come sono», e nell'angolo in alto a destra facciamo clic sul pulsante Crea versione. Dopo pochi secondi, questa versione della funzione sarà creata. A breve, dopo i test webhook, creeremo una nuova versione — Pensieri Intelligenti.

Costruiamo un bot di Telegram in Yandex.Cloud

Storage oggetti

Ora che abbiamo creato Funzione Yandex, mentre siamo nella console Yandex.Cloud, creiamo un cosiddetto bucket (bucket, ovvero un contenitore in italiano, non un mazzo) per memorizzare i file delle immagini che saranno utilizzati nel nostro bot. Pensieri IntelligentiNel menu di navigazione a sinistra, selezioniamo Object Storage, premiamo il pulsante Crea bucket, diamo un nome, ad esempio, img-bucket, e, cosa fondamentale, Accesso in lettura agli oggetti lo impostiamo su pubblico — altrimenti Telegram non vedrà le nostre immagini. Tutti gli altri campi li lasciamo invariati. Facciamo clic sul pulsante Crea bucket.

Costruiamo un bot di Telegram in Yandex.Cloud

Dopo di ciò, l'elenco di tutti i bucket potrebbe apparire così (se questo è l'unico bucket che hai):

Costruiamo un bot di Telegram in Yandex.Cloud

Adesso ti propongo di cliccare sul nome del bucket e all'interno di esso creare una cartella per organizzare la memorizzazione delle immagini per le tue diverse applicazioni. Ad esempio, per il bot di Telegram Pensieri Intelligenti ho creato una cartella chiamata tg-bot-smart-thoughts (tranquillo, capirò questo codice). Crea anche tu qualcosa.

Costruiamo un bot di Telegram in Yandex.Cloud

Ora puoi fare clic sul nome della cartella, accedervi e caricare file:

Costruiamo un bot di Telegram in Yandex.Cloud

E cliccando sul nome del file — ottenerlo. URL per l'utilizzo nel nostro bot e ovunque (ma, non pubblicate questo URL senza necessità, poiché il traffico proveniente da Storage Object è tariffato).

Costruiamo un bot di Telegram in Yandex.Cloud

Ecco, in sostanza, tutto riguardo a Storage Object. Ora saprete cosa fare quando vedete l'invito a caricare file lì.

Webhook

Ora installeremo il webhook cioè, quando il bot riceve un aggiornamento (ad esempio, un messaggio dall'utente), da Telegram verrà inviato al nostro funzione Yandex una richiesta (request) con i dati. Ecco la stringa che può essere facilmente inserita nella barra degli indirizzi del browser e poi aggiornare la pagina (questo deve essere fatto solo una volta): https://api.telegram.org/bot{bot_token}/setWebHook?url={webhook_url}
Dobbiamo solo sostituire {bot_token} con il token ricevuto da noi dal bot padre durante la creazione del nostro bot, e {webhook_url} con URL il nostro Funzioni Yandex. Un attimo! Ma Roskomnadzor impedisce ai fornitori in RF di servire l'indirizzo https://api.telegram.org. Sì, è vero. Ma trovate un modo. Potete, ad esempio, chiedere a vostra nonna in Ucraina, Israele o Canada — lì non ci sono «rosskomtsenzur», e solo Dio sa come vivono le persone senza di essa. Alla fine, la richiesta-risposta durante l'installazione del webhook dovrebbe apparire così:

Costruiamo un bot di Telegram in Yandex.Cloud

Stiamo testando. Dovrebbe «rispecchiare».

Costruiamo un bot di Telegram in Yandex.Cloud

Così è. Le nostre congratulazioni — ora Funzione Yandex è diventato Telegram-bot!

Pensieri Intelligenti

Ora realizziamo Pensieri Intelligenti. Il codice è aperto e si trova su GitHub. È ben commentato e conta solo un centinaio di righe. Leggilo come un'operista legge il libretto!

Costruiamo un bot di Telegram in Yandex.Cloud

Clona il progetto e installa le dipendenze:

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

Apporta le modifiche necessarie al file index.js (opzionale; puoi anche non cambiarlo). Crea un zip-archivio, con il file index.js e la cartella node_modules all'interno, ad esempio con il nome smart.zip.

Costruiamo un bot di Telegram in Yandex.Cloud

Ora vai nella console alla nostra Funzioni Yandex, seleziona la scheda ZIP-archivio, clicca sul pulsante Seleziona file, e carica il nostro archivio smart.zip. Infine, in alto a destra, premi il pulsante Crea versione.

Costruiamo un bot di Telegram in Yandex.Cloud

Dopo qualche secondo, quando la funzione si aggiorna, testiamo di nuovo il nostro bot. Ora non "rispecchia" più, ma fornisce pensieri intelligenti!

Costruiamo un bot di Telegram in Yandex.Cloud

È tutto per oggi. Altri articoli seguiranno. Per chi è interessato a letture simili, iscriviti alle notifiche sui nuovi articoli. Puoi iscriverti qui, o al Telegram-canale IT Tutorial Zahar, o Twitter @mikezaharov.

Link

Codice su GitHub
Yandex Cloud Functions
Yandex Object Storage
Bots: Un'introduzione per sviluppatori
Telegram Bot API

Donazioni

Costruiamo un bot di Telegram in Yandex.Cloud

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster