У «Яндекс.Музыки» появился Telegram-бот для распознавания треков

Яндекс-Телеграмм-бот-300x300.jpg@ya — Официальный Телеграмм бот российского поисковика №1. Самый продвинутый в плане возможностей бот на русском языке. На самом деле было бы проще перечислить все то, чего не умеет делать этот бот: варить кофе, радоваться жизни и влюбляться. В принципе это всё! ? А теперь все же попробуем вкратце описать некоторые возможности бота. Основной функцией разумеется является поиск в который Яндекс интегрировал свои сервисы: Музыка, КиноПоиск, Новости и др. Возможность подписываться на: Погоду (по выбранному вами расписанию), Курс валют (либо только на их существенные скачки), Новости, Новости музыки и Афишу событий в вашем или ближайшем крупном городе. Но и это еще не все. В бот встроен Переводчик с различных языков мира на русский или любой другой язык. Отметим, что в бот так же встроен другой небольшой бот Яндекса — поиск по картинкам, о котором мы рассказывали ранее. И ведь это еще не все возможности этого замечательного бота. Добавьте его в свой Телеграмм и убедитесь в этом сами. Возможно, что после этого вы вообще перестанете искать что либо в Интернете через мобильный браузер.

  • Из песочницы
  • Tutorial

Добрый день. На тему Telegram-ботов статей очень много, а вот про навыки для Алисы мало кто пишет, а информации как сделать единого бота я вообще не нашел, поэтому решил поделиться своим опытом о том, как сделать простого бота Telegram и навык Яндекс.Алиса для сайта, имеющих единый функционал. Итак, как поднимать веб-сервер и получить ssl-сертификат я рассказывать не буду, про это написано достаточно.

Создание Telegram-бота

Сначала создадим Telegram-бота, для этого идем в Telegram и находим там бота BotFather.

Выбираем /newbotucypdnlpunkagywcuu4dakacvx4.png Вводим название бота, по которому он будет отзываться, потом вводим имя бота, в ответ получаем токен для управления ботом, записываем этот ключ, он нам пригодится в дальнейшем. Следующий шаг — это сообщить серверам Telegram, на какой сервер отправлять данные от бота. Для этого делаем ссылку вида:

https: //api.telegram.org/bot___ТОКЕН___/setWebhook?url=https://____ПУТЬ_ДО_СКРПИТА___ 

___ТОКЕН___ заменяем на наш токен от бота, полученный ранее ____ПУТЬ_ДО_СКРПИТА___ заменяем на адрес скрипта на нашем сервере, где будет происходить обработка данных (например, www.my_server.ru/webhook_telegram.php). Тут есть проблема, сервер api.telegram.org находится под блокировкой, но можно сделать так: арендовать самый дешевый сервер там, где нет ограничений и дать из консоли этого сервера команду

wget ___ПОЛУЧИВШИЙСЯ_АДРЕС___ 

Все, Telegram-бот создан и связан с вашим сервером.

Создание навыка для Яндекс.Алиса

Перейдем к созданию навыка для Яндекс.Алиса. Для создания навыка нужно перейти на страницу разработчиков Яндекс.Диалоги страницу разработчиков Яндекс.Диалоги, нажать там «Создать диалог» и выбрать «Навык в Алисе». Откроется диалог настроек навыка. Начинаем вводить настройки навыка. Вводим имя вашего навыка. Активационное имя следует подбирать очень внимательно, чтобы Алиса правильно его понимала, из нюансов – мобильное приложение с Алисой и колонки типа Яндекс.Станция или Irbis A могут воспринимать слова по-разному. Вводим путь до скрипта на нашем сервере так же, как и для Telegram, но это будет скрипт именно для Алисы, например www.my_server.ru/webhook_alice.php. Выбираем голос, которым будет говорить навык, мне больше нравится именно голос Алисы. Если планируется работа только на мобильных устройствах или в браузере, то выбираем «Нужно устройство с экраном». Далее вводим настройки для каталога навыков Алисы. Если вы планируете использовать для активации слово — бренд, нужно пройти верификацию сайта бренда в сервисе webmaster.yandex.ru. С настройками все, переходим к скриптам.

Скрипт Telegram-бота

Начнем со скрипта для Telegram. Подключаем библиотеку, где будут обрабатываться сообщения от бота и Алисы:

include_once 'webhook_parse.php'; 

Задаем token нашего бота:

$tg_bot_token = "_____YOUR_BOT_TOKEN_____"; 

Получаем данные:

$request = file_get_contents('php://input'); $request = json_decode($request, TRUE); 

Разбираем данные на переменные:

if (!$request) {   die();     // Some Error output (request is not valid JSON) } else if (!isset($request['update_id']) || !isset($request['message'])) {   die();     // Some Error output (request has not message) } else {   $user_id = $request['message']['from']['id'];   $msg_user_name = $request['message']['from']['first_name'];   $msg_user_last_name = $request['message']['from']['last_name'];   $msg_user_nick_name = $request['message']['from']['username'];   $msg_chat_id = $request['message']['chat']['id'];   $msg_text = $request['message']['text'];     $msg_text = mb_strtolower($msg_text, 'UTF-8');     $tokens = explode(" ", $msg_text); } 

Теперь можно работать с переменными: $tokens — тут теперь все слова, которые пользователь ввел $user_id — тут id пользователя $msg_chat_id — чат, в котором бот получил команду $msg_user_name — имя пользователя Далее, вызываем для обработки функцию Parse_Tokens:

$Out_Str = Parse_Tokens($tokens); 

И отправляем ответ:

Send_Out($user_id, $Out_Str); 

функция Send_Out проста и выглядит так:

function Send_Out($user_id, $text, $is_end = true) {   global $tg_bot_token;   if (strlen($user_id) < 1 || strlen($text) < 1) {return;}   $json = file_get_contents('https://api.telegram.org/bot' . $tg_bot_token . '/sendMessage?chat_id=' . $user_id . '&text=' . $text); } 

Скрипт навыка для Яндекс.Алиса

Теперь перейдем к скрипту для Алисы, он почти такой же, как и для Telegram. Также подключаем библиотеку, где будут обрабатываться сообщения от бота и Алисы, плюс библиотеку с классами для Алисы:

include_once 'classes_alice.php'; include_once 'webhook_parse.php'; 

Получаем данные:

$data = json_decode(trim(file_get_contents('php://input')), true); 

Разбираем данные на переменные:

if (isset($data['request'])) {  //original_utterance     if (isset($data['meta']))   {     $data_meta = $data['meta'];     if (isset($data_meta['client_id'])) {$client_id = $data_meta['client_id'];}   }    if (isset($data['request']))   {     $data_req = $data['request'];      if (isset($data_req['original_utterance']))     {       $original_utterance = $data_req['original_utterance'];     }       if (isset($data_req['command'])) {$data_msg = $data_req['command'];}     if (isset($data_req['nlu']))     {       $data_nlu = $data_req['nlu'];       if (isset($data_nlu['tokens'])) {$tokens = $data_nlu['tokens'];} //      $data_token_count = count($data_tokens);     }   }   if (isset($data['session']))   {     $data_session = $data['session'];     if (isset($data_session['new'])) {$data_msg_new = $data_session['new'];}     if (isset($data_session['message_id'])) {$data_msg_id = $data_session['message_id'];}     if (isset($data_session['session_id'])) {$data_msg_sess_id = $data_session['session_id'];}     if (isset($data_session['skill_id'])) {$skill_id = $data_session['skill_id'];}     if (isset($data_session['user_id'])) {$user_id = $data_session['user_id'];}   } } 

Тут нужных переменных чуть меньше: $tokens — тут теперь все слова, которые пользователь ввел $user_id — тут id пользователя Яндекс постоянно пингует опубликованные навыки, и я добавил строчку, чтобы сразу выходить из скрипта, не запуская полную обработку сообщения:

  if (strpos($tokens[0], "ping") > -1)     {Send_Out("pong", "", true);} 

Вызываем для обработки функцию Parse_Tokens, он тот же самый, что и для Telegram:

$Out_Str = Parse_Tokens($tokens); 

И отправляем ответ:

Send_Out($user_id, $Out_Str); 

Функция Send_Out тут посложней:

function Send_Out($user_id, $out_text, $out_tts = "", $is_end = false) {   global $data_msg_sess_id, $user_id;    ///// GENERATE BASE OF OUT //////     $Data_Out = new Alice_Data_Out();     $Data_Out->response = new Alice_Response();     $Data_Out->session = new Alice_Session();   ///// GENERATE BASE OF OUT End //////    ///// OUT MSG GENERATE /////   $Data_Out->session->session_id = $data_msg_sess_id;;   $Data_Out->session->user_id = $user_id;    $Data_Out->response->text = $out_text;   $Data_Out->response->tts = $out_tts;    if (strlen($out_tts) < 1) {$Data_Out->response->tts = $out_text;}    $Data_Out->response->end_session = $is_end;    header('Content-Type: application/json');   print(json_encode($Data_Out, JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT));    die(); } 

Закончили скрипт для Алисы. Сам скрипт обработки Parse_Tokens сделал чисто для примера, вы сможете сделать там любые проверки и обработки.

function Parse_Tokens($tokens) {   $out = "";   // do something with tokens //   $out =  "Your eneter " . count($tokens) . " words: " . implode($tokens, " ");   return $out; } 

Если вам нужно общение с пользователем более сложного вида, чем вопрос-ответ, то нужно будет сохранять в базе (например mysql) $user_id пользователя и уже полученные от пользователя данные и анализировать их в функции Parse_Tokens. Собственно это почти все, если все сделано правильно, то Telegram-бот уже доступен, навык Алисы можно проверить dialogs.yandex.ru/developer, перейдя в свой новый навык на закладку тестирование. Если все корректно работает, можно отправить навык на модерацию, нажав кнопку «На модерацию». Теперь у вас есть сразу два бота для разных платформ, которые работают одинаково. Документация по сервису Яндекс.Диалоги тут Полные скрипты выложены на github скачать. Обновление: завернул все в классы и обновил репозитарий на github

Бот «Яндекс.Музыки» — это ещё одна замена громоздкому Shazam. Если вам понравилась музыка в кафе или магазине, вы можете распознать её с помощью бота. Для этого нужно зажать кнопку микрофона и удерживать её 5–10 секунд. Если программа распознает мелодию, то сообщит её название и исполнителя, а также даст ссылку на трек в «Яндекс.Музыке».

Распознавание композиций работает даже лучше, чем встроенный инструмент в мобильных приложениях музыкального сервиса. За выделение различных признаков трека, которые и помогают определять песни, теперь отвечает нейронная сеть. Поэтому бот постоянно учится и справляется со своей задачей даже в условиях шума.

Сейчас бот для Telegram способен распознавать несколько миллионов песен из «Яндекс.Музыки». Пока он работает в тестовом режиме и может ошибаться. Но поскольку бот основан на нейронной сети, со временем он станет точнее.

Добавить бота «Яндекс.Музыки» в Telegram →

Яндекс.Музыка и подкасты Разработчик: Yandex LLC Цена: Бесплатно Яндекс.Музыка и Подкасты – скачивайте и слушайте Разработчик: Yandex Apps Цена: Бесплатно Garik-M, 24 февраля 2021 – 15:03Яндекс также расширил функциональность своего нового сервиса, добавив его в приложения Почты и Диска </td></table>

Компания Яндекс интегрировала сервис Яндекс.Почта 360 в приложения Почты и Диска, а также запустила чат-бота для пересылки сообщений в Яндекс.Почту. Для тех, кто не знает, Яндекс.Почта 360 — это новый универсальный сервис, который был представлен в сентябре прошлого года. Он объединяет в себе Почту, Диск, Календарь, Телемост, Мессенджер и Заметки. По сути, это виртуальное рабочее пространство, где можно работать с несколькими сервисами в одной программе: общаться, планировать встречи, выполнять различные действия с документами и прочими файлами. И всё это под единым интерфейсом.

Telegram-каналсоздателяТрешбоксапро технологии

Базовые возможности Почты 360 доступны бесплатно, а вот дополнительные опции можно получить только в платной версии (тарифы «Лайт», «Стандарт» или «Премиум»). Это могут быть расширенное хранилище на Яндекс.Диске, безлимитная загрузка видео и другие привилегии. Оформить подписку пользователи Android-устройств могут прямо в приложении уже сейчас, а владельцы iPhone — чуть позже. Мобильная Почта 360 синхронизируется с десктопной версией, поэтому сохранённые данные доступны как на смартфоне, так и на компьютере. Компания развёртывает свой новый сервис постепенно, и по умолчанию он доступен не всем пользователям. Чтобы попробовать Почту 360, нужно перейти по специальной ссылке.

Что касается чат-бота для Telegram, то он называется @YandexMail360_bot. С его помощью можно отправлять сообщения из мессенджера в Яндекс.Почту, чтобы не терять важную информацию, не упустить письмо и вовремя на него ответить.

Материалы по теме:

  • Год ѯндекс.Станцией: как умная колонка упростила мои домашние дела и отдых
  • Прокились на беспилотниках Яндекса: как ощущается будущее и почему оно ещё не наступило

ЛучшийTelegram-каналпро технологии(возможно)Последнее изменение: 25 февраля 2021 – 10:59

  • ? Технотекст 2020
  • Tutorial

d7xrz6dc2muckkxmtvcvdkofzo0.jpeg Сегодня из подручных материалов мы соберём в Яндекс.ОблакеTelegram-бот с использованием Yandex Cloud Functions (или Яндекс-функции — для краткости) и Yandex Object Storage (или Объектное хранилище — для ясности). Код будет на Node.js. Однако, имеется одно пикантное обстоятельство — некая организация под названием, скажем так, РоссКомЦензур (цензура запрещена статьёй 29 Конституции РФ), не позволяет интернет-провайдерам России передавать запросы в Telegram API по адресу: https://api.telegram.org/ (UPD: В РФ уже снята блокировка Telegram API). Ну мы и не будем — нет так нет. Ведь в нашем саквояже имеются т.н. вебхуки — с их помощью мы не делаем запросы на конкретный адрес, а всего лишь шлём свой запрос в качестве ответа на любой запрос к нам. То есть, как в Одессе — отвечаем вопросом на вопрос. Поэтому Telegram API в нашем коде фигурировать не будет.ДисклеймерУпомянутые в данной статье названия каких-либо государственных организаций являются вымышленными, а возможные совпадения с названиями реально существующих организаций — случайными. Итак, мы сделаем бота, который будет нас снабжать умными мыслями. Точно такого, как на картинке:zvlimoersu8dl6uefqgrqmc8ac8.png Можете испытать его в деле — вот имя: @SmartThoughtsBot. Обратили внимание на кнопочку «Навык Алисы»? Это потому, что бот является своеобразным «компаньоном» для одноименного навыка Алисы, т.е. он выполняет те же функции, что и навык Алисы и, возможно, что они смогут мирно сосуществовать рекламируя друг-друга. О том как создать навык Умные Мысли рассказано в статье Алиса приобретает навык. Сейчас (после внесения некоторых изменений уже после публикации вышеупомянутой статьи) на смартфоне этот навык будет выглядеть примерно так:kvivewhmhzkelg2knxejacsipsm.png

Создание бота

Мне бы хотелось, чтобы этот туториал был полезен всем, в т.ч. и начинающим «ботостроителям». Поэтому в этом разделе я довольно подробно опишу как вообще создавать в Telegram‘е ботов. Для тех кому эта информация не требуются — переходите к следующим разделам. Открываем приложение Telegaram, зовём отца всех ботов (у них всё как у людей) — @BotFather — и для начала дадим ему команду /help, чтобы освежить в памяти, что мы можем делать. Сейчас нас будет интересовать команда /newbot.lrhthg8dd3ckzigfiwvhx5sndbo.png Поскольку описываемый здесь бот уже создан, для демонстрационных целей я создам на короткое время другого бота (потом его удалю). Назову его DemoHabrBot. Имена (username) всех телеграм-ботов должны заканчиваться на слово bot, например: MyCoolBot или my_cool_bot — это для ботов. Но сначала даём боту название (name) — а это для людей. Название может быть на любом языке, содержать пробелы, не обязано заканчиваться на слово bot, и даже не обязано быть уникальным. В данном примере я назвал этот бот Демо Хабр.ahm6ors6d-tztj_krupnu-kxfqu.png Теперь выбираем боту имя (username, то, которое для ботов). Назовём его DemoHabrBot. Всё что относилось к названию бота (name) совсем не относится к его имени — username (или относится, но с точностью до наоборот). После успешного создания уникального имени бота, нам надо скопировать и сохранить (в строжайшей тайне!) токен, показанный на скриншоте красной стрелкой. С его помощью мы чуть позже установим исходящий из Telegram‘а вебхук на нашу Яндекс-функцию.d43pyzckl215byocc0_8zawkdxk.png А сейчас дадим команду отцу всех ботов: /mybots, и он покажет нами список всех созданных нами ботов. Давайте пока оставим в покое свежеиспечённый бот Демо Хабр (он был создан чтобы показать как создавать ботов, но мы ещё им сегодня воспользуемся для других демонстрационных целей), и рассмотрим бот Умные Мысли (@SmartThoughtsBot). Нажимаем в списке ботов кнопку с его именем.t5x0b8hcok0tyfbziu_f-rvwzcy.png Здесь мы можем настроить нашего бота. Нажав кнопку Edit… мы перейдём на редактирование той или иной опции. Например, нажав на кнопку Edit Name мы можем изменить название бота, скажем вместо Умные Мысли, написать Бредовые Идеи. Botpic — это аватар бота, должен быть не менее 150 x 150 px. Description — это краткое описание, который пользователь видит при первом запуске бота, в качестве ответа на вопрос: Что может делать этот бот?About — ещё более краткое описание, которое передаётся с ссылкой на бот (https://t.me/SmartThoughtsBot) или при просмотре информации о нём.9dgz64vehf4oyadmnrirllsnux0.png Нам осталось только настроить команды. Для этого нажимаем кнопку Edit Commands. Для стандартизации пользовательской практики Telegram рекомендует всегда использовать две команды: /start и /help, а если боту необходимы настройки — дополнительную команду /settings. Наш бот прост как шар, поэтому настройки ему пока не нужны. Прописываем две первых команды, которые потом мы обработаем в коде. Теперь, если в поле ввода пользователь введёт слеш (знак косой черты: /), появится список команд для их быстрого выбора. Всё как на картинке: слева — устанавливаем команды через бота-отца; справа эти команды уже доступны пользователям в нашем боте.

Яндекс-функция

Теперь, когда наш бот создан, переходим в Яндекс.Облако, чтобы создать функцию, которая будет выполнять код нашего бота. Если вы ещё не работали с Яндекс.Облаком почитайте материал Алиса в стране Битрикс, а затем — Яндекс-функции рассылают почту. Я почти уверен, что двух этих относительно небольших статей вам вполне будет достаточно для базового понимания предмета. Итак, в консоли Яндекс.Облака в левом навигационном меню выбираем пункт Cloud Functions, и затем нажимаем кнопку Создать функцию. Присваиваем ей имя, а для себя — краткое описание. После нажатия кнопки Создать и прошествии пары секунд, новая функция появится в списке всех функций. Нажимаем на её имя — это приведёт нас на страницу Обзор нашей функции. Здесь надо включить (On) переключатель Публичная функция, чтобы она стала доступна из внешнего (для Яндекс.Облака) мира, а значение полей Ссылка для вызова и Идентификатор — хранить в глубокой тайне от всех кроме себя самого и Telegram’a, чтобы вашу функцию не могли вызывать различные аферисты. Теперь с помощью левого меню переходим в Редактор функции. Давайте пока отложим на короткое время в сторону наши Умные Мысли, и создадим минимальную функцию-шаблон для проверки работоспособности нашего бота… Впрочем, в данном контексте эта функция и есть наш бот… Короче говоря, сейчас и прямо вот здесь мы сделаем простейшего бота, который будет «зеркалить» (т.е. отправлять назад) запросы пользователей. Этот шаблон можно использовать всегда при создании новых телеграм-ботов, чтобы убедиться, что связь с 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   }; }; 

В консоли Яндекс.Облака это должно выглядеть примерно так: Далее чуть ниже указываем Точку входаindex.bot, где index это имя файла (index.js), а bot — имя функции (module.exports.bot). Все остальные поля оставляем «как есть», и в правом верхнем углу нажимаем кнопку Создать версию. Через несколько секунд эта версия функции будет создана. В скором времени, после тестирования вебхука, мы создадим новую версию — Умные Мысли.

Объектное хранилище

Теперь, когда у нас создана Яндекс-функция, давайте, пока мы находимся в консоли Яндекс.Облака, создадим т.н. бакет (bucket, т.е. ведро по-русски, отнюдь не букет) для хранения файлов изображений, которые будут использоваться в нашем боте Умные Мысли. В левом навигационном меню выбираем пункт Object Storage, нажимаем кнопку Создать бакет, придумываем ему название, например, img-bucket, и, главное, Доступ на чтение объектов делаем публичным — иначе Telegram’у наших картинок не видать. Все остальные поля оставляем без изменений. Нажимаем кнопку Создать бакет. После этого список всех бакетов может выглядеть примерно так (если это ваш единственный бакет): Сейчас я предлагаю нажать на имя бакета, и внутри него создать папку, чтобы упорядочить хранение картинок для разных своих приложений. Например, для телеграм-бота Умные Мысли я создал папку под названием tg-bot-smart-thoughts (ничего, я пойму этот шифр). Создайте и вы какую-нибудь. Теперь можно нажать на имя папки, зайти в неё и загружать файлы: А нажав на имя файла — получить его URL для использования в нашем боте, и вообще — где либо (но, не публикуйте этот URL без надобности, поскольку трафик с Объектного хранилища тарифицируется). Вот, собственно, и всё с Объектным хранилищем. Теперь вы будете знать, что делать, когда увидите призыв загрузить туда файлы.

Вебхук

Сейчас мы установим вебхук — т.е. когда бот получит обновление (например, сообщение от юзера), с сервера Telegram в нашу Яндекс-функцию будет отправлен запрос (request) с данными. Вот строка, которую можно просто вставить в адресное поле браузера, и затем обновить страницу (это надо сделать всего один раз): https://api.telegram.org/bot{bot_token}/setWebHook?url={webhook_url} Только заменим {bot_token} на токен полученный нами от бота-отца при создании нашего бота, а {webhook_url} — на URL нашей Яндекс-функции. Минутку! Но ведь РоссКомЦензур запрещает провайдерам в РФ обслуживать адрес https://api.telegram.org. Да, верно. Но вы придумайте что-нибудь. Ведь можно же, например, попросить об этом свою бабушку в Украине, Израиле или Канаде — там нет никаких «росскомцензур», и один бог ведает, как люди живут без этого (UPD: В РФ уже снята блокировка Telegram — поэтому просить бабушку теперь не обязательно). В итоге, запрос-ответ при установки вебхука должен выглядеть так: Тестируем. Должно «зеркалить». Так и есть. Наши поздравления — теперь Яндекс-функция стала Telegram-ботом!

Умные Мысли

А теперь делаем Умные Мысли. Код открыт и и лежит на GitHub. Он довольно хорошо прокомментирован, и в нём всего сотня строк. Читайте его как оперная дива либретто! Склонируйте проект и установите зависимости:

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

Внесите необходимые вам изменения в файл index.js (опционально; можно ничего не менять). Создайте zip-архив, с файлом index.js и папкой node_modules внутри, например, под названием smart.zip. Теперь перейдите в консоле к нашей Яндекс-функции, выберите вкладку ZIP-архив, нажмите кнопку Выбрать файл, и загрузите наш архив smart.zip. Наконец, в правом верхнем углу нажмите кнопку Создать версию. Через несколько секунд, когда функция обновится, протестируем снова нашего бота. Теперь он уже не «зеркалит», а поставляет умные мысли!

Ссылки

Код на GitHubYandex Cloud FunctionsYandex Object StorageBots: An introduction for developersTelegram Bot API

Заключение

На сегодня всё. Другие материалы следуют. Кому подобное читать интересно — подписывайтесь на уведомления о новых публикациях. Подписаться можно на этом сайте (кнопка Подписаться внизу), или на Telegram-каналIT Туториал Захар, или на одноимённое сообщество в VK, или Twitter@mikezaharov.Используемые источники:

  • https://protelegram.ru/2016/07/24/yandex_bot_telegram/
  • https://habr.com/post/446174/
  • https://lifehacker.ru/yandex-muzyka-telegram-bot/
  • https://trashbox.ru/link/2021-02-24-bot-360-mail
  • https://habr.com/ru/post/486876/

Оцените статью
Рейтинг автора
5
Материал подготовил
Илья Коршунов
Наш эксперт
Написано статей
134
Добавить комментарий