Выбор дня и времени кнопками
Шаги day_choices и time_choices возвращают готовый массив choice_buttons для динамических кнопок сообщения. Шаг находит варианты; сообщение показывает их, а ваша схема решает, что делать после нажатия.
Как связать блоки
| Откуда | Куда сохранить | Где использовать |
|---|---|---|
day_choices.choice_buttons |
run.yclients_day_buttons |
Источник динамических кнопок сообщения выбора дня. |
| Нажатая кнопка дня | run.yclients_day_choice |
Из её value.date получить дату для time_choices.date. |
time_choices.choice_buttons |
run.yclients_time_buttons |
Источник динамических кнопок сообщения выбора времени. |
| Нажатая кнопка времени | run.yclients_time_choice |
Из её value.datetime получить время для создания записи. |
next_cursor каждого поиска |
Отдельная переменная дней или времени | Вход cursor следующего вызова того же поиска. |
В сообщении включите сохранение нажатой кнопки в переменную. Для основного продолжения используйте выход выбора динамической кнопки. Клиент видит её текст, а схема читает точные значения из value.
Первая страница и продолжение
До первого поиска создайте переменные продолжения дней и времени со значением пустой строки. Для поиска ближайших дней date_from можно передать пустым: отсчёт начнётся с сегодняшней даты в часовом поясе филиала. Сохраните возвращённый date_from для следующих страниц.
page_size задаёт от 1 до 10 вариантов на странице. По умолчанию показываются 5 дней или 6 времён. Диапазон поиска дней range_days — от 1 до 31, по умолчанию 14.
После поиска сохраните next_cursor. Когда нужно продолжение, вызовите тот же шаг с этим значением в cursor и прежними параметрами. Это может сделать кнопка «Ещё», текстовая команда или любая другая ветка схемы. Шаг сам не ждёт и не обрабатывает нажатия.
has_more показывает, есть ли следующая страница. Чтобы не предлагать пустое продолжение, по этому признаку выбирайте сообщение с кнопкой «Ещё» или без неё. Статическая кнопка не скрывается автоматически. Продолжение после последнего варианта не возвращает первую страницу.
Не смешивайте cursor с ненулевым offset. Для новых схем используйте choice_buttons: поле buttons оставлено для старого варианта со встроенной кнопкой продолжения.
Новый день и ручная дата
При смене услуги, мастера или диапазона очистите продолжение дней и времени. При выборе другого дня очистите продолжение времени. Иначе старый cursor не будет соответствовать новому поиску.
Можно добавить собственную кнопку «Другая дата» и запросить дату текстом. Шаги выбора понимают YYYY-MM-DD, ДД.ММ.ГГГГ, ДД.ММ, «сегодня», «завтра», «послезавтра». Для ДД.ММ, уже прошедшего в текущем году, выбирается следующий год. Невозможная или явно прошедшая дата ведёт в invalid_date.
Перед созданием записи
Выбор дня и времени не равен согласию на запись. Покажите клиенту итог, получите имя и телефон и добавьте отдельное подтверждение перед create_booking_v2.
Отключите повторные нажатия на кнопки одного сообщения, чтобы старый выбор не запускал второй путь. Возвраты и «Ещё» проводите через ограниченные циклы. При отсутствии дней предложите другой диапазон или мастера; при отсутствии времени — другой день.