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

Пишем техническое задание, проектируем структуру базы данных.

Продолжение: Часть 2Часть 3Часть 4

Создание «Чат-Бот-Магазин в Телеграм» начнем с разработки технического задания, без использования каких-либо шаблонов, а так по-простому, для себя.

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

Это будет бот с минимально-необходимым набором функций, для ознакомительных целей, в дальнейшем вы сможете расширить функционал бота под ваши потребности.

Наполнение контентом будем осуществлять через сам бот, для этого нам надо будет сделать систему администрирования, также организовать права доступа в админ-чат.

Сделаем возможность добавления категорий и карточек товара. Редактирование товара и категорий делать не будем, при необходимости это можно будет доработать вне рамок статей. Добавление и редактирование информации в разделе Помощь.


Разделы бота:

  1. Личный кабинет
  2. Каталог
  3. Корзина
  4. Помощь

* * *

Теперь подробнее …


Личный кабинет.

В кабинете пользователя будут храниться личные данные необходимые для оформления покупки. Заполнение данных нужно сделать доступным как при оформлении покупки, так и просто в разделе Личного кабинета.

Данные:

  1. Имя Фамилия
  2. Телефон
  3. Адрес доставки


Каталог

Навигация по каталогу должна быть удобная и интуитивно понятная. Необходимо реализовать возможность перемещаться не только вглубь каталога, но и на шаг назад. Это также должно работать в любом другом разделе бота.

  1. Категория
    1. Карточка товара
      1. Название
      2. Картинка (1 шт, при желании можно расширить)
      3. Описание в том числе характеристики
      4. Цена
      5. Единица измерения


Корзина

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

  1. Удалить товар из корзины
  2. Просмотреть все товары в корзине
  3. Увеличить\уменьшить количество товара
  4. Оформить покупку
    1. Адрес доставки
    2. Телефон
    3. Фамилия Имя
    4. Оплата
      1. Онлайн (попробуем Яндекс.Кассу или QIWI)
      2. При получении товара
  5. Предпросмотр покупки


Помощь

В этом разделе можно разместить информацию о магазине, службе поддержки, способы обратной связи и другое.

По мере продвижения вперед, будем в ТЗ что-то или дополнять, или исключать. Код будем писать в нашем уже известном файле index.php (это файл, на который у нас настроен webHook), познакомимся с PDO.

* * *

Таблицы базы данных

Личный кабинет

  1. id – уникальный идентификатор
  2. user_id – id пользователя в Телеграм
  3. first_name – имя пользователя
  4. last_name – фамилия пользователя
  5. phone – телефон пользователя
  6. adress – адрес доставки


Каталог

  1. Категории
    1. id – уникальный идентификатор
    2. name – название каталога
  2. Карточка товара
    1. id – уникальный идентификатор
    2. parent – родительская категория
    3. name – название товара
    4. description – описание товара
    5. image_tgr – картинка товара в базе телеграм
    6. image - картинка товара не стороннем сервере
    7. price – цена товара
    8. unit – единица измерения


Корзина

  1. id – уникальный идентификатор
  2. product_id – id товара
  3. product_count – количество товара
  4. user_id – id пользователя


Помощь

  1. description – описание раздела


Структура таблиц в формате SQL

--
-- Структура таблицы `bot_shop_basket`
--
CREATE TABLE IF NOT EXISTS `bot_shop_basket` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `product_id` int(11) NOT NULL,
  `product_count` int(11) NOT NULL,
  `user_id` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- Структура таблицы `bot_shop_category`
--
CREATE TABLE IF NOT EXISTS `bot_shop_category` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- Структура таблицы `bot_shop_help`
--
CREATE TABLE IF NOT EXISTS `bot_shop_help` (
  `description` text NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- Структура таблицы `bot_shop_product`
--
CREATE TABLE IF NOT EXISTS `bot_shop_product` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `parent` int(11) NOT NULL,
  `name` varchar(200) NOT NULL,
  `description` text NOT NULL,
  `image_tlg` varchar(200) NOT NULL,
  `image` varchar(200) NOT NULL,
  `price` decimal(10,2) NOT NULL,
  `unit` varchar(10) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- Структура таблицы `bot_shop_profile`
--
CREATE TABLE IF NOT EXISTS `bot_shop_profile` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL,
  `first_name` varchar(32) NOT NULL,
  `last_name` varchar(32) NOT NULL,
  `phone` varchar(15) NOT NULL,
  `adress` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

Еще будет как минимум одна таблица для промежуточной записи шагов пользователя, то есть нам нужно понимать для каких целей пришла информация от пользователя, то ли это текст для редактирования фамилии, или для раздела Помощь.

4 комментария
Авторизуйтесь через Telegram, чтобы оставить комментарий.
Откройте по ссылке или QR бот @iMakeBot, нажмите кнопку Старт/Start.
Следуйте инструкциям бота.

  • Mikhail [2 года назад]

    Добрый день. Подскажите, пожалуйста, для новичка, на сегодня изменилась установка магазина в телеграмм или нет? И чем лучше или хуже делать магазин по вашей схеме по сравнению с магазином через google таблицы (javascript  с telegram bot)?

    Что актуальнее и проще, заранее спасибо.

  • iMakeBots [2 года назад → Mikhail]

    Схема установки не изменилась. На гугле таблицах все работает медленно. Выбирать лучше конечно, то на чем вам удобнее писать. В app script можно использовать и mysql для этого есть инструмент у Google.

  • 🇲 🇦 🇻 🇪 🇷 🇮 🇨 🇰 [2 года назад]

    Добрый день ! спасибо большое за замечательный материал про магазин, лучшее что я видел , подскажите пожалуйста , не совсем разобрался, при попытке добавить товар, на добавлении картинки выдает такую вещ - Ошибка при добавлении товара 1, что я пропустил !?буду очень признателен

  • iMakeBots [2 года назад → 🇲 🇦 🇻 🇪 🇷 🇮 🇨 🇰]

    Проверьте пути сохранения картинок, и для вывода тоже надо подправить:

    В методе prepareProduct() нужно изменить формирование ссылки на предпросмотр картинки у товара

    Было:

    $text .= "<a href='https://" . $_SERVER['SERVER_NAME'] . "/" . $item['image'] . "'>&#8203;&#8203;</a>";

    Стало:

    $text .= "<a href='https://" . $_SERVER['SERVER_NAME'] . dirname(str_replace($_SERVER['DOCUMENT_ROOT'], "", $_SERVER['SCRIPT_FILENAME'])) . "/" . $item['image'] . "'>&#8203;&#8203;</a>";