WebApp «Календарь» (calendar)
calendar — готовое мини-приложение Квесчи для записи клиентов на услуги: барбершопы, салоны красоты, СТО, врачи, тренеры, фотографы, репетиторы, курсы.
В отличие от 5-7 блоков-вопросов «выберите день / выберите время / выберите услугу», calendar показывает интерактивный календарь с занятостью прямо в мессенджере. Клиент выбирает дату и время за 2 клика.
Когда использовать
- Услуги по записи: парикмахер, врач, тренер, репетитор, фотограф.
- Аренда: студия, авто, инвентарь по слотам.
- Курсы и тренинги: запись на занятие из расписания.
- Бронирование: ресторан, баня, переговорная.
Часть 1. Настройка календаря
Шаг 1. Подключите WebApp
Раздел Списки / WebApp → Добавить приложение → «Календарь» (calendar).
Настройки:
- Название — отображается в шапке;
- Токен — для запуска не из кнопки под сообщением;
- Дизайн — выбор дизайна приложения;
- Элементы — тексты и цвета;
- Работа календаря — настройки функций;
- График работы — окно работы по дням недели и времени записи.

Скриншот 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. Платная запись (оплата перед фиксацией)
- После
cal_data(выбор слота) → действие «Платежи» → ссылка#{pay_link}. - Сообщение с кнопкой «Оплатить».
- В цепочке приёма платежа → действие
cal_record(только после оплаты).
Сценарий 2. Напоминание с возможностью переноса
В кнопках напоминания добавьте «🔄 Перенести» — по нажатию открывайте WebApp снова, удалив старую запись через cal_del_record.
Сценарий 3. Запись со «слотом» услуги
В списке услуг каждая услуга имеет длительность. В Блоке 2 после cal_data подставьте длительность из услуги клиента → передайте в cal_record → бот корректно блокирует часы.
Сценарий 4. Многоуровневая запись (мастер + услуга)
- Сначала блок «Выберите мастера» (кнопки).
- По выбору → сохранить
master_id. - WebApp передаёт
master_idчерез URL-параметр → календарь показывает только окна выбранного мастера.
Сценарий 5. Корпоративная бронь переговорки
- Запись групповая — список присутствующих в
[Answer3]через запятую. - В
infoпередаётся: «Присутствуют: [Answer3], тема: [Answer4]». - Напоминание всем участникам (если у бота их 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 («Рабочие часы»).
Что дальше
- WebApp Магазин (cat_shop) — для розницы.
- WebApp Кафе (cat_cafe) — для общепита.
- Google Календарь — синхронизация с Google Calendar.
- Платежи — оплата записи.
- Цепочки — напоминания, дожимы.
- Списки — хранение истории записей.