Привет, HABR! В этой статье постараюсь показать маленький пример, использования клавиатуры под сообщением в Telegram. То есть мы с помощью бота будем отправлять пост в наш канал с использованием языка программирования PHP. Telegram BOT API неплохо документирован, но всё же остаются вопросы у новичков, как это всё собрать чтобы работало.
InlineKeyboardMarkup — этот объект представляет встроенную клавиатуру, которая появляется под соответствующим сообщением.
Что мы хотим сделать?
При публикации сообщение с использованием бота под сами сообщением вывести 5 кнопок (Нравиться, Ха-ха, Ух ты!, Сочувствую, Возмутительно) в виде смайликов. И цель их отображать количество людей, которые нажали на определённую кнопку.
В сети уже много готовых библиотек на PHP по работе с Telegram BOT API. Для нашей задачи они не понадобятся. Итак приступаем.
Нам понадобится
- Создать telegram канал;
- Создать бота;
- Добавить бота в telegram канал;
- Хостинг на котором будет лежать файл обработки логики кнопок;
- База данных в которой будем хранить id пользователей, которые нажал на кнопку.
Логика
При нажатии на определённую кнопку добавить счётчик в неё. Пользователь может нажать только на одну из 5-кнопок. В БД мы будем хранить ID сообщения и ID пользователей, которые уже отреагировали на сообщение.
Telegram бот на PHP за 10 минут
Структура файлов
- send.php — отправляем сообщение в Telegram канал
- callback.php — обрабатываем клики кнопок получены из Telegram канала
Как видим по коду он очень просто и мы тут просто отправляем «Hello World!» сообщение и к нему добавляем 5 кнопок.
Нам также нужно установить Webhook для бота. Это нужно для того, чтобы указать боту куда (http://site.ru/callback.php) отправлять результат обработки кнопок. Это очень просто сделать, в браузер соберите ссылку такого формата:
https://api.telegram.org/bot/setWebhook?url=
В ответ получите json примерно такого содержания:
Вот и всё, такой маленький пример получился, за ранние извините, если код написан безобразно. Можно расширить этот код до нужной функциональности, это уже зависит от вашей задачи. Моя задача была показать маленький пример, и я надеюсь у меня это получилось. Спасибо за внимание, встретимся в комментариях.
Источник: savepearlharbor.com
Как написать телеграм бот на php
Добавлено: 15/04/2018 16:10 | Обновлено: 15/04/2018 18:51 | Добавил: nick | Просмотры: 10320 Комментарии: 0
В этом материале вы узнаете о том, как создать простой Telegram-бот для любителей собак, используя Dog API (dog.ceo/dog-api).
Материал является вольным переводом статьи Build A Telegram Bot with Laravel and BotMan с сайта scotch.io.
В данном материале для создания Telegram-бота мы используем известную библиотеку BotMan (botman.io).
На рисунке вы можете видеть результат работы созданного по этому материалу Telegram-бота. Здесь по команде /random бот вернул ссылку на случайную картинку собаки: Естественно, кроме этой команды, бот будет понимать и другие.
В первую очередь установим Botman Studio. Если вы не знаете, что это, то знайте, Botman Studio – это стандартное Laravel-приложение с уже включенной в него библиотекой Botman. Так что если вы уже работали с Laravel ранее, то большинство действий из этого материала будет для вас знакомо.
А теперь продолжим, и создадим новый проект командой:
composer create-project —prefer-dist botman/studio ilovedogs
После того, как все установится проверьте работает ли оно. Для этого наберите в браузере: [адрес вашего сайта]/botman/tinker (например, у меня было так: site1.com/botman/tinker), и в результате вы должны увидеть следующую страницу:

В этом проекте нам нужно, чтобы бот отвечал на следующие типы команд:
- запрос ссылки на случайную картинку из всех пород собак (команда /random)
- запрос ссылки на случайную картинку с указанием породы (например, /b dachshund)
- запрос ссылки на случайную картинку с указанием породы и подпороды (например, /s hound:afghan)
Также добавим простую возможность диалога, где можно выбрать желаемое действие из нескольких вариантов (команда Start conversation): Кроме возможности диалога, нужно еще предусмотреть вариант, когда человек будет вводить какие-то неизвестные команды:
Это весь функционал, который нам предстоит реализовать. Читайте дальше, и вы узнаете, как это сделать.
Запрос ссылки на случайную картинку из всех пород собак (команда /random)
Для того, чтобы получить случайную картинку собаки из всех пород собак пользователю нужно будет ввести команду /random. Научим наш бот правильно реагировать на эту команду.
Откроем файл routes/botman.php и добавим туда новую строчку:
Далее создадим новый контроллер с помощью команды:
php artisan make:controller AllBreedsController
Его содержимое должно выглядеть следующим образом:
Здесь мы используем класс DogService (app/services/DogService.php), который будет отвечать за запросы к Dog API и возвращении полученной ссылки на картинку с собакой. Содержимое этого файла должно быть следующим:
Запрос ссылки на случайную картинку с указанием породы (например, /b dachshund)
Добавим новую строчку в файл routes/botman.php:
Далее откроем контроллер AllBreedsController, который мы создали ранее и добавим в него новый метод:
Определим используемый здесь метод byBreed() в сервисном классе DogService, который мы создали ранее:
Также не забудьте добавить константу с api-ссылкой для получения картинки по названию породы в начало класса DogService:
// The endpoint we will hit to get a random image by a given breed name. const BREED_ENDPOINT = ‘https://dog.ceo/api/breed/%s/images/random’;
Запрос ссылки на случайную картинку с указанием породы и подпороды (например, /s hound:afghan)
Добавим новую строчку в файл routes/botman.php:
Далее создадим новый контроллер с помощью команды:
php artisan make:controller SubBreedController
Его содержимое должно быть следующим:
Определим используемый здесь метод bySubBreed() в сервисном классе DogService, который мы создали ранее:
Также не забудьте добавить константу с api-ссылкой для получения картинки по названию породы и подпороды в начало DogService:
// The endpoint we will hit to get a random image by a given breed name and its sub-breed. const SUB_BREED_ENDPOINT = ‘https://dog.ceo/api/breed/%s/%s/images/random’;
Диалог с выбором желаемого действия (команда Start conversation)
Далее, с помощью artisan-команды создайте новый контроллер:
php artisan make:controller ConversationController
Его содержимое должно быть следующим:
startConversation(new DefaultConversation); > >
Здесь мы используем класс DefaultConversation, файл для которого нужно создать в папке app/Conversations. Эта папка уже должна быть в структуре проекта, поэтому остается только создать в ней новый файл DefaultConversation.php. Его содержимое должно быть следующим:
Неизвестные команды
Осталось предусмотреть вариант, когда пользователь вводит какие-то неизвестные команды, которые бот не знает. Снова откроем файл routes/botman.php и добавим новую строчку:
Создадим новый контроллер командой:
php artisan make:controller FallbackController
Его содержимое должно быть следующим:
reply(‘Sorry, I did not understand these commands. Try: ‘Start Conversation»); > >
На этом программистская часть закончена, осталось создать новый бот в Telegram, и привязать его к нашему проекту.
Установка Telegram-драйвера
В первую очередь нужно установить Telegram-драйвер в проект:
composer require botman/driver-telegram
Создание нового Telegram-бота
Открываем Telegram и через поиск ищем BotFather. После чего пишем: /newbot. Далее выбираем имя для бота (name), я использовал имя BotmanTest. Затем выбираем пользовательское имя (username), оно должно быть уникальным. После этого вы получите api-токен, который нужно указать в файле .env проекта, для этого добавьте следующую строчку в конец файла:
TELEGRAM_TOKEN=YOUR_TOKEN
И замените YOUR_TOKEN на полученный api-токен.
Открываем доступ извне к проекту с помощью ngrok
Чтобы не выкладывать свой тестовый проект на отдельный сервер в сети, воспользуемся утилитой ngrok. С помощью этой утилиты ваш проект на localhost станет доступен по отдельному адресу в Интернете. Если у вас еще не установлен ngrok, используйте официальную страницу (https://ngrok.com/download) для установки.
После того, как вы установите ngrok запустите Laravel-сервер:
php artisan serve
После чего перейдите в папку с ngrok и выполните команду:
./ngrok http 8000
Теперь ваш проект будет доступен из сети по адресам, которые указаны в строчках Forwarding: Для работы Telegram-бота нужен https-адрес, поэтому используйте его.
Связываем наш проект с Telegram
Для того, чтобы связать наш проект с Telegram, используйте Postman или CURL для выполнения следующей команды:
curl -X POST -F ‘url=https:///botman’ https://api.telegram.org/bot/setWebhook
YOU_URL – https-адрес из ngrok; TOKEN – это TELEGRAM_TOKEN, который вы указали ранее в файле .env.
Если вы все сделали правильно, то команда должна вернуть следующий результат:
На этом все, результат работы в Telegram приведен на картинке:
Источник: phpnick.ru