Перейти к основному содержимому

WebApp «Календарь» (calendar)

calendar — готовое мини-приложение Квесчи для записи клиентов на услуги: барбершопы, салоны красоты, СТО, врачи, тренеры, фотографы, репетиторы, курсы.

В отличие от 5-7 блоков-вопросов «выберите день / выберите время / выберите услугу», calendar показывает интерактивный календарь с занятостью прямо в мессенджере. Клиент выбирает дату и время за 2 клика.

Когда использовать

  • Услуги по записи: парикмахер, врач, тренер, репетитор, фотограф.
  • Аренда: студия, авто, инвентарь по слотам.
  • Курсы и тренинги: запись на занятие из расписания.
  • Бронирование: ресторан, баня, переговорная.

Часть 1. Настройка календаря

Шаг 1. Подключите WebApp

Раздел Списки / WebAppДобавить приложение«Календарь» (calendar).

Настройки:

  • Название — отображается в шапке;
  • Токен — для запуска не из кнопки под сообщением;
  • Дизайн — выбор дизайна приложения;
  • Элементы — тексты и цвета;
  • Работа календаря — настройки функций;
  • График работы — окно работы по дням недели и времени записи.

Настройка WebApp Календарь

Скриншот 1. Настройка приложения календаря.

Шаг 2. Подключите к мессенджеру

  • Через @BotFather → Menu Button → URL вашего WebApp.
  • Кнопка-ссылка под сообщением

Часть 2. Семь операций действия

Действие «WebApp/MiniApp» в сценарии действий предоставляет 7 операций для работы с календарём:

ОперацияНазначение
Календарь: данные из приложенияПолучить выбранную дату/время из WebApp
Календарь: сделать записьЗафиксировать запись в системе Квесчи
Календарь: получить все записи клиентаИзвлечь массив записей подписчика
Календарь: получить запись клиентаПолучить одну запись по ID или номеру
Календарь: удалить запись клиентаОтменить одну запись
Календарь: удалить все записи клиентаОчистить все записи (для админки)

После возврата из WebApp текущий блок получает ответ webapp:calendar. Используйте его в условиях перехода.


Часть 3. Операция «Данные из приложения» (cal_data)

Получает то, что клиент выбрал в WebApp. Запись ещё не создаётся — это сырые данные.

ПеременнаяСодержит
Дата записи 1Дата (формат дд.мм.гггг). Если интервал — первая дата
Дата записи 2Вторая дата (только для интервала)
Время записиВремя в формате чч:мм
Выбор одиночной записи1 — одиночная дата, 0 — интервал
Выбор времени1 — выбирал время, 0 — только дата
ID записиУникальный ID в приложении

Используйте для подтверждения: «Вы выбрали #{date1} в #{time}. Подтвердить?» → если «Да» → cal_record.

Данные из календаря

Скриншот 2. Сохранение выбора клиента в переменные.


Часть 4. Операция «Сделать запись» (cal_record)

Фиксирует запись в системе Квесчи. После этой операции клиент действительно «записан».

Поля операции

ПолеЗначение
СобытиеНазвание услуги: «Стрижка мужская», «Консультация»
Информация о записиОписание для клиента/админа (адрес, номер кабинета, телефон)
Продолжительность в минутах30, 60, 90. Можно переменную
Имя переменной (инфо)Куда сохранить полную информацию о записи
ID записи в БД (recidvar)Переменная для ID — нужен для отмены

Напоминания

Галочка «Напоминание» включает блок настройки автоуведомлений:

  • Текст напоминания — что отправить клиенту;
  • Кнопки напоминания — добавить «Подтвердить / Отменить» к сообщению;
  • До события в минутах — за сколько минут до записи отправить:
    • Первое напоминание — обычно 1440 (за сутки) или 60 (за час);
    • Второе напоминание — например, 60;
    • Третье напоминание15.

Напоминания

Скриншот 3. Настройка трёх напоминаний.

Кнопки в напоминании

Добавьте кнопки «✅ Приду» / «❌ Отмена» в напоминание. По нажатию «Отмена» запускайте сценарий с действием «Календарь: удалить запись».


Часть 5. Операция «Получить все записи клиента» (cal_get_records)

Возвращает все будущие записи подписчика массивом.

  • Все записи — имя переменной (например, my_records).

После — используйте «Перебор» массива в «Операциях с данными» для формирования строки списка.

Ваши записи:
#{my_records}

Хотите отменить какую-то?

Часть 6. Операция «Получить запись клиента» (cal_get_record)

Достаёт одну запись по номеру в списке или по ID.

  • Номер из списка (recnum) — порядковый номер из массива записей;
  • ID записи из БД (recid) — уникальный ID.

Извлекает в переменные:

Поле записиПеременная
Наименование событияeventvar
Инфо о событииinfovar
Первая датаformat1var
Вторая датаformat2var
Времяtimevar
Одиночная датаsingledatevar
С выбором времениsettimevar
Продолжительностьdurationvar
ID записиrecordIdvar

Используется для просмотра деталей конкретной записи перед её отменой/переносом.


Часть 7. Операция «Удалить запись клиента» (cal_del_record)

Отменяет одну запись по её ID. Передайте recid из переменной (после cal_record или cal_get_record).

После удаления — напоминания автоматически отменяются.


Часть 8. Операция «Удалить все записи клиента» (cal_delall_records)

Чистит все записи подписчика. Применяется в служебных сценариях:

  • «Перенос данных» — удалить старые при миграции;
  • «Полная отписка от услуг»;
  • «Сброс для тестов».
Необратимо

Удалённые записи не восстановить. Подтверждайте действие у клиента отдельным блоком.


Часть 9. Типовой сценарий «Запись на стрижку»

Блок 1. Приветствие
«Добро пожаловать в Барбершоп! Записаться?»
Кнопка WebApp «📅 Выбрать время»
↓ webapp:calendar
Блок 2. Подтверждение
Сценарий действий «До»:
- WebApp/MiniApp → cal_data → переменные date1, time, recordId, ...
Сообщение: «Вы выбрали `#{date1}` в `#{time}`.
Услуга: Стрижка мужская (30 мин)
Адрес: ул. Ленина, 1
Подтвердить?»
Кнопки: «✅ Подтвердить» / «❌ Изменить»
Блок 3 (по кнопке «Подтвердить»). Сохранение записи
Сценарий действий «До»:
- WebApp/MiniApp → cal_record:
Событие: Стрижка мужская
Инфо: Адрес ул. Ленина 1, 2 этаж. Тел: +7...
Длительность: 30
Напоминание: за 1440 мин (сутки) и за 60 мин (час)
Текст: «Напоминаем о записи на `#{date1}` в `#{time}`»
Сохранить ID в переменную: my_record_id
- Список «Записи» addrow:
ClientID, recordId = `#{my_record_id}`, date = `#{date1}`, time = `#{time}`
Сообщение: «✅ Запись на `#{date1}` в `#{time}` подтверждена.
Мы напомним за сутки и за час.»

Часть 10. Сценарий «Мои записи»

Блок 1. Команда /my
Сценарий действий «До»:
- WebApp/MiniApp → cal_get_records → my_records (массив)
- Если массив пуст → переход на «Записей нет»
- Иначе: перебор → формирование строки в `#{records_text}`
Сообщение: «Ваши записи:
`#{records_text}`
Выберите номер для отмены»
Блок 2. Ввод номера
Ответ: [Answer1] (номер 1, 2, 3)
Блок 3. Подтверждение отмены
Сценарий действий «До»:
- WebApp/MiniApp → cal_get_record(recnum=[Answer1]) → детали в переменные
Сообщение: «Отменить запись `#{eventvar}` `#{format1var}` в `#{timevar}`?»
Кнопки: «✅ Да» / «❌ Нет»
Блок 4 (Да). Отмена
Сценарий действий «До»:
- WebApp/MiniApp → cal_del_record(recid=`#{recordIdvar}`)
Сообщение: «✅ Запись отменена.»

Часть 11. Продвинутые сценарии

Сценарий 1. Платная запись (оплата перед фиксацией)

  1. После cal_data (выбор слота) → действие «Платежи» → ссылка #{pay_link}.
  2. Сообщение с кнопкой «Оплатить».
  3. В цепочке приёма платежа → действие cal_record (только после оплаты).

Сценарий 2. Напоминание с возможностью переноса

В кнопках напоминания добавьте «🔄 Перенести» — по нажатию открывайте WebApp снова, удалив старую запись через cal_del_record.

Сценарий 3. Запись со «слотом» услуги

В списке услуг каждая услуга имеет длительность. В Блоке 2 после cal_data подставьте длительность из услуги клиента → передайте в cal_record → бот корректно блокирует часы.

Сценарий 4. Многоуровневая запись (мастер + услуга)

  1. Сначала блок «Выберите мастера» (кнопки).
  2. По выбору → сохранить master_id.
  3. WebApp передаёт master_id через URL-параметр → календарь показывает только окна выбранного мастера.

Сценарий 5. Корпоративная бронь переговорки

  1. Запись групповая — список присутствующих в [Answer3] через запятую.
  2. В info передаётся: «Присутствуют: [Answer3], тема: [Answer4]».
  3. Напоминание всем участникам (если у бота их ID).

Часть 12. Архитектура

Принцип 1. Подтверждение перед фиксацией

Всегда между cal_data и cal_record ставьте блок подтверждения. Клиент может «потыкать» в календаре и не подтвердить.

Принцип 2. Сохраняйте ID записи

Без recidvar после cal_record вы не сможете отменить запись. Всегда указывайте имя переменной.

Принцип 3. Минимум одно напоминание

Установите хотя бы одно напоминание за час до события. Это реально снижает % неявок.

Принцип 4. История в списке «Записи»

Дублируйте записи в свой список для аналитики и истории. Календарь хранит только активные записи.

Принцип 5. Не давайте записываться в нерабочее время

Настройте «Рабочие часы» в WebApp. Клиенты не должны видеть слотов вне работы.

Принцип 6. Адрес и инструкция — в info

В info пишите подробно: адрес с этажом, как пройти, что взять с собой, телефон администратора. Это попадёт в напоминания и снизит звонки.


Частые ошибки

  • #{date1} или #{time} пустые — забыли указать имена переменных в cal_data или клиент не дошёл до выбора.
  • Запись не сохранилась — пропущена операция cal_record. cal_data только читает выбор, но не фиксирует.
  • Напоминания не приходят — клиент отписался от бота или забанил. Это вне контроля Квесчи.
  • Отмена не работает — забыли сохранить recidvar в cal_record, теперь нет ID для удаления.
  • Клиент бронирует и не приходит — добавьте платную бронь или предоплату.
  • Слоты пересекаются — не указана duration в cal_record. Календарь считает запись точечной.
  • Календарь пустой — не задано расписание в настройках WebApp («Рабочие часы»).

Что дальше