
Vandaag gaan we met beschikbare materialen in een Telegram-bot met behulp van (of Yandex-functies — voor de duidelijkheid) en (of Object Storage — voor de duidelijkheid). De code wordt op Node.js. Er is echter één pikante omstandigheid — een organisatie met de naam, laten we zeggen, Roskomnadzor (censuur is verboden volgens artikel 29 van de Grondwet van de Russische Federatie), staat internetproviders in Rusland niet toe om verzoeken naar de Telegram API op het adres: https://api.telegram.org/. Nou, we zullen dat ook niet doen — als het er niet is, dan is het er niet. We hebben immers zogenaamde webhooks — daarmee doen we geen verzoeken naar een specifiek adres, maar sturen we simpelweg ons verzoek als reactie op elk verzoek dat we ontvangen. Dat wil zeggen, zoals in Odessa — we beantwoorden een vraag met een vraag. Daarom de Telegram API zal het niet in onze code voorkomen.
DisclaimerDe in dit artikel genoemde namen van overheidsorganisaties zijn fictief en eventuele overeenkomsten met de namen van bestaande organisaties zijn toevallig.
Dus, we gaan een bot maken die ons zal voorzien van slimme gedachten. Precies zoals op de afbeelding:
Je kunt het in actie proberen — hier is de naam: @SmartThoughtsBot. Heb je de knop «Alice's vaardigheid»? Это потому, что бот является своеобразным «компаньоном» для одноименного van de vaardigheid van Alice, dat wil zeggen, het vervult dezelfde functies als de vaardigheid van Alice en misschien kunnen ze vreedzaam naast elkaar bestaan en elkaar promoten. Hoe je de vaardigheid Slimme Gedachten kunt maken, wordt beschreven in het artikel . Momenteel (na enkele wijzigingen na de publicatie van het bovengenoemde artikel) zal deze vaardigheid er ongeveer zo uitzien op een smartphone:
Bot maken
Ik hoop dat deze tutorial nuttig zal zijn voor iedereen, inclusief beginnende "botbouwers". Daarom zal ik in deze sectie vrij gedetailleerd beschrijven hoe je over het algemeen in Telegramhet bouwen van bots. Voor diegenen voor wie deze informatie niet vereist is — ga naar de volgende secties.
Open de applicatie Telegram, roep de vader van alle bots (ze hebben het net als mensen) — @BotFather — en geef hem voor de start het commando /help, om onze herinnering op te frissen over wat we kunnen doen. Momenteel zal het commando /newbot.

Omdat de beschreven bot al is gemaakt, zal ik voor demonstratiedoeleinden tijdelijk een andere bot maken (die zal ik later verwijderen). Ik noem hem DemoHabrBot. Namen (username) van alle Telegram-bots moeten eindigen op het woord bot, bijvoorbeeld: MyCoolBot of my_cool_bot — dat is voor bots. Maar eerst geven we de bot een naam (naam) — en dit is voor mensen. De naam kan in elke taal zijn, mag spaties bevatten, en hoeft niet te eindigen op een specifiek woord. bot, en hoeft zelfs niet uniek te zijn. In dit voorbeeld heb ik deze bot genoemd Demo Habr.

Laten we nu een naam voor de bot kiezen (username, degene die voor bots is). Laten we het noemen DemoHabrBot. Alles wat met de naam van de bot te maken heeft (naam) heeft helemaal niets te maken met zijn naam — username (of is in tegendeel relevant). Na het succesvol aanmaken van een unieke naam voor de bot, moeten we de token kopiëren en bewaren (in strikte geheimhouding!) die op de screenshot met de rode pijl wordt getoond. Hiermee zullen we later de webhooks instellen op onze TelegramYandex-functie En nu geven we de opdracht aan de vader van alle bots:.

, en hij zal ons een lijst tonen van alle bots die we hebben aangemaakt. Laten we de net aangemaakte bot voorlopig even met rust laten /mybots(hij is aangemaakt om te laten zien hoe je bots maakt, maar we zullen hem vandaag nog gebruiken voor andere demonstratiedoeleinden), en laten we de bot bekijken Demo Habr Slimme Gedachten ). Klik in de lijst met bots op de knop met zijn naam. (@SmartThoughtsBotHier kunnen we onze bot instellen. Door op de knop

Bewerken… te klikken, gaan we naar het bewerken van een bepaalde optie. Bijvoorbeeld, door op de knop Naam bewerken te klikken, kunnen we de naam van de bot wijzigen, laten we zeggen in plaats van , schrijven ). Klik in de lijst met bots op de knop met zijn naam.Dwaas Ideeën Botpic. — dit is de avatar van de bot, deze moet minimaal zijn 150 x 150 px — dit is een korte beschrijving die de gebruiker ziet bij de eerste keer dat de bot wordt gestart, als antwoord op de vraag:. Beschrijving Wat kan deze bot doen? Over — een nog kortere beschrijving die wordt verzonden met de link naar de bot ( ) of bij het bekijken van de informatie over hem.https://t.me/SmartThoughtsBotWe moeten alleen nog de commando's instellen. Hiervoor klikken we op de knop

Commando's bewerken . Voor de standaardisatie van gebruikerspraktijkis het aan te raden altijd twee commando's te gebruiken: Telegram , en als de bot configuratie-instellingen nodig heeft — een extra commando /instellingen. Onze bot is zo simpel als een bal, dus hij heeft voorlopig geen instellingen nodig. We schrijven de eerste twee commando's op, die we later in de code zullen verwerken. Nu, als de gebruiker een schuine streep (het teken van de schuine streep: /) in het invoerveld invoert, verschijnt er een lijst met commando's voor snelle selectie. Zoals op de afbeelding: links — we stellen de commando's in via de vader-bot; rechts zijn deze commando's al beschikbaar voor gebruikers in onze bot. /start en /helpYandex-functie

Nu, wanneer onze bot is aangemaakt, gaan we naar
Nu onze bot is gemaakt, gaan we verder met Yandex.Cloud, om een functie te maken die de code van onze bot uitvoert. Als je nog niet gewerkt hebt met Yandex.Cloud , lees dan het materiaal , en vervolgens een . Ik ben er bijna zeker van dat deze twee relatief kleine artikelen voldoende voor je zijn om een basisbegrip van het onderwerp te krijgen.
Dus, in de console Yandex.Cloud kiezen we in het linkernavigatiemenu de optie Cloud Functions, en druk dan op de knop Maak functie aan. Geef het een naam en een korte beschrijving voor jezelf.

Na het klikken op de knop Creëren en na een paar seconden verschijnt de nieuwe functie in de lijst van alle functies. Klik op de naam — dit brengt ons naar de pagina Overzicht van onze functie. Hier moet je de (Aan) schakelaar Publieke functie, inschakelen zodat deze toegankelijk is van buitenaf (voor de Yandex.Cloud) wereld, en de waarden van de velden Link voor aanroep en Identificatie — moet je diep geheim houden voor iedereen behalve jezelf en Telegram, zodat je functie niet door allerlei oplichters kan worden aangeroepen.

Nu gaan we met het linkermenu naar Redacteur functies. Laten we onze ). Klik in de lijst met bots op de knop met zijn naam.voor nu even aan de kant leggen, en een minimale sjablonfunctie maken om de werking van onze bot te controleren... In dit geval is deze functie onze bot... Kortom, nu maken we hier een eenvoudige bot die de verzoeken van gebruikers 'spiegelt' (d.w.z. terugstuurt). Dit sjabloon kan altijd worden gebruikt bij het maken van nieuwe Telegram-bots, om te controleren of de verbinding met Telegramnormaal werkt. Klik op Bestand aanmaken, geef het de naam index.js, en in de online Code-editor plak je de volgende code in dit bestand:
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 de console van Yandex.Cloud zou dit er ongeveer zo uit moeten zien:

Verder geven we iets lager aan Ingangspunt — index.bot, waar index dit is de naam van het bestand (index.js), terwijl bot — de naam van de functie (module.exports.bot). Laat alle andere velden 'zoals ze zijn' en druk rechtsboven op de knop Versie maken. Na een paar seconden wordt deze versie van de functie aangemaakt. Binnenkort, na de test van de webhook, zullen we een nieuwe versie maken — ). Klik in de lijst met bots op de knop met zijn naam..

Object Storage
Nu we een Nu, wanneer onze bot is aangemaakt, gaan we naarhebben gemaakt, laten we, terwijl we in de console zijn, een zogenaamde bucket aanmaken ( Yandex.Cloud, laten we een zogenaamde bucket creëren (bucket, dat wil zeggen, een bucket in het Nederlands, beslist geen boeket) voor het opslaan van afbeeldingsbestanden die we in onze bot zullen gebruiken ). Klik in de lijst met bots op de knop met zijn naam.. Kies in het linke navigatiemenu de optie Object Storage, klik op de knop Bucket aanmaken, geef het een naam, bijvoorbeeld, img-bucket, en, belangrijk, Toegang voor het lezen van objecten maak het openbaar — anders zijn onze afbeeldingen in Telegram niet toegankelijk. Laat alle andere velden ongewijzigd. Klik op de knop Bucket aanmaken.

Daarna kan de lijst met alle buckets er ongeveer zo uitzien (als dit je enige bucket is):

Nu stel ik voor om op de naam van de bucket te klikken en daarin een map te maken, zodat je afbeeldingen voor verschillende applicaties kunt ordenen. Bijvoorbeeld, voor de Telegram-bot ). Klik in de lijst met bots op de knop met zijn naam. heb ik een map aangemaakt met de naam tg-bot-smart-thoughts (geen probleem, ik begrijp deze code). Maak ook iets aan.

Nu kun je op de naam van de map klikken, deze openen en bestanden uploaden:

En door op de bestandsnaam te klikken, krijg je deze URL voor gebruik in onze bot, en eigenlijk — overal (maar publiceer deze niet URL zonder noodzakelijkheid, aangezien het verkeer van Object Storage wordt aangerekend).

Dat is in feite alles met Object Storage. Nu weet je wat te doen als je de oproep ziet om bestanden daar naartoe te uploaden.
Webhook
Nu gaan we een webhook instellen — dat wil zeggen, wanneer de bot een update ontvangt (bijvoorbeeld, een bericht van een gebruiker), zal er een verzoek vanuit de server Telegram naar onze En nu geven we de opdracht aan de vader van alle bots: worden gestuurd (request) met de gegevens. Dit is de regel die je eenvoudig in de adresbalk van de browser kunt plakken en dan de pagina moet vernieuwen (dit hoef je maar één keer te doen): https://api.telegram.org/bot{bot_token}/setWebHook?url={webhook_url}
Vervang alleen {bot_token} door de token die we van de bots vader hebben gekregen bij het creëren van onze bot, en {webhook_url} door URL onze Yandex-functies. Een moment! Maar dat Roskomnadzor verbiedt providers in Rusland om het adres te bedienen https://api.telegram.org. Ja, dat klopt. Maar verzin iets. Je kunt bijvoorbeeld je grootmoeder in Oekraïne, Israël of Canada vragen — daar zijn er geen “Russische censuur”, en God weet hoe mensen zonder dit leven. Uiteindelijk moet het verzoek-antwoord bij het instellen van de webhook er zo uitzien:

Laten we testen. Het zou 'spiegelen'.

Dat is het. Onze felicitaties — nu Nu, wanneer onze bot is aangemaakt, gaan we naar is geworden Telegram-bot!
). Klik in de lijst met bots op de knop met zijn naam.
En nu maken we Slimme Gedachten. De code is openbaar en ligt op . Het is vrij goed gecommentarieerd, en het bevat slechts een paar honderd regels. Lees het als een operazangeres het libretto!

Clone het project en installeer de afhankelijkheden:
git clone https://github.com/stmike/tg-bot-smart-thoughts.git
cd tg-bot-smart-thoughts
npm i
Breng de nodige wijzigingen aan in het bestand index.js (optioneel; je kunt het ook ongemoeid laten). Maak een zip-archief aan, met het bestand index.js en de map node_modules erin, bijvoorbeeld met de naam smart.zip.

Ga nu in de console naar onze Yandex-functies, kies het tabblad ZIP-archief, klik op de knop Bestand kiezen, en upload ons archief smart.zip. Tenslotte, klik rechtsboven op de knop Versie maken.

Na enkele seconden, wanneer de functie is bijgewerkt, testen we onze bot opnieuw. Nu spiegelt hij niet meer, maar levert hij slimme ideeën!

Dat is alles voor vandaag. Andere artikelen volgen. Voor wie dit interessant vindt — abonneer je op meldingen van nieuwe artikelen. Je kunt je hier abonneren, of op de Telegram-kanaal , of Twitter .
Links
Donaties
Bron: habr.com
