Кнопки в сообщении не останавливают выполнение сами
Почему исходный квиз не ждёт ответа
Первый узел seed отправляет MESSAGE с inline callback-кнопками goal_income, goal_clients и goal_automation. Его единственное исходящее ребро без специальной ручки ведёт в CONDITION, где callback_data сравнивается с goal_income. Per-button рёбер с sourceHandle btn-0, btn-1 и btn-2 в графе нет. Поэтому сообщение компилируется как обычный MESSAGE, а условие выполняется в том же запуске сценария.
В этот момент callback_data ещё отсутствует: пользователь не успел ничего нажать. Сравнение не проходит, компилятор идёт по false-ветке, ставит goal_other и отправляет общее сообщение. Затем сценарий достигает quiz_completed. Позднее нажатие на кнопку не меняет уже пройденный путь. Поэтому goal_other в исходном варианте означает ошибочный автоматический маршрут, а не выбор человека.
Кнопки должны вести в настроенные действия
Как сформулировать вопрос и ответы
Вопрос должен объяснять, зачем бот спрашивает о цели. Три seed-варианта подходят только если после каждого ответа есть понятное продолжение. Не оставляйте кнопку про автоматизацию, когда она ведёт к тексту для другого интереса. Если сценарий должен собрать лишь две группы, сократите список кнопок до двух или ясно назовите общий вариант.
Не называйте маршрут персональным, пока он состоит из одной общей карточки сообщения. Для передачи менеджеру добавьте данные, которые действительно нужны для разговора, или предложите пользователю уточнить задачу отдельным поддерживаемым вводом. Один callback может быть началом сегментации, но не описывает бюджет, срок покупки или согласие на звонок.
- Каждой видимой кнопке соответствует callback и отдельная настроенная связь.
- Сообщение после кнопки связано с той же темой, что и её текст.
- Общий маршрут явно назван общим и не выдаётся за персональный ответ.
- Дополнительные данные запрашиваются отдельным узлом ожидания, если они нужны команде.
Маршрут задают рёбра конкретных кнопок
Как собрать BUTTON_BRANCH и три маршрута
Проведите прямо от MESSAGE три per-button ребра: btn-0 для goal_income, btn-1 для goal_clients и btn-2 для goal_automation. Компилятор сопоставляет индекс ручки с кнопкой, берёт её callback_data как ключ ветки и собирает само сообщение в BUTTON_BRANCH. В результате FLOW отправляет вопрос, сохраняет состояние ветвления и продолжает только маршрут нажатой кнопки.
Не добавляйте после MESSAGE последовательную ноду в надежде, что она перехватит callback. Если нужен иной поддерживаемый callback-маршрут, buttonClick используют только как триггер отдельного FLOW, а не как узел после MESSAGE. Для этого варианта callback каждой кнопки должен совпадать со значением триггера соответствующего сценария; смешивать его с текущей цепочкой MESSAGE → CONDITION нельзя.
Выберите одну схему и назовите ветки по их фактическому содержанию. Если для клиентской базы и автоматизации нужны разные сообщения, у них должны быть разные теги и узлы. Если им подходит общий ответ, оба btn-* ребра можно явно направить в одну последовательность с нейтральным тегом. Не используйте false-ветку CONDITION как замену маршруту кнопки.
Зафиксируйте доработанную схему в описании своей копии, чтобы редактор не принял исходный seed за готовую механику. Перечислите три callback, их ручки btn-0, btn-1 и btn-2 и целевые узлы. Тогда следующий специалист сможет сопоставить видимые кнопки с фактическим BUTTON_BRANCH, а не только проверить текст сообщения.
Сохраните три callback
Проверьте значения goal_income, goal_clients и goal_automation в кнопках. Текст кнопки и callback должны оставаться связанной парой.
Проведите per-button рёбра
Соедините ручки btn-0, btn-1 и btn-2 самого MESSAGE с целевыми узлами. Эти рёбра являются входом для компиляции BUTTON_BRANCH.
Проверьте результат компиляции
Первым шагом вопроса должен стать BUTTON_BRANCH с ключами goal_income, goal_clients и goal_automation, а не отдельные MESSAGE и CONDITION.
Поставьте теги после маршрута
Добавляйте goal_income, goal_clients или goal_automation только после соответствующего callback. Общий quiz_completed оставьте после успешно обработанного ответа.
Пример диалога
Тест начинается с отсутствия тега до нажатия
Как проверить исправленный квиз
В исправленной копии убедитесь, что вопрос с кнопками скомпилирован одним шагом BUTTON_BRANCH. Запустите FLOW и остановитесь на этом сообщении: до нажатия не должны появиться goal_income, goal_clients, goal_automation, общий тег или ответное сообщение. Затем по отдельности нажмите каждую кнопку и проверьте callback, сообщение, тематический тег и переход к общему финалу.
Отдельно проверьте неизвестный callback, повторное нажатие и выход из сценария. Для каждого состояния задайте ожидаемый результат: повторное ожидание, нейтральное сообщение или безопасное завершение. Не публикуйте вариант, где неполный или чужой callback попадает в маркетинговый сегмент. Только такой тест показывает, что кнопка действительно управляет маршрутом.
- До нажатия сценарий ожидает callback и не ставит ни одного тега цели.
- goal_income, goal_clients и goal_automation проходят по отдельным проверенным маршрутам.
- Неизвестный callback не превращается в интерес к случайной теме.
- Общий финал и передача менеджеру соответствуют настроенной логике, а не тексту примера.
