Bou 'n Telegram-bot in Yandex.Cloud

Bou 'n Telegram-bot in Yandex.Cloud

Vandag, van geïmproviseerde materiaal, sal ons insamel Yandex.Wolk Telegram bot met Yandex Wolk Funksies (Of Yandex funksies vir beknoptheid) en Yandex-voorwerpberging (Of Voorwerpberging - vir duidelikheid). Die kode sal aan wees Node.js. Daar is egter een pikante omstandigheid - 'n sekere organisasie genaamd, kom ons sê, RossKomSensuur (sensuur word deur artikel 29 van die Grondwet van die Russiese Federasie verbied), laat nie internetverskaffers in Rusland toe om versoeke oor te dra na Telegram API by die adres: https://api.telegram.org/. Wel, ons sal nie - nee, nee. Inderdaad, in ons sak is daar sg. webhooks - met hul hulp rig ons nie versoeke na 'n spesifieke adres nie, maar stuur slegs ons versoek as 'n antwoord op enige versoek aan ons. Dit wil sê, soos in Odessa - ons beantwoord 'n vraag met 'n vraag. Dis hoekom Telegram API sal nie in ons kode verskyn nie.

VrywaringDie name van enige staatsorganisasies wat in hierdie artikel genoem word, is fiktief, en moontlike toevallighede met die name van werklike organisasies is toevallig.

Dus, ons sal 'n bot maak wat ons van slim gedagtes sal voorsien. Presies soos op die foto:

Bou 'n Telegram-bot in Yandex.Cloud

Jy kan dit in aksie probeer - hier is die naam: @SmartThoughtsBot. Let op die knoppie "Alice se vaardigheid"? Dit is omdat die bot 'n soort "metgesel" is vir die gelyknamige Alice se vaardigheid, d.w.s. dit verrig dieselfde funksies as Alice se vaardigheid en, miskien, dat hulle vreedsaam kan saamleef deur mekaar te adverteer. Oor hoe om te skep Slim denke vaardigheid in die artikel beskryf Alice kry die vaardigheid. Nou (nadat 'n paar veranderinge gemaak is na die publikasie van die bogenoemde artikel) op 'n slimfoon hierdie vaardigheid sal so iets lyk:

Bou 'n Telegram-bot in Yandex.Cloud

Bot skepping

Ek wil graag hê dat hierdie tutoriaal nuttig moet wees vir almal, insluitend. en beginner "bot bouers". Daarom sal ek in hierdie afdeling in detail beskryf hoe om in die algemeen te skep telegram'n bots. Vir diegene wat nie hierdie inligting nodig het nie, gaan voort na die volgende afdelings.

Maak die aansoek oop Telegaram, ons noem die vader van alle bots (hulle het alles soos mense) - @BotVader - en om mee te begin, sal ons hom die / help opdrag gee om ons geheue te verfris van wat ons kan doen. Nou stel ons belang in die span / newbot.

Bou 'n Telegram-bot in Yandex.Cloud

Aangesien die bot wat hier beskryf word, reeds geskep is, sal ek vir demonstrasiedoeleindes vir 'n kort rukkie 'n ander bot skep (dan sal ek dit uitvee). Ek sal hom bel DemoHabrBot. Name (Gebruikersnaam) alle telegrambots moet met 'n woord eindig bot, byvoorbeeld: MyCoolBot of my_cool_bot Dit is vir bots. Maar gee eers die bot 'n naam (naam) is vir mense. Die naam kan in enige taal wees, spasies bevat, hoef nie met 'n woord te eindig nie bot, en hoef nie eens uniek te wees nie. In hierdie voorbeeld het ek hierdie bot genoem Demo Habr.

Bou 'n Telegram-bot in Yandex.Cloud

Kies nou 'n naam vir die bot (Gebruikersnaam, die een vir bots). Kom ons noem dit DemoHabrBot. Alles wat verband hou met die naam van die bot (naam) is glad nie verwant aan sy naam nie - Gebruikersnaam (of geld, maar presies die teenoorgestelde). Nadat ons 'n unieke botnaam suksesvol geskep het, moet ons die teken wat in die skermkiekie gewys word met 'n rooi pyl kopieer en stoor (in die strengste vertroulikheid!). Met sy hulp sal ons later die uitgaande installeer telegram'n webhaak na ons Yandex funksie.

Bou 'n Telegram-bot in Yandex.Cloud

En nou sal ons die opdrag gee aan die vader van alle bots: /mybotsen dit sal vir ons 'n lys wys van al die bots wat ons geskep het. Kom ons los die varsgebakte bot vir eers Demo Habr (dit is geskep om te wys hoe om bots te skep, maar ons sal dit vandag vir ander demonstrasiedoeleindes gebruik), en oorweeg die bot Slim gedagtes (@SmartThoughtsBot). Klik op die knoppie met sy naam in die lys van bots.

Bou 'n Telegram-bot in Yandex.Cloud

Dit is waar ons ons bot kan opstel. Druk 'n knoppie Wysig ... ons sal aanbeweeg om een ​​of ander opsie te wysig. Byvoorbeeld, deur op die knoppie te klik Wysig naam ons kan die naam van die bot verander, sê in plaas van Slim gedagtes, skryf mal idees. Botpic - dit is die bot se avatar, moet ten minste wees 150 x 150 px. Beskrywing is 'n kort beskrywing wat die gebruiker sien wanneer die bot vir die eerste keer geloods word, as 'n antwoord op die vraag: Wat kan hierdie bot doen? Oor - 'n nog korter beskrywing, wat oorgedra word met 'n skakel na die bot (https://t.me/SmartThoughtsBot) of wanneer jy inligting daaroor bekyk.

Bou 'n Telegram-bot in Yandex.Cloud

Ons moet net die opdragte opstel. Om dit te doen, druk die knoppie Wysig opdragte. Om gebruikerspraktyke te standaardiseer telegram beveel aan om altyd twee opdragte te gebruik: / begin и / hulp, en as die bot instellings benodig, 'n bykomende /settings-opdrag. Ons bot is so eenvoudig soos 'n bal, so dit het nog geen instellings nodig nie. Ons skryf die eerste twee opdragte, wat ons dan in die kode sal verwerk. Nou, as die gebruiker 'n skuinsstreep (skuinsteken: /) in die invoerveld invoer, sal 'n lys van opdragte verskyn vir hul vinnige keuse. Alles is soos in die prentjie: aan die linkerkant - ons stel opdragte deur die bot-vader; aan die regterkant is hierdie opdragte reeds beskikbaar vir gebruikers in ons bot.

Bou 'n Telegram-bot in Yandex.Cloud

Yandex funksie

Noudat ons bot geskep is, kom ons gaan na Yandex.Wolkom 'n funksie te skep wat ons bot-kode sal uitvoer. As jy nie gewerk het met Yandex.Wolk lees die materiaal Alice in die land van Bitrix, en dan - Yandex-funksies stuur e-pos. Ek is amper seker dat hierdie twee relatief klein artikels genoeg sal wees vir jou om 'n basiese begrip van die onderwerp te hê.

So in die konsole Yandex.Wolke in die linkernavigasiekieslys, kies die item Wolkfunksies, en druk dan die knoppie Skep 'n funksie. Ons gee dit 'n naam, en vir onsself - 'n kort beskrywing.

Bou 'n Telegram-bot in Yandex.Cloud

Nadat u op die knoppie gedruk het Skep en na 'n paar sekondes sal die nuwe funksie in die lys van alle funksies verskyn. Klik op haar naam - dit sal ons na die bladsy neem Hersien ons funksie. Hier moet jy aktiveerOn) skakel openbare funksieom dit vanaf die eksterne beskikbaar te stel (vir Yandex.Wolke) van die wêreld, en die waarde van die velde Skakel na oproep и Identifiseerder - hou dit diep geheim vir almal behalwe jouself en Telegram, sodat verskeie swendelaars nie jou funksie kan bel nie.

Bou 'n Telegram-bot in Yandex.Cloud

Gebruik nou die linkerkieslys, gaan na Die redakteur funksies. Laat ons ons vir 'n oomblik opsy sit Slim gedagtes, en skep 'n minimale sjabloonfunksie om die werkverrigting van ons bot na te gaan ... In hierdie konteks is hierdie funksie egter ons bot ... Kortom, nou en net hier sal ons die eenvoudigste bot maak wat sal "spieël" ( d.w.s. terugstuur ) gebruikerversoeke. Hierdie sjabloon kan altyd gebruik word wanneer nuwe telegram-bots geskep word om seker te maak dat kommunikasie met Telegram'om werk goed. Klik Skep lêer, roep dit index.js, en aanlyn Kode redakteur plak die volgende kode in hierdie lêer:

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

In die Yandex.Cloud-konsole moet dit iets soos volg lyk:

Bou 'n Telegram-bot in Yandex.Cloud

Hieronder dui ons aan toegangspunt - indeks.botWaar indeks dit is die lêernaam (index.js), en bot - funksie naam (module.exports.bot). Laat alle ander velde "soos dit is" en klik in die regter boonste hoek op die knoppie Skep weergawe. Na 'n paar sekondes sal hierdie weergawe van die funksie geskep word. Kort na die toets webhaak, sal ons 'n nuwe weergawe skep − Slim gedagtes.

Bou 'n Telegram-bot in Yandex.Cloud

Voorwerpberging

Noudat ons opgestel het Yandex funksiekom ons gaan terwyl ons in die konsole is Yandex.Wolke, skep 'n sg. emmer (emmer, d.w.s. emmer in Russies, geensins 'n boeket nie) vir die stoor van beeldlêers wat in ons bot gebruik sal word Slim gedagtes. Kies uit die linkernavigasiekieslys Object berging, druk die knoppie Skep emmer, gee dit 'n naam, byvoorbeeld, img-emmer, en, die belangrikste, Leestoegang tot voorwerpe maak dit publiek - anders sal Telegram nie ons foto's sien nie. Alle ander velde word onveranderd gelaat. Ons druk die knoppie Skep emmer.

Bou 'n Telegram-bot in Yandex.Cloud

Daarna kan 'n lys van alle emmers iets soos hierdie lyk (as dit jou enigste emmer is):

Bou 'n Telegram-bot in Yandex.Cloud

Nou stel ek voor om op die naam van die emmer te klik, en daarin 'n gids te skep om die berging van prente vir verskillende toepassings te organiseer. Byvoorbeeld, vir 'n telegram-bot Slim gedagtes Ek het 'n gids geskep genaamd tg-bot-slim-gedagtes (Niks, ek sal hierdie syfer verstaan). Skep ook een.

Bou 'n Telegram-bot in Yandex.Cloud

Nou kan jy op die gidsnaam klik, daarin gaan en lêers oplaai:

Bou 'n Telegram-bot in Yandex.Cloud

En klik op die lêernaam - kry dit URL vir gebruik in ons bot, en in die algemeen - enige plek (maar moenie dit publiseer nie URL onnodig, aangesien verkeer van voorwerp berging aangekla).

Bou 'n Telegram-bot in Yandex.Cloud

Hier is dit eintlik al voorwerp berging. Nou sal jy weet wat om te doen wanneer jy die boodskap sien om lêers daar op te laai.

Webhaak

Nou sal ons installeer webhaak — d.w.s. wanneer die bot 'n opdatering (byvoorbeeld 'n boodskap van die gebruiker) vanaf die bediener ontvang telegram in ons Yandex funksie versoek sal gestuur wordvra) met data. Hier is 'n string wat jy eenvoudig in die adresveld van die blaaier kan plak, en dan die bladsy verfris (dit hoef net een keer gedoen te word): https://api.telegram.org/bot{bot_token}/setWebHook?url={webhook_url}
Vervang net {bot_token} na die teken wat ons van die vader-bot ontvang het toe ons ons bot geskep het, en {webhook_url} - aan URL ons Yandex funksies. Wag 'n minuut! Maar RossKomSensuur verbied verskaffers in die Russiese Federasie om die adres te bedien https://api.telegram.org. Ja, dis reg. Maar jy kan aan iets dink. Jy kan tog byvoorbeeld jou ouma daaroor uitvra in die Oekraïne, Israel of Kanada – daar is geen “Russiese sensuur” daar nie, en net God weet hoe mense daarsonder leef. As gevolg hiervan, moet die versoek-reaksie wanneer die webhook geïnstalleer word, soos volg lyk:

Bou 'n Telegram-bot in Yandex.Cloud

Toets. Moet weerspieël word.

Bou 'n Telegram-bot in Yandex.Cloud

Dit is waar. Ons gelukwense - nou Yandex funksie geword het telegram-bot!

Slim gedagtes

En nou doen ons Smart Thoughts. Die kode is oop en en lê op GitHub. Dit is redelik goed kommentaar gelewer, en dit is net honderd reëls lank. Lees dit soos 'n operadiva-libretto!

Bou 'n Telegram-bot in Yandex.Cloud

Kloon die projek en installeer die afhanklikhede:

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

Maak die veranderinge wat jy nodig het aan die lêer index.js (opsioneel; jy kan niks verander nie). Skep ritssluiter-argief, met 'n lêer index.js en gids node_modules binne, byvoorbeeld, genoem slim.zip.

Bou 'n Telegram-bot in Yandex.Cloud

Gaan nou in die konsole na ons Yandex funksies, kies die oortjie zip argief, druk die knoppie Kies 'n lêeren laai ons argief af slim.zip. Ten slotte, in die regter boonste hoek, klik op die knoppie Skep weergawe.

Bou 'n Telegram-bot in Yandex.Cloud

Oor 'n paar sekondes, wanneer die funksie opgedateer is, sal ons ons bot weer toets. Nou “spieël” hy nie meer nie, maar lewer slim gedagtes!

Bou 'n Telegram-bot in Yandex.Cloud

Dis al vir vandag. Ander artikels volg. As jy belangstel om dit te lees, teken in op kennisgewings van nuwe artikels. Jy kan hier inteken of telegram-kanaal IT-tutoriaal ZakharOf Twitter @mikezaharov.

verwysings

Kode op GitHub
Yandex Wolk Funksies
Yandex-voorwerpberging
Bots: 'n Inleiding vir ontwikkelaars
Telegram Bot API

Skenkings

Bou 'n Telegram-bot in Yandex.Cloud

Bron: will.com

Voeg 'n opmerking