Які будуецца Telegram-бот у Яндэкс.Аблокі

Які будуецца Telegram-бот у Яндэкс.Аблокі

Сёння з падручных матэрыялаў мы збяром у Яндэкс.Аблокі Telegram-бот з выкарыстаннем Yandex Cloud Functions (Або Яндэкс-функцыі - для сцісласці) і Yandex Object Storage (Або Аб'ектнае сховішча - Для яснасці). Код будзе на Node.js. Аднак, ёсць адна пікантная акалічнасць - нейкая арганізацыя пад назвай, скажам так, РосКомЦэнзур (цэнзура забаронена артыкулам 29 Канстытуцыі РФ), не дазваляе інтэрнэт-правайдэрам Расіі перадаваць запыты ў API Telegram па адрасе: https://api.telegram.org/. Ну мы і не будзем - не так не. Бо ў нашым сакваяжы маюцца т.зв. вэбхукі — з іх дапамогай мы не робім запыты на канкрэтны адрас, а ўсяго толькі шлем свой запыт у якасці адказу на любы запыт да нас. Гэта значыць, як у Адэсе - адказваем пытаннем на пытанне. Таму API Telegram у нашым кодзе фігураваць не будзе.

Адмова ад адказнасціЗгаданыя ў дадзеным артыкуле назвы якіх-небудзь дзяржаўных арганізацый з'яўляюцца выдуманымі, а магчымыя супадзенні з назвамі рэальна існуючых арганізацый - выпадковымі.

Такім чынам, мы зробім робата, які будзе нас забяспечваць разумнымі думкамі. Дакладна такога, як на малюнку:

Які будуецца Telegram-бот у Яндэкс.Аблокі

Можаце выпрабаваць яго ў справе - вось імя: @SmartThoughtsBot. Звярнулі ўвагу на кнопачку «Навык Алісы»? Гэта таму, што робат з'яўляецца своеасаблівым «кампаньёнам» для аднайменнага навыку Алісы, г.зн. ён выконвае тыя ж функцыі, што і навык Алісы і, магчыма, што яны змогуць мірна суіснаваць, рэкламуючы адзін аднаго. Аб тым як стварыць навык Разумныя Думкі расказана ў артыкуле Аліса набывае навык. Цяпер (пасля занясення некаторых змен ужо пасля публікацыі вышэйзгаданага артыкула) на смартфоне гэты навык будзе выглядаць прыкладна так:

Які будуецца Telegram-бот у Яндэкс.Аблокі

Стварэнне бота

Мне б хацелася, каб гэты тутарыял быў карысны ўсім, у т.л. і пачаткоўцам «батабудаўнікам». Таму ў гэтай частцы я даволі падрабязна апішу як наогул ствараць у ТэлеграмаТыя ботаў. Для тых каму гэтая інфармацыя не патрабуюцца - пераходзьце да наступных раздзелаў.

Адкрываем дадатак Telegaram, клічам бацьку ўсіх ботаў (у іх усё як у людзей) @BotFather - і для пачатку дамо яму каманду /help, каб асвяжыць у памяці, што мы можам рабіць. Цяпер нас будзе цікавіць каманда / пачатковец.

Які будуецца Telegram-бот у Яндэкс.Аблокі

Паколькі апісваны тут робат ужо створаны, для дэманстрацыйных мэт я ствару на кароткі час іншага робата (потым яго выдалю). Назаву яго DemoHabrBot. Імёны (імя карыстальніка) усіх тэлеграм-ботаў павінны заканчвацца на слова бот, Напрыклад: MyCoolBot або my_cool_bot – гэта для робатаў. Але спачатку даем боту назву (імя) - а гэта для людзей. Назва можа быць на любой мове, змяшчаць прабелы, не абавязана заканчвацца на слова бот, І нават не павінна быць унікальным. У дадзеным прыкладзе я назваў гэты бот Дэма Хабр.

Які будуецца Telegram-бот у Яндэкс.Аблокі

Цяпер выбіраемы боту імя (імя карыстальніка, тое, якое для ботаў). Назавем яго DemoHabrBot. Усё, што адносілася да назвы робата (імя) зусім не ставіцца да яго імя імя карыстальніка (або адносіцца, але з дакладнасцю да наадварот). Пасля паспяховага стварэння ўнікальнага імя робата, нам трэба скапіяваць і захаваць (у найстрогай таямніцы!) токен, паказаны на скрыншоце чырвонай стрэлкай. З яго дапамогай мы крыху пазней усталюем выходны з ТэлеграмаТая вэбхук на нашу Яндэкс-функцыю.

Які будуецца Telegram-бот у Яндэкс.Аблокі

А цяпер дамо каманду бацьку ўсіх робатаў: /mybots, і ён пакажа намі спіс усіх створаных намі ботаў. Давайце пакуль пакінем у спакоі свежы бот Дэма Хабр (ён быў створаны каб паказаць як ствараць ботаў, але мы яшчэ ім сёння скарыстаемся для іншых дэманстрацыйных мэт), і разгледзім бот Разумныя Думкі (@SmartThoughtsBot). Націскаем у спісе ботаў кнопку з яго імем.

Які будуецца Telegram-бот у Яндэкс.Аблокі

Тут мы можам наладзіць нашага робата. Націснуўшы кнопку Рэдагаваць ... мы пяройдзем на рэдагаванне той ці іншай опцыі. Напрыклад, націснуўшы на кнопку Змяніць імя мы можам змяніць назву бота, скажам замест Разумныя Думкі, напісаць Трызненне Ідэі. Botpic - гэта аватар бота, павінен быць не менш 150 x 150 px. Апісанне - гэта кароткае апісанне, які карыстач бачыць пры першым запуску бота, у якасці адказу на пытанне: Што можа рабіць гэты робат? аб – Яшчэ больш кароткае апісанне, якое перадаецца са спасылкай на бот (https://t.me/SmartThoughtsBot) або пры праглядзе інфармацыі аб ім.

Які будуецца Telegram-бот у Яндэкс.Аблокі

Нам засталося толькі настроіць каманды. Для гэтага націскаем кнопку Edit Commands. Для стандартызацыі карыстацкай практыкі Тэлеграма рэкамендуе заўсёды выкарыстоўваць дзве каманды: /пачаць и / дапамажыце, а калі робату неабходныя налады - дадатковую каманду /settings. Наш бот просты як шар, таму наладкі яму пакуль не патрэбныя. Прапісваем дзве першыя каманды, якія потым мы апрацуем у кодзе. Зараз, калі ў поле ўводу карыстач увядзе слэш (знак касой рысы: /), з'явіцца спіс каманд для іх хуткага выбару. Усё як на малюнку: злева – усталёўваны каманды праз робата-бацьку; справа гэтыя каманды ўжо даступныя карыстальнікам у нашым боце.

Які будуецца Telegram-бот у Яндэкс.Аблокі

Яндэкс-функцыя

Цяпер, калі наш бот створаны, пераходзім у Яндэкс.Хмара, Каб стварыць функцыю, якая будзе выконваць код нашага бота. Калі вы яшчэ не працавалі з Яндэкс.Аблокам пачытайце матэрыял Аліса ў краіне Бітрыкс, А затым - Яндэкс-функцыі рассылаюць пошту. Я амаль упэўнены, што двух гэтых адносна невялікіх артыкулаў вам цалкам будзе дастаткова для базавага разумення прадмета.

Такім чынам, у кансолі Яндэкс.Аблокі у левым навігацыйным меню выбіраемы пункт Воблачныя функцыі, і затым націскаем кнопку Стварыць функцыю. Прысвойваем ёй імя, а для сябе - кароткае апісанне.

Які будуецца Telegram-бот у Яндэкс.Аблокі

Пасля націску кнопкі Стварыць і сканчэнні пары секунд, новая функцыя з'явіцца ў спісе ўсіх функцый. Націскаем на яе імя - гэта прывядзе нас на старонку Агляд нашай функцыі. Тут трэба ўключыць (On) перамыкач Публічная функцыя, Каб яна стала даступная з вонкавага (для Яндэкс.Аблокі) свету, а значэнне палёў Спасылка для выкліку и Ідэнтыфікатар - захоўваць у глыбокай таямніцы ад усіх акрамя сябе самога і Telegram'a, каб вашу функцыю не маглі выклікаць розныя аферысты.

Які будуецца Telegram-бот у Яндэкс.Аблокі

Цяпер з дапамогай левага меню пераходзім у рэдактар функцыі. Давайце пакуль адкладзём на кароткі час у бок нашы Разумныя Думкі, І створым мінімальную функцыю-шаблон для праверкі працаздольнасці нашага робата… Зрэшты, у дадзеным кантэксце гэтая функцыя і ёсць наш бот… Карацей кажучы, зараз і прама вось тут мы зробім найпростага робата, які будзе «люстэркаваць» (г.зн. адпраўляць назад ) запыты карыстальнікаў. Гэты шаблон можна выкарыстоўваць заўсёды пры стварэнні новых тэлеграм-ботаў, каб пераканацца, што сувязь з Telegram'ым працуе нармальна. Націскаем Стварыць файл, называем яго index.js, і ў он-лайн Рэдактары кода устаўляемы ў гэты файл наступны код:

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

У кансолі Яндэкс.Аблокі гэта павінна выглядаць прыкладна так:

Які будуецца Telegram-бот у Яндэкс.Аблокі

Далей крыху ніжэй паказваем Кропку ўваходу - index.bot, Дзе індэкс гэтае імя файла (index.js), А бот - імя функцыі (module.exports.bot). Усе астатнія палі пакідаем "як ёсць", і ў правым верхнім куце націскаем кнопку Стварыць версію. Праз некалькі секунд гэтая версія функцыі будзе створана. У хуткім часе, пасля тэсціравання вэбхука, мы створым новую версію Разумныя Думкі.

Які будуецца Telegram-бот у Яндэкс.Аблокі

Аб'ектнае сховішча

Цяпер, калі ў нас створана Яндэкс-функцыя, давайце, пакуль мы знаходзімся ў кансолі Яндэкс.Аблокі, створым т.зв. бакет (вядро, г.зн. вядро па-руску, зусім не букет) для захоўвання файлаў малюнкаў, якія будуць выкарыстоўвацца ў нашым боце Разумныя Думкі. У левым навігацыйным меню выбіраемы пункт захоўванне аб'екта, націскаем кнопку Стварыць бакет, прыдумляем яму назву, напрыклад, img-bucket, і, галоўнае, Доступ на чытанне аб'ектаў робім публічным – інакш Telegram'у нашых карцінак не відаць. Усе астатнія палі пакідаем без змен. Націскаем кнопку Стварыць бакет.

Які будуецца Telegram-бот у Яндэкс.Аблокі

Пасля гэтага спіс усіх бакетаў можа выглядаць прыкладна так (калі гэта ваш адзіны бакет):

Які будуецца Telegram-бот у Яндэкс.Аблокі

Цяпер я прапаную націснуць на імя бакета, і ўсярэдзіне яго стварыць тэчку, каб упарадкаваць захоўванне малюнкаў для розных сваіх прыкладанняў. Напрыклад, для тэлеграм-бота Разумныя Думкі я стварыў тэчку пад назвай tg-bot-smart-thoughts (Нічога, я зразумею гэты шыфр). Стварыце і вы якую-небудзь.

Які будуецца Telegram-бот у Яндэкс.Аблокі

Цяпер можна націснуць на імя тэчкі, зайсці ў яе і загружаць файлы:

Які будуецца Telegram-бот у Яндэкс.Аблокі

А націснуўшы на імя файла - атрымаць яго URL для выкарыстання ў нашым боце, і наогул - дзе небудзь (але, не публікуйце гэты URL без патрэбы, паколькі трафік з Аб'ектнага сховішча тарыфікуецца).

Які будуецца Telegram-бот у Яндэкс.Аблокі

Вось, уласна, і ўсё з Аб'ектным сховішчам. Цяпер вы будзеце ведаць, што рабіць, калі ўбачыце заклік загрузіць туды файлы.

Вэбхук

Цяпер мы ўсталюем вэбхук - Г.зн. калі робат атрымае абнаўленне (напрыклад, паведамленне ад карыстача), з сервера Тэлеграма у нашу Яндэкс-функцыю будзе адпраўлены запыт (запыт) з дадзенымі. Вось радок, які можна проста ўставіць у адраснае поле браўзэра, і затым абнавіць старонку (гэта трэба зрабіць усяго адзін раз): https://api.telegram.org/bot{bot_token}/setWebHook?url={webhook_url}
Толькі заменім {bot_token} на токен атрыманы намі ад бота-бацькі пры стварэнні нашага бота, а {webhook_url} - на URL нашай Яндэкс-функцыі. Хвілінку! Але ж РосКомЦэнзур забараняе правайдэрам у РФ абслугоўваць адрас https://api.telegram.org. Так, праўда. Але вы прыдумайце што-небудзь. Бо можна ж, напрыклад, папрасіць аб гэтым сваю бабулю ва Ўкраіне, Ізраілі ці Канадзе - там няма ніякіх «раскамцэнзур», і адзін бог ведае, як людзі жывуць без гэтага. У выніку, запыт-адказ пры ўстаноўцы вебхука павінен выглядаць так:

Які будуецца Telegram-бот у Яндэкс.Аблокі

Тэстуем. Павінна "люстэркаваць".

Які будуецца Telegram-бот у Яндэкс.Аблокі

Так і ёсць. Нашы віншаванні - цяпер Яндэкс-функцыя стала Тэлеграма-ботам!

Разумныя Думкі

А зараз які робіцца Разумныя Думкі. Код адкрыты і і ляжыць на GitHub. Ён даволі добра пракаментаваны, і ў ім усяго сотня радкоў. Чытайце яго як оперная дзіва лібрэта!

Які будуецца Telegram-бот у Яндэкс.Аблокі

Склануйце праект і ўсталюйце залежнасці:

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

Унясіце неабходныя вам змены ў файл index.js (апцыянальна; можна нічога не мяняць). Стварыце ZIP-архіў, з файлам index.js і тэчкай вузелавыя модулі унутры, напрыклад, пад назвай smart.zip.

Які будуецца Telegram-бот у Яндэкс.Аблокі

Цяпер перайдзіце ў кансолі да нашай Яндэкс-функцыі, абярыце ўкладку ZIP-архіў, Націсніце кнопку выбраць файл, і загрузіце наш архіў smart.zip. Нарэшце, у правым верхнім куце націсніце кнопку Стварыць версію.

Які будуецца Telegram-бот у Яндэкс.Аблокі

Праз некалькі секунд, калі функцыя абновіцца, пратэстуем зноў нашага робата. Цяпер ён ужо не «люстэрка», а пастаўляе разумныя думкі!

Які будуецца Telegram-бот у Яндэкс.Аблокі

На сёння ўсё. Іншыя артыкулы ідуць. Каму падобнае чытаць цікава - падпісвайцеся на апавяшчэнні аб новых артыкулах. Падпісацца можна тут, ці на Тэлеграма-канал IT Тутарыял Захар, Або Twitter @mikezaharov.

Спасылкі

Код на GitHub
Yandex Cloud Functions
Yandex Object Storage
Bots: An introduction for developers
Telegram Bot API

Данаты

Які будуецца Telegram-бот у Яндэкс.Аблокі

Крыніца: habr.com

Дадаць каментар