telegram api кнопки php

Bot API v2: Специальные кнопки, опять редактирование сообщений, кэшированный инлайн

⁠ Продолжаю рассказывать о нововведениях в Bot API версии 2. Мы не будем рассматривать методы getChat, getChatMember и т.д., которые появились в обновлении 2.1: они интуитивно понятны и особых проблем не вызывают. Вопросы могут возникнуть при изучении специальных обычных кнопок, вроде тех, что запрашивают у вас номер телефона и геолокацию, при попытке получить отредактированное сообщение, а также при работе с уже загруженными в облако объектами с инлайн-режимом. Обо всём по порядку.

Специальные кнопки

Нажатие на кнопку запроса телефона

При нажатии на кнопку отправки номера телефона сервер вернёт объект Message с непустым типом Contact, а при нажатии на кнопку отправки геолокации – с непустым типом Location.

Редактирование сообщений пользователями

Начиная с мая 2016 года, пользователи могут редактировать свои сообщения, а боты могут видеть исправления. Как им в этом помочь, давайте разберёмся вместе. В качестве примера заставим нашего бота отвечать на ругательства. К примеру, если пользователь пишет “дурак”, бот ответит “сам дурак”. Хитрые люди могут попробовать отредактировать своё сообщение и выставить бота в дурном свете, но мы будем изменять ответ бота под пользовательский текст.

Заметили? Да, при вызове edit_message_text надо указать message_id на единицу бОльший, чем тот, который прислан сервером, потому что сервер сообщает о сообщении от пользователя, а нам нужно редактировать сообщение бота, которое шло за ним следом. И вот как это будет выглядеть (это одни и те же сообщения, что видно по метке “изм.” около моего)

Кэшированный инлайн

Когда инлайн-боты только появились, то в качестве источника данных для ответов надо было указывать внешние ссылки, причем с ограничениями по размеру указываемого файла. Очевидно, такой подход мог быть не очень быстрым, а чем дольше пользователь ждёт, тем он менее доволен результатами работы бота 🙂 В итоге, в Bot API v2 инлайн-режиму разрешили в качестве источника для медиа использовать file_id уже имеющихся на сервере файлов (напомню, что file_id для одного и того же файла будут разниться от бота к боту) Итак, у меня есть file_id двух фотографий с капибарами (как получить file_id загружаемых боту фотографий, считайте это заданием для самоподготовки), надо на любой инлайн-запрос (даже пустой) предложить эти 2 изображения. По сути, всё сводится к замене типа InlineQueryResultPhoto на тип InlineQueryResultCachedPhoto

Запускаем бота. Ура, теперь мы умеем очень быстро предлагать разных капибар нашим пользователям 🙂

Можно сделать альбом капибар

Помимо фотографий, из “кэша” можно показывать любые типы, поддерживаемые мессенджером: видео, аудио, стикеры, файлы (пока что только pdf и zip ).

На этом всё. Хороших ботов!

Источник

Клавиатура как способ взаимодействия с ботом

Взаимодействие пользователя с ботом должно быть интуитивным. Пользователь должен понимать, как общаться с ботом чтобы получить необходимый результат. Давайте рассмотрим какие есть способы взаимодействия с ботом.

Полезный инструмент

Telegram Bot API рекомендует использовать base64url для кодирования параметров с двоичным и другими типами контента.

По ссылке с параметром start будет открыт диалог с ботом, с кнопкой Старт в месте поля ввода. Если используется параметр startgroup, пользователю будет предложено выбрать группу для добавления бота.

Как только пользователь подтвердит действие (нажмет кнопку Пуск в своем приложении или выберет группу для добавления бота), ваш бот получит сообщение от этого пользователя в таком формате:

Клавиатуры и их возможности

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

В этом случае нам помогут клавиатуры. Ее нужно просто после старта диалога с ботом вывести на экран пользователю, и когда тот нажмет на нужную ему кнопку, боту отправиться заложенная вами правильная команда. В этом случае уходим от возможных ошибок, интерфейс бота выглядит более приветливо и профессионально. Качество бота повышается.

С каждым сообщением бот может отправлять разный набор кнопок как по количеству, так и по назначению. Кнопки можно расположить непосредственно под сообщением (InlineKeyboardButton), или зафиксировать под тестовым полем для ввода сообщения (KeyboardButton). Различия в них очень существенные на мой взгляд. Давайте рассмотрим некоторые их возможности.

KeyboardButton

Этот объект представляет одну кнопку клавиатуры, располагающуюся под текстовым полем для отправки сообщения. Поставляется она в интерфейс приложения в наборе с другими аналогичными кнопками через объект ReplyKeyboardMarkup. В качестве параметров с ним можно передать:

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

Помимо набора кнопок в объект ReplyKeyboardMarkup можно передать еще ряд параметров:

При необходимости удалить клавиатуру используйте объект ReplyKeyboardRemove.

InlineKeyboardButton

Это объект одной кнопки встроенной клавиатуры. Располагается набор таких кнопок сразу под сообщением. С помощью этого объекта можно передать кнопке url, или использовать его для голосования как одним из вариантов. В любом случае можно сделать много интересного и полезного. Рассмотрим его возможности на практике чуть ниже. Передается в наборе с другими аналогичными кнопками через объект InlineKeyboardMarkup. Принимает параметры:

Теперь немного практики

Предлагаю рассмотреть поближе возможности клавиатур. Для примера я сделаю 4 кнопки: 2 KeyboardButton и 2 InlineKeyboardButton. Для этого будем работать с теми же инструментами, которые были в предыдущей статье. Добавим только несколько новых методов.

telegram api кнопки php. Смотреть фото telegram api кнопки php. Смотреть картинку telegram api кнопки php. Картинка про telegram api кнопки php. Фото telegram api кнопки php

Чтобы обрабатывать команды от всех типов кнопок нам надо составить условия проверки. В моем примере от кнопки KeyboardButton команда приходит в виде обычного текстового сообщения вместе с объектом Message под ключом text, а от кнопки InlineKeyboardButton в объекте CallbackQuery под ключом data.

Кнопки будем отправлять в параметре reply_markup в методе sendMessage. Набор кнопок идет в таком формате:

Создадим два метода для разных клавиатур, на входе принимают массив строк кнопок, на выходе строку в формате JSON.

Сам набор кнопок будет выглядеть вот так.

В значении параметра text передаем бинарный код эмодзи в кодировке UTF-8 (список эмодзи), которые преобразуются из шестнадцатеричных данных в двоичные данные функцией hex2bin, и еще выведем текущее числовое значение счетчика кнопки.

Теперь нам остается только описать механизм определения команды и механизм ее обработки. Поэтому в методе init() создадим конструкцию оператора switch

Давайте разберемся, что в этом коде происходит. Оператор switch принимает значение $message, которое может быть, как просто текст сообщения (в том числе команды), так и значение объекта callbackQuery.

Для создания новой клавиатуры мы используем метод setParams(), а для отправки изменений мы используем метод changeVote(). Здесь остановим внимание на методах Bot API

Подводим итоги

Мы рассмотрели некоторые способы взаимодействия между пользователем и ботом, в основном это элементы интерфейса бота. Исходный код можно скачать по этой ссылке. Далее нас ждет знакомство с медиа-файлами.

Комментарии

Авторизуйтесь через Telegram, чтобы оставить комментарий.
Откройте бот @SiteAuthBot, нажмите кнопку Старт/Start. Следуйте инструкциям бота.

Внимание!
Убедитесь, что эта страница открыта в браузере, а не в приложении Telegram. В противном случае авторизация пройдет только в приложении Telegram.

30 in лучше выводить с постраничной навигацией по 10 шт например, у Телеграм если не ошибаюсь установлено ограничение. У меня была ситуация, когда на 32 строке кнопок был косяк, но постраничка решила проблему.

что нужно дописать этому боту сюда-

Например если вы переходите по ссылке https://t.me/your_bot/start=123456789

Значение будет лежать:
1. Если приводить к объекту json_decode(file_get_contents(‘php://input’))->message->text
2. Если приводить к ассоциативному массиву json_decode(file_get_contents(‘php://input’), true)[‘message’][‘text’]

Это значение будет /start 123456789

ТАК я формирую ссылку

но когда я перехожу по ссылке мне выдает ошибку

Старт выглядит также как у вас

1. Просьба оформить топик на форуме все еще актуальна.
2. У вас нет необходимого case поэтому условие проваливается в default, обратите внимание я вам выше писал, какое значение вам будет прилетать /start 123456789, где 123456789 в вашем случае это подставленный $chat_id

Источник

Telegram BOT API: добавляем кнопки к сообщениям и обрабатываем их на стороне сервера

Привет, HABR! В этой статье постараюсь показать маленький пример, использования клавиатуры под сообщением в Telegram. То есть мы с помощью бота будем отправлять пост в наш канал с использованием языка программирования PHP. Telegram BOT API неплохо документирован, но всё же остаются вопросы у новичков, как это всё собрать чтобы работало.

InlineKeyboardMarkup — этот объект представляет встроенную клавиатуру, которая появляется под соответствующим сообщением.

Что мы хотим сделать?

При публикации сообщение с использованием бота под сами сообщением вывести 5 кнопок (Нравиться, Ха-ха, Ух ты!, Сочувствую, Возмутительно) в виде смайликов. И цель их отображать количество людей, которые нажали на определённую кнопку.

В сети уже много готовых библиотек на PHP по работе с Telegram BOT API. Для нашей задачи они не понадобятся. Итак приступаем.

Нам понадобится

Логика

При нажатии на определённую кнопку добавить счётчик в неё. Пользователь может нажать только на одну из 5-кнопок. В БД мы будем хранить ID сообщения и ID пользователей, которые уже отреагировали на сообщение.

Структура файлов

Содержание файла send.php

Как видим по коду он очень просто и мы тут просто отправляем «Hello World!» сообщение и к нему добавляем 5 кнопок.

Нам также нужно установить Webhook для бота. Это нужно для того, чтобы указать боту куда (http://site.ru/callback.php) отправлять результат обработки кнопок. Это очень просто сделать, в браузер соберите ссылку такого формата:

В ответ получите json примерно такого содержания:

Содержание файла callback.php

Вот и всё, такой маленький пример получился, за ранние извините, если код написан безобразно. Можно расширить этот код до нужной функциональности, это уже зависит от вашей задачи. Моя задача была показать маленький пример, и я надеюсь у меня это получилось. Спасибо за внимание, встретимся в комментариях.

Источник

Встроенные кнопки в Telegram Bot API — pyTelegramBotAPI

Добрый день уважаемые читатели, давайте рассмотрим, какие основные типы встроенных кнопок предлагают чат-боты telegram и в чем их особенности. Статья будет полезна всем, кто хочет разобраться в возможностях взаимодействия с пользователями telegram в версии bot API 2.0.

Для обзора возможностей нам понадобится установить 3 целых 2 десятых Python`a и пару ложек pyTelegramBotAPI. Особенности настройки и регистрации чат-бота мы рассматривать не будем, т.к. есть множество статей на эту тему.

И так, что же такое встроенные кнопки(клавиатура) в мессенджере Telegram? Это кнопки которые выводятся во внутренней области чата и привязываются к конкретному сообщению. Они жестко связаны с сообщением(если удалить сообщение, внутренние кнопки так же удаляются вместе с ним.). Они дают возможность динамически видоизменять его.

В данный момент есть три типа встроенных кнопок:

URL-кнопки

telegram api кнопки php. Смотреть фото telegram api кнопки php. Смотреть картинку telegram api кнопки php. Картинка про telegram api кнопки php. Фото telegram api кнопки php

Для создания кнопки используется тип InlineKeyboardMarkup, давайте создадим кнопку «Наш сайт»:

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

Switch-кнопки

Этот тип кнопок предназначен для перенаправления пользователя в какой либо чат, с последующей активацией (встроенного) inline-режима общения с ботом. Данный режим можно активировать вручную: в чате, вводим: «@название бота», но switch-кнопки позволяют это сделать автоматически (помогая знакомиться с inline-режимом новичкам).

Для того что-бы создать подобный переключатель, необходимо указать аргумент switch_inline_query либо пустой, либо с каким-либо текстом.

Теперь, если мы нажмем на кнопку и выберем чат, вот что получится:
Шаг 1:
telegram api кнопки php. Смотреть фото telegram api кнопки php. Смотреть картинку telegram api кнопки php. Картинка про telegram api кнопки php. Фото telegram api кнопки php
Нажимаем на кнопку.

Шаг 2:
telegram api кнопки php. Смотреть фото telegram api кнопки php. Смотреть картинку telegram api кнопки php. Картинка про telegram api кнопки php. Фото telegram api кнопки php
Выбираем чат.

Шаг 3:
telegram api кнопки php. Смотреть фото telegram api кнопки php. Смотреть картинку telegram api кнопки php. Картинка про telegram api кнопки php. Фото telegram api кнопки php
Активировался встроенный inline-режим.

Callback-кнопки

Ну и наконец самое интересное — это кнопки с обратной связью: позволяют динамически обновлять сообщение/встроенные кнопки (не засоряя при этом ленту), а так же отображать уведомление в верху чат-бота или модальном окне.

Например, их можно использовать для просмотра длинного сообщения, аналогично пагинации страниц на сайтах, или например сделать календарь. Я не стану изобретать велосипед, а через поиск по GitHub, найду готовую библиотеку calendar-telegram. Выполнив указанные инструкции, получаем готовый календарь, который можно динамически изменять по нажатию на соответствующие кнопки:
telegram api кнопки php. Смотреть фото telegram api кнопки php. Смотреть картинку telegram api кнопки php. Картинка про telegram api кнопки php. Фото telegram api кнопки php

Так же можно добавить уведомление по нажатию на дату, для этого достаточно указать сообщение в ответе:

telegram api кнопки php. Смотреть фото telegram api кнопки php. Смотреть картинку telegram api кнопки php. Картинка про telegram api кнопки php. Фото telegram api кнопки php
(Пример в десктопной версии)

telegram api кнопки php. Смотреть фото telegram api кнопки php. Смотреть картинку telegram api кнопки php. Картинка про telegram api кнопки php. Фото telegram api кнопки php
(Пример в мобильной версии)

Если изменить show_alert на True, то мы получим модальное окно:

telegram api кнопки php. Смотреть фото telegram api кнопки php. Смотреть картинку telegram api кнопки php. Картинка про telegram api кнопки php. Фото telegram api кнопки php

Заключение

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

Источник

Пишем простого чат-бота для Telegram на PHP

Шукюров Заур, разработчик @KinomanBot и @GaidarForum_bot, написал руководство по созданию простого чат-бота на PHP.

24 июня 2015 года разработчики Telegram открыли платформу для создания ботов (программ, которые выполняют определенные действия по заданному алгоритму).

За полтора года работы платформы набралось много интересных чат-ботов, решающих множество проблем и позволяющих с пользой провести время в мессенджере.

telegram api кнопки php. Смотреть фото telegram api кнопки php. Смотреть картинку telegram api кнопки php. Картинка про telegram api кнопки php. Фото telegram api кнопки php

Шаг 1: регистрация бота у @BotFather

Прежде чем начать писать код, нового бота нужно зарегистрировать у «папы всех ботов» — @BotFather, чтобы получить токен (ключ) для работы с Telegram API.

Регистрация проходит в 5 простых этапов:

1) Открываете чат с @BotFather;
2) Вводите или выбираете из списка команду /newbot;
3) Отправляете желаемое название для бота;
4) Пишете юзернейм бота, по которому его будут находить через поиск. Обязательно на конце вашего юзернейма должно быть слово «bot» или «_bot». Например, NetologyRSSbot;
5) По желанию можно сразу настроить полное или краткое описание, список команд и аватарку.

telegram api кнопки php. Смотреть фото telegram api кнопки php. Смотреть картинку telegram api кнопки php. Картинка про telegram api кнопки php. Фото telegram api кнопки php

По итогу регистрации получаем наш токен — 375466075:AAEARK0r2nXjB67JiB35JCXXhKEyT42Px8s.
Будьте осторожны: никогда и никому не показывайте токен, иначе ваш бот может быть скомпрометирован. Если по несчастливой случайности кто-то нехороший все-таки узнал ваш токен, то заменить его можно всё в том же @BotFather, нажав на кнопку «Revoke current token» в разделе «API Token».

Шаг 2: выбираем способ обработки запросов

Исходя из официальной документации, Telegram API основан на простых HTTP-запросах. Существует всего два различных способа обрабатывать запросы, которые пользователи будут посылать боту:

1) проверять «вручную», используя «Long Polling»;
2) доверить всё Telegram, поставив «Webhook». В этом случае любой запрос от пользователя Telegram сам будет посылать нам на сервер.

Мы остановимся на втором варианте, но у него есть ограничение: у вас на сайте обязательно должен быть установлен SSL-сертификат, чтобы все запросы проходили через безопасный протокол HTTPS. Самоподписанные и бесплатные сертификаты «Let’s Encrypt», которые поддерживает большинство хостингов, также подходят.

Пример настройки самоподписанного сертификата из официальной документации Telegram.

Шаг 3: пишем код

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

Открыв в браузере эту ссылку, должен прийти JSON-ответ со значением «Webhook was set», что будет означать, что вебхук установлен, и теперь все запросы от пользователей будут присылаться по адресу файла-обработчика.

Переходим к самому главному — обработке этих самых запросов и написанию функционала бота.

Ниже представлен полный листинг файла-обработчика:

Разберем всё по порядку.

1. Сначала мы подключаем скачанную библиотеку, указав путь (лучше полный) до файла автозагрузчика.

2. Создаем экземпляр класса в переменной $telegram и передаем в него наш токен.

В переменной $result получаем информацию о сообщении, которое пришлет нам Telegram.

3. Затем определяем главные переменные: текстовое сообщение, уникальный идентификатор пользователя и его юзернейм. Если предстоит работа с БД, то не забывайте про фильтрацию (или лучше используйте PDO).

4. Создаем нашу клавиатуру, состоящую из трех кнопок.

5. Теперь, когда мы обозначили все переменные, можно перейти к обработке полученного сообщения. Для этого можно использовать конструкцию switch-case либо if-else. Так как принципиальной разницы между ними нет, остановимся на втором варианте, как наиболее привычном.

В самом начале проверяем, заполнена ли переменная $text и является ли сообщение пользователя текстовым.

Если нет, то отправляем пользователю с помощью метода sendMessage сообщение с просьбой ввести текстовое сообщение.

6. Рассмотрим вариант, когда пользователь прислал сообщение с командами /start или /help

В этом случае помимо текста из переменной $reply будет подгружаться клавиатура, состоящая из трёх кнопок: «Последние статьи», «Картинка» и «Гифка».

Реализуется это с помощью метода replyKeyboardMarkup, параметрами которого являются:

8. Для отправки картинки используется метод sendPhoto, для отправки гифки – sendDocument. В обоих случаях Telegram позволяет передавать прямую ссылку на файл, что безусловно очень удобно, но не так быстро, как если бы мы передавали file_id уже отправленной на сервера Telegram картинки или гифки.

9. Для получения последних статей используется простой парсинг RSS ленты Нетологии при помощи встроенной в PHP функции simplexml_load_file.

В параметрах метода sendMessage можно заметить два новых значения:

10. В качестве смайла (стрелка вправо) используются символы \xE2\x9E\xA1. Список всех смайлов в таком виде можно найти на специальном сайте.

telegram api кнопки php. Смотреть фото telegram api кнопки php. Смотреть картинку telegram api кнопки php. Картинка про telegram api кнопки php. Фото telegram api кнопки php

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

Благодаря удобному API, боты Telegram могут стать хорошей платформой для автоматизации рутинных действий, настройки уведомлений, удобному и быстрому получению информации и созданию игр.

Бесплатными площадками для продвижения могут послужить каталоги ботов Telegram Bot Store, TeleChappy или 50bots.

А анализировать активность пользователей можно с помощью бесплатного инструмента для аналитики ботов от Яндекса — Botan.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *