Как написать Телеграм бот на php

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

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

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

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

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

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

  1. Создать telegram канал;
  2. Создать бота;
  3. Добавить бота в telegram канал;
  4. Хостинг на котором будет лежать файл обработки логики кнопок;
  5. База данных в которой будем хранить id пользователей, которые нажал на кнопку.

Логика

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

Telegram бот на PHP за 10 минут

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

  1. send.php — отправляем сообщение в Telegram канал
  2. 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), и в результате вы должны увидеть следующую страницу:

Здесь нас интересует первая ссылка Tinker. Перейдя по ней, вы увидите поле ввода, через которое можно «пообщаться» с ботом. Например, если ввести слово «Hi», в ответ вы получите «Hello!». Проверили, что все работает, можем продолжить.

В этом проекте нам нужно, чтобы бот отвечал на следующие типы команд:

  • запрос ссылки на случайную картинку из всех пород собак (команда /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. Его содержимое должно быть следующим:

Еще по теме:  Slow mode в Телеграмме

Неизвестные команды

Осталось предусмотреть вариант, когда пользователь вводит какие-то неизвестные команды, которые бот не знает. Снова откроем файл 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

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