можно ли написать бота на 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 для сообщества ВКонтакте
На текущий момент большинство крупных сообществ ВКонтакте уже имеют ботов, актуальность этой темы обуславливается огромным спросом на круглосуточную работу приложения, оповещение при вступлении в сообщество и выходе из него, рассылку информационных сообщений, именно бот сообщества ВКонтакте может решить эти задачи. В статье мы рассмотрим решение основных задач, которые часто возникают в любом крупном сообществе.
Настройка Callback API для бота сообщества ВКонтакте
Подготовка серверной части к подключению
Callback API — это инструмент для отслеживания активности пользователей в Вашем сообществе ВКонтакте. С его помощью Вы можете реализовать новые полезные функции, например:
Инструкция по подключению подробно описана в отличной документации для разработчиков ВКонтакте.
Разберем её подробнее, для размещения скрипта чат-бота мы должны иметь функционирующий веб-сервер.
Для работы с callback API ВКонтакте рекомендует использовать протокол https, инструкцию по бесплатному получению сертификата cloudflare и настройки сервера вы сможете найти в статье, которую можно найти в поисковой системе Google по запросу Бесплатный SSL сертификат CloudFlare.
По окончании настройки сервера вы должны иметь рабочий web-сервер, на который мы загрузим скрипт нашего бота.
Настройка сообщества ВКонтакте
Генерация ключа доступа
Важным моментом в работе бота сообщества являются ответы на пользовательские сообщения и различные события, для того, чтобы мы могли взаимодействовать с пользователем от имени сообщества, нам необходимо создать специальный ключ. Для этого перейдем во вкладку «Управление сообществом«.
Далее спустимся в раздел «Работа с API» → «Ключи доступа«.
Для создания ключа необходимо нажать «Создать ключ» и выбрать необходимые права, которые мы предоставим нашему боту.
В нашем случае нам хватит доступа к сообщениям сообщества.
Сохраним данный ключ, он нам понадобится при настройке backend.
Настройка callback API
Теперь мы должны связать наш сервер и сообщество, для этого мы должны указать данные нашего сервера и создать секретный ключ. Для этого нам необходимо перейти в раздел управления сообщества и спуститься во вкладку «Работа с API».
Дальше наступает очень важный момент, нам необходимо ввести адрес нашего сервера и придумать секретный ключ, в качестве ключа выступает любая строка, а в качестве адреса, соотвественно, адрес к php скрипту на сервере.
Введем секретный ключ и нажимаем «Сохранить», после мы должны получить соответствующее уведомление о успешной установке ключа. Кнопку «Подтвердить» напротив поля с адресом сервера не нажимаем.
Заданный Вами секретный ключ будет передаваться с каждым уведомлением от сервера в отдельном поле secret. Это позволит Вам достоверно определять, что уведомление пришло именно от нашего сервера.
Также мы должны запомнить код, который должен вернуть сервер, запишите его, он нам понадобится при настройке backend.
Настройка типов событий
Важным моментом в работе бота сообщества, является ответы на пользовательские сообщения и различные события, для того, чтобы мы могли взаимодействовать с пользователем от имени сообщества, нам необходимо указать какие именно события мы хотим получать. Так как мы собираемся отслеживать входящие сообщения, вступления в сообщества и выход из него, то нам необходимо установить соответствующие галочки. Для этого перейдем во вкладку «Управление сообществом«.
Далее спустимся в раздел «Работа с API» → «Типы событий«.
Установите необходимые пункты в данном разделе.
Настройка backend бота ВКонтакте
Следующим этапом мы должны создать специальный скрипт, который будем принимать запросы от callback API вконтакте и определенным образом реагировать на события. Создадим, например, php-скрипт handler.php, адрес к этом скрипту, после настройки backend, мы должны указать в настройках сообщества.
Обратите внимание на значения следующих переменных:
В confirmationToken хранится код, которые сервер должен вернуть, в нашем случае:
token хранит в себе ключ доступа, который мы генерировали в главе «Генерация ключа доступа»
secretKey мы задавали в разделе управления сообщества callback API. Итоговый код выглядит следующим образом (handler.php):
После того как вы загрузите код, вы должны вернуться в раздел «Управление сообществом» → «Работа с API» → «Callback API», ввести адрес до скрипта и нажать «Подтвердить»
После этого, конфигурация сообщества для работы с ботом завершена, теперь, если мы отправим сообщением в сообщество, мы получим ответ.
Дополнительные возможности
Реализация приветствия при вступлении в сообщество ВКонтакте
На данном этапе мы уже имеем настроенный сервер и обработчик бота, все возможные события указаны в документации, она хорошо написана, рекомендую с ней ознакомиться.
Мы будем отлавливать событие group_join, для этого в операторе switch создадим новый раздел. Мы не будем рассматривать join_type подробно, так как у нас открытая группа, но вы можете обрабатывать этот параметр на ваше усмотрение.
Полный код обработчика бота ВКонтакте с функцией приветственного сообщения:
Пишем простого чат-бота для 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, управлять базами данных различной сложности. Ждем вас!
Разработка чат-ботов для Telegram и Slack c помощью PHP
Общая информация
Данная статья описывает способ создания простых чат-ботов сервисов Telegram и Slack на примере проверки IP|Email на спам с помощью антиспам-сервиса CleanTalk.
Telegram
Первый шаг — это создание своего бота (в нашем случае @CleanTalkBot) — для этого в Telegram существует бот @BotFather. Добавляем его в Ваш аккаунт Telegram и задаём команду /newbot. Бот попросит Вас ввести название бота — вводим название. После этого вводим имя пользователя бота — мы сделали название бота и имя пользователя бота одинаковыми — при этом имя пользователя должно оканчиваться на bot или Bot — например HabrArticleBot или CleanTalkBot. После ввода имени пользователя бот будет создан и Вам будет выдан токен, который будет использоваться в дальнейшем для идентификации.
где YOUR_TELEGRAM_TOKEN — тот самый токен, который был выдан Вам ботом @BotFather ранее, а https://example.com/telegramwaiter.php — это тот адрес, по которому будет обращаться Telegram с запросами. В ответ Telegram должен вернуть json строку типа
что означает — обработчик для Вашего чат-бота успешно установлен.
Третий шаг — остается написать сам обработчик запросов от Telegram telegramwaiter.php — примерный скрипт на языке PHP выглядит так
Как всё это работает можно посмореть добавив бота @CleanTalkBot в Telegram — вводим команду check IP|Email и получаем информацию о том, является ли указанный IP|Email спамным.
Slack
У сервиса Slack немного другой подход к созданию чат-ботов.
Идём сюда — https://api.slack.com/apps/new — и создаём новое приложение Slack.
AppName — название приложения.
Short description — краткое описание приложения.
Describe what your app does on Slack — полное описание приложения.
Link to clear instructions on how to install your Slack app.
Link to support for your Slack app — две ссылки на страницы с описанием установки и использования данного приложения.
В списке приложений https://api.slack.com/apps выбираем наше приложение и переходим в меню справа по ссылке Slash Commands и жмём кнопку Create new command.
В появившейся форме следующие поля
Command — вводим команду, начинающуюся с / — например /ctcheck.
Request URL — URL обработчика запроса команды — аналог webhook Telegram (например https://cleantalk.org/slackwaiter.php).
Short description — краткое описание, что с помощью создаваемой команды можно сделать.
Сохраняем команду. Обратите внимание — Ваш сайт должен работать по https — при этом самоподписанные сертификаты НЕ ПОДДЕРЖИВАЮТСЯ сервисом Slack.
Токен для идентификации Вы можете получить на странице списка команд — под списком команд есть поле Verification token — далее он фигурирует как YOUR_SLACK_TOKEN.
Пишем обработчик slackwaiter.php на языке PHP
Далее идём сюда https://api.slack.com/docs/slack-button и в разделе Add the Slack button ставим галочки incoming webhook и commands — Slack формирует html-код кнопки, по нажатию на которую другие команды смогут интегрировать Ваше приложение в свой аккаунт Slack.
Указанную выше кнопку размещаем на Вашем сайте — по её нажатию открывается следующая картина
Для авторизации нужно выбрать канал, где можно будет пользоваться приложением.
По нажатию на кнопку Authorize Slack редиректит пользователя на страницу Redirect URI(s), которая задаётся Вами (разработчиком) здесь — https://api.slack.com/apps, выбираем Ваше приложение и переходим по ссылке App Credentials — видим следующую картину
Slack не просто редиректит пользователя на данную страницу, а добавляет GET-переменную code со значением, которая позже должна быть обработано скриптом — например
Далее приведём примерный код скрипта authscript.php. CLIENT_ID и CLIENT_SECRET берём из соответствующих полей на предыдущем изображении.
Порядок такой — получаем от Slack GET переменную code и ещё с двумя параметрами — client_id и client_secret — отправляем GET запросом на страницу https://slack.com/api/oauth.access. В ответ Slack пришлёт json-строку с множеством полей — что-то типа такого
после чего просто получаем имя команды и редиректим пользователя на главную страницу его команды https://your_team_name.slack.com — приложение авторизовано, можно пользоваться командами приложения.
Команда сервиса Cleantalk надеется, что данная информация окажется полезной для всех, кто интересуется разработкой чат-ботов.
Первый бот на PHP для ВКонтакте
Здравствуйте, хабровчане. В этой публикации я напишу о том, как сделать своего первого чат-бота для ВКонтакте. Думаю, что опытным программистам это будет не интересно, а вот тем, кто только начинает свой путь, будет интересно, так как я ещё и сам не очень далеко ушёл и понимаю проблемы начинающих. И предупреждаю сразу, что большинство скриншотов будет на английском языке.
Сперва нам нужно создать сообщество. Думаю, с этим справится каждый.
Затем мы заходим в настройки сообщества и выбираем пункт «API usage» и нажимаем на кнопку «Create token».
Далее нужно выбрать, собственно, чем мы сможем пользоваться с помощью этого токена. Нам нужен доступ к сообщениям сообщества, но можно выбрать все права доступа, чтобы в дальнейшем не вспонимать о создании токенов.
И вот мы получили заветный токен. Его, кстати, нужно сохранить в надёжное место и никому не показывать. Теперь можно приступать к коду.
Мы будем писать код на языке PHP, поэтому можно скачать Visual Studio code или PHPStorm. В принципе, код можно писать и в блокноте, только это будет не удобно. После кода мы перейдём к дальнейшей настройке группы.
Итак, для начала нам нужно получить информацию о входящем сообщении и перевести её из формата JSON в понятный для PHP.
В переменной data теперь к нас находится массив с сообщением, ID пользователя и ID чата.
«А что за „json_decode(file_get_contents(‘php://input’))“, — спросите вы.
Начнём с этого момента:
Выражаясь, простым языком, мы спрашиваем у скрипта что у нас пришло на вход, то есть какой запрос отправил ВК. Ниже приведу пример такого запроса.
Думаю, легко понять что написано в запросе, если иметь минимальные знания в английском языке.
Ну а „json_decode()“ — функция, которая переводит вышеприведённый JSON в массив, с которым может работать PHP.
Теперь напишем код, который смотрит какое событие произошло, и если к нам пришло новое сообщение, то сравнивает сообщение, с теми, на которые у нас есть ответ и смотрит ID чата.
Теперь нам нужно как-то отвечать на эти сообщения. Для этого напишем простую функцию.
Что же тут происходит? Здесь мы строим запрос к API VK (документацию рекомендую почитать) с текстом сообщения, ID чата и токеном, который мы создали ранее, и отправляем его на сервер ВК.
Теперь соединим эти куски кода и напишем реакции бота на то или иное сообщение.
«Хорошо, а зачем нам писать ‘ok’ после отправки сообщения?»
Так как мы будем использовать метод получения обновлений с названием Call Back API, то есть сам ВКонтакте нам будет говорить о новых сообщениях, то нам нужно сказать, что мы его услышали, иначе он будет нам повторять несколько раз.
Теперь перейдём к настройке группы.
Заходим в настройки и выбираем версию API 5.87 (можно, конечно, и более новые версии, но лучше иметь единство версий API).
Из этого же раздела берём строку, которую должен вернуть сервер, и подставляем её в переменную confirmation_token.
После этого заполняем адрес сервера. Для этого нужно иметь домен и хостинг. По адресу, который Вы укажите, должен быть как раз файл с ботом. Надеюсь, с этим читатель справится сам.
Потом выбираем о каких событиях в сообществе нам будет сообщать ВКонтакте. Нам нужны только входящие сообщения.
Далее подтверждаем адрес сервера, и наш первый бот готов к использованию.
Так как это моя первая публикация на Хабре, я хочу получить замечания по статье и дальше только совершенствоваться.