Создание Чат-Бот-Магазин в Телеграм с нуля. Часть вторая

Создание Чат-Бот-Магазин в Телеграм с нуля. Часть вторая

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. Добавление описания
  3. Добавление стоимости
  4. Добавление единицы измерения
  5. Добавление картинки

После успешной обработки текстового сообщения на шаге 1, идет запись во временную таблицу товара и в таблицу действий, о том, что уже шаг 2 и так далее до шага 5 при загрузке картинки. Когда приходит картинка то мы ее загружаем на свой сервер и в случае успеха делаем запись в основную таблицу товаров переписываем в нее все что было добавлено на всех шагах добавления товара далее удаляем из временной таблицы товаров запись и отменяем все действия админа в таблице действий, по итогу выводим на просмотр категорию.

Еще изменил кодировку таблиц для работы с емодзи. Теперь она utf8mb4_unicode_ci.


Интерфейс блока администрирования

Несколько скринов интерфейса.

Просмотр каталога
Просмотр категории
Просмотр товара
Редактирование контактов

Подводим итоги

Весь код в статье расписывать не буду, просто получилось 1300 строк из которых 500 это комментарии, старался максимально подробно комментрировать, чтобы было понятно. Реализованные возможности приложения по результату второй части:

  1. Определение ролей: администратор и пользователь
  2. Добавление, определение видимости в каталоге и удаление категорий.
  3. Добавление, определение видимости в категории и удаление товара в категории.
  4. Редактирование данных контактов бот-магазина.

Исходный код текущей версии бот-магазина можно скачать. В следующей статье мы будем рассматривать интерфейс пользовательской части магазина: редактирование профиля, просмотр каталога, добавление товара в корзину, управление корзиной. 


Вы можете оставить комментарий к статье.

Report Page