Как выглядит навигация в Телеграм канале через бота пример

Привожу простой пример инфо-бота с практически неограниченной вложенностью. Вывод на экран текстового и медиа (картинка, видео, аудио, документ) сообщения. Многоуровневое меню включено.

Хотел привести пример как отобразить в Телеграм многоуровневое меню, но получился простой в создании информационный бот с вложенностью, ограниченной только возможной длинной значения в параметре callback_data inline-кнопки (1-64 bytes). Еще интересный момент это — в одном боте можно создать неограниченное количество сценариев, для этого достаточно просто стартовать бота по html-ссылке со специальными параметрами. При обычном старте бота — запускается первый сценарий. Об этом чуть ниже.

Настройки

В настройках бота нужно указать токен бота, id админа бота и заполнить массив с информацией о «шагах».

steps |__ |__ |__ |__ |__ |__ |__ |__ |__
Каждый шаг имеет простой набор параметров:
[ «name» => «», // string «line» => 0, // int «type» => «text|photo|video|audio|document», // string «text» => «», // string «media» => «» // string | null, «steps» => [] // array ]
name* — Название шага, будет отображено на кнопке
line* — уровень ряда в наборе кнопок
type*- тип сообщения (text|photo|video|audio|document)
text — текстовое сообщение, обязательно для type=»text»
media — ссылка или file_id медиа файла, при type=»text» должно быть значение null
steps — это массив вложенных шагов,

Для ускорения отрисовки экранов желательно в параметре media указывать file_id файла, он для каждого бота уникальный, поэтому из моего примера медиа у вас не будут подгружаться — их надо будет заменить.

Навигация в канале Телеграм

Чтобы вам получить file_id я добавил небольшой функционал (только если указана настройка bot_admin), нужно просто отправить в бот файл: документ, картинку, видео или аудио файлы.

Еще по теме:  Как зсйти в Телеграм через Айфон не приходит письмо на почту

В ответ бот пришлет строку — она же и будет file_id , просто скопируйте ее и подставьте в параметр media в нужном шаге (массива $steps).

Что из интересного?

Весь контент бота упакован в массив steps он же $content . Важным моментом является конечно же валидность массива.

При старте бота настроен выбор сценария под индексом 0 массива (можно указать любой).

/** 1 параметр это индекс элемента массива 2 параметр это индексы родительских элементов массива steps, разделены тире (-), если null то выводим из верхнего уровня вложенности 3 параметр это id чата пользователя */ $printUpdate(0, null, $chat_id);

Если старт по HTML-ссылке то сценарий будет выбран из параметров ссылки

tg://resolve?domain=iMakeBot // в раскрытом виде $content = [ ‘steps’ => [ [ ‘name’ => ‘Название элемента 0’, // . ‘steps’ => [ [ ‘name’ => ‘Название элемента 0-0’ // . ], [ ‘name’ => ‘Название элемента 0-1’, // . ‘steps’ => [ [ ‘name’ => ‘Название элемента 0-1-0’ // . ], [ ‘name’ => ‘Название элемента 0-1-1’ // . ], [ ‘name’ => ‘Название элемента 0-1-2’ // . ], [ ‘name’ => ‘Название элемента 0-1-3’ // . Вот этот элемент будет отработан для вывода на экран ], ] ] ] ] ] ]

Чтобы получить из массива нужный элемент, пропускаем запрос через рекурсивную (самовызывающуюся) функцию

Отрисовка экрана

Простой роутер для бота

/** * Простой роутер бота */ if (isset($data->message)) < // получим id чата $chat_id = $data->message->from->id; // если это текстовое сообщение if (isset($data->message->text)) < // проверим что это старт бота if ($data->message->text == «/start») < // выводим сообщение $printUpdate(0, null, $chat_id); >// если это старт по ссылке elseif (preg_match(«~/start s_([d]+)_?([d-]*)~», $data->message->text, $matches)) < // выведем сообщение по ссылке $printUpdate($matches[1], $matches[2], $chat_id); >> // другие типы сообщений else < // если это админ бота направляет сообщение if ($chat_id === $bot_admin) < // по умолчанию $file_id = null; // если это картинка if (isset($data->message->photo)) < // file_id последней картикни $file_id = end($data->message->photo)->file_id; > // если это видео-файл elseif (isset($data->message->video)) < // file_id видео-файла $file_id = $data->message->video->file_id; > // если это аудио-файл elseif (isset($data->message->audio)) < // file_id аудио-файла $file_id = $data->message->audio->file_id; > // если это документ elseif (isset($data->message->document)) < // file_id документа $file_id = $data->message->document->file_id; > // проверим необходимость отправки if (!is_null($file_id)) < // отправим file_id $query(«sendMessage», [ «chat_id» =>$chat_id, «text» => $file_id ]); > > > // если это нажатие по кнопке > elseif (isset($data->callback_query)) < // получим id чата $chat_id = $data->callback_query->from->id; // получим callBackQuery_id $cbq_id = $data->callback_query->id; // получим переданное значение в кнопке $c_data = $data->callback_query->data; // спарсим значения $params = explode(«_», $c_data); // если это переход по шагам if ($params[0] == «s») < // выводим сообщение $printUpdate( $params[1], ($params[2] !== «») ? $params[2] : null, $chat_id, $cbq_id, $data->callback_query->message->message_id ); > // если это другие кнопки else < // заглушим просто запрос $notice($cbq_id, «This is notice for bot»); >>

Еще по теме:  Убрать водяной знак с видео Телеграмм

Исходный код бота

Бот настроен под работу с Webhook

Источник: imakebots.ru

Как сделать в Telegram-канале разметку, отложенные посты и статистику

Стало интересно, как это делать наиболее простым способом. В процессе поиска нашел еще пару полезных вещей: отложенные посты и простую статистику своего канала. Думаю, пригодится не только мне.

Инструкция максимально подробная, потому что интерфейсы на основе ботов вызывают у меня боль, и подозреваю, что не только у меня.

Настройка

Скопируйте их имена в строку поиска, чтобы не перепутать, есть похожие. Нажмите на начать (/start) в каждом из них, в первом выберите русский язык.

2. Добавьте обоих ботов в администраторы своего телеграм-канала. В веб-клиенте для этого нужно либо нажать в правой колонке на название канала или на иконку “>” , либо в левой колонке вызвать контекстное меню правой кнопкой и выбрать “Профиль”. В профиленажимайте на количество администраторов и добавляйте ботов (опять копируйте имена, по умолчанию Telegram предлагает живых людей).

Все, канал подключен. Используйте команду /stats, чтобы смотреть число подписчиков по дням. Бот присылает текстовые данные и график картинкой.

screenshot_2

Ура, теперь можно пользоваться разметкой и отложенными постами, используя функции “3. Отправить пост” и “4. Отложенные посты”.

Telegram поддерживает два формата разметки: HTML и Markdown. Выбирайте тот, который удобнее, менять можно по ходу, но оба сразу нельзя.

полужирный
курсив

В обоих случаях должно получаться так

screenshot_1

Бот постит в канал не сразу, а когда вы выбираете “4. Разместить”. Редактировать то, что вы отсылаете боту, нельзя, только удалить. Если вы ему напишете несколько сообщений, он потом несколько и запостит. Обязательно поэтому пользуйтесь предпросмотром.

Также бот позволяет добавлять к постам внизу несколько ссылок в виде кнопок и убрать подгрузку первой ссылки поста, если она вам не нужна.

Еще по теме:  Как запретить доступ к Телеграм в компьтере с телефона

Бонус: главное оружие публичного интеллектуала перечеркнутый текст Telegram полноценно не поддерживает, но можно его имитировать с помощью вот такого сервиса (через Unicode). Теоретически на каких-то клиентах может не работать, но сам таких не встречал.

Отложенные посты

Отложенные посты пишутся так же, только по кнопке “4. Отложенные посты”. Отложенная публикация учитывает ваш часовой пояс (но не пояс читателей, само собой). Еще не опубликованные посты можно успеть удалить.

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

P.S.: за помощь в создании поста спасибо Ивану Грибову и его каналу “ Пересказал ”.

Источник: mediaskunk.ru

Рейтинг
( Пока оценок нет )
Загрузка ...