Vi bygger en Telegram-bot i Yandex.Cloud

Vi bygger en Telegram-bot i Yandex.Cloud

I dag vil vi samle i Yandex.Cloud Telegram-bot ved hjælp af Yandex Cloud Functions (eller Yandex-funktioner — for kortheds skyld) og Yandex Object Storage (eller Objektlagring — for klarheds skyld). Koden vil være på Node.js. Men der er en snigende omstændighed — en organisation ved navn lad os sige Roskomtsenzura (censur forbydes af artikel 29 i Den Russiske Føderations forfatning), forhindrer internetudbydere i Rusland i at sende forespørgsler til Telegram API på adressen: https://api.telegram.org/. Nå, vi skal ikke — hvis ikke, så ikke. For i vores taske har vi såkaldte webhooks — ved hjælp af dem sender vi ikke forespørgsler til en specifik adresse, men blot sender vores forespørgsel som svar på enhver forespørgsel til os. Det vil sige, som i Odesssa — vi svarer med et spørgsmål. Derfor Telegram API vil ikke figurere i vores kode.

FraskrivelseDe nævnte titler på nogen offentlige organisationer i denne artikel er fiktive, og eventuelle ligheder med eksisterende organisationers navne er tilfældige.

Så vi vil lave en bot, der vil forsyne os med kloge tanker. Lige sådan som på billedet:

Vi bygger en Telegram-bot i Yandex.Cloud

Du kan teste den i aktion — her er navnet: @SmartThoughtsBot. Har du bemærket knappen «Alices færdigheder»? Это потому, что бот является своеобразным «компаньоном» для одноименного eksisterende Alices færdighed, dvs. den udfører de samme funktioner som Alices færdighed og muligvis kan de fredeligt eksistere side om side og reklamere for hinanden. Om hvordan man opretter færdigheden Kloge Tanker er beskrevet i artiklen Alice får en færdighed. Nu (efter at have foretaget nogle ændringer efter offentliggørelsen af den førnævnte artikel) vil denne færdighed se omtrent sådan her ud på din smartphone:

Vi bygger en Telegram-bot i Yandex.Cloud

Oprettelse af bot

Jeg håber, at denne tutorial vil være nyttig for alle, også for begyndere i 'botbygning'. Derfor vil jeg i denne sektion beskrive i detaljer, hvordan man overhovedet opretter Telegrambots. For dem som ikke har brug for denne information — gå videre til de næste sektioner.

Åbn appen Telegram, kalder faderen til alle bots (de har det ligesom folk) — @BotFather — og først skal vi give ham kommandoen /help for at opfriske hukommelsen om, hvad vi kan gøre. Nu skal vi interessere os for kommandoen /newbot.

Vi bygger en Telegram-bot i Yandex.Cloud

Da den bot, der beskrives her, allerede er oprettet, vil jeg for demonstrationsformål kort oprette en anden bot (derefter slette den). Jeg vil kalde den DemoHabrBot. Navne (brugernavn) for alle telegram-bots skal slutte på ordet bot, for eksempel: MyCoolBot eller my_cool_bot — det er til bots. Men først giver vi botten et navn (name) — og dette er for mennesker. Navnet kan være på ethvert sprog, indeholde mellemrum, og det behøver ikke at ende med et bestemt ord bot, og det behøver heller ikke at være unikt. I dette eksempel kaldte jeg denne bot Demo Habr.

Vi bygger en Telegram-bot i Yandex.Cloud

Nu vælger vi et navn til botten (brugernavn, det vi bruger til bots). Lad os kalde den DemoHabrBot. Alt der vedrører botnavnet (name) har slet ikke noget at gøre med dens navn — brugernavn (eller har noget at gøre med det, men helt omvendt). Efter at have oprettet et unikt navn til botten, skal vi kopiere og gemme (i streng hemmelighed!) tokenet, der vises på skærmbilledet med den røde pil. Med det kan vi lidt senere opsætte en webhook fra Telegram's til vores Yandex-funktion.

Vi bygger en Telegram-bot i Yandex.Cloud

Nu giver vi kommandoen til fader til alle bots: /mybots, og han viser os listen over alle de bots, vi har oprettet. Lad os for nu lade den nyoprettede bot være Demo Habr (den blev oprettet for at vise, hvordan man laver bots, men vi vil stadig bruge den til andre demonstrationsformål i dag), og lad os se på botten Smarts Thoughts (@SmartThoughtsBot). Klik på knappen med dens navn i listen over bots.

Vi bygger en Telegram-bot i Yandex.Cloud

Her kan vi konfigurere vores bot. Ved at klikke på knappen Edit… går vi til redigeringen af en hvilken som helst mulighed. For eksempel ved at klikke på knappen Edit Name kan vi ændre botens navn, lad os sige i stedet for Smarts Thoughts, skrive Nonsense Ideas. Botpic — det er botens avatar, som skal være minimum 150 x 150 px. Beskrivelse — det er en kort beskrivelse, som brugeren ser ved første opstart af botten, som svar på spørgsmålet: Hvad kan denne bot gøre? Om — en endnu kortere beskrivelse, der sendes med linket til botten (https://t.me/SmartThoughtsBot) eller ved visning af oplysninger om den.

Vi bygger en Telegram-bot i Yandex.Cloud

Vi skal kun konfigurere kommandoerne. For dette trykker vi på knappen Edit Commands. For at standardisere brugerpraksis Telegram anbefales det altid at bruge to kommandoer: /start og /help, og hvis botten har brug for indstillinger — en ekstra kommando /settings. Vores bot er simpel som en bold, så den har ikke brug for indstillinger endnu. Vi skriver de første to kommandoer, som vi derefter vil behandle i koden. Nu, hvis brugeren indtaster en skråstreg (symbolet for skråstreg: /) i inputfeltet, vil der dukke en liste over kommandoer op for hurtig valg. Alt som på billedet: til venstre — vi opsætter kommandoer gennem faderbotten; til højre er disse kommandoer allerede tilgængelige for brugerne i vores bot.

Vi bygger en Telegram-bot i Yandex.Cloud

Yandex-funktion

Nu, når vores bot er oprettet, går vi videre til Yandex.Cloud, for at oprette en funktion, der vil køre koden for vores bot. Hvis du ikke har arbejdet med Yandex.Cloud læse materialet Alice i Bitrix-land, og derefter - Yandex-funktioner sender e-mails. Jeg er næsten sikker på, at disse to relativt korte artikler vil give dig en god grundlæggende forståelse af emnet.

Så, i konsollen Yandex.Cloud vælg punktet i den venstre navigationsmenu Cloud Functions, og klik derefter på knappen Opret funktion. Giv den et navn, og skriv en kort beskrivelse til dig selv.

Vi bygger en Telegram-bot i Yandex.Cloud

After clicking the button Oprette og efter et par sekunder vil den nye funktion dukke op på listen over alle funktioner. Klik på dens navn — det vil føre os til siden Oversigt for vores funktion. Her skal du aktivere (Tændt) kontakten Offentlig funktion, så den bliver tilgængelig fra den eksterne (for Yandex.Cloud) verden, og værdien af felterne Kaldelseslink og Identifikator — skal holdes i strengt fortroligt for alle undtagen dig selv og Telegram, så ingen svindlere kan kalde din funktion.

Vi bygger en Telegram-bot i Yandex.Cloud

Nu bruger vi det venstre menu til at gå til Redaktør funktionerne. Lad os lægge vores Smarts Thoughts, til side i et kort øjeblik og oprette en minimal skabelonfunktion for at teste, om vores bot fungerer... Faktisk er denne funktion i denne sammenhæng vores bot... Kort sagt, lige nu og her vil vi lave en simpel bot, som vil "spejle" (dvs. sende tilbage) brugernes anmodninger. Denne skabelon kan altid bruges til at oprette nye telegram-bots for at sikre, at forbindelsen til Telegramfungerer korrekt. Klik på Opret fil, kald det index.js, og i online Kodeeditor indsæt følgende kode i denne fil:

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

I Yandex.Cloud skal det se nogenlunde sådan ud:

Vi bygger en Telegram-bot i Yandex.Cloud

Derudover angiver vi lidt længere nede Indgangspunkt — index.bot, hvor index det er filnavnet (index.js), mens bot — funktionsnavnet (module.exports.bot). Alle andre felter lader vi "som de er", og klikker på knappen i øverste højre hjørne Opret version. Efter et par sekunder vil denne funktionsversion blive oprettet. Snart, efter at have testet webhooken, vil vi oprette en ny version — Smarts Thoughts.

Vi bygger en Telegram-bot i Yandex.Cloud

Objektlagring

Nu hvor vi har oprettet en Yandex-funktion, lad os, mens vi er i konsollen Yandex.Cloud, oprette en såkaldt bucket (bucket, dvs. en spand på dansk, slet ikke en buket) til opbevaring af billedfiler, der skal bruges i vores bot Smarts Thoughts. I venstre navigationsmenu vælger vi punktet Object Storage, klikker på knappen Opret spand, finder et navn, for eksempel, img-bucket, og vigtigst af alt, Adgang til læsning af objekter gør den offentlig — ellers får Telegram ikke vores billeder at se. Alle øvrige felter lader vi være uændrede. Vi klikker på knappen Opret spand.

Vi bygger en Telegram-bot i Yandex.Cloud

Efter dette kan listen over alle spande se nogenlunde sådan ud (hvis det er din eneste spand):

Vi bygger en Telegram-bot i Yandex.Cloud

Lad os nu klikke på spandens navn, og inden i den oprette en mappe for at organisere opbevaringen af billeder til forskellige applikationer. For eksempel til Telegram-boten Smarts Thoughts skabte jeg en mappe kaldet tg-bot-smart-thoughts (det er fint, jeg forstår denne kode). Opret også en.

Vi bygger en Telegram-bot i Yandex.Cloud

Nu kan du klikke på mappenavnene, gå ind i den og uploade filer:

Vi bygger en Telegram-bot i Yandex.Cloud

Og ved at klikke på filnavnet — få det URL til brug i vores bot, og generelt — hvor som helst (men, publicer ikke dette URL uden grund, da trafikken fra Objektlageret tælles med i prisen).

Vi bygger en Telegram-bot i Yandex.Cloud

Og det er faktisk alt med Objektlageret. Nu vil du vide, hvad du skal gøre, når du ser en opfordring til at uploade filer der.

Webhooks

Lad os nu opsætte webhook — dvs. når boten modtager en opdatering (f.eks. en besked fra en bruger), sender serveren Telegram en anmodning ( Yandex-funktion ) med data til voresrequest. Her er den linje, som du bare kan indsætte i browserens adressefelt, og så opdatere siden (det skal gøres én gang): https://api.telegram.org/bot{bot_token}/setWebHook?url={webhook_url}
Bare erstat {bot_token} med tokenet, vi fik fra bot-faderen, da vi oprettede vores bot, og {webhook_url} — med URL vores Yandex-funktioner. Vent lige et øjeblik! Men Roskomtsenzura forbyder udbydere i Rusland at betjene adressen https://api.telegram.org. Ja, korrekt. Men find på noget. Man kan jo for eksempel bede sin bedstemor i Ukraine, Israel eller Canada om hjælp — der er ingen 'russisk censur' der, og Gud ved, hvordan folk klarer sig uden det. I sidste ende skal anmodning-svar ved opsætning af webhook se sådan ud:

Vi bygger en Telegram-bot i Yandex.Cloud

Lad os teste. Det skal 'spejle'.

Vi bygger en Telegram-bot i Yandex.Cloud

Det gør det. Tillykke — nu er du Yandex-funktion blevet Telegram-bot!

Smarts Thoughts

Og nu laver vi Smarte Tanker. Koden er åben og ligger på GitHub. Den er ret godt kommenteret, og den har kun hundrede linjer. Læs den som en operasangerinde læser librettoen!

Vi bygger en Telegram-bot i Yandex.Cloud

Klient projektet og installer afhængigheder:

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

Foretag de nødvendige ændringer i filen index.js (valgfrit; du kan lade det være som det er). Opret en zip-mappe med filen index.js og mappen node_modules indeni, for eksempel med navnet smart.zip.

Vi bygger en Telegram-bot i Yandex.Cloud

Nu skal du gå til vores Yandex-funktioner, vælg fanen ZIP-archive, tryk på knappen Vælg fil, og upload vores arkiv smart.zip. Til sidst skal du klikke på knappen i øverste højre hjørne Opret version.

Vi bygger en Telegram-bot i Yandex.Cloud

Efter et par sekunder, når funktionen er opdateret, vil vi teste vores bot igen. Nu spejler den ikke længere, men leverer kloge tanker!

Vi bygger en Telegram-bot i Yandex.Cloud

Det er alt for i dag. Andre artikler følger. For dem, der interesserer sig for at læse sådanne emner — tilmeld dig notifikationer om nye artikler. Du kan tilmelde dig her, eller på Telegram-kanal IT Tutorial Zakhar, eller Twitter @mikezaharov.

Links

Kode på GitHub
Yandex Cloud Functions
Yandex Object Storage
Bots: En introduktion til udviklere
Telegram Bot API

Donationer

Vi bygger en Telegram-bot i Yandex.Cloud

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster