Настройка руководства по странице (открыватель чата, aware к странице)
Дайте агенту краткую информацию по каждой странице — предысторию, приветственную фразу и предлагаемые вопросы — автоматически выбираемые из URL посетителя через MCP.
list_page_contextsupsert_page_contextresolve_page_contextpage_context_statsПринцип — открывающее предложение — это единственное предложение, которое гарантированно прочитают. Generic «Чем я могу помочь?» превращает посещение страницы в ничто. Плейбук позволяет одному и тому же агенту открывать диалог по-разному на каждой странице, уже зная, где находится посетитель. Подробнее в Page playbooks.
Page playbook — это краткая справка, привязанная к шаблону URL. Она состоит из трёх частей:
context— приватный фон для агента, не отображается посетителю (кто зашёл на эту страницу, над чем он размышляет, о чём обычно беспокоится). Пишите фон, а не факты: цены, квоты и политика должны находиться в базе знаний, которая имеет более высокий приоритет.greeting— приветственное сообщение, которое видит посетитель.questions— до четырёх предлагаемых вопросов, чтобы посетитель, у которого ещё нет сформулированного вопроса, мог просто выбрать один из них.
Правильный плейбук выбирается на основе URL: порядок разрешения — явный ключ → url_pattern → по умолчанию. Один плейбук по умолчанию перехватывает все страницы, не попавшие под другие правила, поэтому ничто никогда не возвращается к пустому полю ввода.
1. Посмотрите, что уже есть
list_page_contexts() # existing playbooks: match rules, greeting mode, position, which is default2. Создайте или замените один
upsert_page_context(
key="pricing",
label="Pricing page",
url_pattern="*/pricing", # glob, path-only; ignores query string and trailing slash
context="Visitors here are comparing plans and worrying about overage. "
"They are usually the person who will sign off on the cost. "
"Do not quote custom pricing in chat.",
greeting="You're looking at our plans — want me to work out where overage would start for your volume?",
questions=["What's included in the free plan?", "How is overage billed?", "Can I change plans later?"],
greeting_mode="generated", # generate opener + questions in the visitor's language (recommended)
is_default=False,
)greeting_mode="generated" динамически формирует открывающее сообщение и вопросы на языке посетителя — так что испаноязычный посетитель получит испанское приветствие, и вам не нужно создавать пять версий вручную. Используйте "static", только если вы хотите, чтобы ваш точный greeting/questions отображался дословно.
3. Всегда проверяйте соответствие
resolve_page_context(url="https://acme.com/pricing?ref=x") # → which playbook this URL hits, and howГлобальные шаблоны легко ошибочно настроить (пропущенный *, лишний уровень пути). При несоответствии нет сообщения об ошибке — посетитель просто молча получает плейбук по умолчанию. Поэтому после написания любого url_pattern разрешите реальный URL и убедитесь, что matched_by равно url_pattern, а не default.
4. Установите перехватчик по умолчанию
upsert_page_context(
key="default",
label="Everywhere else",
context="General visitor to the site; intent unknown. Ask what brought them in before assuming.",
greeting_mode="generated",
is_default=True, # at most one default per tenant; setting this unsets any other
)upsert_page_context — это полная замена, а не патч: поля, которые вы опускаете, возвращаются к значениям по умолчанию, а не сохраняют своё старое значение. Чтобы изменить одно поле, сначала вызовите list_page_contexts(), объедините данные, а затем выполните upsert.
Когда плейбуки проработают какое-то время, page_context_stats() покажет, какие из них открываются и на какие предлагаемые вопросы нажимают — так вы сможете настраивать текст на основе данных, а не догадок.
Вернитесь с отчётом. Предоставьте пользователю ссылку на консоль для обзора и редактирования этих данных —
https://console.agent4.io/#/page-contexts— и подтвердите, что каждыйurl_patternразрешается так, как они ожидают (шаг 3). Виджет чата не требует изменений кода для статического сайта; одностраничные приложения, у которых нет отдельного URL для каждого представления, могут указать плейбук по егоkey.
Открытия, собирающие данные на месте
Если в context плейбука явно указано представить форму при первом контакте — например,
"PRESENT THE BOOKING FORM IN YOUR GREETING/OPENING: (1) preferred channel (phone / email — single), (2) phone or email (text)" — сгенерированное открывающее сообщение будет включать эту интерактивную форму, а стартовые вопросы будут подавлены (форма является руководством). Отправка формы считается обычным сообщением посетителя, поэтому save_contact / schedule_followup срабатывают так же, как и в середине разговора.
Используйте это для намерений, где запрос информации является основной целью — «заказать обратный звонок», «оставить сообщение» — и ограничивайте форму 2–3 полями. Для намерений, где посетитель хочет сначала получить ответы (поддержка, устранение неполадок), позвольте разговору начаться нормально, а сбор данных осуществляйте в первом ответе.
Записи требуют контакта — по замыслу
Каждый инструмент создания записей (submit_lead, escalate, request_booking, open_checklist)
отклоняет вызов, если contact.email или contact.phone не заполнены — запись, на которую никто не может ответить, является шумом, а не лидом. Сообщение об отклонении говорит агенту, что делать (попросить контакт сначала, никогда не выдумывать его), поэтому заставляйте ваши плейбуки собирать email/телефон заранее — формы в момент приветствия существуют именно для этого.
Детерминированная регистрация форм
Для плейбуков типа сбора данных (бронирования, лиды, жалобы) добавьте в
context машинный маркер: [[inbox:submit_lead]], [[inbox:escalate]] или [[inbox:request_booking]]. Отправки форм на этом плейбуке затем регистрируются платформой до ответа модели — ссылка в ответе гарантированно является ссылкой на зарегистрированную запись, а контакт сохраняется вместе с ней. Сохраняйте и текстовые инструкции: они покрывают путь свободной беседы (детали предоставлены без формы), где модель всё равно выполняет регистрацию.