Я подключил одно реле, а к нему подключил лампу. Теперь нажимая на кнопку Вкл у нас включается лампа, а нажав на ВЫКЛ выключается. Согласитесь, что это намного удобнее, и кнопки всегда на экране. Здесь ещё выведены кнопки таймера, но об этом чуть позже.
Теперь давайте рассмотрим как работает скетч.
Сначала о его возможностях.
В скетче я управляю реле, включает или выключает нагрузку. В качестве нагрузки я подключил лампу ан 12 вольт, но можно подключить что угодно.
Как и в прошлом примере я запрограммировал 6 действий за которые отвечают эти кнопки.
Первая кнопка сделана для перехода на вэб страницу. При нажатии на эту кнопку открывается браузер и вы переходите по ссылке. В коде указана ссылка на мой канал.
Эти две кнопки отвечают за включение и выключение реле. Переключение происходит достаточно быстро, практически без задержек.
Про оставшиеся кнопки таймера я расскажу позже, когда буду объяснять код скетча. Там есть некоторые трудности. Это таймер на включения на 1, 2 и до минут, но вы сами можете устанавливать любое время.
Интерактивное меню для Telegram ботов | BotHelp
Теперь рассмотрим код скетча. Я взял свой пример о подключении реле. Про то как подключать реле или как устанавливать библиотеки и что такое токен, я рассказывать не буду. Если не понимаете о чём я, то посмотрите вот это видео.
Единственное отличие в коде – это то что я подключил реле к выводу D5 платы ESP.
В SETUP тоже нет ничего интересного. Стандартный набор подключения к WIFI сети. Ну кроме вот этой строчки.
Я правда не совсем понял, за что она отвечает. Это мой перевод комментариев. Если хотите, можете сами потестить разные значения. По умолчанию здесь стояла цифра 60. Мне показалось, что значение 20 мне больше подходят. Но особой разницы я не видел.
Весь основной код вывода приветствия и кнопок расположен вот в этом кусочке кода.
Это отвечает за включение и выключения реле от кнопок. Это стандартный код как в Ардуино. Если приходит значение ON то включить реле, а если OFF то выключить.
Это условие для работы с таймером. Если значение равно значению нажатой кнопки, то включить реле. Если реле было включено, то оно будет отключено.
Это перевод текстового значения в числовое. А это перевод в минуты.
Эти строчки кода отвечают за определение вашего имени, и если оно будет не определено, то будет написано Гость. Имя вставляется в текст приветствия.
Ну вот мы и подошли к кнопкам. За вывод кнопок отвечает вот этот код. Это json. Параметры команды такие. Описание и действие. В первой части – это текст который будет выведен на кнопке, а второй это действие.
Здесь я вывел на экран 6 кнопок.
Первая кнопка отвечает за переход по адресу на вэб страницу.
В первой части написано Перейти на мой канал, а во второй части URL канала.
В двух последующих сказано, что надо при нажатии включать или выключать реле, а соответственно нагрузку подключенную к нему.
При нажатии включить реле сработает, а при выключить отключится.
В первой части – это текст на кнопках, а во второй команда на включение или отключение.
Теперь про таймер.
Здесь выведено 3 кнопки, но вы можете сделать сколько угодно.
Я сделал таймер на включение через 1, 2, и 10 минут. Дальше будет показано как это работает при нажатии первой и второй кнопки. 10 минут я ждать не стал.
Давайте рассмотрим код.
Первую. Часть мы рассматривать не будем, да и со второй тоже всё понятно. Самое интересное вот в этом коде.
При получении текста из кнопки таймера – этот текст обрабатывается функцией replace.
Будет заменено слово TIME на пустоту. Если проще сказать, то просто удалится слово TIME а останется только цифра. Это 1, 2, или 10. Но так как мы передаём текст, нам его надо перевести в числовой формат. Вот это и сделаем.
Если реле уже было включено, то выключаем его.
Напомню, что это всё сказано для реле которые управляются низким сигналом. Если у вас управление происходит высоким уровнем, то везде HIGH надо заменить на LOW.
Здесь из полученной цифры создаём минуты. Это получается умножением на 1000 и умножением на 60. Затем прибавляем время из функции millis и записываем в переменную.
Ну вот вроде со всем разобрались. Теперь давайте смотреть что получилось. По ходу я буду иногда вставлять свои комментарии.
Открываем бот и видим приветственную надпись со ссылкой вывести кнопки на экран. Нажимаем и видим кнопки.
Нажимаем на первую кнопку и переходим на мой канал.
Здесь на экране выведены записи с трёх источников. С телефона, с компьютера и с камеры. Так, что если где-то что-то не состыковывается, то извиняйте. А календарь с часами я вывел для того чтобы отсчитывать время таймера.
Просто нажимаем включить и выключить и видим что лампочка загорается и гаснет. Отклик происходит почти мгновенно.
А теперь посмотрим как работает таймер на включение лампы. Я нажал на 1 минуту. Здесь показано время запуска таймера, а затем будет показано время срабатывания.
Игровая платформа
Боты теперь могут предлагать пользователям поиграть в HTML5-игры, в группе или приватных чатах. Игры — это новый тип контента, который бот может отправлять пользователям.
Примечание
Эта страница предназначена в первую очередь для разработчиков ботов. Если вы хотите почитать об играх в Telegram более простым языком, добро пожаловать в блог.
Создание игры
Запуск игры
Как только игра создана, её можно отправлять в группы или чаты точно так же, как и обычное сообщение. Второй способ — отправить её при помощи инлайн-режима. Под сообщением с игрой всегда будет инлайн-кнопка, начинающая игру. Как только кто-то нажимает кнопку, вашему боту приходит коллбэк с информацией о выбранной игре. Вы отвечаете уникальным URL, сформированный конкретно для этого пользователя, и приложение автоматически открывает игру во встроенном браузере.
Добавление кнопок
Если вы отправите сообщение без кнопок вообще, то к нему автоматически добавится стандартная кнопка «Играть в ИмяИгры». Однако, вы можете добавлять к сообщению и другие кнопки: например, с описанием правил или ссылкой на официальное сообщество.
Важная информация
Первая кнопка в сообщении всегда должна выполнять функцию открытия игры.
Таблица рекордов
Сообщение, к которому прикреплена игра, также может отображать таблицу рекордов для конкретного чата. Как только кто-то занимает первое место по очкам, всем участникам придёт уведомление, а текущая таблица рекордов отобразит новый рейтинг игроков. Также возможно запросить данные о рейтинге игроков, чтобы создать такую таблицу прямо в игре.
Отправка результатов в чат
В интерфейсе игры в правом верхнем углу всегда будет находиться стандартная системная кнопка «Поделиться»:
Также вы можете создавать дополнительные кнопки в HTML-странице. Нажатие на такую кнопку приведёт к открытию желаемого чата и отправкой в него сообщения с количеством набранных очков в игре.
Чтобы добавить такую кнопку на страницу, добавьте этот скрипт перед закрытием тэга :
Примечание
Эта библиотека будет работать только в играх, открытых в приложении Telegram. Пожалуйста, не применяйте её за пределами игр.
По нажатию на кнопку должен вызываться метод TelegramGameProxy.shareScore() .
Пример вызова
Поделиться
Предупреждение
Запрещается вызывать этот метод без участия пользователя. Он должен вызываться только при прямом намерении пользователя нажать на кнопку.
Использование параметров URL
Если в вашем URL используется хэш, то имейте в виду, что Telegram может к нему что-нибудь добавить. Названия добавленных параметров будет начинаться с tg (вот пример кода, который их добавляет: games.js#L54). Чтобы достать свои собственные параметры из адреса, вы можете воспользоваться объектом TelegramGameProxy.initParams .
Позаботьтесь об UX
Пожалуйста, протестируйте своё приложение на максимальном количестве разных экранов и ориентаций. Если по каким-то причинам на определённых экранах ваше приложение не работает — не бросайте это просто так и оповестите пользователя — хотя бы просто уведомлением.
Сайт про Telegram на русском (неофициальный).
Здесь собраны приложения на базе MTProto, переведена некоторая документация с официального сайта, а также работает Webogram.
Источник: tlgrm.ru
Инлайн-кнопки
В канале Telegram есть возможность добавить инлайн-кнопки. Такие кнопки будут отображаться не под полем ввода, а над.
Возможность добавить инлайн-кнопки есть только в Telegram, другие каналы такую функциональность не поддерживают.
Обычные кнопки располагаются под полем ввода текста («Написать сообщение…»). Количество кнопок в строке определяется автоматически, в зависимости от количества кнопок и объема текста в них. На одном экране может быть не более восьми кнопок:
Инлайн-кнопки располагаются над полем ввода текста:
Как использовать инлайн-кнопки?
Возьмем, к примеру, такой экран. Изначально кнопки на нем будут отображаться в Telegram как обычные кнопки:
Есть два способа превратить эти обычные кнопки в инлайн-кнопки.
Добавить на нужный экран кнопку со ссылкой
Чтобы обычные кнопки превратились в Инлайн-кнопки, добавьте на этот же экран хотя бы одну кнопку-ссылку. Например, вы можете ссылку на ваш сайт.
- нажмите + КНОПКА
- введите название кнопки и нажмите Enter
- нажмите на значок ссылки
- вставьте URL на нужный ресурс
- нажмите Сохранить
После этого нужно нажать Опубликовать, чтобы изменения пришли в канал. Дождитесь всплывающего сообщения о том, что сценарий был опубликован на канале Telegram.
После публикации снова протестируйте бота. В нашем случае кнопки располагаются на стартовом (самом левом и самом верхнем) экране, поэтому, чтобы проверить, пошлем боту /start .
Добавить «пустую» кнопку
Второй способ подойдет вам, если кнопка-ссылка не подходит для вашего сценария.
- нажмите + КНОПКА
- наберите пробел и нажмите Enter. Текст кнопки будет содержать только один символ — пробел
- нажмите на значок ссылки, вставьте любую ссылку
- нажмите Сохранить
Нажмите Опубликовать и дождитесь сообщения о публикации в канал.
Затем пройдите ветку заново. Например, пошлите боту /start .
Обычные кнопки превратятся в Инлайн-кнопки, а кнопка, которая содержит только символ пробела, отображаться не будет.
Как запомнить выбор пользователя
Вы можете получить текст выбранной инлайн-кнопки в Telegram через переменную $queryText . Для этого после блока с инлайн-кнопками добавьте блок Условия и сохраните значение $queryText в новую переменную $choice через выражение $choice = String($queryText).split(‘;’)[1] .
Особенности канала Telegram
Есть некоторые особенности отображения кнопок, которые нужно учитывать.
- Не всегда сразу же можно увидеть новый вариант кнопок. Иногда нужно пройти по другой ветке бота, затем послать /start и вернуться на экран с кнопками.
- Если у вас есть два экрана, которые идут друг после друга, и на первом экране обычные кнопки, а на втором инлайн-кнопки, то при перехода на экран с Инлайн-кнопками, обычные кнопки не исчезнут.
К примеру, возьмем два таких экрана. На экране, выделенном синим, обычные кнопки. На экране, выделенном зеленым, Инлайн-кнопки.
После нажатия на кнопку «цены» бот перейдет на второй экран, на котором должны отображаться Инлайн-кнопки. Но из-за особенностей канала, обычные кнопки не исчезнут.
Вы можете пользоваться таким поведением, если для вас даже удобно отображать два вида кнопок. Либо, если для вас такое поведение неудобно, разделяйте экраны с обычными кнопками от экранов с Инлайн-кнопками другими экранами текста с интентами вместо кнопок, чтобы не было такой последовательности.
Источник: help.aimylogic.com