
I dag skal vi lage en i Telegram-bot med bruk av (or Yandex-funksjoner â for korthets skyld) og (or Objektdatalager â for tydelighet). Koden vil vĂŠre pĂ„ Node.js. Men det er en delikat situasjon â en organisasjon kalt, la oss si, Roskomnadzor (sensur er forbudt ved artikkel 29 i den russiske grunnloven), forbyr internettleverandĂžrer i Russland Ă„ sende forespĂžrselene til Telegram API pĂ„ adressen: https://api.telegram.org/. Vel, vi lar det vĂŠre â ingen forespĂžrsel, ingen forespĂžrsel. For vi har sĂ„kalte webhooks â med deres hjelp sender vi ikke forespĂžrslene til en spesifikk adresse, men bare vĂ„rt svar som respons pĂ„ enhver forespĂžrsel til oss. SĂ„, som i Odessa â vi svarer med et spĂžrsmĂ„l pĂ„ et spĂžrsmĂ„l. Derfor Telegram API vil ikke vĂŠre i koden vĂ„r.
AnsvarsfraskrivelseNavnene pÄ statlige organisasjoner nevnt i denne artikkelen er fiktive, og eventuelle likheter med eksisterende organisasjoner er tilfeldige.
SÄ vi skal lage en bot som gir oss smarte tanker. NÞyaktig som pÄ bildet:
Du kan teste den i aksjon â her er navnet: @SmartThoughtsBot. La oss legge merke til knappen «Alisa-ferdighet»? ĐŃĐŸ ĐżĐŸŃĐŸĐŒŃ, ŃŃĐŸ Đ±ĐŸŃ ŃĐČĐ»ŃĐ”ŃŃŃ ŃĐČĐŸĐ”ĐŸĐ±ŃĐ°Đ·ĐœŃĐŒ «ĐșĐŸĐŒĐżĐ°ĐœŃĐŸĐœĐŸĐŒÂ» ĐŽĐ»Ń ĐŸĐŽĐœĐŸĐžĐŒĐ”ĐœĐœĐŸĐłĐŸ Alisa-ferdigheten, det vil si at den utfĂžrer de samme funksjonene som Alisa-ferdigheten og muligens at de kan eksistere fredelig sammen og reklamere for hverandre. Hvordan lage Ferdighet for Smarte Tanker er forklart i artikkelen . NĂ„ (etter Ă„ ha gjort noen endringer etter publiseringen av den nevnte artikkelen) vil denne ferdigheten se omtrent slik ut pĂ„ smarttelefonen:
Lager en bot
Jeg hĂ„per at denne veiledningen vil vĂŠre nyttig for alle, inklusive nybegynnere i «bot-bygging». Derfor vil jeg i denne delen beskrive ganske detaljert hvordan man faktisk lager Telegramâe boter. For de som ikke trenger denne informasjonen â gĂ„ videre til neste seksjoner.
Ă pne applikasjonen Telegaram, kaller faren til alle boter (de har alt som folk) â @BotFather â og fĂžrst gir vi ham kommandoen /help for Ă„ friske opp hukommelsen om hva vi kan gjĂžre. NĂ„ er vi interessert i kommandoen /newbot.

Siden boten som beskrives her allerede er laget, for demonstrasjonsformĂ„l vil jeg lage en annen bot for en kort tid (deretter vil jeg slette den). Jeg vil kalle den DemoHabrBot. Navnene (username) pĂ„ alle telegram-boter mĂ„ slutte med ordet bot, for eksempel: MyCoolBot eller my_cool_bot â det gjelder boter. Men fĂžrst gir vi boten et navn (name) â og dette er for folk. Navnet kan vĂŠre pĂ„ hvilket som helst sprĂ„k, inneholde mellomrom, og trenger ikke Ă„ slutte med et bestemt ord bot, og det trenger heller ikke Ă„ vĂŠre unikt. I dette eksemplet har jeg kalt denne boten Demo Habr.

NĂ„ velger vi et navn for boten (username, det som er for botene). La oss kalle den DemoHabrBot. Alt som gjaldt botens navn (name) har ingenting Ă„ gjĂžre med dens identitet â username (eller det har noe Ă„ gjĂžre med det, men pĂ„ en helt motsatt mĂ„te). Etter at vi har opprettet et unikt navn for boten, mĂ„ vi kopiere og oppbevare (i streng hemmelighet!) tokenet vist pĂ„ skjermbildet med den rĂžde pilen. Med det vil vi senere sette opp en webhook fra Telegramâ til vĂ„r Yandex-funksjon.

NÄ gir vi kommandoen til alle boters far: /mybots, og han vil vise oss listen over alle botene vi har opprettet. La oss forelÞpig la den nyopprettede boten vÊre Demo Habr (den ble laget for Ä vise hvordan man oppretter boboter, men vi vil bruke den senere til andre demonstrasjonsformÄl), og se pÄ boten Smartere Tanker (@SmartThoughtsBot). Vi klikker pÄ knappen med navnet i listen over botene.

Her kan vi tilpasse boten vĂ„r. Ved Ă„ trykke pĂ„ knappen Edit⊠gĂ„r vi til redigering av en eller annen opsjon. For eksempel, ved Ă„ klikke pĂ„ knappen Edit Name kan vi endre navnet pĂ„ boten, for eksempel fra Smartere Tanker, til Rare Ideer. Botpic â er botens avatar, og bĂžr vĂŠre minst 150 x 150 px. Beskrivelse â er en kort beskrivelse som brukeren ser ved fĂžrste oppstart av boten, som svar pĂ„ spĂžrsmĂ„let: Hva kan denne boten gjĂžre? Om â er en enda mer kompakt beskrivelse som fĂžlger med en link til boten (https://t.me/SmartThoughtsBot) eller nĂ„r man ser informasjon om den.

Vi mĂ„ bare tilpasse kommandoene. For Ă„ gjĂžre dette klikker vi pĂ„ knappen Edit Commands. For Ă„ standardisere brukerpraksis Telegram anbefaler alltid Ă„ bruke to kommandoer: /start og /help, og hvis boten trenger innstillinger â en ekstra kommando /settings. VĂ„r bot er enkel som en ball, sĂ„ den trenger forelĂžpig ingen innstillinger. Vi skriver inn de to fĂžrste kommandoene som vi deretter vil behandle i koden. NĂ„, hvis brukeren skriver inn en skrĂ„strek (/) i inndatafeltet, vil det vises en liste med kommandoer for rask valg. Alt som pĂ„ bildet: til venstre â vi setter opp kommandoene gjennom faderboten; til hĂžyre er disse kommandoene allerede tilgjengelige for brukerne i vĂ„r bot.

Yandex-funksjon
NĂ„, nĂ„r boten vĂ„r er opprettet, gĂ„r vi til Yandex.Cloud, for Ă„ lage en funksjon som vil kjĂžre koden til boten vĂ„r. Hvis du ikke har jobbet med Yandex.Cloud , les materialet , og deretter â . Jeg er nesten sikker pĂ„ at disse to relativt smĂ„ artiklene vil vĂŠre mer enn tilstrekkelige for en grunnleggende forstĂ„else av emnet.
SĂ„, i konsollen Yandex.Cloud , velger vi punktet Cloud Functions, og deretter trykker vi pĂ„ knappen Opprett funksjon. Vi gir den et navn, og for oss selv â en kort beskrivelse.

After clicking the button Opprett Og etter et par sekunder vil den nye funksjonen dukke opp i listen over alle funksjoner. Trykk pĂ„ navnet â dette vil ta oss til siden Oversikt til vĂ„r funksjon. Her mĂ„ vi aktivere (PĂ„) bryteren Offentlig funksjon, sĂ„ den blir tilgjengelig fra det eksterne (for Yandex.Cloud) verden, og verdien av feltene URL for anrop og Identifikator â mĂ„ holdes helt hemmelig for alle unntatt deg selv og Telegram, slik at ingen svindlere kan kalle funksjonen din.

NĂ„ gĂ„r vi med venstremenyen til RedaktĂžr funksjoner. La oss midlertidig legge vĂ„re Smartere Tanker, og lage en minimal mal-funksjon for Ă„ teste botens funksjonalitet⊠For Ăžvrig, i denne sammenhengen er denne funksjonen boten vĂ„r⊠Kort sagt, nĂ„, akkurat her, skal vi lage en enkel bot som vil âspeileâ (dvs. sende tilbake) forespĂžrslene fra brukerne. Denne malen kan alltid brukes nĂ„r du lager nye Telegram-boter for Ă„ bekrefte at forbindelsen til Telegramfungerer som den skal. Vi klikker pĂ„ Lag fil, gir den navnet index.js, og i online Kode-redigerer limer vi 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 konsollen til Yandex.Cloud bĂžr det se omtrent slik ut:

Deretter angir vi lenger ned Inngangspunkt â index.bot, hvor index dette er navnet pĂ„ filen (index.js), mens bot â navnet pĂ„ funksjonen (module.exports.bot). Alle andre felter lar vi stĂ„ som de er, og i Ăžverste hĂžyre hjĂžrne klikker vi pĂ„ knappen Lag versjon. Etter noen sekunder vil denne versjonen av funksjonen bli opprettet. Snart, etter testing av webhook, vil vi opprette en ny versjon â Smartere Tanker.

Objektdatalager
NĂ„ som vi har opprettet Yandex-funksjon, la oss, mens vi er i konsollen Yandex.Cloud, vi oppretter et sĂ„kalt bĂžtte (bĂžtten, altsĂ„ et «bucket» pĂ„ norsk, absolutt ikke en bukett) for lagring av bildefiler som skal brukes i boten vĂ„r Smartere Tanker. I den venstre navigasjonsmenyen velger vi punktet Object Storage, trykker pĂ„ knappen Opprett bĂžtte, finner et navn, for eksempel, img-bucket, og viktigst av alt, Tilgang for lesing av objekter gjĂžr vi offentlig â ellers vil Telegram ikke kunne se bildene vĂ„re. Alle andre felt lar vi stĂ„ uendret. Trykk pĂ„ knappen Opprett bĂžtte.

Etter dette kan listen over alle bĂžtter se omtrent slik ut (hvis dette er din eneste bĂžtte):

NÄ foreslÄr jeg at vi trykker pÄ navnet til bÞtten, og inne i den oppretter vi en mappe for Ä organisere lagringen av bilder for ulike applikasjoner. For eksempel for Telegram-boten Smartere Tanker har jeg opprettet en mappe med navnet tg-bot-smart-thoughts (jeg forstÄr denne koden). Lag gjerne ogsÄ en selv.

NÄ kan vi trykke pÄ navnet til mappen, gÄ inn i den og laste opp filer:

Og ved Ă„ klikke pĂ„ filnavnet â fĂ„ den URL til bruk i boten vĂ„r, og generelt â hvor som helst (men, ikke publiser dette URL unĂždvendig, siden trafikken fra Objektlagring takseres).

Det er i grunnen alt angÄende Objektlagring. NÄ vil du vite hva du skal gjÞre nÄr du ser en oppfordring om Ä laste opp filer dit.
Webhook
NĂ„ skal vi sette opp webhook â altsĂ„ nĂ„r boten fĂ„r en oppdatering (for eksempel, en melding fra brukeren), vil det fra serveren Telegram sendes en forespĂžrsel ( Yandex-funksjon ) med data. Her er strengen som du bare kan lime inn i nettleserens adressefelt, og sĂ„ oppdatere siden (dette mĂ„ gjĂžres bare Ă©n gang):requestBare bytte ut https://api.telegram.org/bot{bot_token}/setWebHook?url={webhook_url}
{bot_token} med tokenet vi fikk fra bot-faren nĂ„r vi opprettet boten vĂ„r, mens {webhook_url} â med vĂ„r URL . Et Ăžyeblikk! Men Yandex-funksjonerforbyr leverandĂžrer i Russland Ă„ betjene adressen Roskomnadzor . Ja, det stemmer. Men du mĂ„ finne pĂ„ noe. Man kan for eksempel be bestemor sin i Ukraina, Israel eller Canada â der er det ingen «roskomsvensurer», og Gud vet hvordan mennesker lever uten det. SĂ„, forespĂžrsel-svar ved oppsett av webhook mĂ„ se slik ut: https://api.telegram.orgVi tester. Det mĂ„ «speile».

Slik er det. VĂ„re gratulasjoner â nĂ„ er du

-bot! Yandex-funksjon er TelegramOg nÄ lager vi Smarte Tanker. Koden er Äpen og ligger pÄ
Smartere Tanker
. Den er ganske godt kommentert, og inneholder bare hundre linjer. Les den som en operasangeren leser librettoen! Klon prosjektet og installer avhengigheter:

ĐĄĐșĐ»ĐŸĐœĐžŃŃĐčŃĐ” ĐżŃĐŸĐ”ĐșŃ Đž ŃŃŃĐ°ĐœĐŸĐČĐžŃĐ” заĐČĐžŃĐžĐŒĐŸŃŃĐž:
git clone https://github.com/stmike/tg-bot-smart-thoughts.git
cd tg-bot-smart-thoughts
npm i
GjĂžr nĂždvendige endringer i filen index.js (valgfritt; du kan la det vĂŠre som det er). Lag zip-arkiv, med filen index.js og mappen node_modules inni, for eksempel kalt smart.zip.

NÄ gÄr du til konsollen vÄr Yandex-funksjoner, velg fanen ZIP-arkiv, klikk pÄ knappen Velg fil, og last opp arkivet vÄrt smart.zip. Til slutt, klikk pÄ knappen i Þverste hÞyre hjÞrne Lag versjon.

Etter noen sekunder, nÄr funksjonen blir oppdatert, test den igjen med boten vÄr. NÄ speiler den ikke lenger, men leverer smarte tanker!

Det er alt for i dag. Flere artikler kommer. For de som er interessert i lignende emner â abonner pĂ„ varsler om nye artikler. Du kan abonnere her, eller pĂ„ Telegram-kanal , eller Twitter .
Lenker
Donasjoner
Kilde: habr.com
