Bygge en Telegram-bot i Yandex.Cloud

Bygge en Telegram-bot i Yandex.Cloud

I dag, fra improviserte materialer, vil vi samle inn Yandex.Cloud Telegram bot med Yandex Cloud-funksjoner (eller Yandex-funksjoner for korthets skyld) og Yandex-objektlagring (eller Objektlagring - for klarhet). Koden vil være på node.js. Imidlertid er det en pikant omstendighet - en viss organisasjon som heter, la oss si, RossKomSensur (sensur er forbudt i henhold til artikkel 29 i den russiske føderasjonens grunnlov), tillater ikke internettleverandører i Russland å overføre forespørsler til Telegram API til adressen: https://api.telegram.org/. Vel, vi vil ikke - nei, nei. Faktisk, i vesken vår er det såkalte. webhooks - med deres hjelp gjør vi ikke forespørsler til en bestemt adresse, men sender bare vår forespørsel som et svar på enhver forespørsel til oss. Det vil si, som i Odessa - vi svarer på et spørsmål med et spørsmål. Derfor Telegram API vil ikke vises i koden vår.

AnsvarsfraskrivelseNavnene på eventuelle statlige organisasjoner nevnt i denne artikkelen er fiktive, og mulige sammentreff med navnene på virkelige organisasjoner er tilfeldige.

Så vi vil lage en bot som vil forsyne oss med smarte tanker. Akkurat som på bildet:

Bygge en Telegram-bot i Yandex.Cloud

Du kan prøve det i aksjon - her er navnet: @SmartThoughtsBot. Legg merke til knappen "Alices dyktighet"? Dette er fordi boten er en slags "ledsager" for eponyme Alices dyktighet, dvs. den utfører de samme funksjonene som Alices dyktighet og, kanskje, at de kan sameksistere fredelig ved å reklamere for hverandre. Om hvordan du lager Smart tankeferdighet beskrevet i artikkelen Alice får ferdighetene. Nå (etter å ha gjort noen endringer etter publiseringen av artikkelen ovenfor) på en smarttelefon dette ferdighet vil se omtrent slik ut:

Bygge en Telegram-bot i Yandex.Cloud

Opprettelse av bot

Jeg vil at denne opplæringen skal være nyttig for alle, inkl. og nybegynnere "botbyggere". Derfor vil jeg i denne delen beskrive i noen detalj hvordan du lager generelt i Telegram'e bots. For de som ikke trenger denne informasjonen, fortsett til neste avsnitt.

Åpne applikasjonen Telegaram, vi kaller faren til alle roboter (de har alt som mennesker) - @BotFather - og til å begynne med vil vi gi ham kommandoen / hjelpe for å friske opp minnet vårt om hva vi kan gjøre. Nå er vi interessert i laget / newbot.

Bygge en Telegram-bot i Yandex.Cloud

Siden boten som er beskrevet her allerede er opprettet, vil jeg for demonstrasjonsformål lage en annen bot for en kort stund (så vil jeg slette den). Jeg ringer ham DemoHabrBot. Navn (brukernavn) alle telegramroboter må slutte med et ord bot, for eksempel: MyCoolBot eller min_kule_bot Dette er for roboter. Men først, gi boten et navn (navn) er for mennesker. Navnet kan være på et hvilket som helst språk, inneholde mellomrom, trenger ikke å slutte med et ord bot, og trenger ikke engang å være unik. I dette eksemplet kalte jeg denne boten Demo Habr.

Bygge en Telegram-bot i Yandex.Cloud

Velg nå et navn for boten (brukernavn, den for roboter). La oss kalle det DemoHabrBot. Alt relatert til navnet på boten (navn) er ikke relatert til navnet hans i det hele tatt - brukernavn (eller gjelder, men akkurat det motsatte). Etter å ha opprettet et unikt botnavn, må vi kopiere og lagre (i strengeste konfidensi!) tokenet som vises på skjermbildet med en rød pil. Med dens hjelp vil vi senere installere den utgående Telegram'en webhook til vår Yandex funksjon.

Bygge en Telegram-bot i Yandex.Cloud

Og nå vil vi gi kommandoen til faren til alle roboter: /mybotsog den vil vise oss en liste over alle robotene vi har laget. La oss la den nybakte boten være i fred for nå Demo Habr (den ble laget for å vise hvordan man lager roboter, men vi vil bruke den i dag til andre demonstrasjonsformål), og vurdere boten Smarte tanker (@SmartThoughtsBot). Klikk på knappen med navnet i listen over roboter.

Bygge en Telegram-bot i Yandex.Cloud

Det er her vi kan sette opp boten vår. Å trykke på en knapp Redigere… vi vil gå videre til å redigere ett eller annet alternativ. For eksempel ved å klikke på knappen Rediger navn vi kan endre navnet på boten, si i stedet for Smarte tanker, skrive gale ideer. Botpic - dette er botens avatar, må være minst 150 x 150 px. Beskrivelse er en kort beskrivelse som brukeren ser når boten startes for første gang, som svar på spørsmålet: Hva kan denne boten gjøre? Om oss - en enda kortere beskrivelse, som overføres med en lenke til boten (https://t.me/SmartThoughtsBot) eller når du viser informasjon om det.

Bygge en Telegram-bot i Yandex.Cloud

Vi trenger bare å sette opp kommandoene. For å gjøre dette, trykk på knappen Rediger kommandoer. For å standardisere brukerpraksis Telegram anbefaler alltid å bruke to kommandoer: /start и /hjelp, og hvis boten trenger innstillinger - en ekstra /settings-kommando. Boten vår er så enkel som en ball, så den trenger ingen innstillinger ennå. Vi skriver de to første kommandoene, som vi deretter skal behandle i koden. Nå, hvis brukeren skriver inn en skråstrek (skråstrek: /) i inndatafeltet, vil en liste med kommandoer vises for hurtigvalg. Alt er som på bildet: til venstre - vi setter kommandoer gjennom bot-faren; til høyre er disse kommandoene allerede tilgjengelige for brukere i boten vår.

Bygge en Telegram-bot i Yandex.Cloud

Yandex funksjon

Nå som boten vår er opprettet, la oss gå til Yandex.Cloudfor å lage en funksjon som vil kjøre botkoden vår. Hvis du ikke har jobbet med Yandex.Cloud lese stoffet Alice i landet Bitrix, og så - Yandex-funksjoner sender e-post. Jeg er nesten sikker på at disse to relativt små artiklene vil være nok til at du har en grunnleggende forståelse av emnet.

Så i konsollen Yandex.Clouds i venstre navigasjonsmeny, velg elementet Cloud-funksjoner, og trykk deretter på knappen Lag en funksjon. Vi gir det et navn, og for oss selv - en kort beskrivelse.

Bygge en Telegram-bot i Yandex.Cloud

Etter å ha trykket på knappen skape og etter et par sekunder vil den nye funksjonen vises i listen over alle funksjoner. Klikk på navnet hennes - dette tar oss til siden Gjennomgå funksjonen vår. Her må du aktivereOn) bytte om offentlig funksjonfor å gjøre den tilgjengelig fra den eksterne (for Yandex.Clouds) av verden, og verdien av feltene Link til samtale и Identifikator - hold det dypt hemmelig for alle unntatt deg selv og Telegram, slik at ulike svindlere ikke kan ringe til funksjonen din.

Bygge en Telegram-bot i Yandex.Cloud

Gå nå til venstre ved hjelp av menyen Redaktøren funksjoner. La oss legge til side et øyeblikk Smarte tanker, og lag en minimal malfunksjon for å sjekke ytelsen til boten vår ... Men i denne sammenhengen er denne funksjonen vår bot ... Kort sagt, nå og akkurat her vil vi lage den enkleste boten som vil "speile" ( dvs. send tilbake) brukerforespørsler. Denne malen kan alltid brukes når du oppretter nye telegramroboter for å sikre at kommunikasjon med Telegram'om fungerer fint. Klikk Opprett fil, kall det index.js, og på nett Kode editor lim inn følgende kode i denne filen:

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-konsollen skal det se omtrent slik ut:

Bygge en Telegram-bot i Yandex.Cloud

Nedenfor angir vi inngangspunkt - index.botDer indeks dette er filnavnet (index.js), a bot - funksjonsnavn (module.exports.bot). La alle andre felt stå "som de er", og klikk på knappen i øvre høyre hjørne Opprett versjon. Etter noen sekunder vil denne versjonen av funksjonen bli opprettet. Kort tid etter testing webhook, vil vi lage en ny versjon − Smarte tanker.

Bygge en Telegram-bot i Yandex.Cloud

Objektlagring

Nå som vi har satt opp Yandex funksjonla oss gå mens vi er i konsollen Yandex.Clouds, opprette en såkalt. bøtte (bøtte, dvs. bøtte på russisk, på ingen måte en bukett) for lagring av bildefiler som skal brukes i boten vår Smarte tanker. Velg fra venstre navigasjonsmeny Objektlagring, trykk på knappen Lag bøtte, gi den et navn, for eksempel, img-bøtte, og viktigst, Lesetilgang til objekter gjør det offentlig - ellers vil ikke Telegram se bildene våre. Alle andre felt forblir uendret. Vi trykker på knappen Lag bøtte.

Bygge en Telegram-bot i Yandex.Cloud

Etter det kan en liste over alle bøttene se omtrent slik ut (hvis dette er din eneste bøtte):

Bygge en Telegram-bot i Yandex.Cloud

Nå foreslår jeg å klikke på navnet på bøtta, og lage en mappe inni den for å organisere lagring av bilder for forskjellige applikasjoner. For eksempel for en telegram-bot Smarte tanker jeg opprettet en mappe som heter tg-bot-smarte-tanker (Ingenting, jeg vil forstå dette chiffer). Lag en også.

Bygge en Telegram-bot i Yandex.Cloud

Nå kan du klikke på mappenavnet, gå inn i det og laste opp filer:

Bygge en Telegram-bot i Yandex.Cloud

Og klikk på filnavnet - få det URL for bruk i vår bot, og generelt - hvor som helst (men ikke publiser dette URL unødvendig, siden trafikk fra gjenstandslagring ladet).

Bygge en Telegram-bot i Yandex.Cloud

Her er det faktisk alt gjenstandslagring. Nå vil du vite hva du skal gjøre når du ser spørsmålet om å laste opp filer der.

Webhook

Nå skal vi installere webhook - dvs. når boten mottar en oppdatering (for eksempel en melding fra brukeren), fra serveren Telegram inn i vår Yandex funksjon forespørsel vil bli sendtanmode) med data. Her er en streng som du ganske enkelt kan lime inn i adressefeltet til nettleseren, og deretter oppdatere siden (dette må bare gjøres én gang): https://api.telegram.org/bot{bot_token}/setWebHook?url={webhook_url}
Bare bytt ut {bot_token} til tokenet vi mottok fra far-boten når vi opprettet boten vår, og {webhook_url} - på URL vår Yandex-funksjoner. Vent litt! Men RossKomSensur forbyr leverandører i den russiske føderasjonen å betjene adressen https://api.telegram.org. Ja, det er riktig. Men du kan tenke på noe. Tross alt kan du for eksempel spørre bestemoren din om det i Ukraina, Israel eller Canada - det er ingen "russisk sensur" der, og bare Gud vet hvordan folk lever uten det. Som et resultat bør forespørsel-svaret når du installerer webhook se slik ut:

Bygge en Telegram-bot i Yandex.Cloud

Testing. Bør speiles.

Bygge en Telegram-bot i Yandex.Cloud

Dette er sant. Våre gratulasjoner - nå Yandex funksjon er blitt Telegram-bot!

Smarte tanker

Og nå gjør vi Smarte tanker. Koden er åpen og og ligger på GitHub. Den er ganske godt kommentert, og den er bare hundre linjer lang. Les den som en operadiva-libretto!

Bygge en Telegram-bot i Yandex.Cloud

Klon prosjektet og installer avhengighetene:

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

Gjør endringene du trenger i filen index.js (valgfritt; du kan ikke endre noe). Skape zip-arkiv, med en fil index.js og mappe node_modules inne, for eksempel, kalt smart.zip.

Bygge en Telegram-bot i Yandex.Cloud

Gå nå i konsollen til vår Yandex-funksjoner, velg fanen ZIP-arkiv, trykk på knappen Velg filog last ned arkivet vårt smart.zip. Til slutt, i øvre høyre hjørne, klikk på knappen Opprett versjon.

Bygge en Telegram-bot i Yandex.Cloud

Om noen sekunder, når funksjonen er oppdatert, vil vi teste boten vår på nytt. Nå «speiler han» ikke lenger, men leverer smarte tanker!

Bygge en Telegram-bot i Yandex.Cloud

Det var alt for i dag. Andre artikler følger. Hvis du er interessert i å lese dette, abonner på varsler om nye artikler. Du kan abonnere her eller Telegram-kanal IT-veiledning ZakharEller Twitter @mikezaharov.

referanser

Kode på GitHub
Yandex Cloud-funksjoner
Yandex-objektlagring
Bots: En introduksjon for utviklere
Telegram Bot API

Donasjoner

Bygge en Telegram-bot i Yandex.Cloud

Kilde: www.habr.com

Legg til en kommentar