Bygga en Telegram-bot i Yandex.Cloud

Bygga en Telegram-bot i Yandex.Cloud

Idag, från skrotmaterial, kommer vi att montera Yandex.Cloud Telegram bot med Yandex molnfunktioner (eller Yandex funktioner - för kort) och Yandex objektlagring (eller Objektlagring - för tydlighets skull). Koden kommer att vara på node.js. Men det finns en pikant omständighet - en viss organisation som heter, låt oss säga, RossKomTsenzur (censur är förbjudet enligt artikel 29 i Ryska federationens konstitution), tillåter inte ryska internetleverantörer att skicka förfrågningar till Telegram API av adressen: https://api.telegram.org/. Nåväl, det gör vi inte - nej, nej. När allt kommer omkring, i vår väska finns det sk. webhooks — med deras hjälp gör vi inga förfrågningar till en specifik adress, utan skickar helt enkelt vår förfrågan som ett svar på varje förfrågan till oss. Det vill säga, som i Odessa svarar vi på en fråga med en fråga. Det är därför Telegram API kommer inte att visas i vår kod.

varningNamnen på eventuella statliga organisationer som nämns i den här artikeln är fiktiva, och möjliga matchningar med namnen på verkliga organisationer är tillfälliga.

Så vi kommer att göra en bot som ger oss smarta tankar. Exakt som på bilden:

Bygga en Telegram-bot i Yandex.Cloud

Du kan prova det i aktion - här är namnet: @SmartThoughtsBot. Lägg märke till knappen "Alices skicklighet"? Detta beror på att boten är ett slags "följeslagare" för boten med samma namn. Alices skicklighet, dvs. den utför samma funktioner som Alices skicklighet och det är möjligt att de kommer att kunna samexistera i fred genom att göra reklam för varandra. Om hur man skapar skicklighet Smarta tankar beskrivs i artikeln Alice vinner skicklighet. Nu (efter att ha gjort några ändringar efter publiceringen av ovanstående artikel) på smartphonen detta skicklighet kommer se ut ungefär så här:

Bygga en Telegram-bot i Yandex.Cloud

Skapa en bot

Jag vill att den här handledningen ska vara användbar för alla, inkl. och nybörjare botbyggare. Därför kommer jag i det här avsnittet att beskriva i detalj hur man skapar i allmänhet Telegram'e bots. För dem som inte behöver denna information, fortsätt till följande avsnitt.

Öppna applikationen Telegaram, låt oss kalla alla bots far (de har allt som människor) - @BotFather - och först ger vi honom kommandot /help för att fräscha upp hans minne av vad vi kan göra. Nu kommer vi att vara intresserade av laget / nybot.

Bygga en Telegram-bot i Yandex.Cloud

Eftersom boten som beskrivs här redan har skapats kommer jag i demonstrationssyfte skapa en annan bot under en kort tid (och sedan radera den). Jag ringer honom DemoHabrBot. Namn (Användarnamn) av alla telegramrobotar måste sluta med ordet bot, till exempel: MyCoolBot eller min_cool_bot - det här är för bots. Men först ger vi boten ett namn (namn) - och det här är för människor. Namnet kan vara på vilket språk som helst, innehålla mellanslag och behöver inte sluta med ett ord bot, och behöver inte ens vara unik. I det här exemplet kallade jag denna bot Demo Habr.

Bygga en Telegram-bot i Yandex.Cloud

Välj nu ett namn för boten (Användarnamn, den för bots). Låt oss ringa honom DemoHabrBot. Allt relaterat till namnet på boten (namn) relaterar inte till hans namn alls - Användarnamn (eller gäller, men precis tvärtom). Efter att ha skapat ett unikt botnamn måste vi kopiera och spara (i största förtroende!) token som visas på skärmdumpen med en röd pil. Med dess hjälp kommer vi senare att fastställa ursprunget från Telegram'en webhook till vår Yandex funktion.

Bygga en Telegram-bot i Yandex.Cloud

Låt oss nu ge kommandot till fadern till alla botar: /mybots, och det kommer att visa oss en lista över alla bots vi har skapat. Låt oss lämna den nybakade boten ifred för nu Demo Habr (den skapades för att visa hur man skapar bots, men vi kommer också att använda den idag för andra demonstrationsändamål), och låt oss titta på boten Smarta tankar (@SmartThoughtsBot). Klicka på knappen med dess namn i listan över botar.

Bygga en Telegram-bot i Yandex.Cloud

Här kan vi konfigurera vår bot. Genom att trycka på knappen Redigera… Vi kommer att gå vidare till att redigera ett eller annat alternativ. Till exempel genom att klicka på knappen Redigera namn vi kan ändra namnet på boten, säg istället Smarta tankar, skriv Galna idéer. Botpic - det här är botens avatar, måste åtminstone vara det 150 x 150 px. Beskrivning — detta är en kort beskrivning som användaren ser när han startar boten för första gången, som ett svar på frågan: Vad kan den här boten göra? Om oss — en ännu kortare beskrivning, som sänds med en länk till boten (https://t.me/SmartThoughtsBot) eller när du visar information om det.

Bygga en Telegram-bot i Yandex.Cloud

Allt vi behöver göra är att ställa in kommandona. För att göra detta, tryck på knappen Redigera kommandon. Att standardisera användarpraxis Telegram rekommenderar att du alltid använder två kommandon: /Start и /hjälp, och om boten behöver inställningar, använd ytterligare kommandot /settings. Vår bot är enkel som en boll, så den behöver inga inställningar än. Vi skriver de två första kommandona som vi sedan bearbetar i kod. Om användaren nu anger ett snedstreck (snedstreck: /) i inmatningsfältet, kommer en lista med kommandon att visas för snabbval. Allt är som på bilden: till vänster - vi installerar kommandon genom faderboten; till höger är dessa kommandon redan tillgängliga för användare i vår bot.

Bygga en Telegram-bot i Yandex.Cloud

Yandex funktion

Nu när vår bot har skapats, låt oss gå till Yandex.Cloudför att skapa en funktion som kommer att exekvera vår bots kod. Om du inte har jobbat med Yandex.Cloud läsa materialet Alice i landet Bitrix, och då - Yandex-funktioner skickar e-post. Jag är ganska säker på att dessa två relativt korta artiklar kommer att räcka för att du ska ha en grundläggande förståelse för ämnet.

Alltså i konsolen Yandex.Cloud i den vänstra navigeringsmenyn välj objektet Molnfunktioner, och tryck sedan på knappen Skapa en funktion. Vi ger den ett namn och en kort beskrivning för oss själva.

Bygga en Telegram-bot i Yandex.Cloud

Efter att ha tryckt på knappen skapa och efter ett par sekunder kommer den nya funktionen att visas i listan över alla funktioner. Klicka på hennes namn - detta tar oss till sidan Обзор vår funktion. Här måste du aktivera (On) switch Offentlig funktionså att den blir tillgänglig utifrån (för Yandex.Cloud) av världen, och betydelsen av fälten Ring länk и Identifierare — håll det djupt hemligt för alla utom dig själv och Telegram, så att din funktion inte kan anropas av olika bedragare.

Bygga en Telegram-bot i Yandex.Cloud

Gå nu till den vänstra menyn Redaktören funktioner. Låt oss lägga åt sidan för ett ögonblick vårt Smarta tankar, och skapa en minimal mallfunktion för att kontrollera funktionaliteten hos vår bot... Men i detta sammanhang är den här funktionen vår bot... Kort sagt, nu och just här kommer vi att göra en enkel bot som kommer att "spegla" ( skicka tillbaka) användarförfrågningar. Denna mall kan alltid användas när man skapar nya telegrambots för att säkerställa att kommunikationen med Telegram'ohm funkar bra. Klick Skapa fil, låt oss ringa honom index.jsoch online Kodredigerare klistra in följande kod i den här 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-konsolen borde det se ut ungefär så här:

Bygga en Telegram-bot i Yandex.Cloud

Längre nedan anger vi Inkörsport - index.botvar index detta är filnamnet (index.js) och bot - funktionsnamn (module.exports.bot). Lämna alla andra fält som de är och klicka på knappen i det övre högra hörnet Skapa version. Om några sekunder kommer denna version av funktionen att skapas. Strax efter testet webhook, vi kommer att skapa en ny version - Smarta tankar.

Bygga en Telegram-bot i Yandex.Cloud

Objektlagring

Nu när vi har skapat Yandex funktion, kom igen, medan vi är i konsolen Yandex.Cloud, låt oss skapa den så kallade hink (skopa, dvs. hink på ryska, inte en bukett alls) för att lagra bildfiler som kommer att användas i vår bot Smarta tankar. Välj objektet i den vänstra navigeringsmenyn Objektförvaring, tryck på knappen Skapa en hink, kom på ett namn för det, till exempel, img-hink, och viktigast av allt, Läsåtkomst till objekt Vi gör det offentligt - annars ser Telegram inte våra bilder. Vi lämnar alla andra fält oförändrade. tryck på knappen Skapa en hink.

Bygga 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):

Bygga en Telegram-bot i Yandex.Cloud

Nu föreslår jag att du klickar på namnet på hinken och skapar en mapp inuti den för att organisera lagringen av bilder för dina olika applikationer. Till exempel för en telegrambot Smarta tankar Jag skapade en mapp som heter tg-bot-smarta-tankar (ingenting, jag kommer att förstå den här koden). Skapa en också.

Bygga en Telegram-bot i Yandex.Cloud

Nu kan du klicka på mappnamnet, gå in i det och ladda upp filer:

Bygga en Telegram-bot i Yandex.Cloud

Och genom att klicka på filnamnet - hämta det URL för användning i vår bot, och i allmänhet - var som helst (men publicera inte detta URL onödigt, eftersom trafik fr.o.m Objektlagring laddad).

Bygga en Telegram-bot i Yandex.Cloud

Det är i princip allt som finns Objektlagring. Nu vet du vad du ska göra när du ser en uppmaning att ladda upp filer dit.

Webhook

Nu ska vi installera webhook - dvs. när boten tar emot en uppdatering (till exempel ett meddelande från en användare) från servern Telegram in i vår Yandex funktion en begäran kommer att skickas (begära) med data. Här är en rad som du helt enkelt kan klistra in i webbläsarens adressfält och sedan uppdatera sidan (du behöver bara göra detta en gång): https://api.telegram.org/bot{bot_token}/setWebHook?url={webhook_url}
Vi byter bara ut den {bot_token} till token vi fick från faderboten när vi skapade vår bot, och {webhook_url} - på URL vår Yandex funktioner. Vänta en minut! Men RossKomTsenzur förbjuder leverantörer i Ryska federationen att betjäna adressen https://api.telegram.org. Ja det stämmer. Men kom på något. När allt kommer omkring kan du till exempel fråga din mormor om detta i Ukraina, Israel eller Kanada - det finns ingen "Rosskomcensur" där, och bara Gud vet hur människor lever utan det. Som ett resultat bör begäran-svaret när du installerar en webhook se ut så här:

Bygga en Telegram-bot i Yandex.Cloud

Vi testar. Det ska "spegla".

Bygga en Telegram-bot i Yandex.Cloud

Detta är sant. Våra gratulationer - nu Yandex funktion har blivit Telegram-bot!

Smarta tankar

Låt oss nu göra smarta tankar. Koden är öppen och ligger på GitHub. Den är ganska välkommenterad och är bara hundra rader lång. Läs det som ett operadiva-libretto!

Bygga en Telegram-bot i Yandex.Cloud

Klona projektet och installera beroenden:

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

Gör de ändringar du behöver i filen index.js (valfritt; du behöver inte ändra något). Skapa zip-arkiv, med fil index.js och mapp node_modules inuti till exempel under namnet smart.zip.

Bygga en Telegram-bot i Yandex.Cloud

Gå nu till konsolen till vår Yandex funktioner, välj fliken ZIP-arkiv, tryck på knappen Välj en fil, och ladda ner vårt arkiv smart.zip. Slutligen, i det övre högra hörnet, klicka på knappen Skapa version.

Bygga en Telegram-bot i Yandex.Cloud

Om några sekunder, när funktionen är uppdaterad, kommer vi att testa vår bot igen. Nu ”speglar han” inte längre, utan levererar smarta tankar!

Bygga en Telegram-bot i Yandex.Cloud

Det är allt för idag. Fler artiklar följer. Om du är intresserad av att läsa detta, prenumerera på meddelanden om nya artiklar. Du kan prenumerera här eller på Telegram-kanal IT-handledning Zakhar, eller Twitter @mikezaharov.

referenser

Kod på GitHub
Yandex molnfunktioner
Yandex objektlagring
Bots: En introduktion för utvecklare
Telegram Bot API

Donationer

Bygga en Telegram-bot i Yandex.Cloud

Källa: will.com

Lägg en kommentar