Как сделать уведомления в телеграм на php
Если вы читаете это, то скорее всего понимаете, что боты для чатов является популярным трендом в 2016 году.
Эволюция ботов заключается не только в искусственном интеллекте. Ботом может быть инструмент в вашем мессенджере с простым интерфейсом, который может быть использован для расширения функционала сайта или сервиса, или использован как отдельное приложение. Боты легки в разработке и установке, и еще один плюс заключается в том, что мессенджеры могут использоваться на любом устройстве: ноутбуках, смартфонах и планшетах. Вот почему все сходят с ума по ботам.
И наиболее популярным мессенджером с открытым API для ботов является Telegram.
Что мы собираемся делать
В этой статье мы создадим простой бот-секундомер для Telegram. Я покажу вам как создавать собственного бота, связываться с аналитикой, напишем немножко кода и в конце добавим своего бота в магазин ботов.
Кстати я заранее приготовил демо, так что вы можете протестировать бота, просто добавив @stopwatchbot в свой контакт лист в Telegram.
Создаем бота с помощью BotFather
Первым шагом при создании бота нужно зарегистрировать аккаунт для своего бота в Telegram. И для этого есть собственный бот, который называется BotFather. Просто добавьте его в свой контакт лист и вы сможете создавать и настраивать ботов Telegram, просто напечатав команду /newbot и следуя инструкциям от BotFather.
Позднее вы сможете использовать BotFather для добавления описаний и фото к профилям ваших ботов, регенерации токенов, задания списка доступных боту команд, удаления аккаунтов и прочее. Чтобы получить полный список команд, просто напечатайте /help в чате с BotFather.
Соединяемся с Botan Analytics
Не существует никакой встроенной аналитики в Telegrem Bots API, но все равно важно знать, сколько пользователей у вас есть, как они себя ведут и какие команды используют чаще других. Конечно можно собрать такую информацию, используя собственный движок, но если мы собираемся сфокусироваться на функционале самого бота, а не метриках, то нужно использовать решение из коробки.
И для этого уже есть простой инструмент, который называется Botan. Он основан на Yandex AppMetric и абсолютно бесплатный. Используя Botan, можно сегментировать вашу аудиторию, получать информацию о профилях пользователей, получить наиболее часто используемые команды, а так же получить красивые графики прямо в вашем мессенджере:
Для того чтобы начать, нужно зарегистрировать ваше бота в Botan и получить свой токен. И опять же это можно сделать в боте, используя BotanioBot:
Просто нажмите на "Add bot" на вашей клавиатуре в диалоговом окне, введите ник вашего бота, и получите ваш токен для трекинга. Теперь Botanio готов регистрировать события вашего бота, а вы можете получать статистику по пользователям, сессиям и событиям прямо в вашем мессенджере.
Создание и регистрация SSL Webhook
Если у вас подтвержденный SSL сертификат, то все что вам нужно, это открыть ваш URL в браузере:
Иначе необходимо сгенерировать самоподписанный сертификат. Вот пример команды в Linux для этого:
И не забудьте открыть SSL порт:
Чтобы подтвердить ваш сертификат и сделать ваш домен для webhook доверительным, необходимо загрузить свой публичный ключ:
В итоге вы получите следующий JSON ответ:
В нем сказано что webhook был установлен и мы готовы начать работу с ботом.
Создаем базу данных
Теперь нам нужно создать базу данных для наших таймеров. Что мы собираемся в ней хранить? Когда пользователь дает команду секундомеру начать отсчет, мы будем брать ID чата и сохранять строку с ID чата и текущим временем Unix. Следовательно мы сохраним строку с отметкой времени и ID чата.
Чтобы показывать текущее время секундомера, мы будем брать сохраненную метку времени и сравнивать ее с текущим временем. Разница и будет текущее время в секундах. Если пользователь останавливает секундомер, то мы просто удаляем строчку с данным ID чата.
Итак давайте создадим базу данных и таблицу для хранения информации для секундомера:
Создание класса Stopwatch
Наконец мы готовы начать писать код. Создадим класс для работы с базой данных в файле stopwatch.php и начнем с конструктора, который устанавливает два приватных свойства, где мы будем хранить ID чата и соединение с MySQL:
Когда пользователь запускает таймер, мы берем текущую временную метку Unix и сохраняем ее вместе с ID чата в методе start() :
Если таймер останавливается, то нам нужно удалить строку из базы данных:
И вот главная часть нашего класса. Когда пользователь запрашивает статус нашего таймера, нам нужно найти строку с секундомером из текущей беседы и подсчитать разницу в секундах между сохраненной временной меткой и текущим временем. К счастью временная метка Unix является целым числом, так что мы просто можем вычесть одно из другого. Чтобы отформатировать результирующее значение в виде времени, мы используем функцию gmdate .
Как видите, если в базе данных нет значения, то метод status() ничего не вернет, и мы обработаем значение null как остановленный таймер.
Выбор библиотеки PHP
Есть много PHP библиотек для работы с Telegram API, но на момент написания этой статьи лишь одна поддерживала одновременно Telegram Bot API и трекинг Botan. Она называется PHP Telegram Bot API.
Для установки библиотеки используем Composer:
Если вам не нужна аналитика, то попробуйте Bot API PHP SDK с интеграцией в Laravel или PHP Telegram Bot.
Запуск Webhook скрипта
И вот мы переходим к главной части - мы создаем скрипт для обработки обратных вызовов от Telegram Bot API. Создадим файл index.php и включим в него автозагрузчик Composer и новый класс Stopwatch. Откроем соединение MySQL, создадим нового клиента Telegram API и запустим его:
Создание команд
Для запуска секундомера, мы определим команду /go:
Она создаст объект класса Stopwatch и запустит таймер, вызывав метод start() , который мы определили ранее.
Чтобы определить команду /status , делаем аналогично. Просто вызываем метод status() и возврашаем результат. Если метод вернул null, сообщаем пользователю, что таймер не был запущен.
А если пользователь останавливает таймер, то нам нужно сначала получить статус, показать результирующее время, а затем остановить таймер, используя метод stop() .
И это все! Теперь вы можете загрузить все необходимые файлы в вашу директорию для webhook и протестировать своего бота.
Добавление клавиатуры
Теперь мы может добавлять клавиатуру к любой команде нашего бота. Я не стал включать здесь полный пример, но вы можете его увидеть в репозитории.
Добавление бота в Store
И в нем есть бот. для регистрации бота в каталоге ботов! Добавляем @storebot в свой контакт лист, пишем команду /add и следуем инструкциям. Вас попросят ввести имя бота, описание, выбрать одну из стандартных категорий, и подтвердить права на бота отправкой токена.
Через некоторое время ваш бот пройдет процесс подтверждения я появится в чартах Storebot. Теперь вы и ваши пользователи могу голосовать, находить и оценивать вашего бота в store, чтобы помочь ему подняться в каталоге.
Заключение
Мы прошли длинный путь, от создания простого бота до регистрации его в store, сделав его доступным для реальных пользователей. Как вы могли убедиться, существует много инструментов, которые сделают вашу жизнь проще при создании собственного бота, и не нужно писать много кода для создания простого бота. Теперь вы готовы к созданию собственного бота!
Если у вас есть какие-либо вопросы, не стесняйтесь задавать их в комментариях под статьей.
Схема использования очень проста, и выглядит так:
Первым делом необходимо создать бота в Telegram с помощью этой инструкции
Дальше, после того как Вы создали бота, то у вас есть так называемый токен, который как раз нам и пригодится!
Отправка запросов
Все методы доступны в Telegram Bot API
Узнать id чата Telegram
Для этого необходимо что-нибудь написать своему боту и воспользоваться методом getUpdates.
После того как Вы написали своему боту, прописываем следующий адрес в браузере:
Вместо необходимо прописать свой токен!
Если всё сделали правильно, то Вы получите ответ в виде массива. Для корректный работы нам необходимо id чата, он как-раз такие есть в этом массиве после "chat":
Хук – это скрипт, который запускаются после того, как форма прошла валидацию. Каждый хук должен обязательно возвращать true в случае успеха и false в случае ошибки!
Итак, заходим в административную панель и переходим по вкладке элементы и там создаем сниппет FormitTelegram, который содержит следующий код:
Указываем токен и id чата!
К тому-же данные с формы можно получить сразу с помощью метода $hook ->getValues(); но для наглядности я решил расписать всё подробнее))
Кстати строки в телеграмме я переношу с помощью %0A. Почему-то \n и
не работали(
Чтобы название формы было нормальным, то необходимо в вызове Formit необходимо указать параметр &formName=`Название формы`
Надеюсь статья понравилась и очень полезная :)
Пишите в комментариях, чтобы вы ещё хотели реализовать с помощью ботов для телеграмма!
Всем - привет. Давно зрела идея разобраться с отправкой данных из формы на сайте в мессенджер Telegram, но руки не доходили, а моментально получать заявки прямо в телефон, ой как хотелось!
Важно: для отправки файла из формы в Телеграм на вашем сервере должен быть включен cURL. Обратитесь к техподдержке вашего хостинга, они подскажут что делать и как включить. У многих он включен по умолчанию. Например, на моем хостинге Beget - так.
Итак, давайте приступим. Первое что нам нужно - это создать своего бота. Делается это достаточно просто. В поиске наберите @botfather, откройте родительского бота и нажмите "Start":
- Пишем команду /newbot, для создания нового бота.
- Придумываем имя бота.
- Придумываем ник бота.
Если все прошло успешно, то увидите поздравления и токен вашего бота, в моем случае это:
Теперь нужно найти своего бота в поиске, указав его ник и нажать "Start", чтобы активировать его. В моем случае ник @DWS_MESSAGE_bot.
После этого можно пойти двумя путями:
Давайте займемся этим и, пока, пойдем по первому пути.
Зайдите в меню, нажмите "New Group" ("Создать группу") и задайте имя вашему чату.
Не забываем пригласить своего бота в чат. Откройте меню чата, перейдите в "Add Members" ("Добавить участников") и введите имя своего бота.
На данный момент у нас есть бот, мы знаем его токен, есть чат, в который будут приходить заявки, и нам осталось узнать только id чата. Для этого, напишем в чате:
А затем перейдите в браузер, если используете приложение и введите:
где, XXXXXXXXXXXXXXXXXXXXXXX - токен вашего бота, полученный ранее.
Если все сделали правильно, то перед вами откроется подобная страница:
Разметка формы
Не стал выдумывать что-то сверхсложное, а просто 2 поля и возможность прикрепить файл. Оставил телефон, ведь у многих возникала проблема с символом "+", а файл добавил, так как меня просили разобраться с этой темой, при этом, теперь можно вставлять несколько штук.
Не забывайте, что форма отправляется без перезагрузки страницы, а значит используется ajax, и, для упрощения, jQuery. Поэтому подключаем сам jQuery, если не подключен, а после, и сам скрипт. Я сделал специальную папку telegramform, которую нужно поместить в корень сайта. Если нужно, сделаю исходник без использования jQuery.
Код с AJAX запросом. Файл - telegramform.js
А теперь сам обработчик нашей формы. Файл - send-message-to-telegram.php:
Во многом он повторяет обработчик из других форм на блоге. Например, в статье "Создание формы обратной связи" используется аналогичный подход, и вы легко сможете осуществить отправку данных как на почту, так и в мессенджер одновременно. Но помните, что это все тестовый, учебный пример и в реальной жизни можно сделать намного больше проверок.
Тут стоит обратить внимание на константы TOKEN и CHATID. Не забывайте подставить туда свои данные. Чтобы принимать какой-то определённый тип файла, поместите его в "Массив допустимых значений типа файла." Из популярных можно выделить:
.jpg .jpg | image/jpeg |
.csv | text/csv |
.doc | application/msword |
.docx | application/vnd.openxmlformats-officedocument.wordprocessingml.document |
.svg | image/svg+xml |
.txt | text/plain |
.xls | application/vnd.ms-excel |
.xlsx | application/vnd.openxmlformats-officedocument.spreadsheetml.sheet |
.jpg | image/png |
application/pdf |
Не стал делать каких-то серьезных валидаций, так как это просто пример и вам наверняка нужно будет не только отправка текста или картинки в Телеграм, но и на почту, а значит все равно подстраивать под свои нужды. Если будут вопросы и замечания - пишите в комментариях.
Продолжаем серию материалов об использовании PHP на серверах. Сегодня речь пойдёт о том как можно мониторить порты сервера и сообщать о проблемах в Telegram чат. Для организации мониторинга потребуется:
- Наличие учётной записи Telegram
- Знание PHP
- Сервера которые необходимо мониторить
- Созданный бот в Telegram и полученный токен бота
- Ubuntu сервер с CRON, на котором будет работать скрипт проверки
Предыстория:
На сегодняшний момент есть масса средств мониторинга серверной инфраструктуры, пожалуй подобных инструментом на столько много и они на столько “круты”, что не всегда находится время для изучения этих монстров мониторинга, а иногда просто необходимо быть вкурсе работы своей серверной инфраструктуры.
Идея:
Всё очень просто, надо 1-н раз в минуту при помощи CRON запускать скрипт проверки, который “пропингует” сервера и если какой-то из них не ответил в заданный интервал времени – скрипт сообщит об этом в телеграм чат. Или можно просто “демонизировать” скрипт, тут на вкус и цвет….
Для записи времени отправки по каждому серверу будет достаточно сохранять данные в файл, в нашем случае будет использован тип переменной array, значение которой будет сохранено в php файл и значение переменной из этого файла будет присваиваться в момент выполнения скрипта.
Ниже код всего скрипта по мониторингу (пингу) серверов, при помощи php и отправка уведомлений в Телеграм чат:
1. Для начала заводим себе бота. Для этого ищем пользователя @botfather и добавляем его.
2. Создаем нового бота, для этого пишем (/newbot)
3. Пишем название нашего бота (длжно заказнчиваться на _bot)
4. Добавляем нашего бота
Подключение к API Telegram
$messege = "Новая зяавка на сайте : Имя:".$_POST['name']." Телефон:".$_POST['phone']." e-mail: ".$_POST['email'].";
Читайте также: