Bygger en Telegram-bot i Yandex.Cloud

Bygger en Telegram-bot i Yandex.Cloud

Idag kommer vi att samla i Yandex.Cloud Telegram-bot med hjĂ€lp av Yandex Cloud Functions (eller Yandex-funktioner — för korthet) och Yandex Object Storage (eller Objektlagring — för tydlighet). Koden kommer att vara pĂ„ Node.js. Men det finns en pikant omstĂ€ndighet — en organisation som vi kan kalla RossComCensorship (censur förbjuden enligt artikel 29 i Rysslands konstitution) tillĂ„ter inte internetleverantörer i Ryssland att vidarebefordra förfrĂ„gningar till Telegram API pĂ„ adressen: https://api.telegram.org/. NĂ„ja, vi kommer att avstĂ„ — om det inte finns, sĂ„ finns det inte. För i vĂ„r vĂ€ska har vi de sĂ„ kallade webhooks — med hjĂ€lp av dem gör vi inga specifika förfrĂ„gningar, utan skickar bara vĂ„r förfrĂ„gan som svar pĂ„ vilken förfrĂ„gan som helst till oss. Det vill sĂ€ga, som i Odessa — vi svarar med en frĂ„ga pĂ„ en frĂ„ga. DĂ€rför Telegram API kommer inte att figurerar i vĂ„r kod.

DisclaimerDe nÀmnda namnen pÄ statliga organisationer i denna artikel Àr fiktiva och eventuella likheter med namnen pÄ verkligt existerande organisationer Àr slumpmÀssiga.

SÄ, vi kommer att göra en bot som ger oss kloka tankar. Precis som pÄ bilden:

Bygger en Telegram-bot i Yandex.Cloud

Du kan prova den i praktiken — hĂ€r Ă€r namnet: @SmartThoughtsBot. La du mĂ€rke till knappen «Alisas fĂ€rdighet»? Đ­Ń‚ĐŸ ĐżĐŸŃ‚ĐŸĐŒŃƒ, Ń‡Ń‚ĐŸ Đ±ĐŸŃ‚ яĐČĐ»ŃĐ”Ń‚ŃŃ сĐČĐŸĐ”ĐŸĐ±Ń€Đ°Đ·ĐœŃ‹ĐŒ «ĐșĐŸĐŒĐżĐ°ĐœŃŒĐŸĐœĐŸĐŒÂ» ĐŽĐ»Ń ĐŸĐŽĐœĐŸĐžĐŒĐ”ĐœĐœĐŸĐłĐŸ Alisa's fĂ€rdighet, det vill sĂ€ga, den utför samma funktioner som Alisa's fĂ€rdighet och möjligtvis kan de samexistera fredligt och marknadsföra varandra. Om hur man skapar fĂ€rdigheten Kloka Tankar berĂ€ttas i artikeln Alisa fĂ„r en fĂ€rdighet. Just nu (efter att ha gjort nĂ„gra Ă€ndringar efter publiceringen av den nĂ€mnda artikeln) kommer den hĂ€r fĂ€rdigheten att se ut ungefĂ€r sĂ„ hĂ€r pĂ„ smartphone:

Bygger en Telegram-bot i Yandex.Cloud

Skapa en bot

Jag skulle vilja att den hĂ€r guiden Ă€r till nytta för alla, inklusive nybörjare i "bot-byggande". DĂ€rför kommer jag att beskriva i detalj hur man skapar i TelegrambĂ„de bots. För de som inte behöver denna information — gĂ„ vidare till de följande avsnitten.

Öppna appen Telegram, kalla pĂ„ alla bots fader (de verkar som mĂ€nniskor) — @BotFather — och ge honom kommandot /help för att friska upp minnet om vad vi kan göra. Just nu kommer vi att vara intresserade av kommandot /newbot.

Bygger en Telegram-bot i Yandex.Cloud

Eftersom den bot som beskrivs hĂ€r redan Ă€r skapad, för demonstrationsĂ€ndamĂ„l kommer jag att skapa en annan bot för en kort tid (sedan tar jag bort den). Jag kommer att kalla den DemoHabrBot. Namnen (username) pĂ„ alla Telegram-bots mĂ„ste sluta med ordet bot, till exempel: MyCoolBot eller my_cool_bot — detta Ă€r för bots. Men först ger vi boten ett namn (name) — och detta Ă€r för mĂ€nniskor. Namnet kan vara pĂ„ vilket sprĂ„k som helst, innehĂ„lla mellanslag, och behöver inte sluta med ett specifikt ord bot, och det behöver inte ens vara unikt. I detta exempel kallade jag denna bot Demo Habr.

Bygger en Telegram-bot i Yandex.Cloud

Nu vĂ€ljer vi ett namn för boten (username, det som Ă€r för botar). LĂ„t oss kalla den DemoHabrBot. Allt som rör botens namn (name) har inget att göra med dess identitet — username (eller har, men precis tvĂ€rtom). Efter att vi framgĂ„ngsrikt har skapat ett unikt namn för boten mĂ„ste vi kopiera och spara (i största hemlighet!) token som visas pĂ„ skĂ€rmdumpen med den röda pilen. Med hjĂ€lp av den kommer vi lite senare att stĂ€lla in utgĂ„ende Telegramwebhook pĂ„ vĂ„r Yandex-funktion.

Bygger en Telegram-bot i Yandex.Cloud

Och nu ger vi kommandot till fadern av alla botar: /mybots, och han visar oss listan över alla botar som vi har skapat. LÄt oss Àn sÄ lÀnge lÀmna den nyskapade boten Demo Habr (den skapades för att visa hur man skapar botar, men vi kommer att anvÀnda den för andra demonstrationsÀndamÄl senare idag), och titta pÄ boten Smart Tankar (@SmartThoughtsBot). Vi klickar pÄ knappen med botens namn i botlistan.

Bygger en Telegram-bot i Yandex.Cloud

HĂ€r kan vi konfigurera vĂ„r bot. Genom att trycka pĂ„ knappen Edit
 gĂ„r vi till redigering av en viss option. Till exempel, genom att trycka pĂ„ knappen Edit Name kan vi Ă€ndra botens namn, sĂ€g istĂ€llet för Smart Tankar, skriva Kraftfulla IdĂ©er. Botpic — detta Ă€r botens avatar, bör vara minst 150 x 150 px. Beskrivning — detta Ă€r en kort beskrivning som anvĂ€ndaren ser vid första anvĂ€ndningen av boten, som svar pĂ„ frĂ„gan: Vad kan denna bot göra? Om — en Ă€nnu kortare beskrivning som överförs med lĂ€nken till boten (https://t.me/SmartThoughtsBot) eller vid visning av information om den.

Bygger en Telegram-bot i Yandex.Cloud

Vi har bara kvar att konfigurera kommandona. För detta trycker vi pĂ„ knappen Edit Commands. För att standardisera anvĂ€ndarpraksis Telegram rekommenderar att alltid anvĂ€nda tvĂ„ kommandon: /start och /help, och om boten behöver instĂ€llningar — ett ytterligare kommando /settings. VĂ„r bot Ă€r sĂ„ enkel som en boll, sĂ„ han behöver inte nĂ„gra instĂ€llningar för tillfĂ€llet. Vi skriver in de tvĂ„ första kommandona som vi sedan kommer att behandla i koden. Nu, om anvĂ€ndaren skriver in ett snedstreck (tecknet /: /), kommer en lista med kommandon att dyka upp för snabb valning. Allt som pĂ„ bilden: till vĂ€nster — vi stĂ€ller in kommandona via fadern av boten; till höger Ă€r dessa kommandon redan tillgĂ€ngliga för anvĂ€ndarna i vĂ„r bot.

Bygger en Telegram-bot i Yandex.Cloud

Yandex-funktion

Nu nĂ€r vĂ„r bot Ă€r skapad, gĂ„r vi till Yandex.Cloud, för att skapa en funktion som kommer att köra koden för vĂ„r bot. Om du inte har arbetat med Yandex.Cloud lĂ€s materialet Alice i Bitrix-land, och sedan — Yandex-funktioner skickar e-post. Jag Ă€r nĂ€stan sĂ€ker pĂ„ att dessa tvĂ„ relativt korta artiklar Ă€r tillrĂ€ckliga för att fĂ„ en grundlĂ€ggande förstĂ„else av Ă€mnet.

SÄ, i konsolen Yandex.Cloud i den vÀnstra navigationsmenyn vÀljer vi alternativet Cloud Functions, och klickar sedan pÄ knappen Skapa funktion. Ge den ett namn och en kort beskrivning för dig sjÀlv.

Bygger en Telegram-bot i Yandex.Cloud

Efter att ha tryckt pĂ„ knappen Skapa och efter ett par sekunder kommer den nya funktionen att dyka upp i listan över alla funktioner. Klicka pĂ„ dess namn — detta tar oss till sidan Översikt för vĂ„r funktion. HĂ€r mĂ„ste vi aktivera (On) vĂ€xeln Offentlig funktion, sĂ„ att den blir tillgĂ€nglig frĂ„n externa (för Yandex.Cloud) vĂ€rlden, och vĂ€rdet av fĂ€lten LĂ€nk för anrop och Identifierare — hĂ„ll hemlig frĂ„n alla utom dig sjĂ€lv och Telegram, sĂ„ att ingen bedragare kan Ă„beropa din funktion.

Bygger en Telegram-bot i Yandex.Cloud

Nu gĂ„r vi via den vĂ€nstra menyn till Redaktör funktionerna. LĂ„t oss för tillfĂ€llet lĂ€gga vĂ„ra Smart Tankar, och skapa en minimal mall-funktion för att testa vĂ„r bots funktionalitet
 ÄndĂ„, i detta sammanhang Ă€r denna funktion vĂ„r bot
 Kort sagt, just nu och precis hĂ€r kommer vi att skapa en mycket enkel bot som kommer att "Ă„terspegla" (dvs. skicka tillbaka) anvĂ€ndarnas förfrĂ„gningar. Denna mall kan alltid anvĂ€ndas vid skapandet av nya Telegram-botar för att sĂ€kerstĂ€lla att kontakten med Telegramfunkar som den ska. Klicka pĂ„ Skapa fil, ge den namnet index.js, och i den online Kodredigeraren klistrar vi in följande kod i denna 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-konsolen bör det se ut nÄgot i stil med:

Bygger en Telegram-bot i Yandex.Cloud

Sedan anger vi lite lĂ€ngre ner Anropspunkt — index.bot, dĂ€r index det Ă€r filnamnet (index.js), och bot — funktionsnamnet (module.exports.bot). LĂ„t alla andra fĂ€lt vara "som de Ă€r", och i det övre högra hörnet klickar vi pĂ„ knappen Skapa version. Om nĂ„gra sekunder kommer denna versions funktion att skapas. Snart, efter testning webhook, kommer vi att skapa en ny version — Smart Tankar.

Bygger en Telegram-bot i Yandex.Cloud

Objektlagring

Nu nĂ€r vi har skapat en Yandex-funktion, lĂ„t oss, medan vi Ă€r i konsolen Yandex.Cloud, skapa en sĂ„ kallad bucket (bucket, det vill sĂ€ga en hink pĂ„ ryska, Ă€r inte en bukett) för att lagra bildfiler som kommer att anvĂ€ndas i vĂ„r bot Smart Tankar. I den vĂ€nstra navigeringsmenyn vĂ€ljer vi Object Storage, klicka pĂ„ knappen Skapa hink, tĂ€nk pĂ„ ett namn, till exempel img-bucket, och viktigast av allt, Åtkomst till objekt görs offentlig – annars fĂ„r Telegram inte se vĂ„ra bilder. Alla andra fĂ€lt lĂ€mnas oförĂ€ndrade. Klicka pĂ„ knappen Skapa hink.

Bygger en Telegram-bot i Yandex.Cloud

Efter detta kan listan över alla hinkar se ut ungefÀr sÄ hÀr (om detta Àr din enda hink):

Bygger en Telegram-bot i Yandex.Cloud

Nu föreslÄr jag att vi klickar pÄ hinkens namn och inne i den skapar en mapp för att organisera lagringen av bilder för olika applikationer. Till exempel för Telegram-boten Smart Tankar har jag skapat en mapp som heter tg-bot-smart-thoughts (inga problem, jag kommer förstÄ denna kod). Skapa gÀrna en sjÀlv.

Bygger en Telegram-bot i Yandex.Cloud

Nu kan vi klicka pÄ mappens namn, gÄ in i den och ladda upp filer:

Bygger en Telegram-bot i Yandex.Cloud

Och genom att klicka pĂ„ filnamnet – fĂ„ den URL för att anvĂ€nda i vĂ„r bot, och faktiskt – var som helst (men publicera inte detta URL om det inte behövs, eftersom trafiken frĂ„n Objektslagring debiteras).

Bygger en Telegram-bot i Yandex.Cloud

Det var allt om Objektslagring. Nu vet du vad du ska göra nÀr du ser en uppmaning att ladda upp filer dit.

Webhook

Nu ska vi stĂ€lla in webhook – det vill sĂ€ga nĂ€r boten fĂ„r en uppdatering (till exempel ett meddelande frĂ„n en anvĂ€ndare), kommer en begĂ€ran att skickas frĂ„n servern Telegram till vĂ„r Yandex-funktion ({request}) med data. HĂ€r Ă€r en rad som man enkelt kan klistra in i webblĂ€sarens adressfĂ€lt och sedan uppdatera sidan (detta behöver göras endast en gĂ„ng): https://api.telegram.org/bot{bot_token}/setWebHook?url={webhook_url}
Vi bara byter ut {bot_token} mot token som vi fĂ„tt frĂ„n bot-fadern nĂ€r vi skapade vĂ„r bot, och {webhook_url} – till URL vĂ„r Yandex-funktioner. VĂ€nta lite! Men Ă€r det inte sĂ„ att RossComCensorship förbjuder leverantörer i Ryssland att betjĂ€na adressen https://api.telegram.org. Ja, det stĂ€mmer. Men kom pĂ„ nĂ„got. Man kan ju till exempel be sin mormor i Ukraina, Israel eller Kanada — dĂ€r finns inga sĂ„dana "russka censurer", och endast Gud vet hur mĂ€nniskor lever utan detta. Resultatet Ă€r att begĂ€ran-svar vid instĂ€llning av webhooken ska se ut sĂ„ hĂ€r:

Bygger en Telegram-bot i Yandex.Cloud

LÄt oss testa. Det ska "speglas".

Bygger en Telegram-bot i Yandex.Cloud

SĂ„ Ă€r det. Grattis – nu Ă€r du Yandex-funktion Detta Telegram-bot!

Smart Tankar

Nu skapar vi Smarta Tankar. Koden Àr öppen och finns pÄ GitHub. Den Àr ganska bra kommenterad, och den har bara hundra rader. LÀs den som en operasÄngerska lÀser librettot!

Bygger en Telegram-bot i Yandex.Cloud

Klonar projektet och installerar beroenden:

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

Gör nödvÀndiga Àndringar i filen index.js (valfritt; du behöver inte Àndra nÄgot). Skapa zip-arkiv, med filen index.js och mappen node_modules inuti, till exempel med namnet smart.zip.

Bygger en Telegram-bot i Yandex.Cloud

Nu gÄr du i konsolen till vÄr Yandex-funktioner, vÀlj fliken ZIP-arkiv, tryck pÄ knappen VÀlj fil, och ladda upp vÄrt arkiv smart.zip. Till sist, i det övre högra hörnet klickar du pÄ knappen Skapa version.

Bygger en Telegram-bot i Yandex.Cloud

Om nÄgra sekunder, nÀr funktionen har uppdaterats, testar vi vÄr bot igen. Nu speglar den inte lÀngre utan levererar kloka tankar!

Bygger en Telegram-bot i Yandex.Cloud

Det Ă€r allt för idag. Fler artiklar följer. Om du Ă€r intresserad av att lĂ€sa liknande — prenumerera pĂ„ meddelanden om nya artiklar. Du kan prenumerera hĂ€r, eller pĂ„ Telegram-kanal IT Tutorial Zakhar, eller Twitter @mikezaharov.

LĂ€nkar

Kod pÄ GitHub
Yandex Cloud Functions
Yandex Object Storage
Bots: En introduktion för utvecklare
Telegram Bot API

Donations

Bygger en Telegram-bot i Yandex.Cloud

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster