Интернет магазин в чатботе с товарами из гугл таблицы
Готовый интернет магазин с корзиной и списком товаров в 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,
"Категория": "Тумбы",
"Подкатегория": "",
"Товар": "В спальню",
"Цена": "500,32",
"Описание": "",
"Параметры": "цвет: синий; черный; красный",
"Картинка": "",
"Что-то": "",
"Наличие": 6,
"row": 6,
"status": "1",
"available_quantity": 6
}
Значение row — это номер строки с товаром, можно его сохранить и управлять товаром, в дальнейшем используя функции для работы с гугл таблицами.
У этого товара столбцы 'Описание', 'Картинка', 'Что-то', ‘Подкатегория’ не заполнены, поэтому в доп.столбцах отображаются только название столбцов, а данные в них пустые.
Пример сохранения данных в блоке - поле "Сохраняемые значения":
status -> status;
has_params -> has_params;
button->paramsbutton;
lists -> paramslists;
parameter_name -> parameter_name;
parameters -> parameters;
product_index -> product_index;
available_quantity -> available_quantity -
Описание -> описание;
Картинка -> image_url;
Товар -> товар;
Цена -> цена;
Можно вывести подобную конструкцию:
Подробно о товаре
#{image_url}
#{описание}
#{товар} - #{цена}
От него соответственно стрелка Назад и Купить.
После нажатия кнопки Купить идет разветвление, в зависимости от наличия у товара параметров.
Каждый товар может иметь один параметр.
Столбец с параметром заполняется следующим образом:
название параметра: вариант1; вариант2; вариант3
название и варианты разделяются двоеточием, варианты точкой с запятой
В первом блоке выводится список параметров или кнопки полученные в блоке Запрос данных о товаре.
После выбора пользователем нужного параметра, отправляется запрос на проверку и сохранение выбранного параметра.
В поле Сохраняемые параметры сохраняем выбранный параметр: parameter -> parameter;
После запроса в зависимости от ответа функции пользователь отправится на перевыбор параметра или в блок ввода количества.
Если в вариантах параметров предполагается использование только цифр, то либо пишите их словом, либо добавьте к цифрам символ.
Если вам не нужны параметры, тогда следует удалить блоки, условие в одной стрелке и переместить стрелки как указано на скриншоте зеленым цветом.
После вывода информации о товаре или выбора параметра, пользователь переходит в блок с вводом количества и ввод сохраняется в переменную amount, которая отправляется в запросе на добавление в корзину.
Это необязательный блок. Если вы продаете товары поштучно, то этот блок можно смело удалить, предварительно переместив стрелки с него на блок 3644468 В корзину.
В запросе передаются следующие параметры:
{"command":"cart","currency":"#{currency}","products_list":"#{products_list}","product_index":"#{product_index}","amount":"#{amount}","cart":"#{cart}", "cart_params":"(#{amount}шт)","pbutton":"#{pbutton}","product_num":"#{product_num}" }
По порядку: команда скрипту, наименование валюты, список товаров, какой продукт по счету взять из списка, количество штук, корзина (уже добавленных товаров).
pbutton - массив кнопок с товарами, нужен, если товар выбран по нажатию кнопки, чтоб идентифицировать нужный товар
product_num - сохраненный номер (или название), который ввел пользователь при выборе товара (нужен, если используется Упрощенная версия схемы (описание ниже)).
cart_params - добавляется к строке с товаром в корзине, модифицируйте по своему усмотрению
например, если передать: "cart_params":"#{parameter_name}: #{parameter} (#{amount}шт)", добавит в строку текст, который выделен зеленым:
1. "В спальню цвет: черный (1шт)" - 500.32 руб
Запрос возвращает следующее:
cart_str -> Корзина; - корзину для отображения
cart_empty -> cart_empty; - переменную имеющую значение 1, если корзина не пуста и 0 - если пуста
cart -> cart; - корзина с товарами для скрипта
price_cart -> price_cart; - общая стоимость корзины
status_cart -> status_cart; - успешное добавление 1, ошибка 0
В случае успешного запроса - в следующем блоке пользователю выводится содержимое корзины:
В корзине находится: #{Корзина}
Общая стоимость: #{price_cart} #{currency}.
С блока Корзина есть 4 возможных пути (кнопки):
Список категорий - возвращает к выбору категории
Оформить заказ - отправляет в блок с очистк ой служебных переменных, перед отправкой в заявки, оставляет корзину и полную сумму
Удалить - отправляет в блок со списком товаров и предложением ввести цифру
Очистить - очищает все данные и отправляет к выбору категорий
После перехода из корзины по кнопке Удалить, попадаем в блок 3644453 со списком товаров и запросом номера позиции, которую нужно удалить. Введя номер, он запишется в переменную num_del и передастся в запросе на удаление:
Принимает следующие параметры, все они описаны выше в инструкции: {"command":"cart","currency":"#{currency}","num_del":"#{num_del}","cart":"#{cart}"}
И возвращает: cart_str -> Корзина; - корзину для вывода пользователю
cart_empty -> cart_empty; - переменная для проверки пустоты корзины на стрелке
cart -> cart; - служебная корзина с товарами для скрипта
price_cart -> price_cart; - общая стоимость товаров в корзине
status_cart -> status_cart; - переменная для условия на стрелке: 1 — все отлично, 0 — ошибка пользовательского ввода.
Если для работы магазина вам не нужны параметры, описание товаров и ввод количества, тогда схему можно переделать удалив лишние блоки и переместив стрелки с блока 3644466 Запрос данных о товаре сразу на блок 3644468 В корзину.
Пример на скриншоте ниже:
Для магазина с дополнительной подкате горией мы сделали отдельный шаблон (для вашего удобства)
Опишем различия с основной версией схемы.
Отличия в схеме отображены на скриншоте ниже:
Пример таблицы, добавить подкатегорию https://docs.google.com/spreadsheets/d/1yl0l2nJNiCVOy7K_ps5PCYChB43lD-q77D__LZw_pRM
Нельзя не указать подподкатегорию без подкатегории. Если нет подподкатегории то просто оставить ячейки пустыми (пример в таблице)
Первое что нужно сделать, это указать в блоке настроек нужные столбцы таблицы, добавить одну строку с номером столбца в таблице:
subsubcategory_col = 4
После выбора подкатегории следует блок запроса подподкатегорий, если такие есть, то выводится список с вариантами, если нет, то идет запрос списка товаров.
Last modified 1yr ago