Интернет магазин в чатботе с товарами из гугл таблицы
Готовый интернет магазин с корзиной и списком товаров в Google таблице.
Вы можете установить этот проект прямо из шаблона. Данная статья рассказывает, как этот шаблон работает.
Инструкция по работе с функцией магазина
1.Таблица
Подготавливаем таблицу для работы с функцией магазина, желтым цветом выделен id таблицы, он понадобится нам позже:
Таблица должна состоять из шапки и минимум 5-ти обязательных столбцов: Категория, Подкатегория, Товар, Цена и Наличие.
Тогда почему в примере таблицы их больше? Узнаете дальше, пункт 2.1.
Не важно в каком порядке, расположены эти столбцы, главное, чтобы они были заполнены.
Если Категория не имеет подкатегорий, то ячейки подкатегорий, для этой категории оставьте пустыми (в таблице с примером Тумбы не имеют подкатегорий).
Из колонки Товар берутся наименование товаров для вывода списка пользователю и отображения в корзине.
Соответственно с колонки Цена берется цена на товар.
Столбец Наличие должен быть больше нуля, если товар есть в наличии или ноль 0, если то вара нет.
Если планируется использование параметров, то столбец заполняется следующим образом: название параметра: вариант1; вариант2; вариант3
2. Блоки и схема
Общий вид схемы:
Зеленый и красный блоки не обязательны, просто помечены для наглядности. Вход и работа магазина начинается с блока сразу за зеленым и обозначен как Точка входа. В этом блоке удаляются все переменные созданные при работе магазина.
Самый распространенный блок на схеме: Введите корректное значение, выводится, если пользователь ввел неверное значение. Переход в него осуществляется автоматически, если функция не смогла обработать ввод пользователя, при каждом запросе отправляется статус (1, 0, err), если все хорошо 1, то проходит дальше.
В поле Калькулятор этого блока задаются настройки магазина:
shop_url = https://store.salebot.pro/function/shop2
id_sheet - идентификатор вашей таблицы
number_sheet - номер листа в таблице (если не задать, то будет браться первый)
max_button - максимальное количество кнопок, если больше, то выведется список
with_buttons - массив идентификаторов мессенджеров, в которых будут кнопки (https://docs.salebot.pro/peremennye-1/peremennye#znacheniya-client_type)
currency - присвоит значение валюты (отображается при выводе товаров и корзины, пример 1.Карандаш - 10 руб)
add_number_str - текст внизу списка категорий, подкатегорий и товаров.
category_col - номер колонки категорий
subcategory_col - номер колонки подкатегорий product_col - номер колонки наименования товаров
params_col - номер колонки параметров (не обязателен)
price_col - номер колонки с ценой available_col - номер колонки с наличием товаров
Пример заполненных настроек:
shop_url = https://store.salebot.pro/function/shop2
id_sheet = 1n6VJwstN5DK37b7ThOZE3-25Z0E5H-uo3VgiwKxTg5w
max_button = 15
with_buttons = ["0", "1", "2", "5"]
currency = руб
number_sheet = 1
add_number_str = Введите номер позиции:
category_col = 2
subcategory_col = 3
product_col = 4
params_col = 7
price_col = 5
available_col = 10
В теле запроса JSON параметры передаются нужные параметры из настроек, так же client_type, для определения и сопоставления с переданным массивом мессенджеров with_buttons.
В поле Сохраняемые значения, сохраняются следующие значения:
button->button; lists -> lists; category_list -> category_list;
Массив кнопок или список категорий для отображения пользователю и category_list - список для категорий с номерами строк, нужен для работы функции магазина.
В блоке происходит запрос для получения списка категорий для вывода пользователям мессенджеров без кнопок или кнопок для мессенджеров с кнопками. Соответственно скрипт возвращает список и кнопки, а в следующем блоке их выводит: #{lists} - список и в поле расширенных настроек кнопок: #{button}. В блоке должны быть обе эти переменные, одну из них вернет скрипт, который контролирует, что отправлять в зависимости от мессенджера и массива with_buttons.
После выбора категории, переход состоится по стрелке с запоминанием ввода клиента и записью в переменную category, в следующем блоке запрашиваются подкатегории.
И возвращает следующее:
button->subbutton; - кнопки подкатегорий
status -> substatus; - статус обработки ввода пользователя
lists -> sublists; - список для отображения вместо кнопок
subcategory_list -> subcategory_list; - список подкатегорий (служебный)
category -> category - выбранная пользователем категория текстом
Дальше в зависимости от наличия подкатегорий: если их нет, то идет по ветке и выводит товары, если есть - идет по другой и выводит список или кнопки подкатегорий.
На стрелках условия с переходом по времени -1: substatus - err - неверный ввод категории, переход в блок "Введите корректное значение" и следом на выбор категории.
substatus - 0 - нет подкатегорий, переход сразу в блок запроса товаров (!!!Товары!!!)
substatus - 1 - есть подкатегории, переход к блоку для вывода подкатегорий.
Соответственно запрос выше возвращает список и кнопки, а в следующем блоке их выводит: #{sublists} - список и в поле расширенных настроек кнопок: #{subbutton}. В блоке должны быть обе эти переменные, одну из них вернет скрипт, который контролирует, что отправлять в зависимости от мессенджера.
Блок вывода подкатегорий (скриншот ниже):
После выбора подкатегорий ввод пользователя записывается в переменную subcategory.
В один попадаем, если нет подкатегорий, сразу после выбора категории, а во второй - после выбора подкатегории, которую передаем в запросе.
В ответ на запрос получаем: button->pbutton; - кнопки товаров
lists -> plists; - список товаров
products_list -> products_list; - служебный список товаров, который передаем в следующем блоке prod_list_all -> prod_list_all; - переменная, которая передается в следующем блоке, в которую записываются все данные по товарам subcategory -> subcategory; - если запрос с подкатегорией, то передается название или номер подкатегории в списке status -> pstatus; - проверка ввода пользователя, если все в порядке возвращает 1, если нет, то err. Соответственно это условия на стрелках.
Если запрос успешен, то осуществляется переход в блок с выводом товаров, который для ветки с подкатегорией выводит:
#{category} -> #{subcategory}:
#{plists}
А для ветки без подкатегории:
#{category}:
#{plists}
category - название категории
subcategory - название подкатегории
plists - список товаров
После того, как пользователь выберет нужный товар, воронка снова переходит в одну ветку.
С него осуществляется запрос на получение всех данных о выбранном товаре.
JSON параметры запроса - изменять ничего не нужно:
{"command":"product_info","currency":"#{currency}","prod_list_all":"#{prod_list_all}","product_num":"#{product_num}","available_col":"#{available_col}","params_col":"#{params_col}","client":"#{client_type}","with_buttons":"#{with_buttons}","max_button":"#{max_button}","add_number_str":"#{add_number_str}","pbutton":"#{pbutton}"}
prod_list_all - список товаров с полными данными
product_num - сохраненный номер (или название), который ввел пользователь при переходе в этот блок.
pbutton - массив кнопок с товарами. Он нужен, если товар выбран по нажатию кнопки, чтобы идентифицировать нужный товар
Запрос возвращает два обязательных параметра, поле "Сохранение значения из Json-ответа":
status -> status; - статус запроса, в том числе проверка ввода данных пользователем
has_params -> has_params; - условие для стрелки: имеет параметры 1, не имеет - 0
button->paramsbutton; - если есть параметры и мессенджер с кнопками, то в переменной сохр анится массив кнопок
lists -> paramslists; - список параметров для вывода
parameter_name -> parameter_name; - наименование параметра
parameters -> parameters; - список вариантов параметра
product_index -> product_index; - индекс товара
available_quantity -> available_quantity - количество товара из колонки Наличие
Также запрос в этом блоке возвращает все данные, которые есть в строке с товаром (не только с обязательных столбцов, но и с дополнительных, которые вы укажете), которые вы можете сохранить в переменные и впоследствии вывести пользователю.
По умолчанию блок выводит переменную #{custom_answer}, из которой вы можете сохранить нужные вам значения по товару и вывести пользователю в блоке.
Например для таблицы выше #{custom_answer} следующий: товар под номером 6:
{ "parameter_name": "цвет",
"parameters": "["синий", "черный", "красный"]",
"button": "[{"text": "синий", "line": 0}, {"text": "черный", "line": 1}, {"text": "красный", "line": 2}]",
"has_params": 1,
"product_index": 0,
"Номер": 6,
"Категория": "Тумбы",
"Подкатегория": "",
"Товар": "В спальню",
"