Настроить db php и telegram db php
Если вы читаете это, вы знаете, что чат-боты являются одной из самых больших технологических тенденций 2016 года.
Революция ботов — это не только искусственный интеллект. Бот может быть инструментом в вашем мессенджере с простым интерфейсом чата, который может использоваться для расширения функциональности сайтов или служб или даже может быть автономным приложением. Боты дешевле в разработке и проще в установке, а еще одна замечательная особенность заключается в том, что мессенджеры можно использовать на любом типе устройств — ноутбуках, смартфонах и планшетах. Вот почему сейчас все без ума от ботов.
И самый большой мессенджер с открытым API бота — Telegram .
Что мы будем делать
В этой статье мы создадим простой секундомер бота Telegram. Я покажу вам, как создать своего бота, подключиться к аналитике, написать некоторый код и, наконец, добавить своего бота в магазин ботов.
Кстати, я уже подготовил демо, так что вы можете протестировать его, просто добавив @stopwatchbot в свой список контактов Telegram.
Создать бота с BotFather
Первым шагом к созданию бота является регистрация учетной записи вашего бота в Telegram. И для этого есть бот, который называется BotFather . Просто добавьте его в свой список контактов, и вы сможете создавать и настраивать ботов Telegram, просто набрав команду /newbot и следуя инструкциям BotFather.
Позже вы можете использовать BotFather для добавления описаний или фотографий в профили ваших ботов, регенерировать токены, устанавливать списки команд для использования, удалять учетные записи и так далее. Чтобы получить полный список команд, просто наберите /help в чате, чтобы получить список команд BotFather.
Подключитесь к Botan Analytics
В API Telegram Bots нет встроенной аналитики, но важно знать, сколько у вас пользователей, как они действуют и какие команды они запускают чаще. Конечно, мы можем собирать эту информацию, используя наш собственный движок, но если мы хотим сосредоточиться на функциональности ботов, а не на метриках, нам просто нужно использовать готовое решение.
И есть простой инструмент для подключения вашего бота к аналитике, который называется Botan . Он основан на яндекс AppMetric и полностью бесплатен. Используя Botan, вы можете сегментировать свою аудиторию, получать информацию о профилях пользователей, получать наиболее часто используемые команды и получать красивые графики прямо в своем мессенджере, например:
Для начала вам нужно зарегистрировать своего бота в Botan и получить токен. И снова, вы можете сделать это с ботом, BotanioBot:
Просто нажмите кнопку «Добавить бота» на диалоговой клавиатуре, введите ник своего бота, и вы получите токен бота. Теперь Botanio готов отслеживать ваши бот-события, и вы можете получать статистику по пользователям, сеансам, времени хранения и событиям прямо в своем мессенджере.
Создать и зарегистрировать SSL Webhook
Если ваш сертификат SSL является доверенным, все, что вам нужно сделать, это открыть этот URL в вашем браузере:
В противном случае вы должны создать самозаверяющий сертификат. Вот пример команды для Linux для него:
И не забудьте открыть порт SSL:
Чтобы проверить сертификат и установить для своего домена webhook доверие, необходимо загрузить сертификат открытого ключа:
Для примера сделаем возможность пользователю выбирать язык интерфейса (мультиязычность), и соответствующую настройку будем хранить вместе с данными пользователя.
Как организовать сбор данных?
Для начала создадим таблицу users в базе MySQL (используйте кодировку utf8mb4_unicode_ci)
Класс User по работе с таблицей, к нему мы будем обращаться для создания, получения или обновления данных о пользователях.
Добавим новый метод setPdo в класс по организации соединения с СУБД MySQL, сам класс Db вы можете посмотреть в предыдущей статье "Авторизация на сайт через Телеграм без использования официального виджета", также в прикрепленном к статье файле будут все приведенные скрипты.
Вынесем все необходимые в рамках этой статьи методы взаимодействия с Telegram Bot API в отдельный класс Bot, не забудьте заменить ___TOKEN__ВАШЕГО__БОТА___ на токен от своего бота.
Класс при необходимости можно расширить, а методы дополнить, но это на ваше усмотрение.
Добавляем боту мультиязычность
В качестве примера применения базы пользователей сделаем боту мультиязычный интерфейс, для этого необходимо при старте пользователю выводить возможность выбора языка в случае, если ранее им язык не был выбран. Мультиязычность позволит вам как создателю бота расширить круг пользователей, повысить лояльность и соответственно получить больше клиентов.
Класс Lang работает с файлами, которые содержат текстовые данные на разных языках в формате JSON. На сервере сделаем для них отдельную директорию lang и поместим ее в корень.
Структура приложения по итогу будет выглядеть так:
Метод getParam() принимает один обязательный параметр и один необязательный. Обязательный параметр - это ключ в массиве данных языкового файла, по нему мы будем получать значение контента. В качестве не обязательного параметра можно передать массив (ключ - значение) для подстановки необходимых нам динамических данных, например имя пользователя:
Lang.php
Файлы с контентом ru.json и en.json
Переходим к самому интересному, это класс WebHook. После того как пришел запрос от пользователя мы создаем необходимые объекты и отправляем на проверку языковой настройки. В случае если у пользователя еще не выбран язык (это возможно при первом старте бота) то ему выводится предложение со списком языковых настроек. Если у него язык уже выбран, то все данные передаются в роутер, и там в зависимости от команды выполняются необходимые действия. В нашем варианте выводится приветствие.
Еще есть команда на смену языка /lang при ее выполнении пользователю предлагается список на смену языковой настройки.
Index.php - это файл, на который необходимо настроить вебхук.
Заключение
После успешной настройки вышеописанного приложения у вас будет основа для разработки мультиязычного приложения на базе Телеграм. Исходный код можно скачать и использовать на свое усмотрение.
Комментарии
Внимание!
Убедитесь, что эта страница открыта в браузере, а не в приложении Telegram. В противном случае авторизация пройдет только в приложении Telegram.
За основу возьмем заготовку, написанную в статье про бота для Telegram на Php, потому что в основном такие сложности возникают у читателей в комментариях этого материала.
Основа
Имеется скрипт-заготовка бота и имеется mysql, а так-же phpmyadmin, который мы и будем использовать для создания базы.
ВНИМАНИЕ! Тут опечатка у поля Name должен быть тип или TEXT или VARCHAR!
Замечу, что все это можно было сгенерить используя SQL, но для простоты делать этого мы тут не будем.
Однако сначала подключение.
Подключение к базе данных
Используем этот файл в начале нашего бота, размещая там строчку
Сохраняем оба файла и переходим на страничку бота. Если там нет ошибок, значит соединение установлено. Собственно файлы бота выглядят вот так теперь:
И на страничке бота ошибок нет:
Модель базы
Теперь делаем обертку для нашей базы данных.
Что нам надо уметь?
Ну вот и пишем нужные нам методы.
Вставка пользователей в базу
Добавим этот метод в файл users.php, который, разумеется, надо сначала создать. Этот файл и будет нашей моделью для работы с базой.
Подключать его надо ниже под db_connect.php, вот так:
Теперь давайте протестируем как работает этот метод. Человек должен добавляться в базу при поступлении от него первой команды. Поэтому лучше всего будет добавить метод make_user в начало секции on то есть вот, примерно, так:
Если у вас уже этот обработчик есть просто добавьте строчку make_user($message->getFrom()->getUsername(),$cid); в нужное место.
Ну и, собственно, сохраняем, а потом пишем что-нибудь боту. Это должно добавить новую запись в таблицу.
Ремарка: у меня phpmyadmin глючит(чинить лень ибо это ни на что не влияет), поэтому внутрь таблицы я зайти не могу(а значит не могу и скриншет содержимого сделать), это исключительно проблема моего собственного сервера, у вас таких проблем быть не должно.
Впрочем это никак не повредит мне в разработке т.к. я отлично представляю себе как работает mysql.
Проверка на наличие пользователя в базе
Для этого будем использовать запрос select и mysql_fetch_array вот так:
Теперь мы можем проверять есть этот пользователь в базе или нет. Делаем в методе on так:
Отлично, теперь сущности не плодятся:
Сохранение пользовательских данных
Теперь надо добавить методы задания настроек пользователем и считывания этих настроек, соответственно. Вообще зачем эти настройки нужны? А нужны они нам для множества разных вещей, от работы с несколькими состояниями бота, до, например, приема отзывов на бота.
Для проверки этих методов засунем в on такой код:
Теперь можно написать что-нибудь в бота и посмотреть на результат. Сначала надпись будет в базу помещена, а потом выдана нам в формате массива.
Все работает, так, как я и задумывал.
Пример использования
Теперь давайте сделаем небольшое взаимодействие с этим инструментарием.
При вызове команды /dbact мы сможем пройти такой вот диалог:
Для подобных сложных взаимодействий, когда надо, например, получить последовательно ряд результатов от пользователя и нужна база данных. Без нее подобные вещи становятся не осуществимыми.
Если вы читаете это, то скорее всего понимаете, что боты для чатов является популярным трендом в 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, сделав его доступным для реальных пользователей. Как вы могли убедиться, существует много инструментов, которые сделают вашу жизнь проще при создании собственного бота, и не нужно писать много кода для создания простого бота. Теперь вы готовы к созданию собственного бота!
Если у вас есть какие-либо вопросы, не стесняйтесь задавать их в комментариях под статьей.
Читайте также: