Cookbook
Agents & skills · for AI agents

Настройка руководства по странице (открыватель чата, aware к странице)

Дайте агенту краткую информацию по каждой странице — предысторию, приветственную фразу и предлагаемые вопросы — автоматически выбираемые из URL посетителя через MCP.

MCP tools: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 default

2. Создайте или замените один

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]]. Отправки форм на этом плейбуке затем регистрируются платформой до ответа модели — ссылка в ответе гарантированно является ссылкой на зарегистрированную запись, а контакт сохраняется вместе с ней. Сохраняйте и текстовые инструкции: они покрывают путь свободной беседы (детали предоставлены без формы), где модель всё равно выполняет регистрацию.