создать бота для телеграмма php
Бот Телеграм на PHP
Примеры как зарегистрировать бота в Telegram, описание и взаимодействие с основными методами API. Документация на core.telegram.org и tlgrm.ru (неофициальный, на русском).
Все запросы к API должны осуществляться по HTTPS, подойдет бесплатный сертификат «Let’s Encrypt».
Регистрация бота
Для регистрации нового бота нужно написать «папе ботов» @BotFather команду /newbot
Следующим сообщением отправляем название для бота, обязательно на конце имени должно быть слово «bot» или «_bot». Ответным сообщением получим токен:
Тут же можно настроить описание и аватарку:
/setname | Имя |
/setdescription | Краткое описание |
/setabouttext | Описание бота |
/setuserpic | Юзерпик |
Далее нужно поставить «Webhook» чтобы все сообщения из Telegram приходили на PHP скрипт ( https://example.com/bot.php ). Для этого нужно пройти по ссылке в которой подставлены полученный токен и адрес скрипта.
https://api.telegram.org/bot /setWebhook?url= https://example.com/bot.php
В ответе будет
При смене токена, установку вебхука нужно повторить.
Входящие сообщения
Чтобы посмотреть входящие данные, их придется дампить в файл:
Как создать Телеграм бот на php (инструкция)
Сегодня поговорим о том, как написать бота для Телеграм на php. Материал рассчитан на программистов начального уровня, владеющих азами php. Итак, начнем.
Подготовка к написанию бота
Прежде чем мы приступим к созданию бота, убедимся в том, что в нашем распоряжении имеются хостинг, домен и SSL-сертификат для него (т.е URL начинается с https).
BotFather. Получение API токена
1. Авторизуемся в Телеграмм. Через поиск находим BotFather (https://web.telegram.org/#/im?p=@BotFather), добавляемся к нему нажав «Start»;
2. Вводим /start
3. Появится список команд, доступных для работы с этим ботом. Введём /newbot
4. Придумываем уникальное имя для нашего бота. Например arch_wood
5. Вводим уникальное имя пользователя для бота, которое обязательно должно оканчиваться на _bot. В примере выше я придумал arch_wood_bot. Если имя уже занято, вы получите сообщение «Sorry, this username is already taken. Please try something different.» Тогда придется придумать что-то другое.
6. После того как уникальное имя боту будет задано мы получим сообщение с ключем (токеном), который будет выделен красным либо синим цветом (зависит от активной цветовой схемы месенджера). Например: 314548665:AAtttG4r4OF_QzMsaZjTpvN9Mb04ttYi6GA
7. Копируем ключ. Переходим к кодингу.
Работа с TelegramBotApi
Дабы облегчить себе жизнь, взаимодействовать с API Телеграма будем при помощи TelegramBotApi. Для начала нам нужно будет клонировать проект с Гитхаба при помощи Composer. Важный момент. Composer, как правило, не устанавливается без файла php.exe. Самый простой способ это исправить — установить Open Server на ПК.
Клонирование проекта с Гитхаба
Устанавливаем telegram-bot/api
php composer.phar require telegram-bot/api
Далее нам нужно скопировать их на хостинг, в папку, в которой будет располагаться наш бот. Наконец можно приступить к непосредственному кодингу бота.
Кодинг Telegram бота на php
В папке с ботом создаем файл index.php.
Пропишем заголовки и подключим АПИ.
header(‘Content-Type: text/html; charset=utf-8’);
// подключаемся к API
require_once(«vendor/autoload.php»);
// создаем переменную бота
$token = «токен, который выдал BotFather»;
$bot = new \TelegramBot\Api\Client($token);
Что такое webhook?
WebHook — это механизм по которому выполняется связка бота с telegram’ом. Когда пользователь в вводит команду, ее надо каким-то образом передавать на сервер и получать ответ. Webhook служит как раз для этих целей. Он сообщает телеграму куда передавать команды. Поскольку сейчас Телеграм НЕ ЗНАЕТ, где именно расположен код нашего бота, то нам нужно это исправить.
Обязательные команды для Телеграм-ботов
Cохраняем индексный файл и тестировать нашего бота! Ура! Все прекрасно работает! Дальнейший кодинг зависит исключительно от стоящих перед Вами задач. Мне лишь остается ознакомить вас с общим принципом работы библиотеки TelegramBotApi.
Как работает библиотека TelegramBotApi
Все команды TelegramBotApi задаются блоком:
$bot->command(‘start’, function ($message) use ($bot) <
>);
Отправка сообщения в TelegramBot API
Отправка сообщения выполняется командой:
$bot->sendMessage(id пользователя которому отправляем, текст сообщения);
Отправка картинок в TelegramBot API
Отправка документов и голосовых сообщений
Документы, в отличие от картинок необходимо оправлять в виде POST. К счастью, библиотека TelegramBotApi сделает все что нужно без нашего с вами участия. Для начала загрузим документ в папку с ботом.
Отправлять документ будем так:
Обратите внимание, что строчка
$document = new \CURLFile(‘sendfrombot.txt’);
предполагает размещение txt-файла sendfrombot в в корневой папке бота. Однако, можно передавать в переменную и обычный урл. Передачей войсов (голосовых сообщения) осуществляется точно также:
// передаем войс
$bot->command(‘getvoice’, function ($message) use ($bot) <
$voice = «https://icopydoc.ru/wp-content/uploads/maxim_glazunov-prividenie.mp3»;
$bot->sendVoice(
$message->getChat()->getId(),
$voice //,
//$duration,
//$replyToMessageId,
//$replyMarkup,
//$disableNotification
);
>);
Получение сообщений из чата
Для получения данных из чата в API используется команда .on():
Теперь, если написать «привет», то бот ответит «Привет, чувак!».
Сообщаем Botfather-у список наших команд
Протестируем получившегося бота.
Наш бот работает! Надеюсь, что смог объяснить как создать своего бота на php для телеграмма. Успехов в разработке!
Пишем простого чат-бота для Telegram на PHP
Шукюров Заур, разработчик @KinomanBot и @GaidarForum_bot, написал руководство по созданию простого чат-бота.
24 июня 2015 года разработчики Telegram открыли платформу для создания ботов (программ, которые выполняют определенные действия по заданному алгоритму). За полтора года работы платформы набралось много интересных чат-ботов, решающих множество проблем и позволяющих с пользой провести время в мессенджере.
Шаг 1: регистрация бота у @BotFather
Прежде чем начать писать код, нового бота нужно зарегистрировать у «папы всех ботов» — @BotFather, чтобы получить токен (ключ) для работы с Telegram API. Регистрация проходит в 5 простых этапов:
По итогу регистрации получаем наш токен — 375466075:AAEARK0r2nXjB67JiB35JCXXhKEyT42Px8s.
Будьте осторожны: никогда и никому не показывайте токен, иначе ваш бот может быть скомпрометирован. Если по несчастливой случайности кто-то нехороший все-таки узнал ваш токен, то заменить его можно всё в том же @BotFather, нажав на кнопку «Revoke current token» в разделе «API Token».
Шаг 2: выбираем способ обработки запросов
Исходя из официальной документации, Telegram API основан на простых HTTP-запросах. Существует всего два различных способа обрабатывать запросы, которые пользователи будут посылать боту:
Мы остановимся на втором варианте, но у него есть ограничение: у вас на сайте обязательно должен быть установлен SSL-сертификат, чтобы все запросы проходили через безопасный протокол HTTPS. Самоподписанные и бесплатные сертификаты «Let’s Encrypt», которые поддерживает большинство хостингов, также подходят.
Пример настройки самоподписанного сертификата из официальной документации Telegram.
Шаг 3: пишем код
Писать код бота будем на PHP, но чтобы не изобретать заново колесо, воспользуемся уже готовой и очень удобной библиотекой.
Перво-наперво привязываем через метод SetWebhook бота к нашему файлу-обработчику. Сделать это можно при помощи библиотеки, но есть вариант быстрее и проще – это построить вот такую ссылку:
https://api.telegram.org/bot375466075:AAEARK0r2nXjB67JiB35JCXXhKEyT42Px8s/setWebhook?url=https://yoursitehere.ru/directory/bot.php,
375466075:AAEARK0r2nXjB67JiB35JCXXhKEyT42Px8s — это наш токен,
https://yousitehere.ru/directory/bot.php — ссылка на файл-обработчик на нашем сайте.
Открыв в браузере эту ссылку, должен прийти JSON-ответ со значением «Webhook was set», что будет означать, что вебхук установлен, и теперь все запросы от пользователей будут присылаться по адресу файла-обработчика.
Переходим к самому главному — обработке этих самых запросов и написанию функционала бота. Ниже представлен полный листинг файла-обработчика:
$keyboard = [[«Последние статьи»],[«Картинка»],[«Гифка»]]; //Клавиатура
$reply = «Добро пожаловать в бота!»;
$reply = «Информация с помощью.»;
>elseif ($text == «Картинка») <
>elseif ($text == «Гифка») <
>elseif ($text == «Последние статьи») <
$reply = «По запросу \»».$text.»\» ничего не найдено.»;
Разберем всё по порядку.
1. Сначала мы подключаем скачанную библиотеку, указав путь (лучше полный) до файла автозагрузчика.
include(‘vendor/autoload.php’); //Подключаем библиотеку
2. Создаем экземпляр класса в переменной $telegram и передаем в него наш токен. В переменной $result получаем информацию о сообщении, которое пришлет нам Telegram.
$telegram = new Api(‘375466075:AAEARK0r2nXjB67JiB35JCXXhKEyT42Px8s’); //Устанавливаем токен, полученный у BotFather
3. Затем определяем главные переменные: текстовое сообщение, уникальный идентификатор пользователя и его юзернейм. Если предстоит работа с БД, то не забывайте про фильтрацию (или лучше используйте PDO).
4. Создаем нашу клавиатуру, состоящую из трех кнопок.
$keyboard = [[«Последние статьи»],[«Картинка»],[«Гифка»]]; //Клавиатура
5. Теперь, когда мы обозначили все переменные, можно перейти к обработке полученного сообщения. Для этого можно использовать конструкцию switch-case либо if-else. Так как принципиальной разницы между ними нет, остановимся на втором варианте, как наиболее привычном.
В самом начале проверяем, заполнена ли переменная $text и является ли сообщение пользователя текстовым.
Если нет, то отправляем пользователю с помощью метода sendMessage сообщение с просьбой ввести текстовое сообщение.
6. Рассмотрим вариант, когда пользователь прислал сообщение с командами /start или /help
$reply = «Добро пожаловать в бота!»;
$reply = «Информация с помощью.»;
В этом случае помимо текста из переменной $reply будет подгружаться клавиатура, состоящая из трёх кнопок: «Последние статьи», «Картинка» и «Гифка». Реализуется это с помощью метода replyKeyboardMarkup, параметрами которого являются:
7. После появления клавиатуры пользователь явно захочет попробовать потыкать на расположенные на ней кнопки, и вот что у нас «под капотом» в этом случае
>elseif ($text == «Картинка») <
>elseif ($text == «Гифка») <
>elseif ($text == «Последние статьи») <
8. Для отправки картинки используется метод sendPhoto, для отправки гифки – sendDocument. В обоих случаях Telegram позволяет передавать прямую ссылку на файл, что безусловно очень удобно, но не так быстро, как если бы мы передавали file_id уже отправленной на сервера Telegram картинки или гифки.
9. Для получения последних статей используется простой парсинг RSS ленты Нетологии при помощи встроенной в PHP функции simplexml_load_file.
В параметрах метода sendMessage можно заметить два новых значения:
10. В качестве смайла (стрелка вправо) используются символы \xE2\x9E\xA1. Список всех смайлов в таком виде можно найти на специальном сайте.
11. После того, как вы протестируете бота и будете уверены в его работоспособности, можно отправлять его на всеобщее обозрение.
Благодаря удобному API, боты Telegram могут стать хорошей платформой для автоматизации рутинных действий, настройки уведомлений, удобному и быстрому получению информации и созданию игр. Бесплатными площадками для продвижения могут послужить каталоги ботов Telegram Bot Store, TeleChappy или 50bots. А анализировать активность пользователей можно с помощью бесплатного инструмента для аналитики ботов от Яндекса — Botan.
От редакции
PHP — один из самых популярных языков программирования. Его легко изучать, с ним легко работать, у него мощное сообщество. 5 мая «Нетология» запускает курс «PHP/SQL: back-end разработка и базы данных», где ведущие программисты расскажут об управляющих конструкциях, циклах, функциях, о строках и массивах. Вы узнаете все про реляционные базы данных и язык запросов SQL, научитесь устанавливать и настраивать веб-сервер nginx и php, управлять базами данных различной сложности. Ждем вас!
Диалоговый телеграм бот на PHP
Создание бота
Первое, с чего нужно начать, так это с создания бота. Есть официальная документация и там подробно расписаны шаги.
После создания бота вы получите токен, которые нужно будет использовать в коде вашего бота, поэтому сообщение с токеном необходимо сохранить.
Связываем бота с приложением\сайтом
Начинается самое интересное, а также именно тут я столкнулся с первой проблемой.
Первым делом выбираем библиотеку на php по созданию бота. Я свой выбор остановил на этой библиотеке, так как мне она показалась самой удобной.
После подключения библиотеки нужно организовать взаимодействие бота с вашим сайтом\приложением. Организовать это взаимодействие можно с помощью вебхуков.
Вебхук — это своего рода ретранслятор, который все запросы от бота будет передавать на адрес, указанный при регистрации вебхука. Зарегистрировать вебхук очень просто, нужно просто отправить запрос вида https: //api.telegram.org/bot
/setWebhook?url=https: //example.ru/path, где
https: //example.ru/ — это ссылка на ваш сайт, куда будет перенаправлять бот запросы.
— это токен, который вы получили при регистрации своего бота.
path — это часть url, на которую будут приходить обращения.
И вот именно тут возникает проблема. Оказывается вебхук можно зарегистрировать только в случае, если сайт находится на https. Если же ваш сайт на http, то зарегистрировать вебхук вам не получится.
Написание кода бота
Теперь же приступаем к программированию. После того, как взаимосвязь организована, можно начинать писать логику нашего бота.
Разработчики telegram, для того чтобы пользователям было проще работать с ботами, просят всех разработчиков реализовывать поддержку следующих команд:
/start — начинает общение с пользователем (например, отправляет приветственное сообщение). В эту команду также можно передавать дополнительные аргументы.
/help — отображает сообщение с помощью по командам. Оно может представлять собой короткое сообщение о вашем боте и список доступных команд.
Все что нам нужно сделать, это в контроллере вашего приложения\сайта написать следующий код:
Теперь если в окне телеграм бота написать /help, то будет выведен текст:
Команды:
/help — вывод справки
Что ж, мы написали список рекомендуемых команд. Далее мы можем реализовывать необходимые нам команды.
Так как команды могут принимать аргументы, то мы эту возможность используем. Например, мы сделаем так, чтобы наш бот, на команду hello Вася, отвечал сообщением: Привет, Вася.
Для этого следует написать следующий код:
Получается все очень просто и быстро.
Заносим список команд бота
Для того, чтобы бот мог выдавать интерактивную справку
необходимо боту BotFather сообщить список команд.
Сделать это можно с помощью его команды /setcommands
Велосипедство
Описанный выше вариант не совсем удобен, потому что не хочется вбивать после команды текст, так как если использовать подсказки от бота, то это совсем нереально.
Значит нужно сделать так, чтобы бот запоминал команду, которую вы вводите. Это можно сделать с помощью любого хранилища (MySQL, memcached, redis, tarantool, Postgres, etc)
Все что нужно, это запоминать предыдущий ввод пользователя.
Для этого нужно перед отдачей пользователю сообщения, помещать его в ваше хранилище, а перед принятием сообщения — проверять, если в хранилище данные. И если есть, то на основании этих данных строить дальнейшую логику.
Вот на этом этапе у меня снова возникла трудность, так как я не нашел в библиотеке возможности получить команду до вызова метода command. Также мне не понравилось то, что вся логика будет заперта в рамках одного контроллера приложения.
Было принято решение написать свой обработчик данных, с возможностью выносить каждую команду в отдельный контроллер приложения.
Для начала мы описываем точку входа в контроллер
Теперь рассмотрим один из методов.
Так стало все в разы приятнее, интерактивнее и удобнее.
Спасибо, что дочитали статью до конца. Поиграть с живым ботом, который работает в режиме диалога можно тут.
UPD: боту добавлена возможность отдавать фото на некоторые виды запросов. Например на
/gettable — возвращает результирующую таблицу спортивных событий
/getevents — возвращает события спортивных мероприятий
Как создать Телеграм бот на php (инструкция)
В прошлый раз мы разбирали более простой способ создания бота для телеграмм, который не требовал знаний программирования т.к. использовал сторонний сервис и визуальный конструктор. Сегодня предлагаю поднять планку и поговорить о том, как написать бота для Телеграм на php (это язык программирования). Если вы не программист, то материал ниже будет вам непонятен, поэтому советую прочитать другую статью. Итак, начнем.
Подготовка к написанию бота
Прежде чем мы приступим к написанию бота, убедимся, что у нас имеется в распоряжении хостинг и домен с https, а также API токен, который нам выдал Botfather (подробнее о том, как получить API ключ для Телеграмм бота см. тут).
Обращаться к API Телеграма будем при помощи TelegramBotApi. Соответственно, чтобы клонировать проект с Гитхаба нам понадобиться Composer. Composer как правило не устанавливается без файла php.exe. Самый просто способ это исправить – установить Open Server.
Клонирование проекта с Гитхаба
Далее устанавливаем telegram-bot/api
php composer.phar require telegram-bot/api
Заходим в папку и убеждаемся, что все файлы успешно установлены.
Теперь данные файлы помещаем на наш хостинг в папку, в которой будет располагаться наш бот. На этом подготовка завершена – приступим к кодингу.
Кодинг Telegram бота на php
В папке с ботом создадим файл index.php в котором мы и будем писать код нашего бота. Важно! Кодировка файла — utf-8 без bom!
header(‘Content-Type: text/html; charset=utf-8’);
// подключаемся к API
require_once(«vendor/autoload.php»);
// создаем переменную бота
$token = «токен, который выдал BotFather»;
$bot = new \TelegramBot\Api\Client($token);
Что такое webhook?
WebHook – это механизм по которому выполняется связка бота с telegram’ом. Когда пользователь в телеграме вводит команду, ее надо каким-то образом передавать на сервер и получать ответ. Webhook как раз для этого и нужен. Он сообщает телеграму куда передавать команды. Поскольку Телеграм НЕ ЗНАЕТ, где именно расположен код нашего бота, то нам нужно это исправить.
Обязательные команды для ботов
Теперь необходимо научить нашего бота реагировать на обязательные для всех ботов команды /start и /help.
Снова сохраняем индексный файл и попробуем потестировать нашего бота! Ура, все пашет! Дальнейший кодинг зависит от поставленной Вами задачи, а потому самое время поговорить о том, как устроена наша API библиотека
Принцип работы библиотеки TelegramBotApi
Команды задаются блоком:
$bot->command(‘start’, function ($message) use ($bot) <
>);
Отправка сообщения в TelegramBot API
Отправка сообщения выполняется командой:
$bot->sendMessage(id пользователя которому отправляем, текст сообщения);
Отправка картинок в TelegramBot API
Отправка документов и голосовых сообщений
Документы, в отличие от картинок необходимо оправлять ввиде POST. К счастью, библиотека TelegramBotApi сделает все что нужно без нашего с вами участия. Сначала загрузим документ в папку с нашим ботом (см картинку ниже)
Для отправки документа используем следующий код:
Обратите внимание, что строчка
$document = new \CURLFile(‘sendfrombot.txt’);
предполагает размещение txt-файла sendfrombot в в корневой папке бота. Однако, можно передавать в переменную и обычный урл. С передачей голосовых сообщения (войсов) ситуация аналогична:
// передаем войс
$bot->command(‘getvoice’, function ($message) use ($bot) <
$voice = «http://binetmed15.beget.tech/wp-content/uploads/glazunov_maxim-prividenie.mp3»;
$bot->sendVoice(
$message->getChat()->getId(),
$voice //,
//$duration,
//$replyToMessageId,
//$replyMarkup,
//$disableNotification
);
>);
Получение сообщений из чата
Для получения данных из чата в API имеется команда .on(). С ее помощью мы можем прикрутить к нашему телеграм-боту, нейросеть для анализа сообщений или соорудитеь простенькую болталку по алгоритму Маркова, для отправки случайных сообщений в ответ на месенджы пользователя. Выглядеть это может примерно так:
Сообщаем Botfather-у список наших команд
После того как команды прописаны необходимо сообщить Botfather’у об их наличии (строго говоря это не является обязательным, но желательно все же добавить). Открываем чат с Botfather и вбиваем /setcommands (в случае опечатки используем команду /setcommands для переопределения).
Теперь потестим нашего телеграм-бота.
Как видим, все ок! Теперь вы знаете как создать своего бота на php для телеграмма. Успехов в разработке! В следующий раз мы продолжим дорабатывать нашего бота и разберем как добавить кнопки, а пока рекомендую скачать исходники текущего урока: