телеграмм бот php без библиотек
Инструкция по созданию Telegram ботов. Часть 3. Пишем простого чат-бота для Telegram на чистом php (webhook)
Создавать в Telegram аккаунты ботов мы уже научились (в предыдущей части), пора чего-нибудь накодить. Сегодня я покажу как создать простого чат-бота для Telegram на чистом, незамутнённом php, без всяких дополнительных библиотек и фреймворков. Такой чат-бот может использоваться, например, для организации чата на сайте или в интернет-магазине. При этом для связи с Telegram наш бот будет использовать вебхуки.
Итак, у нас есть домен (MYDOMEN), место на сервере от какого-либо хостера, поддержка https, а также мы зарегистрировали в Telegram аккаунт бота (BOTNAME) и получили токен (BOTTOKEN). Теперь нам нужно написать программу самого бота.
В общем виде у нашего бота будет следующий функционал:
Сначала опишем задуманный выше функционал более детально. Пусть наш бот понимает 3 команды: /start, /help, /send. Формат и выполняемые действия у этих команд будут такими:
Вот теперь переходим к кодингу.
Создаём папочку MYBOT, в ней файл bot.php, открываем его в каком-нибудь приличном блокноте, типа notepad++ или akelpad (сразу настраиваем кодировку «utf8 without bom») и пишем:
Вот и всё. Код, в общем-то, рабочий, теперь осталось залить папочку MYBOT с файлом bot.php к себе на сервак и установить на него webhook.
Для того, чтобы установить webhook, — достаточно просто отправить запрос вида:
Для того, чтобы отменить webhook — нужно отправить такой же запрос, но без урла, указывающего расположение бота. То есть вот такой:
Итак, файл залит, webhook установлен. Первым делом нужно узнать id своего чата с ботом командой /whoami. Далее нужно отредактировать файл bot.php, вписав этот id в ADMINCHATID. После всего этого команду /whoami можно из файла bot.php удалять, она больше не нужна.
На этом этапе наш чат должен заработать, однако расслабляться пока рано. Теперь нужно хоть немного решить вопросы с безопасностью.
Order Allow,Deny Deny from All = 2.4> Require all denied Order Allow,Deny Deny from All Require all denied
Перезаливаем всё это к себе на сервак, в папку MYBOT, и радуемся, — Ура! Теперь токен нашего бота никто не увидит. Ага, как бы не так, — config.php инклюдится в bot.php, так что при возникновении каких-то ошибок во время исполнения bot.php мы по-прежнему можем увидеть этот файл вместе с уже проинклюденным туда токеном.
Ради интереса можете просто набрать в адресной строке браузера http://[MYDOMEN]/[MYBOT]/bot.php и попробовать открыть эту страницу. Никакого json-объекта наш браузер при таком запросе, ясное дело, файлу bot.php не пришлёт. А значит, — распарсив то, чего нет, а потом ещё и попытавшись к этому обратиться, мы получим ошибку. При этом нам в браузер выкинут содержимое bot.php с указанием строки, где он обломался и (Внезапно!) с заветным токеном.
Придётся добавить хоть какую-то обработку ошибок. Давайте впишем в файл bot.php такие строки:
/* Функция отправки сообщения в чат с использованием метода sendMessage*/
Для гиков можно также порекомендовать обозвать папку бота и все его файлы непонятными именами.
Всё, чат-бот готов. Однако! Во-первых, хорошо бы сохранять какую-то информацию о юзерах, общающихся с нами через этого бота (id-шники юзеров, историю переписки, время и дату получения сообщений…). Во-вторых, мы не имеем возможности забанить юзеров, подключающихся к нашему боту, соответственно, рискуем получить через своего бота нескончаемый поток спама. В-третьих, было бы отлично иметь возможность добавлять и убирать админов, которым бот будет рассылать сообщения (такая себе претензия на call-центр).
Для решения этих задач мы в следующей части допишем ещё немного кода и прикрутим к нашему боту базу MySQL.
Бот Телеграм на 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. Я нашел два варианта решения этой задачи. Первый вариант, используя библиотеку telegram api, второй вариант без использования каких-либо библиотек. Сначала я будут инструкции, которые применимы к этим двум вариантам, а после рассмотрим каждый вариант более подробно
Обратите внимание, что действия указанные в этой статье, я делал на реальном сервере и домене у которого есть сертификат безопасности ssl, т.е. домен доступен по https. Телеграм требует этот сертификат.
Итак для начала нам необходимо создать нашего телеграм бота, для этого в телеграме необходимо найти телеграм бота @BotFather, в диалоге с этим ботом введите команду /newbot, после чего задайте имя и никнейм вашего бота. Вам будет предоставлен уникальный токен, сохраните его куда-нибудь, он вам еще пригодится.
Если вы хотите использовать вашего бота в чатах, то необходимо изменить его приватность. Для этого в диалоге с @BotFather введите команду /setprivacy, вам надо установить значение приватности в Disable.
Теперь перейдем к вариантам создания телеграм бота.
Первый вариант. Библиотека telegram api
Установим библиотеку telegram api, которая упростит нам взаимодействие с ботом. Откройте консоль, перейдите в папку, которую вы выбрали и выполните следующие команды:
Этими командами вы установите composer, при помощи которого мы и скачаем библиотеку для работы с телеграмом. Выполните команду:
Этой командой вы установили библиотеку.
Теперь в папке, в моем случае это папка botinfo, создадим файл index.php в этом файле будем писать код для работы с нашим ботом.
Пример моего php кода в файле index.php
В моем примере бот, на команду /start будет отвечать «Привет!», а на сообщение +, будет отвечать «-«.
Условие if(!file_exists(«registered.trigger»)) нужно для того, чтобы телеграм бот понимал куда ему обращаться на вашем сайте, вам надо будет запустить этот файл из браузера, один раз, чтобы появился файл registered.trigger
Пример получения координат, которые пользователь передал, отправив геолокацию в телеграме:
Пример получения фото, которое отправил в телеграм пользователь:
Пример кода, для отправки фото
Второй вариант. Создание телеграм бота, без библиотек.
Для начала я приведу вам пример кода двух файлов, после чего разберу и поясню, что написано в каждом из этих файлов.
После того как создадите эти файлы, дайте знать телеграму куда ему слать информацию, это делается ссылкой: https://api.telegram.org/botВАШТОКЕН/setWebhook?url=ССЫЛКА_НА_telegrambot.php
Используя эти два файла, ваш телеграм бот на любое сообщение будет отвечать «Нас не догонят!» Разберемся, что у нас написано в файле telegrambot.php.
Если вам интересны все данные, которые приходят от телеграм, то советую эти данные записать в какой-нибудь файл, к примеру:
После чего можете отослать сообщение своему боту, затем открыть файл test.txt и посмотреть информацию в json формате, которая пришла когда вы отправили своему боту сообщение.
Пример такой информации:
Как вы могли заметить, в этом примере, есть «photo», что говорит нам о том, что боту послали фото. Для того, чтобы сохранить фото, которое послали вашему боту, необходимо в файле telegrambot.php использовать следующий код:
Кстати, если мы говорим о фото, которые вы посылаете телеграму, то имейте ввиду, что он их сжимает. Если вам надо получить информацию о фото, например какие-нибудь exif данные, то советую отправлять фото, как файл.
У вас также есть возможность отправить клавиатуру или кнопки в чат. Пример отправки кнопок в чат:
Телеграмм бот php без библиотек
Когда для своего сервиса https://qrer.ru, который занимается отправкой сообщений об изменениях на сайтах пользователей потребовалось подключить сообщение в чат Telegram, я стал искать простое и быстрое решение — как написать собственного бота на языке php.
Прежде всего для разработки бота пригодится внутренняя документация мессенджера. Хотя она на английском языке, но разобраться в ней довольно просто. Однако хотелось чего-нибудь готового и уже на php. Изучение инструкций подсказало, что код должен быть небольшой и простой, так как все манипуляции сводятся к отправке POST и GET запросов и получению ответов в формате JSON. Язык php справляется с этим без всяких проблем.
Даже документация самого сервиса в качестве примеров бота на php содержала ссылки на библиотеки, расположенные на github. Эти библиотеки показались мне избыточными. Кроме того, для подключения их требовалась установка менеджера пакетов Composer, а затем, когда я его подключил выяснилось, что библиотеки требуют PHP 7 или, в качестве минимума, php версии 5.5. Обновляться со своей 5.4.16 у меня не было никакого желания, хотя и можно было бы поставить 5.6. Но мысль о том, что для того, чтобы реализовать простейший обмен информации необходимо подгружать избыточные библиотеки не давала покоя.
Поэтому решено было создать собственного бота, без использования сторонних библиотек, тем более, что функционал его планировался простейший. Пошаговую инструкцию для этого действа я попытался представить в этой статье.
1. Для начала, как и указано в других источниках, необходимо создать бота. Для этого необходимо обратиться к «отцу всех ботов» — роботу Telegram с ником @BotFather. Для этого открываем чат и находим этого пользователя.
2. Затем в диалоге с этим господином (запущенным командой /start) набираем команду /newbot
3. В ответном диалоге BotFather поздравит с пополнением, выдаст ссылку на новичка и даст буквенно-цифровой ключ, который необходимо сохранить в тайне. По нему Telegram поймет что это мы, а мы поймем, что это он. Все, теперь бот создан, с ним уже можно общаться. Правда отвечать он не будет, потому что не умеет.
4. Для того, чтобы наш сайт мог принимать сообщения, нужно сделать следующие вещи. Прежде всего создать так называемый WebHook и сообщить о нем мессенжеру. Это по сути дела в нашем случае обычный файл на php, который будет вызываться всякий раз, когда происходит новое событие. Например кто-то обратиться к нашему боту. Делается это один раз, после чего можно уже писать обработчик. Следует отметить, что наиболее правильным будет создание обработчика сообщений на сайте, на котором уже есть SSL-сертификат и который работает по протоколу HTTPS. Обычные бесплатные сертификаты Let’s Encrypt вполне подойдут. Отличная инструкция по их созданию.
Для создания WebHook пишем следующий код:
В качестве переменных, соответственно, необходимо вставить ключ, выданный телеграммом, каталог, куда мы положим наш обработчик (система рекомендует придумать какой-нибудь сложный каталог, например совпадающий с ключом. Делается это для того, чтобы к файлу не смогли обратиться посторонние. Немного странный способ защиты, но все же. На последних строчках получаем и распечатываем ответ, чтобы убедиться, что все прошло отлично.
5. Теперь собственно бот на php. Тот самый, что bot.php
— получили то, что нам прислали и перевели в массив.
Если получили сообщение и тип беседы «Приватная», то поняли, как зовут вашего собеседника, какой у него ник и даже составили ответное сообщение!
Все, если текст мы составили, то мы его отправим в окошко пользователю. Здесь между последним и предпоследним фрагментом кода можно вставить свой код — проверить — есть ли пользователь в базе, выполнить еще массу шагов. Важно, что ответ мы предоставляем в виде текста.
По поводу последнего фрагмента есть несколько дополнительных необязательных перемеменных:
parse_mode=HTML — позволяет вставлять простейшее форматирование. Ссылки, делать текст жирным или курсивом. Важно — элемент href в ссылках должен быть в кавычках.
disable_web_page_preview=false — позволяет показывать в окне чата превью странички, которая скрывается за отправленной ссылкой.
disable_notification=false — не дает отправить сообщение скрыто, в фоне. В таком виде при поступлении нового сообщения телефон издает звуковой сигнал. Если поставить true, то сообщение в Telegram придет «молча».
На этом все. Еще можно внедрить последний фрагмент в любой php-код, где требуется отправка сообщения на уже открытый диалог в мессенджер. Пользователь может выйти из него, но когда он появится онлайн снова — сообщение к нему обязательно придет. Таким образом, вместо того, чтобы использовать громоздкие php-библиотеки, мы написали всего несколько строчек кода на php и реализовали значительное количество функционала бота, которое нам требуется.
Пишем простого чат-бота для Telegram на PHP
Шукюров Заур, разработчик @KinomanBot и @GaidarForum_bot, написал руководство по созданию простого чат-бота на PHP.
24 июня 2015 года разработчики Telegram открыли платформу для создания ботов (программ, которые выполняют определенные действия по заданному алгоритму).
За полтора года работы платформы набралось много интересных чат-ботов, решающих множество проблем и позволяющих с пользой провести время в мессенджере.
Шаг 1: регистрация бота у @BotFather
Прежде чем начать писать код, нового бота нужно зарегистрировать у «папы всех ботов» — @BotFather, чтобы получить токен (ключ) для работы с Telegram API.
Регистрация проходит в 5 простых этапов:
1) Открываете чат с @BotFather;
2) Вводите или выбираете из списка команду /newbot;
3) Отправляете желаемое название для бота;
4) Пишете юзернейм бота, по которому его будут находить через поиск. Обязательно на конце вашего юзернейма должно быть слово «bot» или «_bot». Например, NetologyRSSbot;
5) По желанию можно сразу настроить полное или краткое описание, список команд и аватарку.
По итогу регистрации получаем наш токен — 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. Список всех смайлов в таком виде можно найти на специальном сайте.
11. После того, как вы протестируете бота и будете уверены в его работоспособности, можно отправлять его на всеобщее обозрение.
Благодаря удобному API, боты Telegram могут стать хорошей платформой для автоматизации рутинных действий, настройки уведомлений, удобному и быстрому получению информации и созданию игр.
Бесплатными площадками для продвижения могут послужить каталоги ботов Telegram Bot Store, TeleChappy или 50bots.
А анализировать активность пользователей можно с помощью бесплатного инструмента для аналитики ботов от Яндекса — Botan.