Запись на прием (бронирование)
Используя данный функционал вы можете организовать запись в боте. Пример использования: парикмахерские/салоны красоты, автомойки, рестораны.
Инструкция по использованию функции для записи на прием (собеседование)
Адрес функции:
1. Подготавливаем таблицу для записи
желтым цветом выделен id таблицы, он понадобится нам позже
Готовую к использованию таблицу можно скопировать отсюда:
https://docs.google.com/spreadsheets/d/18rBAJwoYdK8vpKwGzQhT5M8cytX9drYnEiki0YxGqro/edit#gid=0
Берите за основу именно данный шаблон таблицы! В ней измените время на то, которое вам необходимо, а дату начала отсчета записи меняйте в ячейке B2!
После установки шаблона перейдите в настройки проекта и добавьте переменные

zapis_function_url=https://store.salebot.pro/function/zapisnapriem
sheet_id=1-kvJ6xFkgtlgN-z57E6xu-qGQce3XgV2ko6vIi4Zszg
list=0
list_id=0
day_for_show=10
back=Назад;0
messengers_with_buttons=["0", "1", "2", "5", "8"]
zapis_function_url - адрес функции
sheet_id - идентификатор таблицы (выше написано где его взять)
list - номер листа в таблице
list_id - переходим в нужный лист и копируем окончание в адресной строке https://docs.google.com/spreadsheets/d/1JysraU1Bzn3Etyt6_TYSwz1Y7_mEPfgkQnb7BHEm3_0/edit#gid=1727441620
day_for_show - количество выводимых дней для записи
back - кнопка назад и условие перехода
messengers_with_buttons - идентификатор мессенджеров, у которых дни и время будет выводится кнопками (https://docs.salebot.pro/peremennye-1/peremennye#znacheniya-client_type)
buttons_type - тип кнопок, по умолчанию reply. Если желаете кнопки типа inline, то значение данной переменной прописываете inline и меняете тип кнопок в блоках 1,2,3, указанных на общей схеме бота ниже (рисунок 1).
Общий вид схемы представлен на рисунке 1:

рисунок 1. Общая схема бота
2. Создаем участок схемы бота, который будет отвечать за получение данных от клиента и заносить в таблицу.
Схему рекомендуется начать с запроса контактных данных клиента имя и телефон. Человек может и не записаться, а данные у вас все равно останутся.
Итак первый блок у нас приветственный. Далее мы запрашиваем имя клиента и сохраняем в стрелке имя клиента в переменную client_name. Затем аналогично мы запрашиваем телефон клиента и сохраняем его в переменную client_phone (если хотите переименовать или использовать другие, то не забудьте заменить названия и в блоке Запись в таблицу)
3. Следующий блок чисто информационный.
4. Далее в следующем блоке мы осуществляем первый запрос к функции zapisnapriem (Рисунок 2)
Тип запроса: POST-json
URL-запроса: #{zapis_function_url}
Сохраняемые значения из ответа:
day_button->day_button;
text_days->text_days;
days_checker->days_checker
day_button - кнопки с днями для записи
text_days - список с днями, если мессенджер без кнопок
days_checker - условие перехода в следующий блок
JSON POST-параметров: {"client_type":"#{client_type}", "id": "#{sheet_id}", "list": "#{list}", "list_id": "#{list_id}", "day_for_show": "#{day_for_show}", "with_buttons": "#{messengers_with_buttons}"}
client_type - тип мессенджера, передается стандартная переменная
id - идентификатор таблицы (берется из переменной в настройках таблицы)
list и list_id, где list - это номер листа в таблице (нумерация начинается с 0), а list_id вам нужно взять из ссылки.
Переходите в таблице на нужный вам лист и копируете часть выделенную жирным шрифтом:
https://docs.google.com/spreadsheets/d/1JysraU1Bzn3Etyt6_TYSwz1Y7_mEPfgkQnb7BHEm3_0/edit#gid=1727441620
day_for_show - передаем переменную с числом (указали в настройках проекта)
with_buttons - передаем переменную со списком (из настроек проекта)
Запрос проверяет наличие свободных дней в таблице и возвращает клавиатуру с выбором дня, для записи для мессенджеров без кнопок предусмотрен текстовый вывод выбора дней
Далее отправляемся в блок с выводом полученных данных, в стрелке к следующему блоку указываем полученное из запроса условие перехода days_checker
Также в этой стрелке сохраняем введенные данные в переменную #{day1}, она понадобится нам в следующем запросе. Теперь у нас есть выбранный пользователем день и следующем блоке мы вызываем функцию уже с параметром выбранного дня.
Тип запроса: POST-json
URL-запроса: #{zapis_function_url}
Сохраняемые значения из ответа:
text_time->text_time;
time_button->time_button;
text_vibor->text_vibor;
knop->knop;
day-> front_day
JSON POST-параметров: {"client_type":"#{client_type}", "id": "#{sheet_id}", "list": "#{list}", "list_id": "#{list_id}", "day_for_show": "#{day_for_show}", "with_buttons": "#{messengers_with_buttons}"}
Функция проверяет и возвращает доступное свободное время в этот день также в виде клавиатуры для выбора либо текста для мессенджеров без кнопок, а также дополнительный параметр knop, который вам необходимо сохранить knop->knop
В следующем блоке мы выводим цифровое меню с вариантами свободного времени
Далее развилка с условием в стрелке регулярное выражение.
Если пользователь введет цифру из списка, то в следующем блоке преобразуем введенный пользователем порядковый номер времени в обозначение времени. Для этого делаем запрос к функции https://store.salebot.pro/function/zapis_position с параметрами {"knop":"#{knop}", "input": "#{time2}"}, где knop - полученный при предыдущем запросе массив доступного времени, input - введенное пользователем число цифрового меню.
В поле сохраняемые значения пишем
front_time-> front_time;
status->status
Далее #{front_time} используйте для показа выбранного времени клиенту.
Если пользователь нажимает на кнопку, данные просто сохраняем.
Следующий блок это подтверждение записи.
И в следующем блоке мы осуществляем последний запрос к функции, для сохранения полученных данных в таблицу.
Тип запроса: POST-json
URL-запроса: #{zapis_function_url}
Сохраняемые значения из ответа:
day->day;
status->status;
cell_row->row;
cell_col->col;
event_date->event_date
cell_col и cell_row - данные ячейки, в которую была произведена запись
JSON POST-параметров:
{"client_type":"#{client_type}", "id": "#{sheet_id}", "list": "#{list}", "list_id": "#{list_id}", "day":"#{day1}", "time":"#{front_time}", "name":"#{client_name}", "phone":"#{client_phone}", "client_field":"#{client_field}", "knop":"#{knop}", "with_buttons": "#{messengers_with_buttons}"}
client_field - переменная, в которую было сохранено название выбранной услуги, сразу после ввода номера. Не обязательный параметр.
Если вы работаете в часовом поясе, отличным от московского времени, передавайте в функцию дополнительный параметр delta, по умолчанию он равен 3
"delta": "3"
Функция производит запись в таблицу в выбранный день на выбранное время и возвращает status (1 - запись успешна, 0 - возникла проблема), выбранный день и выбранное время, также дополнительно возвращаются данные ячейки в которую была произведена запись.
Если вам нужно сделать какой-то из дней или время в течении какого-то дня недоступным для записи (например выходной), просто заполните ячейки этого дня прочерком или какой-нибудь надписью например выходной.
По умолчанию функция выводит ближайшие 14 дней для записи, если вам нужно больше или меньше измените переменную day_for_show в настройках проекта.
После успешной записи пользователь получает информационное сообщение и две кнопки (или список):
1 - изменить время
2 - удалить запись
При выборе одной из них запись удаляется из таблицы. Далее, если была нажата кнопка “изменить время”, то пользователя отправит на выбор дня и вновь по цепочке.
Тип запроса: POST-json
URL-запроса: https://store.salebot.pro/function/cellerase
JSON POST-параметров:
{"id": "#{sheet_id}", "list": "#{list}", "list_id": "#{list_id}", "row": "#{row}", "col": "#{col}"}
передаются параметры таблицы и листа, в который была произведена запись, и параметры ячейки, в которую была произведена запись.
Данные не заносятся в таблицу:
Возможные причины:
1. Созданная таблица не открыта для редактирования.
Решение: открыть доступ к таблице для редактирования
2. Ошибки в передаваемых параметрах.
решение: внимательно проверяйте правильность передаваемых параметров
3. Неверно указаны параметры листа таблицы "list" и "list_id" в настройках проекта.
Следует помнить, что нумерация листов в таблице начинается с 0. Таким образом если вам нужно осуществлять запись во второй лист, то параметр list должен иметь значение 1 и т. д.