Спросите Алису — ответ придёт сразу, а разговор ляжет в таблицу

Диалог идёт прямо на странице. Каждая реплика — и клиента, и ассистента — отправляется на сервер и появляется в Google Sheets отдельной строкой. Менеджер видит, о чём спрашивал человек, ещё до звонка.

  • Ответ без ожидания Типовые вопросы закрывает ИИ, остальные уходят менеджеру вместе с контактами.
  • Полная история в таблице Дата, вопрос, ответ, имя, телефон, страница — всё сохраняется само, без копипаста.
  • Заявка с контекстом Форма рядом с чатом прикрепляет переписку к заявке — звонок начинается не с нуля.
Алиса отвечает сразу
Здравствуйте! Я Алиса — помощник на сайте. Спросите про стоимость, сроки или документы — отвечу сразу. Если нужен живой человек, оставьте имя и телефон рядом с чатом.

Вся переписка сохраняется в вашей таблице. Ничего не вводите, если не хотите оставить заявку.

Оставьте контакты

Менеджер перезвонит и ответит на вопросы, которые ИИ не закрыл. К заявке автоматически прикрепляется наш разговор.

Подключение через Make

Make берёт на себя всю посредническую работу: принимает реплику из чата, спрашивает ИИ, записывает обе стороны диалога в таблицу и отдаёт ответ обратно. Сценарий собирается один раз и больше не требует правок в коде страницы. Ниже — вариант с собственным API-ключом Яндекс Cloud: ключ хранится в Make, на странице его нет, поэтому его можно спокойно ротировать. Первые три шага — с нуля: облако, биллинг и ключ.

  1. Облако и папка — создаём с нуля

    Откройте console.cloud.yandex.ru и войдите тем же Яндекс ID, который будете использовать дальше. Сразу выберите организацию в правом верхнем углу — от неё зависит, кому будут привязаны ключ и счёт.

    Новая консоль (рекомендуется): кнопка «Каталог» в левом верхнем углу → «Создать» → в поиске типов ресурсов наберите «Каталог» → «Создать каталог» → впишите название, например Сайт-чат → «Создать каталог». Каталог — это корзина ресурсов, внутри неё появится папка с тем же именем.

    Классическая консоль: «Каталог» → «Создать каталог» → заполните имя и тип ресурса «Папка» → «Создать».

    Готовый результат: в каталоге есть папка Сайт-чат. Дальше всё создаётся уже внутри неё.

  2. Биллинг — без него моделям не отвечают

    Это главный стоп, и ошибка выглядит обманчиво: ключ верный, а модель отвечает 403. Бесплатного пробного периода у YandexGPT нет, оплата — по факту, поэтому платёжный аккаунт обязателен с первого дня.

    В новой консоли: откройте папку Сайт-чат → «Добавить платёжный аккаунт» → «Создать» → заполните реквизиты (для физлица — паспорт, для юрлица — ИНН и КПП) → привяжите банковскую карту → «Создать». В классической консоли: «Менеджер облака» → «Биллинг» → «Создать платёжный аккаунт» или «Привязать существующий».

    Теперь свяжите аккаунт именно с папкой: откройте папку → «Добавить платёжный аккаунт» → выберите только что созданный. В карточке папки в колонке «Платёжный аккаунт» должно появиться имя аккаунта со статусом «Активен».

    Сразу поставьте лимит расходов — это страховка от непреднамеренного перерасхода: «Биллинг» → «Настроить лимиты» → месячный предел, например 500 ₽. Упираетесь в лимит — запросы начинают получать 403 или 429, но деньги дальше не списываются.

  3. API-ключ и проверка запросом

    В новой консоли: «Каталог» → папка Сайт-чат → в правом верхнем углу «IAM и управление» → «API-ключи» → «Создать» → впишите имя, например «Сайт-чат» → «Создать». Ключ покажут один раз — сразу скопируйте в менеджер паролей. В классической консоли путь тот же, через меню слева.

    Ключ — длинная строка вида AQVN…. Он даёт доступ и к моделям, и к биллингу облака, поэтому в код страницы его не вставляют: он живёт только в Make.

    Проверьте ключ до сборки сценария — вставьте его в команду и выполните в терминале:

    curl https://api.yandex.cloud/ai-foundation-models/v1beta/completion \
      --header "Authorization: Bearer ВАШ_КЛЮЧ" \
      --header "Content-Type: application/json" \
      --data '{
        "model": "yandexgpt/latest",
        "messages": [{"role": "user", "content": "Привет"}]
      }'

    В ответе должно прийти поле result.alternatives[0].message.content с текстом. Если ответ другой — разбирайтесь по коду: 401 — ключ скопирован с ошибкой или отозван; 403 — не активен биллинг или ключ не привязан к папке; 404 с упоминанием модели — сервис Foundation Models ещё активируется, подождите пару минут; 429 — упёрлись в квоту запросов в минуту.

    Альтернатива — сервисный аккаунт: «IAM и управление» → «Сервисные аккаунты» → создать → «Создать ключ» → скачается JSON-файл. Такой ключ не подставляется прямо в заголовок Authorization, поэтому для нашей схемы обычный API-ключ удобнее.

  4. Сделайте таблицу для диалогов

    Google Sheets → «Создать» → пустая таблица. Переименуйте вкладку в Диалоги. В первой строке оставьте заголовки: Дата, Роль, Сообщение, Имя, Телефон, Email, Сессия, Страница — по ним Make будет раскладывать поля. Если заголовков не будет, модуль Add a row создаст их сам при первой записи.

  5. Соберите сценарий в Make

    Make → «Create scenario». Первый модуль — Webhooks → Custom webhook. Откройте «Edit webhook» и скопируйте адрес вида https://hook.us1.make.com/xxxx — он понадобится в шаге про вписывание адреса. Сценарий держите включённым (переключатель Active вверху страницы): у выключенного сценария нет ответа, и чат покажет запасную фразу.

  6. Модуль 1: сохраните вопрос клиента

    Добавьте Google Sheets → Add a row, подключите свою таблицу и вкладку «Диалоги». Расставьте поля: Дата ← date, Роль ← впишите текстом Пользователь, Сообщение ← message, Имя ← name, Телефон ← phone, Email ← email, Сессия ← session, Страница ← page.

  7. Модуль 2: ответ YandexGPT по вашему ключу

    Добавьте модуль HTTP → Make a request — он работает с любым API-ключом и не зависит от того, есть ли в вашем Make готовый коннектор Яндекса.

    Method — POST. URL — https://api.yandex.cloud/ai-foundation-models/v1beta/completion. Заголовки: Authorization со значением Bearer ваш_ключ (префикс Bearer обязателен, с пробелом) и Content-Type со значением application/json. Включите «Parse response» — тогда ответ сразу разложится по полям, и путь к тексту будет result.alternatives[0].message.content. Body — тип Raw (или JSON), вот такой:

    {
      "model": "yandexgpt/latest",
      "temperature": 0.3,
      "max_tokens": 800,
      "messages": [
        {"role": "user", "content": "{{system}}\n\nИстория диалога:\n{{history}}\n\nНовый вопрос: {{message}}"}
      ]
    }

    Поля в двойных скобках подставятся из вебхука автоматически: {{message}} — новый вопрос клиента, {{history}} — предыдущие реплики, {{system}} — инструкция из атрибута блока.

    Важный нюанс YandexGPT: роли system у модели нет — только user и assistant. Поэтому инструкция вставляется в начало сообщения пользователя, как в примере, иначе будет ошибка про неизвестную роль. Температура 0.3 и max_tokens 800 держат одну реплику клиента в копейках.

    Альтернатива: если в вашем Make есть готовый модуль YandexGPT — в его настройках подключения выберите API-ключ и вставьте тот же ключ, а Body оставьте в виде массива сообщений. Ответ тогда тоже придёт по пути result.alternatives[0].message.content.

  8. Модуль 3: сохраните ответ ассистента

    Ещё один модуль Google Sheets → Add a row в ту же таблицу. Роль — снова текстом Ассистент, Сообщение ← путь result.alternatives[0].message.content из модуля YandexGPT. Имя, Телефон, Email, Сессия и Страница — те же поля, что и в первом модуле. На один вопрос получается две строки.

    Если «Parse response» в HTTP-модуле выключен, текст ответа лежит в поле body как одна строка JSON. В этом случае между модулями поставьте Tools → Parse JSON и укажите в поле данных {{3.body}} — дальше путь будет тот же, result.alternatives[0].message.content.

  9. Модуль 4: верните ответ в чат

    Финальный модуль — Webhooks → Respond to the webhook. Content type: JSON, Body: {"reply":"{{3.result.alternatives[0].message.content}}"} — номер подставьте свой, YandexGPT это третий модуль. И обязательно добавьте заголовок Access-Control-Allow-Origin со значением * — без него браузер не отдаст ответ странице, и в чате появится сообщение о недоступности сервиса.

  10. Впишите адрес в блок с чатом

    Откройте страницу в Тильде → блок с чатом → «Контент» (редактор HTML). В атрибуте data-ai-endpoint вставьте скопированный адрес вебхука и поставьте data-log-mode="ai" — это скажет блоку, что строки пишет сценарий и отправлять их повторно не нужно. Там же меняются data-assistant-name и data-assistant-prompt — инструкция для YandexGPT, которая подставляется в каждый запрос. Сохраните и опубликуйте страницу.

  11. Проверьте связку

    Напишите в чат любой вопрос. Должны произойти три вещи: в чате появится ответ, в таблице — две новые строки (вопрос и ответ), а в Make под схемой — отметка об успешном прогоне. Если что-то пошло не так, откройте Run history сценария: там видно, на каком модуле он остановился и с каким ответом.

Схема сценария

  1. 1Webhooks → Custom webhook — принимает реплику из чата
  2. 2Google Sheets → Add a row — сохраняет вопрос клиента
  3. 3HTTP → YandexGPT — готовит ответ по вашему API-ключу
  4. 4Google Sheets → Add a row — сохраняет ответ ассистента
  5. 5Webhooks → Respond to the webhook — отдаёт JSON обратно в чат

Что попадает в таблицу

Поле Пример
Дата2025-06-11 14:32:07
РольПользователь / Ассистент
СообщениеСколько стоит?
Имяиз формы заявки
Телефониз формы заявки
Emailиз формы заявки
Сессияидентификатор диалога
Страницаоткуда пришёл клиент

На один вопрос — две строки: с репликой клиента и с ответом ассистента.

Путь с нуля — коротко

  • console.cloud.yandex.ru → «Каталог» → «Создать» → каталог с названием проекта.
  • Внутри каталога создайте папку — в классической консоли тип ресурса «Папка».
  • Папка → «Добавить платёжный аккаунт» → реквизиты → привязать карту.
  • Там же включите лимит расходов — страховка от перерасхода.
  • Папка → «IAM и управление» → «API-ключи» → «Создать» → скопировать ключ.
  • Проверить ключ curl-запросом из третьего шага.

Деньги, квоты и лимиты

  • Пробного периода нет: оплата по факту, платёжный аккаунт нужен сразу.
  • Расход смотрите в «Биллинг» → «Детализация операций» — данные обновляются раз в сутки.
  • Один диалог — примерно 1,5–3 тыс. токенов: вопрос, история переписки и ответ. Десяток таких диалогов в день уже заметен в счёте.
  • У моделей есть квота запросов в минуту. Поднять её: консоль → AI Foundation Models → «Квоты».
  • Лимит расходов на папку задаётся в «Биллинг» → «Настроить лимиты». Упёрлись в него — приходят отказы вместо денег.
  • Дешёвая страховка: max_tokens 600 и модель lite для типовых вопросов.

Как получить API-ключ — коротко

  • console.cloud.yandex.ru → «Каталог» → облако и папка с названием проекта.
  • «Менеджер облака» → «Биллинг» → привязать платёжный способ. Без биллинга Foundation Models не отвечает.
  • «IAM и управление» → «API-ключи» → «Создать» → назвать ключ → скопировать строку AQVN…
  • Проверить curl-запросом из первого шага: в ответе должно быть result.alternatives[0].message.content.
  • Ключ вставить только в Make — в заголовке Authorization модуля HTTP. На странице и в HTML-коде его быть не должно.
  • Дальше срок службы ключа — по дефолту бессрочный. Перевыпустить его можно в том же разделе, старый перестанет работать сразу.

Формат запроса и ответа

Запрос из чата приходит в Make методом POST в формате form-encoded. Поля: message, history, system, session, name, phone, email, page, date, assistant. Ответ в чат — JSON с ключом reply:

{ "reply": "Конечно, напишите цифру бюджета — подберу формат." }

Сам YandexGPT отвечает так — блок умеет разбирать и этот формат тоже:

{
  "result": {
    "alternatives": [
      {"message": {"role": "assistant", "content": "Конечно, напишите цифру бюджета."}}
    ],
    "usage": {"total_tokens": 214}
  }
}

Какую модель взять

Модель Когда подходит
yandexgpt/lite Быстро и дёшево: типовые вопросы, короткие ответы. С неё удобно начинать тест.
yandexgpt/latest Баланс качества и цены — оптимально для ассистента на сайте.
yandexgpt/pro Максимальная точность: сложные заявки и длинные рассуждения, но токены дороже.

Расход токенов видно в кабинете Яндекс Cloud. Низкая температура и max_tokens 600–800 удерживают одну реплику клиента в копейках.

Один сценарий или два

Схема Что вписать в блок
Один сценарий: ИИ и запись в таблицу — рекомендуется data-ai-endpoint = адрес вебхука,
data-log-mode = ai
Два сценария: отдельно лог, отдельно ИИ data-ai-endpoint = адрес вебхука с ИИ,
data-log-endpoint = адрес вебхука лога
Без Make: только приёмники Тильды — CRM, почта, Telegram data-ai-endpoint = адрес ИИ-сервиса,
data-log-mode = auto

Если ответ не приходит

  • Ключ вставлен целиком, без кавычек и лишних пробелов, а перед ним стоит Bearer с пробелом.
  • Платёжный аккаунт создан и привязан именно к этой папке — иначе 403 при верном ключе.
  • Биллинг в Яндекс Cloud включён — иначе любой запрос к модели возвращает 403.
  • Ошибка 401 — ключ неверный или отозван; 403 — нет прав, не активен биллинг; 429 — упёрлись в лимит расходов или квоту запросов.
  • Сценарий переведён в режим Active, а не Draft.
  • Модуль Respond to the webhook стоит последним и не спрятан в ветку с ошибкой.
  • Добавлен заголовок Access-Control-Allow-Origin со значением *.
  • В ответе ключ называется именно reply, с маленькой буквы.
  • Ответ YandexGPT берётся по пути result.alternatives[0].message.content — если написать путь чуть иначе, в таблицу попадёт пустая ячейка.
  • Ошибка про роль system — инструкция уже вставлена в текст сообщения пользователя, отдельную роль добавлять не нужно.
  • Закончился лимит токенов или денежный лимит в Яндекс Cloud — уменьшите max_tokens или переключитесь на yandexgpt/lite.
  • В Run history поля message и history пришли пустыми — проверьте, что страница опубликована после вставки адреса.
  • Не исчерпан лимит операций в тарифе Make.

Пока сценарий не собран

Чат работает и без Make: отвечает встроенный сценарий по ключевым словам — цены, сроки, документы, оплата, контакты. Как только адрес вебхука вписан в блок, ответы приходят настоящие, а каждая реплика ложится в таблицу двумя строками.