Создание Чат-Бот-Магазин в Телеграм с нуля. Часть вторая
iMakeBotsПродолжение цикла статей по созданию чат-бот-магазина в Телеграм. В этой статье мы перейдем непосредственно к практической части. Забегая вперед сообщу, что исходный код рассматриваемого блока администрирования можно скачать в конце статьи.
Созданию окружения для работы в BOT API мы уделим особое внимание, считаю это фундаментальной основополагающей приложения.
Что я имею ввиду под словом "окружение": это методы запуска приложения, для работы с базой данных, метод-роутер и методы работы с BOT API.
Настройка окружения
Рассмотрим метод запуска приложения init()
- это метод, который запускает работу с базой данных и работу роутера.
В методе работы с базой данных, создадим объект PDO и запишим его в свойство $this->pdo
Наш роутер определяет какой тип данных нам пришел от BOT API и направляет их по заданному нами направлению. В нем мы будем использовать дополнительно еще несколько инструментов для определения статуса пользователя и в случае если это администратор бота, то проверим на цель данных.
Для работы нашего приложения в блоке администрирования бот-магазина, мы будем обрабатывать 2 типа данных — это message
и callback_query
, остальные нам пока не нужны, поэтому будем выводить предупреждение.
В тип message
приходят объекты, отправленные пользователем: текст, картинки, видео, документы, аудиофайл, видеофайл и другие. Объект callback_query
приходит только при нажатии inline кнопки с опцией callback_data
. Мы составим условия таким образом, что принимать message
будем только текст и картинки, а callback_query
будем перенаправлять в необходимый метод и в нем уже обрабатывать запрос на действие.
При проверке на текстовое сообщение мы зададим несколько шаблонов в условиях и при их выполнении направим в нужные нам методы. Это стандартная команда для старта бота /start, для страницы админа /admin и еще несколько команд для отображения экранов для просмотра категорий, контактов, добавления категории.
Все остальные текстовые сообщения, которые пришли в бот, мы будем определять по действию, которое было записано во временную таблицу в бд и при условии, что пользователь является админом. Действия мы записываем в бд по мере вызова методов добавления категорий или товара в категории.
При запросе на добавление категории мы запишем действие в бд как addcategory, и следующее текстовое сообщение мы будем воспринимать как название категории. В случае если будет отправлен другой контент - картинка например, то по условиям будет выведена ошибка в отправленных данных, потому что картинку мы ждем только на 5 шаге добавления товара.
Обратите внимание как обрабатывается объект callback_query
. Мы смотрим какое значение data приходит в объекте, это всегда (в нашем приложении) строка, состоящая из значений разделенные знаком нижнего подчеркивания и первым значением идет название метода в который нужно передать данные, далее это необходимые параметры в основном это идентификаторы.
Для работы с действиями администратора есть несколько методов для выборки, для записи и для очистки.
В случае с работой по наполнению категории товаром, действие пишем с дополнительными параметрами например addproduct_3_2_1, где:
- addproduct - название действия
- 3 - шаг действия - №3 у нас это определено как добавление еденицы измерения
- 2 - id категории
- 1 - id товара в базе
Таким образом будет удобно работать, мы понимаем, какое действие идет, на каком уже шаге, в какой категории мы работаем и с каким объектом товара.
Структура таблиц в бд и этапы добавления товара
Как и предполагалось в структуре базы данных прошли изменения. Были добавлены 2 таблицы для записи ожидаемых действий администратора при работе по наполнению товаров в бот-магазине и таблица временных данных по товару при добавлении его в категорию. Добавление товара происходит в 5 этапов (шагов):
- Добавление названия
- Добавление описания
- Добавление стоимости
- Добавление единицы измерения
- Добавление картинки
После успешной обработки текстового сообщения на шаге 1, идет запись во временную таблицу товара и в таблицу действий, о том, что уже шаг 2 и так далее до шага 5 при загрузке картинки. Когда приходит картинка то мы ее загружаем на свой сервер и в случае успеха делаем запись в основную таблицу товаров переписываем в нее все что было добавлено на всех шагах добавления товара далее удаляем из временной таблицы товаров запись и отменяем все действия админа в таблице действий, по итогу выводим на просмотр категорию.
Еще изменил кодировку таблиц для работы с емодзи. Теперь она utf8mb4_unicode_ci
.
Интерфейс блока администрирования
Несколько скринов интерфейса.
Подводим итоги
Весь код в статье расписывать не буду, просто получилось 1300 строк из которых 500 это комментарии, старался максимально подробно комментрировать, чтобы было понятно. Реализованные возможности приложения по результату второй части:
- Определение ролей: администратор и пользователь
- Добавление, определение видимости в каталоге и удаление категорий.
- Добавление, определение видимости в категории и удаление товара в категории.
- Редактирование данных контактов бот-магазина.
Исходный код текущей версии бот-магазина можно скачать. В следующей статье мы будем рассматривать интерфейс пользовательской части магазина: редактирование профиля, просмотр каталога, добавление товара в корзину, управление корзиной.
Вы можете оставить комментарий к статье.