# Make Agent Fast documentation (ru)
---
# Документация
Source: /ru/docs.md
Make Agent Fast даёт вам единое место, чтобы создать клиентского агента, подключить его знания и встречать клиентов на сайте, который у вас уже есть, и в каналах, которыми они уже пользуются.
Клиентский агент для вашей компании — на вашей странице и в ваших каналах сообщений — отвечает только на то, что вы утвердили, а остальное передаёт человеку.
## Начните здесь [#начните-здесь]
Выберите путь в зависимости от того, что хотите запустить первым.
## Базовый процесс [#базовый-процесс]
Вставьте URL вашего сайта. Мы просканируем его и подготовим черновик агента. Ничего не запускается без вашего утверждения.
Поговорите с агентом, прогоните самопроверку, затем выберите
**Утвердить и опубликовать**
.
Добавьте встраивание на ваш существующий сайт или подключите канал сообщений.
Добавляйте знания, настраивайте внешний вид и просматривайте диалоги и заявки.
Каждая страница доступна как Markdown. Откройте меню действий страницы, чтобы скопировать или скачать её, или отправьте её канонический Markdown URL в ChatGPT или Claude. Полный машиночитаемый корпус доступен на [/docs/llms-full.txt](/docs/llms-full.txt).
## Что можно создать [#что-можно-создать]
## Получите помощь [#получите-помощь]
Если гайд не ответил на ваш вопрос, используйте элемент обратной связи внизу страницы или обратитесь в поддержку из панели управления. О лимитах продукта и оплате читайте в [Тарифах и ценах](/ru/docs/account/pricing).
---
# Журнал изменений
Source: /ru/docs/account/changelog.md
{/* docs-visuals */}
## 2026-08-27 [#2026-08-27]
* Задокументирован запуск URL-в-агента: ожидание генерации, Проверка и публикация, Утвердить и опубликовать, и активация на первом чате посетителя или заявке.
* Задокументированы внешний вид **Как на сайте** против Светлой/Тёмной и то, что сохранение внешнего вида обновляет живое встраивание (и оставшиеся размещённые страницы) без повторной публикации.
* Выровнены сниппеты встраивания с живыми атрибутами `embed.js` и `?v=` бустером кэша панели.
* Задокументирован живой разговор на тестировщике платформы против опубликованного сайта и встраивания.
* Удалены собственные домены / покупка домена / настройки поддомена как продукт. Встройте агента на существующий сайт клиента. Оставшиеся события дополнения доменов Polar остаются игнорируемыми или отменяемыми.
## 2026-07-28 [#2026-07-28]
* Упрощена история использования: показывает финальные потреблённые кредиты вместо отдельных строк резерва и возврата; крошечное использование теперь отображается как `<0.001`.
* Углы выделения меню действий документации адаптируются к многострочному содержимому, сохраняя совпадающую геометрию триггера и оболочки меню.
* Расширены английские, корейские и узбекские гайды по оплате живых звонков, вводу медиа визуального конструктора, изменениям размещённых поддоменов, контролям приватности/безопасности аккаунта и ленте событий Уведомлений.
## 2026-07-15 [#2026-07-15]
* Представлена двуязычная документационная платформа Make Agent Fast.
* Добавлены постраничный Markdown, скачивания, поиск, действия ChatGPT и Claude.
* Добавлены `/docs/llms.txt`, `/docs/llms-full.txt` и канонические маршруты `.md`.
* Задокументированы публичный API, контракт SDK, вебхуки, встраивания, коннекторы, операции, цены, безопасность и приватность.
* Добавлены гайды по реализации для основных фреймворков и конструкторов сайтов.
## Политика версионирования [#политика-версионирования]
Исправления документации и добавочные поля API могут выходить непрерывно. Ломающие изменения публичного API требуют нового мажорного пути или задокументированного периода миграции.
---
# Тарифы и цены
Source: /ru/docs/account/pricing.md
{/* docs-visuals */}
## Сравнение тарифов [#сравнение-тарифов]
| Тариф | Месячная оплата | Годовой итог | Кредиты в месяц | Агенты | Живой голос | Клоны голоса | Значок брендинга |
| ------- | --------------: | -----------: | --------------: | ------------------------------: | ----------: | -------------------------------: | ---------------- |
| Launch | $15/мес | $144/год | 1000 | 1 | Не включён | Не включён | Обязателен |
| Operate | $35/мес | $336/год | 3000 | 3 | 30 мин/мес | 1 | Снимаемый |
| Scale | $79/мес | $758/год | 8000 | Безлимит, честное использование | 90 мин/мес | Несколько, честное использование | Снимаемый |
Годовая оплата на 20% ниже оплаты месячной цены двенадцать раз. Launch и Operate начинаются с семидневного бесплатного пробного периода без кредитной карты; добавьте карту после дня 7, чтобы агент оставался активным. Scale начинает оплату немедленно и не имеет пробного периода. Когда карта нужна, оплата показывает точную цену, период продления, налог и условия перед покупкой.
Launch — это работающий встроенный агент на этой неделе. Operate — шаг вверх, когда клиенты реально говорят — живой голос, более полный виджет и каналы сообщений. Scale — полная студия: каждый элемент внешнего вида, роли команды и ваши собственные ключи провайдеров.
## Лестница функций [#лестница-функций]
| Возможность | Launch | Operate | Scale |
| ------------------- | --------------------------------- | ------------------------------------------------- | --------------------------------------------------- |
| Агенты | 1 | 3 | Безлимит, честное использование |
| Студия виджета | Акцент, позиция, светлая/тёмная | + метка загрузчика, пресеты, дополнительные цвета | Каждый элемент (радиус, тень, рамка, шрифт, стекло) |
| Языки агента | 1 | 2 | 4 |
| Приём знаний | Вставка, URL, файлы | + YouTube, подкаст, RSS | Как в Operate |
| Каналы сообщений | Существующие подключения работают | Новые подключения | Новые подключения |
| Свои ключи | Существующие ключи работают | Существующие ключи работают | Сохранение новых ключей |
| Приглашения команды | Существующие участники остаются | Существующие участники остаются | Новые приглашения с ролями |
Мы не продаём и не привязываем домены клиентов. Встройте агента на сайт, который у вас уже есть.
## Включено в каждый тариф [#включено-в-каждый-тариф]
Все текущие тарифы включают:
* Встраивание на сайт, который у вас уже есть (`embed.js` + `data-agent`).
* Текстовый чат, голосовые сообщения, стандартные голоса, поиск знаний, структурированные FAQ/товары и сбор заявок.
* Встраивание на сайт с точными контролями origin.
* Доступ к публичному API с ключами с областями, OAuth для проверенных приложений, OpenAPI и лимиты частоты по тарифу.
* Аналитику, диалоги, отслеживание использования и возможность покупать пакеты кредитов.
Лимит публичного API Launch — 120 запросов на ключ API в минуту, Operate — 600, Scale — 1 800. Эти лимиты запросов не заменяют права на ресурсы, проверки кредитов, идемпотентность или специфичные для провайдера лимиты. См. [Лимиты частоты](/ru/docs/api/rate-limits).
## Поймите кредиты [#поймите-кредиты]
Кредиты оплачивают учитываемую работу ИИ вроде генерации, ходов агента, эмбеддингов знаний, транскрибации, синтеза речи и клонирования. Это не фиксированное число сообщений: провайдер, модель, длина ввода/вывода, длительность медиа и тип операции меняют стоимость.
Ежемесячные кредиты тарифа пополняются каждый расчётный период. Неиспользованный ежемесячный лимит переносится на один дополнительный цикл, затем истекает. Купленные кредиты пополнения не истекают при активной подписке. Положительный баланс кредитов не разблокирует функцию только для тарифа вроде живых звонков, дополнительных сайтов, клонирования или удаления значка.
Ключи «принеси свой провайдер» могут создавать отдельные списания от OpenAI, Anthropic, Google, Deepgram или ElevenLabs. Сохранение нового ключа только для Scale; уже хранимые ключи продолжают работать. BYOK не конвертирует счета провайдеров в кредиты Make Agent Fast и не устраняет проверки прав платформы. См. [Ключи AI-провайдеров](/ru/docs/account/provider-keys).
## Права на голос [#права-на-голос]
Голосовые сообщения включены во все тарифы, но их транскрибация, модель и работа речи могут расходовать кредиты. Живой голос реального времени использует отдельный ежемесячный лимит минут: ноль на Launch, 30 минут на Operate и 90 минут на Scale.
Клонирование голоса только для Operate/Scale. Operate включает один клон рабочего пространства; Scale поддерживает несколько при честном использовании. Повторное клонирование сайта, уже владеющего клоном, заменяет его вместо расходования нового слота. Клонирование также требует явного согласия, доступности провайдера и достаточных кредитов для операции.
## Агенты и брендинг [#агенты-и-брендинг]
Launch поддерживает одного клиентского агента, Operate — до трёх. Описание безлимитных агентов Scale подчинено честному использованию, а не приглашению создавать злоупотребляющий или автоматизированный объём арендаторов. Агент включает свои знания, конфигурацию встраивания, коннекторы, аналитику и данные диалогов. Оставшиеся размещённые демо-страницы по-прежнему открываются на поддоменах; новые агенты не получают размещённую маркетинговую страницу.
Реферальный значок «Made with Make Agent Fast» остаётся на Launch. Владельцы Operate и Scale могут убрать его с имеющих право опубликованных сайтов.
## Пакеты кредитов [#пакеты-кредитов]
| Покупка | Цена | Что меняет |
| ------------- | ---------: | ----------------------------------------------------- |
| Малый пакет | $8 разово | Добавляет 1000 кредитов, не истекающих при подписке |
| Средний пакет | $35 разово | Добавляет 5000 кредитов, не истекающих при подписке |
| Большой пакет | $90 разово | Добавляет 15 000 кредитов, не истекающих при подписке |
Пополнения добавляют только ёмкость использования. Они не увеличивают число сайтов, лимиты запросов API, живые минуты, число клонов или разрешения брендинга.
## Пробные периоды, продление и отмена [#пробные-периоды-продление-и-отмена]
Бесплатный пробный период Launch/Operate не конвертируется автоматически: на день 7 агент приостанавливается, пока вы не добавите карту. После того как карта в файле, отмена или неудачное продление может убрать активный доступ после применимого перехода периода/статуса провайдера. Встраивания, коннекторы, клиенты API и голосовые звонки могут остановиться, хотя хранимые данные рабочего пространства остаются.
## Выберите тариф [#выберите-тариф]
* Выберите **Launch** для одного встроенного агента с текстом, голосовыми сообщениями и базовым виджетом.
* Выберите **Operate**, когда клиенты начинают говорить: живые звонки, каналы сообщений, пользовательский виджет, два языка или удаление значка.
* Выберите **Scale**, когда несколько агентов в продакшене: каждый элемент виджета, четыре языка, роли команды и ваши собственные ключи API.
Оценивайте по реальным приёмочным тестам, а не только по числу сообщений. Опубликуйте одного репрезентативного агента, измерьте использование текста/голоса/знаний, затем спроецируйте трафик и добавьте запас на повторы, коннекторы, автоматизацию и пики запуска.
## Источник истины по оплате [#источник-истины-по-оплате]
Живая оплата и панель оплаты — источник истины для конкретной покупки. Налоги, представление валюты, способы оплаты, право на пробный период и формулировки провайдера могут меняться по локации и состоянию аккаунта. Если оплата отличается от этой страницы, остановитесь и используйте условия оплаты или обратитесь в поддержку перед оплатой.
---
# Приватность и данные
Source: /ru/docs/account/privacy.md
{/* docs-visuals */}
Владелец сайта решает, какие знания, вводы посетителей и интеграции используются для его опыта. Make Agent Fast обрабатывает данные платформы для предоставления сервиса согласно применимым условиям и уведомлению о приватности.
## Уведомление посетителей [#уведомление-посетителей]
Объясняйте использование ИИ, запись, сбор заявок, аналитику и продолжение языком, подходящим опыту и местным требованиям. Не просите агента собирать данные, которые вам не нужны.
## Жизненный цикл данных [#жизненный-цикл-данных]
Удаление источника влияет на будущий поиск. Удаление учётных данных останавливает авторизованный доступ. Исторические диалоги, экспорты, данные внешних каналов и записи провайдеров могут иметь отдельное поведение хранения.
## Контроли владельца [#контроли-владельца]
Страница **Аналитика** сайта может экспортировать собранные заявки как JSON и удалять отдельную заявку. Отчёты аналитики также могут экспортироваться как Markdown, Excel или вид печати/PDF. Экспорт создаёт новую копию под вашим контролем; удаление записи платформы не стирает более раннюю загрузку, связанный диалог, запись внешнего провайдера или данные, удерживаемые по законному требованию.
Используйте **Настройки аккаунта**, чтобы выйти со всех устройств или навсегда удалить аккаунт. Удаление аккаунта сначала пытается остановить подписку платформы, оставшиеся подписки дополнения доменов Polar и ресурсы коннекторов, затем удаляет сайты, агентов, знания, диалоги, заявки, учётные данные API/OAuth, сессии и локально хранимую историю оплаты аккаунта. Если внешняя оплата не может быть подтверждена остановленной, удаление отказывает и оставляет аккаунт нетронутым для безопасного повтора или проверки поддержкой.
## Запросы [#запросы]
Используйте самообслуживаемые контроли там, где они совпадают с запросом. Для более широкого запроса доступа, исправления, экспорта или удаления используйте поддержку аккаунта и процесс, описанный в текущей Политике приватности. Проверяйте личность запрашивающего перед раскрытием данных аккаунта и включайте нижестоящие экспорты и внешних провайдеров в план ответа.
---
# Ключи AI-провайдеров
Source: /ru/docs/account/provider-keys.md
{/* docs-visuals */}
«Принеси свой ключ» (BYOK) позволяет поддерживаемым запросам ИИ использовать ваш аккаунт у AI-провайдера. Сохранение **нового** ключа требует Scale. Уже хранимые ключи продолжают работать на Launch и Operate. Вы по-прежнему платите тариф Make Agent Fast плюс фиксированную комиссию платформы за действие; провайдер выставляет использование модели напрямую вам.
## Поддерживаемые провайдеры [#поддерживаемые-провайдеры]
| Провайдер | Используется для | Создать или проверить ключ |
| ------------- | ------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- |
| Anthropic | Генерация текста агента | [Документация Anthropic API](https://docs.anthropic.com/en/api/getting-started) |
| OpenAI | Генерация текста агента и настроенные режимы речи | [Быстрый старт OpenAI API](https://platform.openai.com/docs/quickstart/make-your-first-api-request) |
| Google Gemini | Генерация текста агента и настроенный режим реального времени | [Ключи Gemini API](https://ai.google.dev/gemini-api/docs/api-key) |
| Deepgram | Речь-в-текст, когда Deepgram — настроенный провайдер STT | [Ключи Deepgram API](https://developers.deepgram.com/docs/create-additional-api-keys) |
| ElevenLabs | Синтез речи и клонирование голоса, когда настроен ElevenLabs | [Аутентификация ElevenLabs](https://elevenlabs.io/docs/api-reference/authentication) |
Доступность провайдера также зависит от настроенных провайдеров текста, речи, реального времени и клонирования платформы. Сохранение валидного ключа не заставляет каждую функцию использовать этого провайдера.
Ключ провайдера авторизует списания и вызовы модели у внешнего AI-провайдера. Ключ `maf_live_...` авторизует ваше ПО вызывать публичный API Make Agent Fast. Никогда не вставляйте один в поле другого.
## Добавьте ключ провайдера [#добавьте-ключ-провайдера]
1. Создайте ограниченный ключ в консоли провайдера и включите оплату или квоту провайдера, если требуется.
2. Откройте **Панель → Настройки → Ключи AI-провайдеров**.
3. Выберите подходящего провайдера и добавьте метку, идентифицирующую его проект или окружение.
4. Вставьте ключ и сохраните его.
5. Дождитесь результата проверки, затем протестируйте функцию, использующую провайдера.
Make Agent Fast выполняет живой запрос проверки перед пометкой ключа активным. Ключ не должен содержать пробелов или переносов строк и должен быть от 16 до 512 символов. Ключи Anthropic должны начинаться с `sk-ant-`; ключи OpenAI — с `sk-`. У других провайдеров нет стабильного публичного префикса, поэтому живая проверка авторитетна.
Сохранение другого ключа для того же провайдера заменяет предыдущее хранимое значение. Панель сохраняет только безопасные идентификационные данные вроде метки, последних четырёх символов, времени проверки и состояния.
## Как работает выбор текстового провайдера [#как-работает-выбор-текстового-провайдера]
Для генерации текста Make Agent Fast сначала ищет активный ключ BYOK, совпадающий с настроенным текстовым провайдером платформы. Если его нет, проверяет активные ключи Anthropic, OpenAI и Gemini в этом порядке. Если подходящего ключа BYOK нет, использует провайдера платформы, когда тариф и развёртывание позволяют.
Ключи речи специфичны для провайдера. Ключ Deepgram используется только когда активный провайдер речи-в-текст — Deepgram; ключ ElevenLabs используется только когда синтез речи или клонирование настроены для ElevenLabs.
Ключи BYOK сейчас не заменяют учётные данные эмбеддинга знаний платформы. Приём и поиск знаний продолжают использовать настроенного провайдера эмбеддингов развёртывания.
## Оплата и кредиты [#оплата-и-кредиты]
* Внешний провайдер списывает использование с аккаунта, выдавшего ключ.
* Make Agent Fast по-прежнему списывает часть подписки и инфраструктуры поддерживаемой работы BYOK.
* Текстовые запросы BYOK обычно используют уменьшенный счётчик инфраструктуры вместо полного счётчика стоимости модели.
* Работа голоса может сохранять минимумы конвейера речи, потому что захват, транскрибация, синтез, доставка и оркестрация — отдельные стадии.
* Исчерпание квоты провайдера может отклонить запрос даже при оставшихся кредитах Make Agent Fast.
Проверяйте и **Использование и кредиты** в Make Agent Fast, и собственную панель использования провайдера.
## Состояния ключей и обработка сбоев [#состояния-ключей-и-обработка-сбоев]
| Состояние | Значение | Что делать |
| --------- | --------------------------------------------------- | ------------------------------------------------------------------------------------------ |
| `active` | Живая проверка успешна | Протестируйте целевую функцию и следите за использованием провайдера |
| `invalid` | Проверка не прошла или провайдер позже отклонил его | Проверьте оплату, ограничения, квоту и состояние отзыва провайдера; затем сохраните замену |
| `revoked` | Ключ отключён в Make Agent Fast | Создайте или активируйте замену, если функция должна продолжать использовать BYOK |
Если запрос не работает, потому что провайдер отклоняет учётные данные или квоту, Make Agent Fast может пометить хранимый ключ недействительным. Исправление ключа у провайдера не раскрывает и не переписывает хранимый секрет; сохраните рабочий ключ снова для повторной проверки.
## Ротируйте ключ провайдера [#ротируйте-ключ-провайдера]
1. Создайте новый ключ провайдера, не удаляя старый.
2. Сохраните новый ключ в Make Agent Fast и подтвердите, что он стал активным.
3. Протестируйте текстовый чат, голосовые сообщения или клонирование — что использует этого провайдера.
4. Отзовите старый ключ в консоли провайдера.
5. Проверьте логи провайдера на неожиданное использование старого ключа.
Если ключ раскрыт в системе контроля версий или браузерном коде, немедленно отзовите его у провайдера. Его удаление только из Make Agent Fast не останавливает другого держателя от прямого использования с провайдером.
---
# Безопасность
Source: /ru/docs/account/security.md
{/* docs-visuals */}
## Доступ к аккаунту [#доступ-к-аккаунту]
Используйте уникальный пароль, защищайте почтовый аккаунт для восстановления, завершайте сессии, которые не узнаёте, и ограничивайте доступ к продакшен-сайтам.
Подтвердите электронный адрес аккаунта по ссылке, отправленной после регистрации. Аккаунты с паролем могут использовать **Забыли пароль** на странице входа; успешный сброс отзывает существующие сессии. **Настройки аккаунта** могут менять локальный пароль, явно привязывать Google при включении и выходить со всех устройств. Аккаунты только с OAuth не имеют локального пароля для смены, и обычный вход никогда не привязывает молча новую идентичность.
## Секреты [#секреты]
Ключи API, токены коннекторов, секреты приложений, секреты вебхуков и ключи голосовых провайдеров — учётные данные. Храните их в утверждённом менеджере секретов, никогда в клиентском коде, и ротируйте после раскрытия.
## Минимальные права [#минимальные-права]
Выбирайте узкие области API, выделенные приложения внешних платформ, точные origin встраивания и отдельные ключи для отдельных систем. Удаляйте неиспользуемые учётные данные и интеграции.
## Контент и приватность [#контент-и-приватность]
Загружайте только данные, которые агенту разрешено использовать. Тестируйте отказы и пути эскалации и применяйте правила хранения к экспортам диалогов и заявок.
## Отчётность [#отчётность]
При сообщении о предполагаемой уязвимости включайте затронутый URL или компонент, влияние и шаги воспроизведения без доступа к данным других пользователей.
---
# Решение проблем
Source: /ru/docs/account/troubleshooting.md
{/* docs-visuals */}
## Начните с воспроизводимого случая [#начните-с-воспроизводимого-случая]
Перед изменением настроек зафиксируйте:
* Рабочее пространство/сайт, публичный маршрут или конечную точку API и точное время с часовым поясом.
* Ожидаемый результат и фактический результат.
* Браузер/устройство или канал внешнего провайдера.
* Затрагивает ли сбой предпросмотр владельца, оставшуюся размещённую демо-страницу, встраивание, коннектор и/или API.
* Безопасный текст статуса/ошибки, `x-request-id` ответа, последнюю ошибку коннектора или ID события доставки провайдера.
* Последнее известное рабочее время и наименьшее недавнее изменение.
Не включайте учётные данные API/провайдера/коннектора в открытом виде, секреты вебхуков, приватные данные клиентов, полные заголовки авторизации или ненужное содержимое диалогов.
## Изменения сайта не появляются [#изменения-сайта-не-появляются]
1. Убедитесь, что URL панели принадлежит нужному сайту и рабочему пространству.
2. Убедитесь, что действие сохранения сообщило об успехе.
3. Для текста страницы, знаний или характера опубликуйте текущее состояние снова из **Проверка и публикация**.
4. Для **Внешнего вида** (и значка брендинга) успешное сохранение уже обновляет живое встраивание — пропустите повторную публикацию и откройте приватное окно.
5. Откройте реальное встраивание (или оставшийся размещённый slug, если он у вас есть) в приватном окне.
6. Если устарел только социальный предпросмотр, используйте кэш/отладчик этой платформы.
Отмена публикации и редактирование — разные вещи. Подключённый коннектор сообщений может продолжать отвечать даже при выключенном встраивании.
## Ответ агента слабый или неверный [#ответ-агента-слабый-или-неверный]
Задайте идентичный вопрос в тестировщике владельца и новом публичном диалоге. Убедитесь, что релевантный источник знаний был проиндексирован, содержит явный ответ, актуален и не конфликтует с другим источником. Проверьте языковые правила/правила характера на границу, предотвращающую ответ.
Когда в источнике нет ответа, улучшите поведение запасного ответа/эскалации вместо инструктирования агента угадывать. Используйте [Источники знаний](/ru/docs/build/knowledge) для создания приёмочного набора прямой/перефразировка/граница.
## Загрузчик встраивания отсутствует или заблокирован [#загрузчик-встраивания-отсутствует-или-заблокирован]
Убедитесь, что сайт опубликован, встраивание включено, скрипт имеет точный slug сайта и финальный родительский origin браузера — включая схему, имя хоста и порт — в разрешённом списке. В DevTools изучите запрос `embed.js`, ошибки CSP, состояние менеджера согласия, запрос iframe и наличие одного корня `data-maf-embed`.
Если текст работает, а микрофон нет, проверьте HTTPS, разрешение браузера, разрешение iframe allow и Permissions Policy сайта. Следуйте полному [Обзору встраивания](/ru/docs/embed/overview) и [Безопасности и CSP](/ru/docs/embed/security).
## Голос не работает [#голос-не-работает]
Разделите сбоящий режим: голосовое сообщение, живой звонок, клон или голос коннектора. Работающий путь текста доказывает только ключ языковой модели.
Проверяйте ключи провайдеров транскрибации, TTS, реального времени и клонирования независимо; затем проверьте право тарифа, баланс кредитов, лимит живых минут, разрешение браузера, настроенные языки, лимиты образцов и согласие. Протестируйте короткую чистую запись перед исследованием длинного/шумного файла.
## Коннектор не получает сообщений [#коннектор-не-получает-сообщений]
Используйте гайд канала и сравните обе стороны. Убедитесь, что коннектор включён, учётные данные всё ещё проходят проверку, URL вебхука/взаимодействия/скилла провайдера актуален, требуемое событие/Страница/номер/блок подписаны, режим приложения включает тестового пользователя и публичная HTTPS доставка успешна.
Успех проверки вебхука не доказывает подписку на события во время работы или исходящие разрешения. Сравнивайте логи доставки провайдера с **Последним сообщением** и сохранённой ошибкой коннектора. Тестируйте текст перед голосом.
## Собственные домены не предлагаются [#собственные-домены-не-предлагаются]
Мы не продаём и не привязываем домены клиентов. Разместите агента на сайте, который у вас уже есть, через [встраивание](/ru/docs/embed/overview). Оставшиеся события дополнения доменов Polar игнорируются или отменяются и никогда не начисляют кредиты.
## Запрос API не работает [#запрос-api-не-работает]
Запишите метод, версионный путь, статус, стабильный код ошибки, `x-request-id` ответа и релевантные заголовки лимита частоты. Затем классифицируйте:
| Статус | Наиболее вероятное действие |
| ------ | ------------------------------------------------------------------------------------------------------- |
| `400` | Исправьте форму JSON/формы или детали валидации; не повторяйте без изменений |
| `401` | Используйте валидные неистёкшие/неотозванные учётные данные MAF; никогда не используйте ключ провайдера |
| `403` | Добавьте требуемую область или восстановите доступ к тарифу/ресурсу |
| `404` | Убедитесь, что ID принадлежит аутентифицированному рабочему пространству и путь правильный |
| `409` | Разрешите конфликт состояния или повторите тот же ключ идемпотентности/полезную нагрузку |
| `415` | Отправьте задокументированный тип контента |
| `429` | Соблюдайте заголовки `retry-after`/сброса с джиттером; не зацикливайтесь |
| `500` | Повторите безопасный/идемпотентный запрос и сохраните ID запроса/время |
Используйте [Учётные данные и токены](/ru/docs/api/credentials), [Области и ошибки](/ru/docs/api/scopes-errors) и [Лимиты частоты](/ru/docs/api/rate-limits). Никогда не решайте ошибку API перемещением серверных учётных данных в браузерный код.
## Оплата или использование выглядит неправильно [#оплата-или-использование-выглядит-неправильно]
Различайте доступ платформы, ежемесячные кредиты, купленные кредиты, число сайтов, живые минуты, слоты клонов, частоту API, каналы сообщений (Operate+) и BYOK/команду (Scale). Пополнение меняет только кредиты. Списания провайдера BYOK отделены от оплаты Make Agent Fast.
При неожиданном использовании изолируйте вероятный источник перед исследованием: отключите коннектор, отзовите ключ, удалите непредназначенный origin встраивания или остановите цикл повторов API. Сохраняйте диапазон времени и ID запросов/провайдеров без раскрытия секретов.
## Соберите безопасные детали для поддержки [#соберите-безопасные-детали-для-поддержки]
Если всё ещё заблокированы, используйте элемент обратной связи на наиболее релевантном гайде или обратитесь в поддержку из панели с:
* Идентификатором сайта/рабочего пространства и затронутой функцией.
* Точной временной меткой/часовым поясом и воспроизводимыми шагами.
* Ожидаемым и фактическим результатом.
* Публичным несекретным URL, когда релевантно.
* HTTP статусом, стабильным кодом ошибки, `x-request-id` или ID события провайдера.
* Отредактированным скриншотом или минимальной полезной нагрузкой с удалёнными секретами и персональными данными.
Укажите, что вы уже проверили. Это предотвращает повторные советы по настройке и проясняет границу сбоя.
---
# Аутентификация
Source: /ru/docs/api/authentication.md
{/* docs-visuals */}
Используйте ключ API для вашего собственного бэкенда или автоматизации. Используйте OAuth, когда ваше приложение просит других пользователей Make Agent Fast предоставить доступ. Оба типа учётных данных вызывают те же ресурсы `/api/v1` и подчиняются тем же областям, правам тарифа, изоляции арендаторов и лимитам частоты.
## Ключи API [#ключи-api]
Активный платный тариф требуется для создания и использования публичного ключа API.
1. Откройте **Панель → Настройки → Разработчик**.
2. Введите имя, идентифицирующее сервис и окружение, например `Production lead export`.
3. Выберите минимальные области, нужные сервису.
4. Выберите срок: 30 дней, 90 дней, один год или никогда.
5. Создайте ключ и немедленно скопируйте значение `maf_live_...`.
Make Agent Fast хранит хеш SHA-256 вместо восстанавливаемого открытого текста. Панель позже показывает безопасный префикс, области, срок, время последнего использования и состояние отзыва.
```http
Authorization: Bearer maf_live_...
```
Отправляйте заголовок из серверного кода:
```bash
curl --fail-with-body https://makeagent.fast/api/v1/me \
-H "Authorization: Bearer $MAF_API_KEY" \
-H "Accept: application/json"
```
Отсутствующие учётные данные возвращают `401 authentication_required`. Недействительные, истёкшие или отозванные ключи возвращают `401 invalid_api_key`. Ключ, чей аккаунт больше не имеет активного платного тарифа, возвращает `403 subscription_required`.
### Ротируйте или отзовите ключ [#ротируйте-или-отзовите-ключ]
Создайте замену перед отзывом старого ключа. Разверните замену, сделайте реальный запрос, проверьте его `x-request-id`, затем нажмите **Отозвать** на старом ключе. Отзыв мгновенен и не может быть отменён.
Области и срок нельзя расширить на существующем ключе. Создайте замену, чтобы изменение разрешений было явным.
## OAuth-приложения [#oauth-приложения]
OAuth — для ПО, подключающего аккаунты, принадлежащие другим пользователям Make Agent Fast. Он использует Authorization Code с PKCE (`S256`) и не выдаёт и не требует секрет клиента. ID клиента публичен; коды авторизации, токены доступа, токены обновления и верификатор PKCE чувствительны.
### 1. Зарегистрируйте приложение [#1-зарегистрируйте-приложение]
Откройте **Панель → Настройки → Разработчик → OAuth-приложения**. Добавьте:
* Имя приложения от 2 до 100 символов.
* От 1 до 10 точных URL перенаправления.
* Максимальные области, которые ваше приложение может запрашивать.
Продакшен URL перенаправления должны использовать HTTPS и не могут содержать учётные данные или фрагменты. Полный URI должен совпадать с зарегистрированным значением во время авторизации и обмена токенов. Недавно отправленные приложения имеют статус `pending`; авторизация работает только после того, как приложение проверено и помечено `approved`.
Владелец платформы проверяет ожидающие ID клиентов аудируемым процессом
`oauth:review`. Сохраните ID клиента, показанный после отправки; его статус
виден на странице Разработчика, и отклонённые приложения включают решение
проверки перед возможностью повторной отправки.
### 2. Сгенерируйте значения PKCE [#2-сгенерируйте-значения-pkce]
Генерируйте новый верификатор для каждой попытки авторизации и держите его в той же защищённой короткоживущей сессии, что и `state`.
```ts
import { createHash, randomBytes } from "node:crypto";
const verifier = randomBytes(48).toString("base64url");
const challenge = createHash("sha256").update(verifier).digest("base64url");
const state = randomBytes(24).toString("base64url");
```
Верификатор должен содержать 43–128 URL-безопасных символов PKCE. Принимается только `code_challenge_method=S256`.
### 3. Перенаправьте пользователя для согласия [#3-перенаправьте-пользователя-для-согласия]
```text
https://makeagent.fast/oauth/authorize
?client_id=maf_app_...
&redirect_uri=https%3A%2F%2Fapp.example.com%2Foauth%2Fcallback
&response_type=code
&scope=sites%3Aread%20leads%3Aread
&state=RANDOM_STATE
&code_challenge=PKCE_CHALLENGE
&code_challenge_method=S256
```
Пользователь входит, проверяет запрошенные области и разрешает или отказывает в доступе. При успехе Make Agent Fast перенаправляет на точный зарегистрированный URI с `code` и исходным `state`. При отказе отправляет `error=access_denied` и исходный `state`, когда он был предоставлен.
Отклоняйте обратный вызов, если `state` не совпадает точно со значением, сохранённым для этой браузерной сессии.
### 4. Обменяйте код авторизации [#4-обменяйте-код-авторизации]
Код авторизации истекает через 10 минут и может быть использован только один раз.
```bash
curl --fail-with-body https://makeagent.fast/api/oauth/token \
-X POST \
-H "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "grant_type=authorization_code" \
--data-urlencode "client_id=maf_app_..." \
--data-urlencode "code=$AUTHORIZATION_CODE" \
--data-urlencode "redirect_uri=https://app.example.com/oauth/callback" \
--data-urlencode "code_verifier=$PKCE_VERIFIER"
```
```json
{
"access_token": "maf_live_...",
"token_type": "Bearer",
"expires_in": 3600,
"refresh_token": "maf_refresh_...",
"scope": "sites:read leads:read"
}
```
Токен доступа длится один час. Токен обновления длится до 90 дней, если он не ротирован или отозван раньше.
### 5. Ротируйте токен обновления [#5-ротируйте-токен-обновления]
Каждое успешное обновление отзывает и отправленный токен обновления, и его предыдущий токен доступа, затем возвращает новую пару. Сохраняйте новую пару атомарно перед отбрасыванием состояния предыдущего ответа.
```bash
curl --fail-with-body https://makeagent.fast/api/oauth/token \
-X POST \
-H "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "grant_type=refresh_token" \
--data-urlencode "client_id=maf_app_..." \
--data-urlencode "refresh_token=$REFRESH_TOKEN"
```
Повторное использование кода авторизации или ротированного токена обновления возвращает `invalid_grant`. Конечная точка токенов OAuth возвращает ответы в стиле OAuth `{ "error", "error_description" }` вместо оболочки ошибок публичного API и разрешает 30 запросов токенов на клиента и вызывающего в минуту.
## Никогда не аутентифицируйте запросы управления в браузерном коде [#никогда-не-аутентифицируйте-запросы-управления-в-браузерном-коде]
Не помещайте секретный ключ API, токен доступа или токен обновления в клиентские компоненты React, статический JavaScript, мобильный веб, Webflow, Framer, Wix или Shopify Liquid. Используйте ваш аутентифицированный бэкенд. Публичное встраивание сайта использует несекретный slug сайта и разрешённый список origin, а не учётные данные управления API.
См. [Учётные данные и токены](/ru/docs/api/credentials), [Области и ошибки](/ru/docs/api/scopes-errors) и [Быстрый старт API](/ru/docs/api/quickstart).
---
# Учётные данные и токены
Source: /ru/docs/api/credentials.md
{/* docs-visuals */}
Make Agent Fast использует несколько типов учётных данных. Они не взаимозаменяемы. Перед копированием значения определите, какая система его выдала, какая система его получает и безопасно ли его раскрывать в браузере.
## Карта учётных данных [#карта-учётных-данных]
| Учётные данные | Создаются в | Используются | Секрет? | Типичный формат или значение |
| -------------------------------------- | -------------------------------------------------- | ----------------------------------- | ------- | ----------------------------------------------- |
| Slug опубликованного сайта | Панель сайта | Загрузчик встраивания сайта | Нет | `my-agent` |
| Ключ Make Agent Fast API | **Настройки → Разработчик** | Ваш бэкенд или автоматизация | Да | `maf_live_...` |
| ID клиента OAuth | **Настройки → Разработчик** | Приложение для нескольких аккаунтов | Нет | `maf_app_...` |
| Токен доступа OAuth | Конечная точка токенов OAuth | Бэкенд вашего приложения | Да | Токен Bearer, час жизни |
| Токен обновления OAuth | Конечная точка токенов OAuth | Ваше безопасное хранилище токенов | Да | `maf_refresh_...`, ротируется при использовании |
| Ключ AI-провайдера | Anthropic, OpenAI, Google, Deepgram или ElevenLabs | Бэкенд Make Agent Fast | Да | Специфичен для провайдера |
| Токен коннектора или секрет приложения | Telegram, Meta, Discord или Kakao | Сервис коннекторов Make Agent Fast | Да | Специфичен для провайдера |
| Секрет подписи вебхука | Создание конечной точки вебхука публичного API | Ваш приёмник вебхуков | Да | `whsec_...` |
Загрузчику встраивания нужны публичный slug сайта и разрешённый origin сайта. Никогда не добавляйте ключ Make Agent Fast API, ключ провайдера, токен коннектора или секрет вебхука в тег скрипта.
## Выберите правильный метод авторизации [#выберите-правильный-метод-авторизации]
Используйте **ключ Make Agent Fast API** для контролируемого вами сервера и одного аккаунта Make Agent Fast. Выбирайте только области, нужные этому серверу.
Используйте **OAuth Authorization Code с PKCE**, когда ваш продукт подключает аккаунты, принадлежащие другим пользователям Make Agent Fast. OAuth-приложения требуют проверки перед успешной продакшен-авторизацией.
Используйте **ключ AI-провайдера** только когда хотите, чтобы Make Agent Fast вызывал этого AI-провайдера с вашего аккаунта провайдера. Ключ провайдера не авторизует публичный API Make Agent Fast.
Используйте **учётные данные коннектора** только в соответствующей форме коннектора или запросе API коннектора. Токен бота Telegram не может авторизовать запросы Discord, Meta или Make Agent Fast API.
## Храните секреты безопасно [#храните-секреты-безопасно]
Для локальной разработки помещайте секреты в игнорируемый файл окружения или ваше окружение shell:
```bash
export MAF_API_KEY="maf_live_..."
```
Для развёртывания используйте зашифрованный менеджер секретов хостинг-провайдера. Не помещайте секреты в:
* Коммиты Git, описания задач, скриншоты, свойства аналитики или сообщения поддержки.
* `NEXT_PUBLIC_*`, `VITE_*` или другие переменные, встроенные в браузерный JavaScript.
* Webflow, Framer, Wix, Shopify Liquid, WordPress HTML или бандл мобильного веба.
* Строки запроса. URL обычно сохраняются в истории браузера, прокси и логах.
Делайте вызовы API через ваш аутентифицированный бэкенд. Браузер должен вызывать ваш бэкенд, а ваш бэкенд должен прикреплять секрет.
```ts
const response = await fetch("https://makeagent.fast/api/v1/sites", {
headers: { Authorization: `Bearer ${process.env.MAF_API_KEY}` },
});
```
## Правила одноразовых секретов [#правила-одноразовых-секретов]
Ключи API, секреты подписи вебхуков и новые выданные токены обновления OAuth должны копироваться при показе. Полное значение в открытом виде не может быть восстановлено позже. Если оно потеряно, создайте замену вместо просьбы поддержки раскрыть его.
Учётные данные AI-провайдеров и коннекторов шифруются перед хранением и не возвращаются через API списков. Панель может показывать метку, префикс, последние четыре символа, состояние проверки или время последнего использования, чтобы вы могли идентифицировать учётные данные без их раскрытия.
## Чек-лист ротации [#чек-лист-ротации]
1. Создайте замену с теми же минимальными областями или разрешениями провайдера.
2. Обновляйте одно развёртывание или приёмник за раз.
3. Проверьте, что реальный запрос успешен, и запишите его `x-request-id`.
4. Отзовите старые учётные данные.
5. Убедитесь, что старые запросы не работают с `401 invalid_api_key` или эквивалентом провайдера.
Для OAuth сохраняйте новый токен обновления, возвращаемый каждым ответом обновления, перед отбрасыванием предыдущего токена. Для ротации секрета вебхука запускайте старую и новую конечные точки параллельно, пока каждый производитель и приёмник не перейдёт на замену.
## Если секрет раскрыт [#если-секрет-раскрыт]
Отзовите или ротируйте его немедленно. Его удаление из последнего коммита Git недостаточно, потому что он может остаться в истории, кэшах, логах или форках. Проверьте активность и в Make Agent Fast, и у выдавшего провайдера, затем замените любые учётные данные, разделявшие то же место хранения или окружение развёртывания.
Продолжите с [Аутентификацией](/ru/docs/api/authentication), [Областями и ошибками](/ru/docs/api/scopes-errors) или [Ключами AI-провайдеров](/ru/docs/account/provider-keys).
---
# Обзор API
Source: /ru/docs/api/overview.md
{/* docs-visuals */}
Публичный API использует ресурсо-ориентированный JSON поверх HTTPS под `/api/v1`. Он доступен на платных тарифах и использует те же права на сайты, кредиты и функции, что и панель.
## Что можно автоматизировать [#что-можно-автоматизировать]
* Сайты и состояние публикации
* Конфигурация агентов, FAQ, товары и знания
* Диалоги, заявки, аналитика, уведомления и рассылки
* Создание заявок и согласие, воронки возможностей, результаты CRM и восстановление синхронизации
* Домены, коннекторы, монетизация, использование и информация аккаунта
* Подписанные подписки вебхуков для поддерживаемых событий
Чувствительные действия используют явные конечные точки действий вместо неограниченной мутации базы данных. Секреты коннекторов принимаются на запись, но никогда не возвращаются.
Это **API управления и синхронизации**. Он может создавать и обновлять заявки,
принимать их в воронку возможностей, импортировать результаты CRM с атрибуцией
источника выиграно/проиграно и повторять неудачные импорты результатов. Отправка
чата посетителя и ответ владельца остаются операциями виджета/панели; аналитика
и использование остаются только для чтения.
## Начните безопасно [#начните-безопасно]
Создайте ключ с областями в панели, вызовите конечную точку текущего аккаунта, затем стройте против тестового сайта перед касанием продакшен-контента.
```bash
curl https://makeagent.fast/api/v1/me \
-H "Authorization: Bearer maf_live_YOUR_KEY"
```
См. [Аутентификацию](/ru/docs/api/authentication), [Быстрый старт API](/ru/docs/api/quickstart) и [Справочник API](/ru/docs/api/reference).
---
# Быстрый старт API
Source: /ru/docs/api/quickstart.md
{/* docs-visuals */}
Этот быстрый старт проверяет, что бэкенд может аутентифицироваться и читать ваш аккаунт. Вам нужен активный платный тариф, терминал с `curl` и доступ к **Панель → Настройки → Разработчик**.
Текущий API v1 управляет и синхронизирует ресурсы. Это не транспорт
пользовательского чата: конечные точки диалогов и заявок только для чтения.
## 1. Создайте ключ с минимальными правами [#1-создайте-ключ-с-минимальными-правами]
Создайте ключ с именем `Local API quickstart`, выберите `account:read` и `sites:read` и выберите короткий срок. Скопируйте ключ в открытом виде немедленно; он не будет показан снова.
Не используйте ключ провайдера от OpenAI, Anthropic, Gemini, Deepgram или ElevenLabs. Публичный API требует ключ Make Agent Fast, начинающийся с `maf_live_`.
## 2. Сохраните его для этого терминала [#2-сохраните-его-для-этого-терминала]
```bash
export MAF_API_KEY="maf_live_..."
```
Подтвердите, что переменная существует, не печатая секрет:
```bash
test -n "$MAF_API_KEY" && echo "MAF_API_KEY is set"
```
Не коммитьте ключ в `.env`, примеры истории shell, тестовые фикстуры или браузерный бандл. Для развёрнутого кода используйте менеджер секретов хоста.
## 3. Изучите аккаунт [#3-изучите-аккаунт]
```bash
curl --fail-with-body --include https://makeagent.fast/api/v1/me \
-H "Authorization: Bearer $MAF_API_KEY" \
-H "Accept: application/json"
```
Ожидаемый статус: `200 OK`. Тело содержит `data.id`, информацию тарифа и прав и сводку кошелька. Ответ также содержит `x-request-id`; сохраняйте это значение при сообщении о неудачном запросе.
```json
{
"data": {
"id": "ACCOUNT_ID",
"email": "owner@example.com",
"plan": { "id": "pro", "status": "active" },
"entitlements": { "site_limit": 3, "live_voice": true },
"wallet": { "balance": 151 }
}
}
```
Поля могут добавляться без изменения пути `/v1`. Игнорируйте неизвестные поля вместо отклонения ответа.
## 4. Перечислите сайты [#4-перечислите-сайты]
```bash
curl --fail-with-body "https://makeagent.fast/api/v1/sites?limit=20" \
-H "Authorization: Bearer $MAF_API_KEY" \
-H "Accept: application/json"
```
Ответы коллекций используют эту оболочку:
```json
{
"data": [],
"has_more": false,
"next_cursor": null
}
```
Если `has_more` истинно, отправьте точное значение `next_cursor` как параметр запроса `cursor` следующего запроса. Не декодируйте и не конструируйте курсоры.
## 5. Обработайте структурированную ошибку [#5-обработайте-структурированную-ошибку]
Временно уберите заголовок Authorization и повторите `/me`. Ответ должен быть `401` со стабильным кодом:
```json
{
"error": {
"code": "authentication_required",
"message": "Provide an API key in the Authorization bearer header.",
"request_id": "6c0b2f2e-..."
}
}
```
Продакшен-код должен ветвиться на `error.code`, а не сравнивать `message`. Логируйте операцию, HTTP статус и ID запроса без логирования ключа.
## 6. Сделайте первую запись безопасно [#6-сделайте-первую-запись-безопасно]
Создайте отдельный ключ, который также имеет `sites:write`, `agents:write` и `knowledge:write`; не расширяйте ключ чтения быстрого старта. Следуйте [Рецептам API](/ru/docs/api/recipes), чтобы создать сайт, добавить обоснованные знания и опубликовать его с явными ключами идемпотентности.
## Частые сбои первого запроса [#частые-сбои-первого-запроса]
| Результат | Причина | Решение |
| ----------------------------- | ------------------------------------------------------------------------ | ---------------------------------------------------------- |
| `401 authentication_required` | Заголовок отсутствует или не `Bearer TOKEN` | Добавьте точный заголовок Authorization из серверного кода |
| `401 invalid_api_key` | Опечатка, истёкший ключ, отозванный ключ или неверный тип учётных данных | Создайте и скопируйте новый ключ Make Agent Fast API |
| `403 subscription_required` | Нет активного платного тарифа | Восстановите подписку аккаунта |
| `403 insufficient_scope` | Ключ не включает область операции | Создайте замену с минимальной недостающей областью |
| `403 account_paused` | Доступ API приостановлен для этого аккаунта | Возобновите доступ API или свяжитесь с владельцем аккаунта |
| `429 rate_limit_exceeded` | Минутная корзина ключа исчерпана | Дождитесь `Retry-After` и уменьшите параллелизм |
Продолжите с [Областями и ошибками](/ru/docs/api/scopes-errors), [Справочником API](/ru/docs/api/reference) и [Лимитами частоты](/ru/docs/api/rate-limits).
---
# Лимиты частоты
Source: /ru/docs/api/rate-limits.md
{/* docs-visuals */}
Публичный API применяет скользящую минутную корзину запросов к каждому ключу API или токену доступа OAuth. Создание большего числа ключей для обхода лимита не поддерживается и может привести к ограничениям учётных данных или аккаунта.
## Лимиты тарифов [#лимиты-тарифов]
| Активный тариф | Запросов на ключ в минуту |
| -------------- | ------------------------: |
| Launch | 120 |
| Operate | 600 |
| Scale | 1 800 |
Учётные данные, чей аккаунт не имеет активного платного тарифа, получают `403 subscription_required` до предоставления ёмкости лимита частоты. Make Agent Fast может ввести более низкие специфичные для конечной точки лимиты для необычно дорогих операций; когда это происходит, справочник конечной точки указывает их явно.
## Ответ с ограничением частоты [#ответ-с-ограничением-частоты]
Когда корзина исчерпана, API возвращает `429 rate_limit_exceeded` с:
```http
HTTP/1.1 429 Too Many Requests
Retry-After: 17
X-RateLimit-Limit: 600
X-RateLimit-Remaining: 0
X-Request-Id: 6c0b2f2e-...
Content-Type: application/json
```
`Retry-After` — минимальное число секунд ожидания. Каждый аутентифицированный
ответ также включает `X-RateLimit-Limit`, `X-RateLimit-Remaining` и
`X-RateLimit-Reset` (временная метка Unix), так что приложения могут замедляться
до `429`.
## Реализация повтора [#реализация-повтора]
Используйте экспоненциальный откат со случайным джиттером, соблюдайте больший `Retry-After` и ограничивайте общее число попыток.
```ts
async function requestWithRetry(url: string, init: RequestInit, attempts = 4) {
for (let attempt = 0; attempt < attempts; attempt += 1) {
const response = await fetch(url, init);
if (response.status !== 429 && response.status < 500) return response;
if (attempt === attempts - 1) return response;
const retryAfter = Number(response.headers.get("retry-after") ?? 0) * 1_000;
const exponential = 500 * 2 ** attempt;
const jitter = Math.random() * 250;
await new Promise((resolve) =>
setTimeout(resolve, Math.max(retryAfter, exponential + jitter)),
);
}
throw new Error("unreachable");
}
```
Для `POST`, `PATCH` и `DELETE` сохраняйте один валидный `Idempotency-Key` на каждом сетевом или серверном повторе. Новый ключ идемпотентности может повторить завершённый побочный эффект.
## Уменьшите объём запросов [#уменьшите-объём-запросов]
* Кэшируйте чтения аккаунта, сайта и конфигурации, которым не нужна свежесть реального времени.
* Запрашивайте до `100` записей на страницу вместо повторных запросов очень малых страниц.
* Обрабатывайте события вебхуков вместо опроса диалогов, заявок, состояния доменов или рассылок.
* Ограничивайте параллелизм воркеров на ключ API; всплеск от многих бессерверных вызовов разделяет одну корзину.
* Используйте отдельные ключи для отдельных сервисов ради изоляции и аудируемости, а не для умножения ёмкости одной нагрузки.
## Таблица повторов и не-повторов [#таблица-повторов-и-не-повторов]
| Ответ | Повторять? | Условие |
| --------------------------------- | ---------- | -------------------------------------------------------------------------------- |
| `429` | Да | Дождитесь `Retry-After`, добавьте джиттер и ограничьте попытки |
| `500` | Иногда | Безопасные чтения или мутации, защищённые тем же ключом идемпотентности |
| Конфликт обработки `409` | Да | Дождитесь его заголовка `Retry-After: 2` и сохраните тот же ключ идемпотентности |
| Другой `409` | Не сразу | Прочитайте текущее состояние ресурса и разрешите конфликт |
| `400`, `401`, `403`, `404`, `415` | Нет | Сначала исправьте ввод, учётные данные, право, путь или тип контента |
Если устойчивая нагрузка законно превышает свою корзину тарифа, уменьшите опрос, группируйте работу или обратитесь в поддержку с репрезентативными ID запросов и ожидаемым трафиком вместо добавления неограниченного цикла повторов.
---
# Рецепты API
Source: /ru/docs/api/recipes.md
{/* docs-visuals */}
Эти рецепты используют сырой REST, чтобы работать до установки публичного SDK. Установите `MAF_API_KEY` в окружении сервера и заменяйте ID, возвращённые более ранними шагами.
## Рецепт: создать и опубликовать обоснованного агента [#рецепт-создать-и-опубликовать-обоснованного-агента]
Создайте один ключ API с `sites:write`, `agents:write` и `knowledge:write`. Добавьте `sites:read`, если автоматизация также перечисляет или проверяет сайты.
### 1. Создайте сайт [#1-создайте-сайт]
```bash
curl --fail-with-body https://makeagent.fast/api/v1/sites \
-X POST \
-H "Authorization: Bearer $MAF_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: launch-acme-site-2026-01" \
-d '{
"title": "Acme support",
"slug": "acme-support",
"type": "business",
"template": "minimal",
"content": {
"headline": "Ask Acme support",
"subheadline": "Answers grounded in our current policies.",
"about": "Acme support answers product and account questions."
},
"persona_mode": "assistant",
"languages": ["en"]
}'
```
Успешный ответ — `201 Created`, включает сайт под `data` и возвращает его канонический путь ресурса в заголовке `Location`. Сохраните `data.id` как `SITE_ID`.
### 2. Настройте агента и политику встраивания [#2-настройте-агента-и-политику-встраивания]
```bash
curl --fail-with-body "https://makeagent.fast/api/v1/sites/$SITE_ID/agent" \
-X PATCH \
-H "Authorization: Bearer $MAF_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: launch-acme-agent-2026-01" \
-d '{
"display_name": "Acme guide",
"persona_mode": "assistant",
"instructions": "Answer only from confirmed Acme sources. If the answer is missing, say that a teammate will follow up.",
"languages": ["en"],
"embed_enabled": true,
"allowed_origins": ["https://www.acme.example", "https://staging.acme.example"]
}'
```
Разрешённые origin — точные origin: схема, имя хоста и опциональный порт. Не включайте путь или завершающий шаблон.
### 3. Добавьте текстовый источник знаний [#3-добавьте-текстовый-источник-знаний]
```bash
curl --fail-with-body "https://makeagent.fast/api/v1/sites/$SITE_ID/knowledge" \
-X POST \
-H "Authorization: Bearer $MAF_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: launch-acme-returns-2026-01" \
-d '{
"name": "Returns policy 2026-01",
"text": "Customers may request a return within 30 days of delivery. Contact support before sending an item back."
}'
```
Публичный API сейчас принимает вставленный текст от 5 до 200 000 символов. Используйте панель для сканирования URL, загрузок, YouTube, подкастов и лент.
### 4. Добавьте структурированный FAQ [#4-добавьте-структурированный-faq]
```bash
curl --fail-with-body "https://makeagent.fast/api/v1/sites/$SITE_ID/faqs" \
-X POST \
-H "Authorization: Bearer $MAF_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: launch-acme-faq-returns-2026-01" \
-d '{
"question": "How long do I have to return an order?",
"answer": "You may request a return within 30 days of delivery.",
"approved": true
}'
```
### 5. Опубликуйте [#5-опубликуйте]
```bash
curl --fail-with-body "https://makeagent.fast/api/v1/sites/$SITE_ID/publish" \
-X POST \
-H "Authorization: Bearer $MAF_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: launch-acme-publish-2026-01" \
-d '{"published": true}'
```
Ответ должен содержать `{"data":{"id":"...","status":"published"}}`. Откройте реальное встраивание и задайте вопрос, ответ на который есть в источнике. Публикация доказывает, что состояние агента изменилось; она не доказывает, что качество источника или origin встраивания правильные.
## Рецепт: безопасная пагинация заявок [#рецепт-безопасная-пагинация-заявок]
Используйте ключ с `leads:read`. Относитесь к `next_cursor` как к непрозрачному и URL-кодируйте его.
```ts
const base = `https://makeagent.fast/api/v1/sites/${siteId}/leads`;
let cursor: string | null = null;
do {
const url = new URL(base);
url.searchParams.set("limit", "100");
if (cursor) url.searchParams.set("cursor", cursor);
const response = await fetch(url, {
headers: { Authorization: `Bearer ${process.env.MAF_API_KEY}` },
});
if (!response.ok) throw await response.json();
const page = await response.json();
for (const lead of page.data) await exportLead(lead);
cursor = page.next_cursor;
} while (cursor);
```
Не декодируйте, не редактируйте, не сортируйте и не используйте повторно курсор для другой коллекции.
## Рецепт: отключить встраивание во время инцидента [#рецепт-отключить-встраивание-во-время-инцидента]
Используйте `agents:write` и сохраняйте тот же ключ идемпотентности на сетевых повторах:
```bash
curl --fail-with-body "https://makeagent.fast/api/v1/sites/$SITE_ID/agent" \
-X PATCH \
-H "Authorization: Bearer $MAF_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: incident-2026-07-embed-off" \
-d '{"embed_enabled": false}'
```
После успеха ответа проверьте, что загрузчик больше не инициализируется на разрешённом хосте. Включите его снова новым ключом разрешения инцидента после исправления проблемы origin, контента или учётных данных.
## Продакшен-чек-лист [#продакшен-чек-лист]
* Используйте отдельный ключ на сервис и окружение.
* Сохраняйте ID ресурсов и ключи идемпотентности перед отправкой мутации.
* Устанавливайте таймауты соединения и ответа.
* Соблюдайте `Retry-After` и ограничивайте повторы.
* Логируйте имя операции, HTTP статус и ID запроса без логирования секретов или персональных данных.
* Тестируйте против непродакшен-сайта перед предоставлением областей записи продакшену.
---
# Справочник API
Source: /ru/docs/api/reference.md
{/* docs-visuals */}
Канонический машиночитаемый контракт — [OpenAPI JSON](/api/openapi.json). Эта страница — человекочитаемый индекс операций и объясняет правила, общие для каждой конечной точки.
## Базовый URL и версия [#базовый-url-и-версия]
```text
https://makeagent.fast/api/v1
```
Мажорная версия — часть пути. Добавочные поля могут появляться без смены мажорной версии, поэтому игнорируйте неизвестные поля ответа. Все запросы управления используют HTTPS и ключ API bearer или токен доступа OAuth.
## Общие заголовки [#общие-заголовки]
```http
Authorization: Bearer maf_live_...
Accept: application/json
Content-Type: application/json
Idempotency-Key: your-stable-operation-key
```
`Content-Type` обязателен для тел JSON `POST` и `PATCH`, включая `{}`. `Idempotency-Key` опционален, но настоятельно рекомендуется для каждого `POST`, `PATCH` и `DELETE`.
## Аккаунт и сайты [#аккаунт-и-сайты]
| Метод | Путь | Область | Назначение |
| -------- | -------------------------- | -------------- | ----------------------------------------------------------------------------- |
| `GET` | `/me` | `account:read` | Читать аккаунт, тариф, права и сводку кошелька |
| `GET` | `/sites` | `sites:read` | Перечислить принадлежащие сайты |
| `POST` | `/sites` | `sites:write` | Создать сайт и его агента по умолчанию |
| `GET` | `/sites/{site_id}` | `sites:read` | Получить один принадлежащий сайт |
| `PATCH` | `/sites/{site_id}` | `sites:write` | Обновить безопасные поля сайта |
| `DELETE` | `/sites/{site_id}` | `sites:write` | Удалить сайт и зависимые ресурсы |
| `POST` | `/sites/{site_id}/publish` | `sites:write` | Опубликовать или отменить публикацию с `{ "published": boolean }` |
| `GET` | `/sites/{site_id}/agent` | `agents:read` | Читать настройки агента |
| `PATCH` | `/sites/{site_id}/agent` | `agents:write` | Обновить характер, инструкции, голос, языки, состояние встраивания или origin |
Создание сайта требует `title` и `content.headline`. Опциональные поля включают `slug`, `type`, `template`, дополнительный контент, `persona_mode` и от одного до четырёх языков из `en`, `ko`, `uz` и `ru`.
## Знания и FAQ [#знания-и-faq]
| Метод | Путь | Область | Назначение |
| -------- | ---------------------------------------- | ----------------- | ------------------------------------------------------------------ |
| `GET` | `/sites/{site_id}/knowledge` | `knowledge:read` | Перечислить источники знаний |
| `POST` | `/sites/{site_id}/knowledge` | `knowledge:write` | Принять `{ "name", "text" }`; текст должен быть 5–200 000 символов |
| `DELETE` | `/sites/{site_id}/knowledge/{source_id}` | `knowledge:write` | Удалить один источник из будущего поиска |
| `GET` | `/sites/{site_id}/faqs` | `knowledge:read` | Перечислить структурированные FAQ |
| `POST` | `/sites/{site_id}/faqs` | `knowledge:write` | Создать `{ "question", "answer", "approved" }` |
| `PATCH` | `/sites/{site_id}/faqs/{faq_id}` | `knowledge:write` | Обновить вопрос, ответ или состояние утверждения |
| `DELETE` | `/sites/{site_id}/faqs/{faq_id}` | `knowledge:write` | Удалить FAQ |
Публичный API принимает вставленный текст. Используйте панель для сканирования URL, загрузки файлов, YouTube, подкастов и процессов лент.
## Диалоги, заявки, аналитика и использование [#диалоги-заявки-аналитика-и-использование]
| Метод | Путь | Область | Назначение |
| ------- | -------------------------------------------------- | -------------------- | ----------------------------------------------------------------------- |
| `GET` | `/sites/{site_id}/conversations` | `conversations:read` | Перечислить ветки диалогов |
| `GET` | `/sites/{site_id}/conversations/{conversation_id}` | `conversations:read` | Получить ветку и пагинированные сообщения |
| `GET` | `/sites/{site_id}/leads` | `leads:read` | Перечислить собранные заявки |
| `POST` | `/sites/{site_id}/leads` | `leads:write` | Создать каноническую заявку с явным согласием и предпочтениями контакта |
| `GET` | `/sites/{site_id}/leads/{lead_id}` | `leads:read` | Получить одну заявку |
| `PATCH` | `/sites/{site_id}/leads/{lead_id}` | `leads:write` | Обновить, квалифицировать или изменить политику контакта заявки |
| `POST` | `/sites/{site_id}/leads/{lead_id}/accept` | `leads:write` | Принять заявку в воронку возможностей |
| `GET` | `/sites/{site_id}/analytics` | `analytics:read` | Перечислить события аналитики |
| `GET` | `/sites/{site_id}/usage` | `usage:read` | Перечислить учитываемые события использования |
Эти коллекции событий и активностей принимают `limit` и `cursor`. Возвращённые записи могут содержать персональные данные; храните и экспортируйте их согласно вашим обязательствам приватности.
Отправка сообщений посетителей и публикация ответов владельца — не операции
публичного API. Мутация заявок поддерживается; не устанавливайте
`consent_status: granted`, если у вашей системы нет защитимой записи согласия.
Неизвестное согласие исключается из рассылок.
## Воронка возможностей и результаты CRM [#воронка-возможностей-и-результаты-crm]
| Метод | Путь | Область | Назначение |
| --------------- | --------------------------------------------------------------- | ---------------------------------- | ------------------------------------------------------------------------------------------------ |
| `GET` / `POST` | `/sites/{site_id}/pipeline/stages` | `pipeline:read` / `pipeline:write` | Перечислить или настроить стадии |
| `GET` / `POST` | `/sites/{site_id}/pipeline/accounts` | `pipeline:read` / `pipeline:write` | Перечислить или создать бизнес-аккаунты |
| `GET` | `/sites/{site_id}/pipeline/accounts/{account_id}` | `pipeline:read` | Получить бизнес-аккаунт |
| `GET` / `POST` | `/sites/{site_id}/pipeline/opportunities` | `pipeline:read` / `pipeline:write` | Перечислить или создать возможности |
| `GET` / `PATCH` | `/sites/{site_id}/pipeline/opportunities/{opportunity_id}` | `pipeline:read` / `pipeline:write` | Читать активность или обновить назначение, ценность, стадию, следующее действие и ответ человека |
| `POST` | `/sites/{site_id}/pipeline/outcomes` | `pipeline:write` | Идемпотентно импортировать результат CRM выиграно или проиграно |
| `GET` | `/sites/{site_id}/pipeline/sync-records` | `pipeline:read` | Перечислить статус синхронизации, попытки и ошибки |
| `POST` | `/sites/{site_id}/pipeline/sync-records/{sync_record_id}/retry` | `pipeline:write` | Повторить неудачный результат из его хранимой полезной нагрузки |
Предоставленные `provider` CRM, внешний ID и ключ идемпотентности остаются в
аудиторском следе. Повтор захватывает только неудачную запись и никогда не
превращает внешнюю запись в процессе в ложный успех.
## Коннекторы [#коннекторы]
| Метод | Путь | Область | Назначение |
| -------- | --------------------------------------------- | ------------------ | -------------------------------------------------------------- |
| `GET` | `/sites/{site_id}/connectors` | `connectors:read` | Перечислить состояние коннекторов без секретов |
| `POST` | `/sites/{site_id}/connectors` | `connectors:write` | Создать или заменить коннектор канала и обеспечить его вебхук |
| `PATCH` | `/sites/{site_id}/connectors/{connector_id}` | `connectors:write` | Установить `status` или `reply_with_voice` |
| `DELETE` | `/sites/{site_id}/connectors/{connector_id}` | `connectors:write` | Деобеспечить и удалить коннектор |
| `GET` | `/sites/{site_id}/domains` | `domains:read` | Удалено — возвращает `409`. Собственные домены не предлагаются |
| `POST` | `/sites/{site_id}/domains` | `domains:write` | Удалено — возвращает `409` |
| `PATCH` | `/sites/{site_id}/domains/{domain_id}` | `domains:write` | Удалено — возвращает `409` |
| `POST` | `/sites/{site_id}/domains/{domain_id}/verify` | `domains:write` | Удалено — возвращает `409` |
| `DELETE` | `/sites/{site_id}/domains/{domain_id}` | `domains:write` | Удалено — возвращает `409` |
Создание коннектора использует тело с дискриминацией по каналу. Поля учётных данных различаются для `telegram`, `whatsapp`, `messenger`, `instagram`, `discord` и `kakao`; используйте соответствующий гайд коннектора перед отправкой секретов.
## Рассылки, уведомления и монетизация [#рассылки-уведомления-и-монетизация]
| Метод | Путь | Область | Назначение |
| -------- | ----------------------------------------------------- | --------------------- | -------------------------------------------------------------- |
| `GET` | `/sites/{site_id}/broadcasts` | `broadcasts:read` | Перечислить рассылки |
| `POST` | `/sites/{site_id}/broadcasts` | `broadcasts:write` | Создать черновик рассылки Kakao |
| `POST` | `/sites/{site_id}/broadcasts/{broadcast_id}/send` | `broadcasts:write` | Поставить в очередь существующий черновик; возвращает `202` |
| `GET` | `/sites/{site_id}/notifications` | `notifications:read` | Перечислить уведомления владельца |
| `PATCH` | `/sites/{site_id}/notifications/{notification_id}` | `notifications:write` | Отметить прочитанным или непрочитанным с `{ "read": boolean }` |
| `GET` | `/sites/{site_id}/monetization/products` | `monetization:read` | Перечислить продукты сайта |
| `POST` | `/sites/{site_id}/monetization/products` | `monetization:write` | Создать продукт доступа, консультации, чаевых или цифровой |
| `PATCH` | `/sites/{site_id}/monetization/products/{product_id}` | `monetization:write` | Обновить поля продукта и состояние активности |
| `DELETE` | `/sites/{site_id}/monetization/products/{product_id}` | `monetization:write` | Удалить продукт |
Создание рассылки сейчас принимает только канал `kakao`. Постановка в очередь не работает с `409 conflict`, когда нет достижимых получателей или рассылка больше не черновик.
## Вебхуки разработчика [#вебхуки-разработчика]
| Метод | Путь | Область | Назначение |
| -------- | ---------------------------------- | ---------------- | --------------------------------------------------------------------------- |
| `GET` | `/webhook-endpoints` | `webhooks:read` | Перечислить состояние конечных точек без секретов подписи |
| `POST` | `/webhook-endpoints` | `webhooks:write` | Зарегистрировать публичный HTTPS URL и один раз раскрыть его секрет подписи |
| `DELETE` | `/webhook-endpoints/{endpoint_id}` | `webhooks:write` | Удалить конечную точку и остановить будущую доставку |
URL вебхуков должны использовать HTTPS, не могут включать учётные данные или пользовательский порт и должны разрешаться только в публичные IP-адреса.
## Пагинация [#пагинация]
Пагинированные коллекции принимают `limit` от `1` до `100`; по умолчанию `50`. Используйте возвращённый непрозрачный `next_cursor` только с той же коллекцией и фильтрами.
```json
{
"data": [],
"has_more": false,
"next_cursor": null
}
```
Некоторые малые коллекции конфигурации возвращают ту же оболочку с `has_more: false` и не нуждаются в курсоре.
## Идемпотентность [#идемпотентность]
Ключ идемпотентности должен содержать 8–200 символов из букв, цифр, `.`, `_`, `:` и `-`. Результаты хранятся 24 часа и привязаны к владельцу учётных данных.
* Тот же ключ и тот же метод, путь, запрос и тело: возвращает сохранённый ответ с `x-idempotent-replayed: true`.
* Тот же ключ с другим вводом: возвращает `409 conflict`.
* Тот же ключ, пока первый запрос обрабатывается: возвращает `409 conflict` и `Retry-After: 2`.
Сохраняйте ключ перед отправкой мутации и используйте повторно только для повторов этой логической операции.
## Ответы и ошибки [#ответы-и-ошибки]
Успешные ответы оборачивают свой ресурс в `data`. Операции создания обычно возвращают `201`; поставленные в очередь отправки рассылок возвращают `202`; другие успешные операции возвращают `200`. Каждый ответ включает `x-request-id` и использует `Cache-Control: no-store` для данных API.
См. [Области и ошибки](/ru/docs/api/scopes-errors) для полной таблицы кодов ошибок и [Рецепты API](/ru/docs/api/recipes) для копируемых процессов.
---
# Области и ошибки
Source: /ru/docs/api/scopes-errors.md
{/* docs-visuals */}
Каждая операция публичного API требует одну явную область. Валидные учётные данные без этой области получают `403 insufficient_scope`; они никогда не повышаются молча до более широкого доступа.
## Справочник областей [#справочник-областей]
| Область | Разрешает |
| --------------------- | -------------------------------------------------------------------------------------------------------------- |
| `account:read` | Читать аутентифицированный аккаунт, тариф, права и сводку кошелька |
| `sites:read` | Перечислять и получать сайты |
| `sites:write` | Создавать, обновлять, публиковать и отменять публикацию сайтов |
| `agents:read` | Читать настройки агентов |
| `agents:write` | Обновлять характер, инструкции, языки, голос, состояние встраивания и разрешённые origin |
| `knowledge:read` | Перечислять источники знаний и FAQ |
| `knowledge:write` | Принимать или удалять текстовые источники и создавать, обновлять или удалять FAQ |
| `conversations:read` | Перечислять диалоги и получать их сообщения |
| `leads:read` | Перечислять собранные заявки |
| `leads:write` | Создавать, обновлять, квалифицировать и принимать заявки в воронку возможностей |
| `pipeline:read` | Читать стадии, аккаунты, возможности, активности и состояние синхронизации CRM |
| `pipeline:write` | Настраивать стадии; создавать или обновлять возможности и аккаунты; импортировать или повторять результаты CRM |
| `analytics:read` | Читать события аналитики сайта |
| `connectors:read` | Перечислять состояние коннекторов без возврата секретов |
| `connectors:write` | Создавать, обновлять, включать, отключать и удалять коннекторы |
| `domains:read` | Читать состояние доменов и требуемые DNS-записи |
| `domains:write` | Подключать, проверять, обновлять и удалять домены |
| `broadcasts:read` | Перечислять рассылки и состояние доставки |
| `broadcasts:write` | Создавать черновики и ставить в очередь отправку рассылки |
| `notifications:read` | Перечислять уведомления владельца |
| `notifications:write` | Отмечать уведомления прочитанными или непрочитанными |
| `monetization:read` | Перечислять продукты монетизации |
| `monetization:write` | Создавать, обновлять, активировать, деактивировать и удалять продукты |
| `usage:read` | Читать учитываемые события использования |
| `webhooks:read` | Перечислять конечные точки вебхуков и состояние доставки |
| `webhooks:write` | Создавать и удалять конечные точки вебхуков |
Используйте области чтения для задач отчётности. Добавляйте область записи только когда интеграция выполняет эту мутацию. Например, экспорту заявок обычно нужны `sites:read` и `leads:read`, а не `sites:write` или `agents:write`.
## Сбои областей [#сбои-областей]
```json
{
"error": {
"code": "insufficient_scope",
"message": "The API key does not grant the required scope.",
"details": { "required": ["sites:write"] },
"request_id": "6c0b2f2e-..."
}
}
```
Создайте замещающий ключ с недостающей областью и обновите серверный секрет. Области существующего ключа API нельзя расширить на месте; это делает изменения привилегий явными и аудируемыми.
## Оболочка ошибок [#оболочка-ошибок]
Все ошибки API используют одну форму верхнего уровня:
```ts
type ApiError = {
error: {
code: string;
message: string;
details?: unknown;
request_id: string;
};
};
```
Ветвитесь на `error.code`, а не на английском `message`. Сообщения могут улучшаться без смены версии. Логируйте `error.request_id` и заголовок ответа `x-request-id` с именем операции, статусом и попыткой повтора — но никогда не логируйте заголовок авторизации или секреты запроса.
## Справочник статусов и кодов [#справочник-статусов-и-кодов]
| HTTP | Стабильный код | Значение | Нормальный ответ |
| ----- | ------------------------- | ------------------------------------------------------------------------- | --------------------------------------------------------------------- |
| `400` | `invalid_request` | Валидация не прошла или поле не поддерживается | Исправьте поля в `details`; не повторяйте неизменённый ввод |
| `400` | `invalid_json` | Тело не является объектом JSON или содержит невалидный JSON | Сериализуйте один валидный объект JSON |
| `401` | `authentication_required` | Заголовок Bearer отсутствует | Прикрепите серверные учётные данные |
| `401` | `invalid_api_key` | Ключ недействителен, истёк, отозван или его владелец больше не существует | Замените или ротируйте ключ |
| `403` | `subscription_required` | У владельца нет активного платного тарифа | Восстановите подписку перед повтором |
| `403` | `insufficient_scope` | Учётным данным не хватает области операции | Создайте замещающие учётные данные с минимальными правами |
| `403` | `account_paused` | Доступ API приостановлен для аккаунта | Возобновите доступ API или свяжитесь с владельцем аккаунта |
| `404` | `not_found` | Конечная точка или принадлежащий ресурс не найдены | Проверьте путь и ID, принадлежащий арендатору |
| `409` | `conflict` | Текущее состояние ресурса предотвращает действие | Прочитайте текущее состояние перед повтором |
| `415` | `invalid_request` | Тело мутации не `application/json` | Отправьте `Content-Type: application/json` |
| `429` | `rate_limit_exceeded` | Минутная корзина тарифа ключа исчерпана | Дождитесь `Retry-After` и примените джиттер |
| `500` | `internal_error` | Запрос не может быть завершён | Повторите безопасную или идемпотентную операцию и сообщите ID запроса |
Ресурсы вне аккаунта владельца учётных данных могут возвращать `404` вместо раскрытия, существует ли ID другого арендатора.
## Детали валидации [#детали-валидации]
Валидация полей возвращает пути, которые можно показать рядом с вашими собственными элементами формы:
```json
{
"error": {
"code": "invalid_request",
"message": "Request validation failed.",
"details": [
{ "path": "content.headline", "message": "String must contain at least 1 character(s)" }
],
"request_id": "6c0b2f2e-..."
}
}
```
Тела мутаций должны быть объектами JSON. Массивы, пустые тела, данные формы и JSON, отправленный с текстовым типом контента, отклоняются.
## Решения о повторе [#решения-о-повторе]
* Повторяйте `429` после числа секунд в `Retry-After`.
* Повторяйте `500` только для безопасных чтений или записей, защищённых тем же `Idempotency-Key`.
* Повторяйте идемпотентный `409` в процессе после его заголовка `Retry-After: 2`.
* Не повторяйте `400`, `401`, `403`, `404` или конфликт состояния, пока причина не изменится.
См. [Лимиты частоты](/ru/docs/api/rate-limits) для поведения отката и [Справочник API](/ru/docs/api/reference) для требуемой области каждой операции.
---
# Статус SDK
Source: /ru/docs/api/sdks.md
{/* docs-visuals */}
Версионированный REST API — поддерживаемая публичная поверхность интеграции сегодня. Исходники клиентов JavaScript, Python и фреймворков существуют в репозитории продукта, но пакеты пока не опубликованы в npm или PyPI.
## Доступность [#доступность]
| Клиент | Статус | Как использовать |
| ---------------------------- | --------------------------------------- | -------------------------------------------------------------------------------------------------------- |
| REST поверх HTTPS | **Доступен** | Вызывайте `https://makeagent.fast/api/v1` из любого серверного HTTP-клиента |
| Документ OpenAPI | **Доступен** | Скачайте [/api/openapi.json](/api/openapi.json) и изучите его перед генерацией клиента |
| `@make-agent-fast/sdk` | **Предпросмотр исходников — не в npm** | Не добавляйте этот импорт в продакшен-проект, пока релиз реестра не будет связан здесь |
| Пакет Python `makeagentfast` | **Предпросмотр исходников — не в PyPI** | Используйте `requests`, `httpx` или стандартную библиотеку Python, пока релиз PyPI не будет связан здесь |
| Адаптеры React, Vue, Svelte | **Предпросмотр исходников — не в npm** | Предпочитайте задокументированный паттерн загрузчика скрипта для фреймворка |
| Веб-компонент | **Предпросмотр исходников — не в npm** | Предпочитайте стандартный загрузчик `embed.js` |
Не запускайте `npm install @make-agent-fast/sdk` или `pip install makeagentfast` только на основе примера импорта. Эта страница будет включать URL реестра, версию, рекомендации по целостности и команду установки, когда публичный пакет будет выпущен.
## JavaScript без SDK [#javascript-без-sdk]
```ts
const response = await fetch("https://makeagent.fast/api/v1/sites?limit=100", {
headers: {
Authorization: `Bearer ${process.env.MAF_API_KEY}`,
Accept: "application/json",
},
});
const body = await response.json();
if (!response.ok) {
console.error(body.error.code, body.error.request_id);
throw new Error(`Make Agent Fast request failed (${response.status})`);
}
for (const site of body.data) console.log(site.id, site.title);
```
Держите ключ API на сервере. Браузерный бандл React, Vue или Svelte должен вызывать ваш собственный бэкенд или устанавливать публичный загрузчик встраивания; он не должен вызывать API управления с секретом.
## Python без SDK [#python-без-sdk]
```python
import json
import os
import urllib.request
request = urllib.request.Request(
"https://makeagent.fast/api/v1/sites?limit=100",
headers={
"Authorization": f"Bearer {os.environ['MAF_API_KEY']}",
"Accept": "application/json",
},
)
with urllib.request.urlopen(request, timeout=20) as response:
payload = json.load(response)
for site in payload["data"]:
print(site["id"], site["title"])
```
Ловите `urllib.error.HTTPError` в продакшене и разбирайте его тело JSON, используя [стабильную оболочку ошибок](/ru/docs/api/scopes-errors).
## Сгенерированные клиенты [#сгенерированные-клиенты]
Генерация OpenAPI полезна только когда документ содержит операции и схемы, от которых зависит ваше приложение. Закрепите скачанную спецификацию, генерируйте в проверяемую директорию и изучайте каждый diff перед обновлением.
```bash
curl --fail-with-body https://makeagent.fast/api/openapi.json \
--output make-agent-fast.openapi.json
```
Не регенерируйте и не развёртывайте клиента автоматически с живого URL. Новое добавочное поле не должно ломать клиента, но поведение генератора и имена сгенерированных методов всё равно могут меняться.
## Что должен включать публичный релиз SDK [#что-должен-включать-публичный-релиз-sdk]
Перед пометкой любого предварительного клиента как доступного у него должны быть:
* Публичная страница реестра и неизменяемая семантическая версия.
* Инструкции по установке, обновлению и поддерживаемым средам выполнения.
* Типизированные модели запросов и ответов, сгенерированные из полного контракта API.
* Структурированные ошибки, сохраняющие HTTP статус и ID запроса.
* Помощники пагинации, трактующие курсоры как непрозрачные.
* Явная поддержка ключей идемпотентности для мутаций.
* Тесты CI против текущего контракта `/api/v1` и опубликованный журнал изменений.
Пока эти условия не выполнены, используйте примеры REST в [Быстром старте API](/ru/docs/api/quickstart) и [Рецептах API](/ru/docs/api/recipes).
---
# Вебхуки
Source: /ru/docs/api/webhooks.md
{/* docs-visuals */}
Вебхуки разработчика отправляют события аккаунта на ваш сервер, чтобы не нужно было опрашивать. Доставка минимум один раз: события могут дублироваться, задерживаться или приходить не по порядку.
## Зарегистрируйте конечную точку [#зарегистрируйте-конечную-точку]
Создайте ключ с `webhooks:write`, затем зарегистрируйте публичный HTTPS приёмник и наименьший набор событий, который вам нужен.
```bash
curl --fail-with-body https://makeagent.fast/api/v1/webhook-endpoints \
-X POST \
-H "Authorization: Bearer $MAF_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: webhook-production-v1" \
-d '{
"url": "https://api.example.com/webhooks/make-agent-fast",
"events": ["lead.created", "conversation.started"]
}'
```
URL должен использовать HTTPS, не может содержать имя пользователя, пароль, фрагмент или пользовательский порт и должен разрешаться только в публичные IP-адреса. Редиректы не выполняются во время доставки.
Ответ `201` один раз раскрывает секрет подписи `whsec_...`. Сохраните его в менеджере секретов приёмника перед закрытием ответа. Перечисление конечных точек позже возвращает URL, события, статус, последнюю доставку и последнюю ошибку — но не секрет.
## Типы событий [#типы-событий]
| Событие | Испускается когда |
| ------------------------------ | --------------------------------------------------------------------------------- |
| `site.published` | Сайт становится опубликованным |
| `site.unpublished` | Сайт возвращается в состояние черновика |
| `lead.created` | Агент собирает новую заявку |
| `conversation.started` | Начинается новая ветка диалога |
| `conversation.message.created` | Сообщение добавляется в диалог |
| `knowledge.ready` | Источник знаний завершает обработку |
| `broadcast.sent` | Рассылка завершает процесс отправки |
| `domain.activated` | Устарело — собственные домены не предлагаются; это событие никогда не испускается |
## Формат запроса [#формат-запроса]
Make Agent Fast отправляет `POST` с `Content-Type: application/json`, `User-Agent: MakeAgentFast-Webhooks/1.0` и этими заголовками:
```http
maf-event-id: evt_...
maf-event-type: lead.created
maf-signature: t=1784210566,v1=HEX_HMAC_SHA256
```
Тело JSON имеет стабильную оболочку. Поля внутри `data` зависят от события и могут получать добавочные поля.
```json
{
"id": "evt_2c34...",
"type": "lead.created",
"created_at": "2026-07-16T10:02:46.000Z",
"data": {
"site_id": "SITE_ID",
"lead_id": "LEAD_ID"
}
}
```
Используйте `id` тела или `maf-event-id` как ключ дедупликации. Не используйте время доставки или сгенерированный ID базы данных.
## Проверьте подпись в Node.js [#проверьте-подпись-в-nodejs]
Читайте точные сырые байты до разбора JSON. Подписанное значение — `TIMESTAMP + "." + RAW_BODY`.
```ts
import { createHmac, timingSafeEqual } from "node:crypto";
export function verifyWebhook(rawBody: Buffer, header: string, secret: string) {
const values = Object.fromEntries(header.split(",").map((part) => part.split("=", 2)));
const timestamp = values.t;
const supplied = values.v1;
if (!timestamp || !supplied || !/^[a-f0-9]{64}$/.test(supplied)) return false;
const age = Math.abs(Date.now() / 1_000 - Number(timestamp));
if (!Number.isFinite(age) || age > 300) return false;
const expected = createHmac("sha256", secret)
.update(`${timestamp}.`)
.update(rawBody)
.digest("hex");
return timingSafeEqual(Buffer.from(expected, "hex"), Buffer.from(supplied, "hex"));
}
```
Отклоняйте неверно сформированные подписи и временные метки старше вашего принятого окна повторного воспроизведения; пять минут — разумное значение по умолчанию. Сравнивайте байты фиксированной длины за постоянное время.
## Проверьте подпись в Python [#проверьте-подпись-в-python]
```python
import hashlib
import hmac
import time
def verify_webhook(raw_body: bytes, header: str, secret: str) -> bool:
values = dict(part.split("=", 1) for part in header.split(",") if "=" in part)
timestamp = values.get("t", "")
supplied = values.get("v1", "")
try:
if abs(time.time() - int(timestamp)) > 300:
return False
except ValueError:
return False
signed = timestamp.encode() + b"." + raw_body
expected = hmac.new(secret.encode(), signed, hashlib.sha256).hexdigest()
return hmac.compare_digest(expected, supplied)
```
Разбирайте и обрабатывайте JSON только после успеха проверки подписи.
## Подтверждайте и обрабатывайте [#подтверждайте-и-обрабатывайте]
1. Проверьте подпись и временную метку.
2. Вставьте ID события в таблицу с уникальным ограничением.
3. Если оно уже существует, верните `204` без повторения побочного эффекта.
4. Зафиксируйте событие или поставьте в очередь вашу внутреннюю задачу.
5. Быстро верните ответ `2xx`.
Отправитель Make Agent Fast истекает по времени после 10 секунд. Он считает успешными только `2xx` и не выполняет редиректы.
## Поведение повторов [#поведение-повторов]
Неудачные доставки ставятся в очередь до восьми попыток. Откат начинается около двух секунд, удваивается с джиттером и ограничен одним часом; фактическое время доставки может быть позже, когда воркеры заняты. Поскольку повторы могут пережить инициирующий запрос и приходить не по порядку, никогда не полагайтесь на приход одного события непосредственно перед другим.
Возвращайте ответ не-2xx только когда хотите, чтобы Make Agent Fast повторил. Для навсегда неподдерживаемой версии события или удалённого назначения примите и запишите его или удалите конечную точку вместо производства бесконечных временных сбоев.
## Ротируйте секрет подписи [#ротируйте-секрет-подписи]
Секреты подписи не могут быть раскрыты или отредактированы. Для безопасной ротации:
1. Создайте вторую конечную точку, указывающую на временный или версионный путь приёмника.
2. Сохраните её недавно раскрытый секрет.
3. Принимайте и дедуплицируйте события от обеих конечных точек.
4. Проверьте, что новая конечная точка получает валидные доставки.
5. Удалите старую конечную точку через `DELETE /webhook-endpoints/{endpoint_id}`.
Если URL приёмника остаётся тем же, заставьте принимающее приложение принимать оба секрета во время перекрытия и используйте ID событий для предотвращения дублирующих побочных эффектов.
## Решение проблем [#решение-проблем]
| Симптом | Проверка |
| ------------------------ | ------------------------------------------------------------------------------------------------------------------------- |
| Нет доставок | Статус конечной точки, выбранные события, публичный DNS, сертификат HTTPS и произошло ли событие вообще |
| Несовпадение подписи | Доступ к сырому телу, точная конкатенация `timestamp.body`, правильный секрет конечной точки и трансформации тела проксей |
| Повторные доставки | Код возврата, 10-секундный таймаут, внутренние исключения и уникальность ID событий |
| Ошибка приватного адреса | Записи DNS должны разрешаться только в публичные адреса; localhost и внутренние диапазоны отклоняются |
| Сбой редиректа | Зарегистрируйте финальный HTTPS URL напрямую; редиректы не выполняются |
Никогда не включайте секрет подписи, ключ bearer или полную полезную нагрузку посетителя в сообщение поддержки. Включайте ID конечной точки, ID события, время сбоя и очищенные логи приёмника.
---
# Внешний вид
Source: /ru/docs/build/appearance.md
{/* docs-visuals */}
**Внешний вид** стилизует **чат** и **живой звонок** посетителя вместе — цвета, тему, углы, тень, стекло и шрифты. Он не строит размещённую маркетинговую страницу. Новые агенты запускаются как встраивание на вашем существующем сайте.
Откройте страницу **Внешний вид** сайта. Каждый элемент управления применяется к обеим поверхностям.
## Сохранение сразу уходит в паблик [#сохранение-сразу-уходит-в-паблик]
Выберите **Сохранить внешний вид**. Сохранение записывает строку агента и обновляет встраивание (и любую оставшуюся размещённую страницу), так что посетители видят изменение без ожидания повторной публикации. Подтверждайте в приватном окне на реальном встраивании.
Несохранённый предпросмотр в панели — только предпросмотр. Скрытие/показ значка на Operate и Scale использует то же живое обновление.
## Как на сайте против Светлой и Тёмной [#как-на-сайте-против-светлой-и-тёмной]
**Тема агента** имеет три варианта:
| Вариант | Эффект |
| ---------------- | ------------------------------------------------------------------------------------------------ |
| **Как на сайте** | Следует светлому или тёмному режиму каждого посетителя (страница сайта, затем ОС). По умолчанию. |
| **Светлая** | Фиксирует чат и живой звонок на светлой палитре. |
| **Тёмная** | Фиксирует чат и живой звонок на тёмной палитре. |
**Как на сайте** — это `auto`. Фиксированная Светлая или Тёмная закрепляет и чат, и живой звонок для каждого посетителя. Редактируйте светлую и тёмную палитры отдельно; переключатель предпросмотра меняет только то, какую палитру вы редактируете.
Во встраивании загрузчик всё ещё может передать `data-theme="light"` или `data-theme="dark"` как переопределение сайта. См. [Обзор встраивания](/ru/docs/embed/overview).
## Цвета, пресеты и шрифт [#цвета-пресеты-и-шрифт]
* **Пресеты** — Sharp, Soft, Glass, Minimal — задают углы, тень, рамку и стекло вместе.
* **Основной цвет** — пузыри посетителя, акценты звонка и главные действия. **Авто (акцент сайта)** наследует акцент просканированного бренда, использованный для виджета.
* Точно настраивайте вторичный цвет, фон, поверхность панели, углы, тень, рамку, стекло и шрифт.
* **Как на сайте** для шрифта применяется, когда агент встроен на внешний сайт; **По умолчанию виджета** сохраняет шрифт виджета.
Используйте достаточный контраст и держите интерактивные состояния различимыми. Проверяйте на десктопной и узкой ширине, включая метки на всех языках интерфейса.
## Живой разговор в предпросмотре внешнего вида [#живой-разговор-в-предпросмотре-внешнего-вида]
Предпросмотр внешнего вида может показать чат или живой звонок с выбранной светлой или тёмной палитрой. Этот предпросмотр использует ту же оболочку посетителя, что и встраивание. **Поговорите с агентом** в панели (Проверка и тестировщик агента) использует оболочку платформы — см. [Голос и живые звонки](/ru/docs/build/voice).
## Значок брендинга [#значок-брендинга]
Удаление значка доступно на Operate и Scale. Сайты Launch сохраняют реферальный значок Make Agent Fast. Сохранение настройки значка тоже обновляет живое встраивание без повторной публикации.
---
# Создание агента
Source: /ru/docs/build/create-agent.md
{/* docs-visuals */}
Первый агент начинается с **URL сайта**. Мы сканируем доступные публичные страницы, готовим черновик агента (внешний вид виджета по этим фактам) и оставляем результат неопубликованным, пока вы его не утвердите. Сборка через чат отключена. Функций генерации сайта или конструктора секций нет.
## Вставьте URL [#вставьте-url]
На главной странице вставьте URL и продолжите. Регистрация и вход сохраняют `next=/onboarding/launch?url=…`, поэтому вставлять его снова не придётся. `/try` позволяет посетителям вставить URL и поговорить с черновиком с водяным знаком (только текст, с ограничением) до его активации при регистрации.
Если у вас уже есть сайты, вставленный URL всё равно создаёт **новый** неопубликованный черновик. Тот же URL в процессе возобновляется, а не дублируется. Завершённый сайт первого запуска повторно не используется.
Не вставляйте пароли, приватные данные клиентов или токены коннекторов в поле URL.
## Подождите на экране генерации [#подождите-на-экране-генерации]
Пока собирается черновик, экран генерации показывает реальный прогресс чтения, сборки и проверки — не декоративный индикатор:
| Шаг | Что он делает |
| -------------------- | ----------------------------------------------------------- |
| **Чтение сайта** | Загружает публичные страницы по URL |
| **Сборка агента** | Составляет агента и внешний вид виджета из найденных фактов |
| **Проверка ответов** | Прогоняет самопроверку по этим знаниям |
Обычное ожидание — несколько секунд; большой сайт может занять до минуты. Если сканирование дало мало материала, черновик всё равно использует найденное. Источники можно добавить после проверки.
Черновик никогда не публикуется автоматически. Новые агенты не получают размещённую маркетинговую страницу.
## Проверка и публикация [#проверка-и-публикация]
Вы попадаете на **Проверка и публикация** (первый пункт в боковом меню сайта):
* **Предпросмотр** виджета посетителя
* **Поговорите с агентом** — спросите то, что спросил бы клиент
* **Самопроверка** — необязательные оцениваемые вопросы по вашим знаниям
* **Утвердить и опубликовать** — включает встраивание на вашем существующем сайте
Разговор с агентом здесь — тест владельца. Он не уходит в паблик и не засчитывается в активацию.
Когда ответы звучат как вы, выберите **Утвердить и опубликовать**. Это включает встраивание (`goLiveEmbedAction`). Скопируйте сниппет из раздела **Встраивание** и добавьте его на свой сайт. Отменить публикацию (отключить встраивание) можно в любой момент.
## Активация [#активация]
После запуска добавьте встраивание или подключите канал. Сайт **активируется** первым диалогом посетителя или первой собранной заявкой. Ходы тестировщика в панели никогда не засчитываются.
## Правки после первого черновика [#правки-после-первого-черновика]
Сборки через чат нет. После проверки обновляйте:
* **Характер**, **Знания**, **Голос** и **Внешний вид** на их собственных страницах.
* Сохранение **внешнего вида** обновляет живое встраивание без повторной публикации.
## Начало без URL сайта [#начало-без-url-сайта]
Если отправить форму на главной пустой, **Try** всё равно откроется. Анонимные посетители могут вставить URL там и поговорить с черновиком; активируйте его при регистрации, чтобы продолжить проверку. Вставленный URL всегда идёт по пути экрана генерации выше.
---
# FAQ и товары
Source: /ru/docs/build/faqs-products.md
{/* docs-visuals */}
## Используйте FAQ для канонических ответов [#используйте-faq-для-канонических-ответов]
Создавайте один FAQ на намерение посетителя. Пишите вопрос языком клиентов и держите ответ полным без опоры на другой FAQ.
## Используйте товары для фактов каталога [#используйте-товары-для-фактов-каталога]
Товары подходят для названного предложения с полями вроде описания, цены, наличия или ссылки. Держите транзакционные факты актуальными и избегайте обещаний наличия или доставки, если ваш источник не обновляется надёжно.
## Избегайте дублирования [#избегайте-дублирования]
Не поддерживайте одну цену в заметке, FAQ, разделе страницы и записи товара. Выберите один канонический источник и ссылайтесь на него в других местах.
## Проверяйте клиентское поведение [#проверяйте-клиентское-поведение]
После изменения задайте агенту FAQ в нескольких формулировках и убедитесь, что ссылка и цена товара верны.
---
# Источники знаний
Source: /ru/docs/build/knowledge.md
{/* docs-visuals */}
Знания дают агенту исходный материал для поиска. Добавление источника извлекает простой текст, делит его на фрагменты, создаёт эмбеддинги и связывает эти фрагменты с текущим сайтом. При ответе агент извлекает релевантные фрагменты вместо получения всех источников в каждом промпте.
## Выберите правильный тип источника [#выберите-правильный-тип-источника]
| Источник | Лучше всего для | Важное поведение |
| ------------ | ---------------------------------------------------- | --------------------------------------------------------------------------------------- |
| **Вставка** | Политики, контакты, короткие внутренние заметки | 5–200 000 символов; без автоматического обновления |
| **URL** | Публичные страницы, поддерживаемые в другом месте | Одна страница по умолчанию; опционально сканирование 5, 10 или 20 страниц того же сайта |
| **Загрузка** | PDF, `.txt`, `.md`, `.markdown`, `.csv` | Максимум 20 МБ; в отсканированных PDF только изображения без выделяемого текста |
| **YouTube** | Публичные видео с полезным устным содержимым | Сначала пробует субтитры, затем доступную транскрибацию; наилучшие усилия |
| **Подкаст** | Публичный URL аудио эпизода или поддерживаемая лента | Требует загружаемого аудио и доступного провайдера транскрибации |
| **Лента** | Публичные обновления блога или подкаста RSS/Atom | Извлекает доступные элементы ленты как текст; наилучшие усилия |
Используйте **FAQ и товары** для предсказуемых полей вопрос/ответ или каталога вместо захоронения их в длинном документе. См. [FAQ и товары](/ru/docs/build/faqs-products).
## Добавьте источник [#добавьте-источник]
1. Откройте страницу **Агент** сайта и найдите **Знания**.
2. Выберите **Вставка**, **URL**, **Загрузка**, **YouTube**, **Подкаст** или **Лента**.
3. Введите содержимое или выберите файл.
4. Для обычного URL выберите число страниц для сканирования. Для загружаемых источников опционально выберите автообновление **Ежедневно**, **Еженедельно** или **Никогда**.
5. Выберите **Добавить** и дождитесь результата с числом проиндексированных фрагментов.
6. Задайте вопрос, ответ на который есть только в новом источнике.
Приём знаний расходует кредиты, потому что фрагменты источника эмбеддятся. Он отклоняется, когда у рабочего пространства нет активного доступа или пригодного баланса кредитов.
## Сканируйте публичные страницы безопасно [#сканируйте-публичные-страницы-безопасно]
Краулер принимает публичный HTTP/HTTPS контент и блокирует небезопасные адреса приватных сетей. Начните с одной канонической страницы. Увеличивайте число страниц только когда связанные страницы — часть того же полезного набора информации; большее сканирование может добавить навигацию, юридический шаблон, дублированный текст или устаревшие архивы, ослабляющие поиск.
Выбранное число — максимум, а не обещание. Поведение robots, аутентификация, клиентский рендеринг, редиректы, тип контента, размер ответа и структура ссылок могут уменьшить полученное число. Ответ страницы ограничен 5 МБ и должен содержать достаточно извлекаемого текста.
Для важных фактов за логином вставьте утверждённое резюме или загрузите очищенный экспорт вместо попытки сканировать аутентифицированную страницу.
## Используйте файлы и медиа [#используйте-файлы-и-медиа]
Загруженные PDF и текстоподобные файлы должны содержать извлекаемый текст. OCR для отсканированного PDF только с изображениями не выполняется; конвертируйте его в текст с возможностью поиска перед загрузкой. Держите таблицы простыми, потому что документы со сложной вёрсткой выравниваются в порядок чтения при извлечении.
Приём YouTube предпочитает доступную дорожку субтитров. Если субтитры недоступны, транскрибация зависит от провайдера и сети. Аудио подкаста должно быть публично загружаемым. Результаты ленты зависят от того, сколько текста статьи или эпизода она раскрывает. После любого импорта медиа проверьте заголовок источника и число фрагментов и протестируйте конкретный факт вместо предположения, что вся запись захвачена.
## Планируйте обновление и замену [#планируйте-обновление-и-замену]
Ежедневные и еженедельные расписания доступны для источников URL, YouTube, подкастов и лент. Система повторно загружает сохранённый источник и заменяет его извлекаемые фрагменты при успешном плановом сканировании. Список источников показывает периодичность обновления и время последнего обновления.
Источники вставки и загрузки — снимки. Чтобы исправить или заменить один, удалите его и добавьте обновлённое содержимое. Удаление источника убирает его фрагменты из будущего поиска; оно не редактирует исторические сообщения, уже процитировавшие или пересказавшие старую версию.
Используйте одного понятного владельца для цен, политик и расписаний. Если два активных источника противоречат, поиск может всплыть любое утверждение. Удаляйте заменённые версии вместо добавления «новых» копий рядом.
## Пишите контент, который агент может найти [#пишите-контент-который-агент-может-найти]
* Называйте тему в каждом разделе: «Политика отмены тарифа Pro» находится лучше, чем «Подробнее».
* Размещайте ответ простым языком рядом с соответствующим заголовком.
* Включайте единицы, валюту, часовой пояс, дату вступления в силу и исключения там, где это важно.
* Используйте стабильные канонические URL и описательные имена файлов.
* Отделяйте публичную информацию от внутренних инструкций и приватных записей.
* Держите поведение характера в [Характере и инструкциях](/ru/docs/build/persona), а не внутри фактического исходного материала.
## Тестируйте обоснованные ответы [#тестируйте-обоснованные-ответы]
Создайте небольшой приёмочный набор перед публикацией:
1. Прямой вопрос, ответ на который явно есть в источнике.
2. Перефразировка другими словами.
3. Граничный вопрос, на который источник не отвечает.
4. Недавно изменённый факт.
5. Языковой вариант для каждого настроенного языка агента.
Правильный результат — не всегда уверенный ответ. Когда в источнике нет факта, агент должен следовать инструкциям запасного ответа/эскалации, а не выдумывать. Проверяйте **Диалоги** после запуска на повторяющиеся вопросы без ответа и превращайте проверенные ответы в источник или структурированный FAQ.
## Решение проблем [#решение-проблем]
| Симптом | Проверка |
| --------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
| URL сообщает об отсутствии пригодного текста | Публичный доступ, поддерживаемый тип контента, серверно отрендеренный текст, цель редиректа и размер страницы |
| PDF сообщает об отсутствии выделяемого текста | Скан ли это; прогоните OCR/экспортируйте в PDF с поиском или текстовый файл |
| Импорт YouTube/подкаста не работает | Публичный URL, доступность субтитров/аудио, ключ провайдера транскрибации и ограничения загрузки |
| Правильный факт игнорируется | Результат обработки, формулировка, конфликтующие источники, возраст источника и точный тестовый вопрос |
| Агент раскрывает слишком много | Немедленно удалите приватный источник и ужесточите границы характера и доступ к аккаунту |
| Старый ответ сохраняется | Удалите/замените устаревший источник, дождитесь переиндексации и начните новый тестовый диалог |
Никогда не загружайте учётные данные, приватные ключи, неограниченные экспорты клиентов, медицинские записи или любой контент, который публичный агент не должен раскрывать.
---
# Характер и инструкции
Source: /ru/docs/build/persona.md
{/* docs-visuals */}
## Отделите идентичность от знаний [#отделите-идентичность-от-знаний]
Характер объясняет, кто агент и как он себя ведёт. Знания поставляют факты. «Говори как ассистент поддержки Acme» помещайте в характер; текущий гарантийный срок — в источник знаний.
## Порядок инструкций [#порядок-инструкций]
Пишите инструкции в этом порядке:
1. Идентичность и роль
2. Основная цель посетителя
3. Тон и длина ответа
4. Обязательные действия и вопросы
5. Запрещённые утверждения и чувствительные темы
6. Условия эскалации и сбора заявок
## Границы [#границы]
Укажите агенту, когда говорить, что он не знает, когда цитировать или уточнять ответ и когда предлагать помощь человека. Никогда не инструктируйте его скрывать неопределённость или выдумывать недостающие данные.
## Тестируйте изменения [#тестируйте-изменения]
Изменения характера могут затронуть каждый канал. Перетестируйте частые вопросы, отказы, сбор заявок и поддерживаемые языки перед публикацией крупного изменения.
---
# Голос и живые звонки
Source: /ru/docs/build/voice.md
{/* docs-visuals */}
## Поймите три режима взаимодействия [#поймите-три-режима-взаимодействия]
| Режим | Опыт посетителя | Права и использование |
| ----------------------------------- | ------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- |
| **Текстовый чат** | Печатает сообщение и получает текст | Всегда включён; расходует обычные кредиты ИИ |
| **Голосовые сообщения** | Записывает сообщение, ждёт транскрибации/агента/TTS, получает ответ | Включены во все тарифы; транскрибация, модель и работа речи расходуют кредиты |
| **Живой звонок в реальном времени** | Ведёт разговор с низкой задержкой | Operate: 30 мин/мес; Scale: 90 мин/мес; Launch: недоступно; также заранее списывает кредиты за настроенный лимит звонка |
Текст нельзя отключить. Переключатели голосовых сообщений и реального времени управляют тем, какие дополнительные поверхности могут использовать посетители. Сохранённый переключатель реального времени не переопределяет права тарифа рабочего пространства или отсутствующую конфигурацию провайдера.
## Настройте поведение взаимодействия [#настройте-поведение-взаимодействия]
1. Откройте страницу **Агент** сайта и найдите **Голос**.
2. Оставьте **Текстовый чат** включённым и выберите **Голосовые сообщения** и/или **Живой голос в реальном времени**.
3. Если у агента несколько языков, опционально включите живое зеркалирование языка.
4. Установите автоматический лимит на звонок.
5. Выберите стандартный или доступный клонированный голос.
6. Сохраните и протестируйте каждый включённый режим отдельно.
Лимит звонка принимает от 30 секунд до 20 минут с шагом 30 секунд; по умолчанию 3 минуты. Он завершает отдельный звонок и защищает месячный лимит, но не увеличивает оставшиеся живые минуты тарифа.
## Выберите языки и голос [#выберите-языки-и-голос]
Агенты могут быть настроены на английский, корейский, узбекский и русский. Первый язык — основной. Одноязычный агент продолжает отвечать на этом языке. Мультиязычный текстовый агент зеркалит посетителя, когда посетитель использует один из настроенных языков.
Для живых звонков зеркалирование языка — явная опция, показанная только при двух и более языках. Когда оно выключено, живые звонки используют основной язык. Узбекский голос сейчас работает наилучшими усилиями, потому что покрытие речи провайдеров менее полное; проверьте его с вашим точным провайдером и аудиторией перед запуском.
Стандартные голоса включают варианты с приоритетом английского, мультиязычные и родные корейские. Языковая метка описывает подобранную подачу, а не жёсткую гарантию. Прослушивайте выбранный голос, когда доступен элемент предпросмотра в панели, и всегда тестируйте имена, аббревиатуры, валюты, номера телефонов и специализированную терминологию в реальном потоке посетителей.
## Ключи провайдеров и запасной вариант [#ключи-провайдеров-и-запасной-вариант]
Голосу нужно больше, чем ключ модели:
* Речь-в-текст использует настроенный провайдер транскрибации, например Deepgram или OpenAI.
* Голосовым сообщениям и аудио-ответам коннекторов нужен провайдер синтеза речи, например ElevenLabs или OpenAI.
* Звонкам в реальном времени нужны настроенный провайдер реального времени и лимит тарифа.
* Клонирование голоса требует доступности клонирования ElevenLabs плюс права Operate или Scale.
Голос под управлением платформы использует настроенных провайдеров платформы; личный ключ провайдера не требуется для включённого клонирования. Владельцы Scale могут опционально настроить ключи в **Аккаунт → Ключи AI-провайдеров** и следовать [Ключам провайдеров](/ru/docs/account/provider-keys). Успешный текстовый чат доказывает только путь модели; он не доказывает транскрибацию, синтез речи, загрузку медиа или выпуск сессии реального времени.
## Клонированный голос и запасной вариант [#клонированный-голос-и-запасной-вариант]
Автоматическая речь использует Speko для выбора провайдера для английского, корейского, узбекского и русского. Точный стандартный голос может меняться с выбранным провайдером. Явные выборы провайдера остаются доступными. Транскрибация записанных голосовых сообщений тоже по умолчанию использует Speko; родной вход живого звонка остаётся у провайдера живого разговора.
Выбранный сохранённый клон использует ElevenLabs с учётными данными платформы, которым принадлежит клон. Когда маршрутизация клонов платформы включена, это идёт через Speko с ElevenLabs v3; во время настройки прямой маршрут ElevenLabs остаётся доступным. Личный ключ ElevenLabs для включённого клонирования не нужен. Если клонированная речь не работает, отдельный запрос стандартного голоса идёт через Speko. Сбой Speko может переключиться на доступного прямого провайдера. Неудачные попытки освобождают резерв кредитов перед следующей попыткой; сохранённый клон остаётся выбранным для следующего ответа. Если вся речь не работает, текст остаётся доступным.
Живые звонки передают родное аудио напрямую из OpenAI Realtime или Gemini Live. Входная речь транскрибируется независимо для отображения в чате; ни транскрипт входа, ни завершённый текстовый ответ не требуются перед воспроизведением аудио. Используется встроенный голос провайдера реального времени, даже когда для голосовых сообщений выбран клон или Speko. Клонированные голоса остаются доступными для голосовых сообщений. Поиск знаний, языковые правила, прерывание, лимиты живых минут и предварительные списания за звонок по-прежнему действуют. Живые ответы не делают дополнительный запрос TTS.
## Тестируйте голосовые сообщения [#тестируйте-голосовые-сообщения]
Используйте реальное встраивание, а не только предпросмотр владельца. (Оставшиеся размещённые демо-страницы тоже работают, если у вас есть одна.) Выдайте доступ к микрофону, запишите короткий вопрос и подтвердите смысл транскрипта плюс устный/текстовый ответ. Затем проверьте:
* тихую и шумную обстановку;
* мобильные Safari и Chrome, где актуально;
* длинный вопрос рядом с публичным лимитом аудио 25 МБ;
* отказ в разрешении микрофона;
* неподдерживаемое или низкокачественное аудио;
* каждый настроенный язык.
Для встроенных сайтов родительская CSP и Permissions Policy должны разрешать использование микрофона. См. [Безопасность и CSP](/ru/docs/embed/security).
## Живой разговор на платформе против опубликованного сайта [#живой-разговор-на-платформе-против-опубликованного-сайта]
Живой разговор использует те же элементы управления звонком на двух оболочках:
| Поверхность | Где | Вид | Засчитывается как активация? |
| ------------------------------------- | --------------------------------------------------------------------------- | -------------------------------- | ------------------------------------------- |
| **Тестировщик платформы** | **Поговорите с агентом** на Проверке и тестировщик на **Агенте** | Оболочка панели платформы | Нет — тесты владельца никогда не активируют |
| **Опубликованный сайт и встраивание** | Виджет оставшейся размещённой демо-страницы (если есть) и iframe `embed.js` | Внешний вид арендатора / виджета | Да — звонок посетителя это реальный диалог |
Предпросмотр живого звонка в редакторе внешнего вида использует вид посетителя, а не тестировщик платформы. Тестируйте реальное встраивание перед запуском; успешный тест в панели не доказывает оболочку виджета, разрешение микрофона встраивания или активацию.
**Как на сайте** во внешнем виде следует светлому или тёмному режиму посетителя на странице сайта и встраивании. Фиксированная Светлая или Тёмная закрепляет и чат, и живой звонок. См. [Внешний вид](/ru/docs/build/appearance).
## Тестируйте живые звонки [#тестируйте-живые-звонки]
Подтвердите, что у тарифа есть неиспользованные живые минуты, сайт доступен и ключ провайдера реального времени валиден. Начните с короткого звонка, прервите агента, переключайте языки только когда включено зеркалирование и позвольте настроенному лимиту звонка завершить одну тестовую сессию. Повторите один звонок на реальном встраивании, а не только в тестировщике панели.
Живые минуты — отдельное месячное право от обычных кредитов. Выдача живого токена списывает кредиты за максимальную серверно-авторизованную длительность и резервирует эту длительность против месячного лимита. Поскольку медиа течёт напрямую между браузером и провайдером, более короткий клиентский звонок не может быть проверен, и неиспользованное время не возвращается частично после выдачи токена. Серверные сбои выпуска токена освобождаются; брошенные сессии списываются по авторизованному лимиту. Завершайте тесты чисто и используйте настроенный лимит звонка при прогнозировании. См. [Кредиты и использование](/ru/docs/operate/usage).
## Клонируйте голос ответственно [#клонируйте-голос-ответственно]
Клонирование голоса недоступно на Launch. Operate включает один клон; Scale разрешает несколько при честном использовании. Повторное клонирование сайта, у которого уже есть клон, заменяет клон этого сайта вместо расходования другого слота.
Используйте только свой голос или голос, на который у вас есть явное документированное разрешение. Форма клонирования требует согласия и может потребовать ввести контрольную фразу, привязанную к сайту. Успешный клон создаёт проверяемую запись согласия, когда включён усиленный контроль согласия.
Загрузите минимум один и максимум 10 аудиообразцов. Каждый файл может быть не более 10 МБ, с общим максимумом 50 МБ. Используйте чистые сухие записи с одним диктором, постоянным расстоянием, минимальным фоновым шумом и репрезентативным произношением. Не смешивайте разных дикторов и сильно обработанную музыку.
Клонирование резервирует, а затем рассчитывает кредиты. Неудачный вызов провайдера возвращает резерв; успешный клон становится выбранным голосом агента.
## Раскрытие и безопасность [#раскрытие-и-безопасность]
Сообщайте звонящим, что они взаимодействуют с ИИ и синтетической или клонированной речью, когда этого требует применимый закон, политика провайдера или ожидания пользователей. Не клонируйте и не имитируйте человека без разрешения, не используйте клон для вводящих в заблуждение заявлений о личности и не собирайте ненужные записи. Определите, как записи, транскрипты, записи согласия и данные нижестоящих провайдеров хранятся и удаляются.
## Решение проблем [#решение-проблем]
| Симптом | Проверка |
| -------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
| Текст работает, но элементы голоса нет | Ключи провайдеров транскрибации/TTS/реального времени, переключатель функции, тариф, баланс кредитов и разрешение браузера |
| Запись не может начаться | HTTPS, разрешение микрофона, устройство ввода, Permissions Policy встраивания и поддержка браузера |
| Транскрипт неточен | Качество аудио, выбранный набор языков, акцент/терминология и покрытие провайдера транскрибации |
| Устный ответ звучит неправильно | Выбранный голос, исходный текст, пунктуация, языковая метка и доступность провайдера |
| Живой звонок сразу завершается | Оставшиеся минуты, лимит на звонок, ключ провайдера, сеть и состояние параллельных сессий |
| Клон отклонён | Слот тарифа, фраза согласия, 1–10 поддерживаемых аудиофайлов, лимиты на файл/суммарно и ключ ElevenLabs |
Трактуйте голос как отдельную поверхность запуска: приёмочные тесты текста необходимы, но недостаточны.
---
# Discord
Source: /ru/docs/connectors/discord.md
{/* docs-visuals */}
## Создайте приложение Discord [#создайте-приложение-discord]
Следуйте официальному [быстрому старту приложений](https://docs.discord.com/developers/quick-start/getting-started) Discord и [обзору взаимодействий](https://docs.discord.com/developers/interactions/overview). Создайте приложение в Discord Developer Portal и соберите:
| Поле Make Agent Fast | Расположение в Discord | Назначение |
| -------------------- | ---------------------- | -------------------------------------------------------------------------------- |
| **Application ID** | General Information | Идентифицирует приложение и команду |
| **Public Key** | General Information | Проверяет подписанные Ed25519 взаимодействия; ровно 64 шестнадцатеричных символа |
| **Токен бота** | Страница Bot | Проверяет приложение и регистрирует `/ask`; держите в секрете |
Сброс токена бота немедленно аннулирует предыдущий. Public Key не секретен, но должен принадлежать тому же приложению, что и токен бота.
## Подключите и зарегистрируйте `/ask` [#подключите-и-зарегистрируйте-ask]
Откройте страницу **Коннекторы** сайта, выберите **Discord**, введите три значения и нажмите **Подключить**.
Make Agent Fast проверяет токен бота против конечной точки приложения Discord и отклоняет Public Key, не совпадающий с приложением. Он нормализует опечатанный Application ID к реальному ID аутентифицированного приложения, затем создаёт или обновляет глобальную команду `/ask question`, не удаляя другие команды приложения.
После сохранения скопируйте показанный **Interactions Endpoint URL** в **General Information → Interactions Endpoint URL** в Discord и сохраните. Discord отправляет подписанный `PING`; Make Agent Fast проверяет подпись и возвращает требуемый `PONG`.
## Установите и протестируйте [#установите-и-протестируйте]
Используйте настройки установки Discord, чтобы авторизовать приложение на тестовом сервере с разрешениями, требуемыми для команд приложения. Распространение глобальной команды может занять время.
Запустите `/ask`, заполните обязательную опцию `question` и отправьте. Make Agent Fast подтверждает взаимодействие до короткого дедлайна Discord, запускает агента, затем редактирует отложенный исходный ответ. История диалога привязана к пользователю Discord, поэтому более поздние запросы `/ask` могут сохранять контекст.
Текущий коннектор только текстовый. Он не читает голосовые каналы, вложения, обычные сообщения каналов или личные сообщения; только зарегистрированное взаимодействие `/ask` входит в агента.
## Ротация или отключение [#ротация-или-отключение]
Если токен бота раскрыт, сбросьте его в Discord, обновите коннектор и проверьте `/ask` снова. Если меняется само приложение, обновите все три значения и Interactions Endpoint URL для этого приложения.
Отключение или удаление коннектора не удаляет приложение Discord или глобальную команду. Удалите приложение с серверов и удалите устаревшие учётные данные провайдера отдельно при выводе из эксплуатации.
## Решение проблем [#решение-проблем]
| Симптом | Решение |
| --------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
| Коннектор отклоняет поля | Используйте токен бота и 64-символьный Public Key из одного приложения |
| Discord отклоняет конечную точку | Подтвердите публичный HTTPS, вставьте сгенерированную конечную точку и пересохраните учётные данные перед повтором |
| `/ask` отсутствует | Подтвердите установку/авторизацию команды, дождитесь глобального распространения и переподключитесь для повторной регистрации |
| Взаимодействие сообщает, что приложение не ответило | Проверьте, что коннектор включён, и изучите ошибки Make Agent Fast/Discord; проверка подписи конечной точки должна пройти |
| Другие сообщения чата игнорируются | Ожидаемо; интеграция обрабатывает только `/ask` |
| Ответ обрезан | Ответы сообщений Discord ограничены 2 000 символами |
Никогда не раскрывайте токен бота в клиентском коде, репозиториях, логах или скриншотах.
---
# Instagram
Source: /ru/docs/connectors/instagram.md
{/* docs-visuals */}
## Что делает этот коннектор [#что-делает-этот-коннектор]
Клиенты отправляют **личное сообщение** вашему профессиональному аккаунту Instagram. Make Agent Fast отвечает тем же обоснованным агентом, что и ваше встраивание на сайте. Это официальный [Instagram Messaging API](https://developers.facebook.com/docs/messenger-platform/instagram) на профессиональном аккаунте, привязанном к Facebook-странице.
Вне объёма: ответы комментариев в ЛС, ответы на сторис, комментарии ленты, скрейпинг и неофициальный вход Instagram. Это не ЛС в этом коннекторе.
То же приложение Meta может также питать [Messenger](/ru/docs/connectors/messenger) и [WhatsApp](/ru/docs/connectors/whatsapp). Instagram остаётся **отдельной строкой канала**, чтобы оплата, ветки входящих и привязка вебхуков оставались различимыми.
## Подготовьте приложение Meta и аккаунт Instagram [#подготовьте-приложение-meta-и-аккаунт-instagram]
Следуйте официальному [гайду по началу работы с Instagram Messaging](https://developers.facebook.com/docs/messenger-platform/instagram/get-started) Meta. Вам нужно:
1. **Профессиональный** аккаунт Instagram (Business или Creator).
2. Этот аккаунт, **привязанный** к Facebook-странице, которую вы администрируете.
3. Приложение Meta с продуктом Instagram / Messenger и включёнными сообщениями Instagram.
4. **Токен доступа Страницы** для этой Страницы и **32-символьный шестнадцатеричный секрет приложения**.
Соберите:
| Поле Make Agent Fast | Значение провайдера | Назначение |
| -------------------------- | ------------------------------------------------------ | ------------------------------------------------------------- |
| **Токен доступа Страницы** | Токен, выданный для привязанной Facebook-страницы | Читает привязанный аккаунт Instagram и отправляет ответы в ЛС |
| **Секрет приложения** | 32-символьный шестнадцатеричный секрет приложения Meta | Проверяет подписанные входящие запросы вебхука |
Не вставляйте токен доступа пользователя или токен для другой Страницы. Проверка Graph отказывает, если у Страницы нет привязанного профессионального аккаунта Instagram.
На Make Agent Fast нет платформенного OAuth входа Instagram. Вы приносите учётные данные из **вашего** приложения Meta.
## Сохраните и проверьте учётные данные [#сохраните-и-проверьте-учётные-данные]
Откройте страницу **Коннекторы** сайта, выберите **Instagram**, введите токен доступа Страницы и секрет приложения и нажмите **Подключить**.
Make Agent Fast вызывает Graph с `appsecret_proof`, требует `instagram_business_account` и привязывает входящие события к этому id аккаунта Instagram. Затем карточка коннектора показывает свой **URL вебхука** и **Токен проверки**.
Подключение **нового** канала требует Operate или Scale.
## Настройте вебхук Instagram [#настройте-вебхук-instagram]
В том же приложении Meta:
1. Откройте настройки вебхука Instagram (или Messenger).
2. Вставьте **URL вебхука** и **Токен проверки** коннектора.
3. Завершите вызов проверки.
4. Подпишите поле Instagram `messages`.
5. Убедитесь, что Страница и профессиональный аккаунт Instagram связаны с приложением.
6. Убедитесь, что режим приложения разрешает вашего тестового пользователя.
Токен проверки используется только для начального вызова. События во время работы должны нести `X-Hub-Signature-256`, совпадающий с секретом приложения. Make Agent Fast также отклоняет события, адресованные другому аккаунту Instagram, даже если они пришли от того же приложения Meta, и игнорирует полезные нагрузки Messenger `object: "page"` на этом URL.
## Протестируйте возможности [#протестируйте-возможности]
Отправьте обычное ЛС с разрешённого тестового аккаунта не-администратора и подтвердите ответ плюс ветку в **Диалогах**. Затем протестируйте аудиозаметку, если входящий голос важен.
Текст и поддерживаемое входящее аудио обрабатываются. Ответы только текстовые. Эхо ваших собственных сообщений, упоминания в сторис, изображения и другие неподдерживаемые вложения игнорируются.
## Готовность к продакшену [#готовность-к-продакшену]
Завершите разрешения Meta, **App Review** (`instagram_manage_messages` и связанные разрешения Страницы), проверку бизнеса, URL конфиденциальности и шаги публикации. Успех в режиме разработки с аккаунтом роли приложения не доказывает, что публика может писать интеграции в ЛС.
Задокументируйте владеющее приложение Meta, ID Страницы и ID аккаунта Instagram для операторов. Токен Страницы может перестать работать при изменении владельца, разрешений, связи с бизнесом или политики провайдера.
## Ротация или отключение [#ротация-или-отключение]
Сгенерируйте замещающий токен Страницы, обновите коннектор, протестируйте с разрешённого пользователя, затем аннулируйте старый токен. Обновляйте Make Agent Fast немедленно после ротации секрета приложения.
Отключение или удаление коннектора не отписывает Instagram в Meta. Удалите подписку и неиспользуемые учётные данные провайдера при окончательном выводе интеграции из эксплуатации.
## Решение проблем [#решение-проблем]
| Симптом | Решение |
| ---------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- |
| Токен отклонён | Убедитесь, что это токен Страницы для нужной Страницы и секрет приложения принадлежит тому же приложению |
| Страница валидна, но «нет привязанного аккаунта Instagram» | Привяжите профессиональный аккаунт Instagram к Странице в Meta Business Suite |
| Проверка вебхука не работает | Скопируйте текущий URL и токен проверки точно; используйте публичный HTTPS |
| Проверка работает, но сообщения не приходят | Подпишите поле Instagram `messages`, затем проверьте режим приложения, роль пользователя и логи доставки Meta |
| Запросы неавторизованы | Исправьте секрет приложения; подписанные POST-запросы не используют токен проверки |
| Входящее сообщение появляется, но ответа нет | Проверьте валидность токена Страницы, `instagram_manage_messages`, ошибку отправки провайдера и статус коннектора |
| Голос получает текстовый ответ | Ожидаемо; исходящий голос Instagram сейчас не поддерживается |
| Публичные клиенты не могут писать в ЛС | Завершите Meta App Review; режим разработки доставляет только тестировщикам с ролью приложения |
Учётные данные провайдера допустимы только в аутентифицированной форме коннектора или доверенном серверном вызове API.
---
# KakaoTalk
Source: /ru/docs/connectors/kakao.md
{/* docs-visuals */}
## Чек-лист настройки [#чек-лист-настройки]
Карточка KakaoTalk в Make Agent Fast показывает этот список с уже заполненными вашими значениями, поэтому большинство владельцев проходят его там. Каждый шаг происходит в консоли Kakao, кроме двух полей, отмеченных ниже.
1. **Создайте бота** в Kakao i Open Builder. Один бот содержит каждый блок сценария, которым отвечает канал; пропустите этот шаг, если у канала уже есть бот, которого вы можете редактировать.
2. **Добавьте скилл** и установите его URL в **URL скилла** коннектора, затем добавьте пользовательский заголовок запроса `X-Kakao-Bot-Secret`, несущий ваш **Секрет бота**. Kakao не подписывает запросы скилла, поэтому этот заголовок — единственное доказательство, что вызов пришёл от вашего бота.
3. **Направьте резервный блок на скилл**, чтобы каждый вопрос, который ваши сценарии не обрабатывают, достигал агента. Подключите именованный блок сценария к тому же скиллу, когда он тоже должен отвечаться агентом.
4. **Включите опцию обратного вызова** для этого блока. Kakao отбрасывает ответ скилла, занимающий больше пяти секунд; с включённым обратным вызовом Make Agent Fast сразу возвращает пузырь ожидания и отправляет готовый ответ на `userRequest.callbackUrl` в течение минуты, в которую мы считаем этот одноразовый URL живым.
5. **Подключите KakaoTalk-канал** к боту, затем вставьте тот же ID канала в поле **Channel ID** коннектора в Make Agent Fast.
6. **Разверните бота.** Изменения Open Builder достигают посетителей только после развёртывания, и каждое последующее изменение скилла или блока требует ещё одного.
Остальная часть этой страницы — развёрнутая форма тех же шести шагов.
## Подготовьте ресурсы Kakao [#подготовьте-ресурсы-kakao]
Создайте или выберите приложение Kakao Developers, KakaoTalk-канал и бота Kakao i Open Builder, которые будут владеть интеграцией. Изучите официальную [документацию Open Builder](https://i.kakao.com/docs/key-concepts-block#skill) Kakao о скиллах и блоках.
Соберите или создайте эти значения:
| Поле Make Agent Fast | Источник | Назначение |
| -------------------- | ------------------------------------------------ | -------------------------------------------------------------- |
| **Channel ID** | Публичный/поисковый ID KakaoTalk-канала | Связывает коннектор с нужным каналом |
| **REST API ключ** | Ключи приложения Kakao Developers | Проверяет приложение Kakao |
| **Секрет бота** | Длинный случайный секрет, который вы генерируете | Аутентифицирует входящие запросы скилла в `X-Kakao-Bot-Secret` |
Секрет бота обязателен на развёрнутых окружениях Make Agent Fast, потому что вызовы скилла Kakao не предоставляют платформенную подпись. Сгенерируйте уникальное значение с высокой энтропией и не используйте REST API ключ как секрет.
## Сохраните коннектор [#сохраните-коннектор]
Откройте страницу **Коннекторы** сайта, выберите **KakaoTalk-канал**, введите все три значения и нажмите **Подключить**. Make Agent Fast проверяет REST API ключ, где позволяют разрешения Kakao, и показывает уникальный **URL вебхука** коннектора после сохранения.
Make Agent Fast не может создать скилл Open Builder или привязать его к блоку за вас; оставшаяся работа — в консоли Kakao.
## Настройте скилл Open Builder [#настройте-скилл-open-builder]
1. В Kakao i Open Builder создайте скилл для нужного бота.
2. Установите URL скилла в скопированный **URL вебхука** коннектора.
3. Добавьте пользовательский заголовок запроса `X-Kakao-Bot-Secret`, значение которого точно совпадает с **Секретом бота**.
4. Подключите скилл к резервному блоку или блоку сценария, который должен вызывать агента.
5. Включите опцию обратного вызова этого блока, чтобы медленные ответы переживали пятисекундный дедлайн скилла Kakao.
6. Сохраните и разверните/опубликуйте конфигурацию бота по процессу Kakao.
Заголовок нечувствителен к регистру по правилам HTTP, но значение секрета точное. Любой, кто знает URL вебхука, но не этот секрет, должен получить неавторизованный ответ.
## Протестируйте возможности [#протестируйте-возможности]
Сначала используйте тестовый инструмент Open Builder, затем подключённый KakaoTalk-канал. Отправьте реалистичный корейский или поддерживаемый языковой текстовый вопрос и подтвердите встроенный ответ, **Последнее сообщение** и ветку в **Диалогах**.
Карточка коннектора копирует тело запроса ниже; то же тело работает с `curl` против URL скилла. Оно не несёт `callbackUrl`, поэтому ответ возвращается встроенным — более простая вещь для первой проверки.
```json
{
"intent": {
"id": "5a56ec0cf65e53002d34e0f4",
"name": "Fallback block"
},
"userRequest": {
"timezone": "Asia/Seoul",
"utterance": "What are your opening hours?",
"lang": "kr",
"user": {
"id": "kakao-test-user",
"type": "botUserKey",
"properties": {
"plusfriendUserKey": "kakao-test-user"
}
},
"block": {
"id": "5a56ec0cf65e53002d34e0f4",
"name": "Fallback block"
}
},
"bot": {
"id": "5a56ec0cf65e53002d34e0f2",
"name": "Your bot"
},
"action": {
"id": "5a56ec0cf65e53002d34e0f6",
"name": "Make Agent Fast skill",
"params": {},
"detailParams": {},
"clientExtra": {}
}
}
```
Здоровый скилл отвечает в пределах пятисекундного дедлайна одним выводом `simpleText`:
```json
{
"version": "2.0",
"template": {
"outputs": [
{
"simpleText": {
"text": "We are open 9:00–18:00 on weekdays."
}
}
]
}
}
```
Когда опция обратного вызова блока включена, Open Builder добавляет `userRequest.callbackUrl` в запрос. Make Agent Fast тогда сначала отвечает пузырём ожидания и отправляет POST готового ответа на этот одноразовый URL:
```json
{
"version": "2.0",
"useCallback": true,
"data": {
"text": "One moment — I am looking that up."
}
}
```
Текущий контракт скилла только текстовый. Ответ агента — один Kakao `skillResponse` версии `2.0` с выводом `simpleText`, ограниченный ниже текстового лимита Kakao, возвращаемый встроенным или на URL обратного вызова. Голос, файлы, изображения и отдельное исходящее аудио не поддерживаются.
## Ротация или отключение [#ротация-или-отключение]
Чтобы ротировать Секрет бота, обновите коннектор и пользовательский заголовок Open Builder как одно скоординированное изменение, затем немедленно протестируйте. Несовпадение останавливает каждый входящий запрос. Ротируйте REST API ключ в Kakao Developers и Make Agent Fast перед отзывом старого ключа.
Отключение или удаление коннектора не удаляет скилл или блок Open Builder. Удалите или отсоедините эти объекты на стороне провайдера при окончательном выводе интеграции из эксплуатации.
## Решение проблем [#решение-проблем]
| Симптом | Решение |
| ------------------------------------------------------------ | ------------------------------------------------------------------------------------------ |
| Коннектор требует Секрет бота | Сгенерируйте его; развёрнутые окружения отказывают неаутентифицированному вебхуку Kakao |
| REST API ключ отклонён | Используйте REST API ключ нужного приложения Kakao и подтвердите его разрешения канала |
| Open Builder получает неавторизовано | Добавьте/обновите `X-Kakao-Bot-Secret`, чтобы он точно совпадал со значением коннектора |
| Тестовый инструмент показывает резервный ответ вместо ответа | Убедитесь, что блок вызывает сохранённый URL скилла, и изучите логи запросов/ответов Kakao |
| Запросы истекают по времени | Включите опцию обратного вызова блока; без неё Kakao даёт скиллу пять секунд |
| Голос или изображения игнорируются | Ожидаемо; текущий коннектор принимает только текст |
Не раскрывайте REST API ключ или Секрет бота в клиентском коде или публичной документации.
---
# Messenger
Source: /ru/docs/connectors/messenger.md
{/* docs-visuals */}
## Подготовьте приложение Meta и Страницу [#подготовьте-приложение-meta-и-страницу]
Следуйте официальному [гайду по началу работы с Messenger Platform](https://developers.facebook.com/docs/messenger-platform/get-started) Meta. Добавьте Messenger в приложение Meta, подключите Facebook-страницу, которая должна получать сообщения, и убедитесь, что ваш аккаунт может администрировать оба ресурса.
Соберите значения из одного приложения и Страницы:
| Поле Make Agent Fast | Значение провайдера | Назначение |
| -------------------------- | ------------------------------------------------------ | ------------------------------------------------ |
| **Токен доступа Страницы** | Токен, выданный для выбранной Страницы | Читает идентичность Страницы и отправляет ответы |
| **Секрет приложения** | 32-символьный шестнадцатеричный секрет приложения Meta | Проверяет подписанные входящие запросы вебхука |
Не используйте токен доступа пользователя или токен, принадлежащий другой Странице. Состояние разработки/проверки приложения Meta определяет, кто может использовать интеграцию.
## Сохраните и проверьте учётные данные [#сохраните-и-проверьте-учётные-данные]
Откройте страницу **Коннекторы** сайта, выберите **Messenger**, введите токен доступа Страницы и секрет приложения и нажмите **Подключить**.
Make Agent Fast вызывает Graph API с `appsecret_proof`, разрешает ID/имя Страницы и привязывает входящие события к этой точной Странице. Затем карточка коннектора показывает свой **URL вебхука** и **Токен проверки**.
## Настройте вебхук Страницы [#настройте-вебхук-страницы]
В том же приложении Meta:
1. Откройте настройки вебхука Messenger.
2. Вставьте **URL вебхука** и **Токен проверки** коннектора.
3. Завершите вызов проверки.
4. Выберите подписку на события сообщений, требуемую процессом Messenger.
5. Подпишите нужную Facebook-страницу на приложение.
6. Убедитесь, что подписка Страницы и режим приложения разрешают вашего тестового пользователя.
Токен проверки используется только для начального вызова. События во время работы должны нести подпись, совпадающую с секретом приложения. Make Agent Fast также отклоняет события, адресованные другой Странице, даже если они пришли от того же приложения Meta.
## Протестируйте возможности [#протестируйте-возможности]
Отправьте обычное сообщение на Страницу с разрешённого тестового аккаунта не-администратора и подтвердите ответ плюс ветку в **Диалогах**. Затем протестируйте аудиовложение, если входящий голос важен для вашего процесса.
Текст и поддерживаемое входящее аудио обрабатываются. Ответы в текущем коннекторе Messenger только текстовые, даже когда исходное сообщение было голосовым. Квитанции доставки/прочтения, эхо собственных сообщений Страницы, изображения и другие неподдерживаемые вложения игнорируются.
## Готовность к продакшену [#готовность-к-продакшену]
Завершите разрешения, проверку приложения, проверку бизнеса, URL конфиденциальности и шаги публикации Страницы, которые Meta требует для вашей аудитории. Успех в режиме разработки с аккаунтом роли приложения не доказывает, что публика может писать интеграции Страницы.
Задокументируйте владеющее приложение Meta и ID Страницы для операторов. Токен Страницы может перестать работать при изменении владельца, разрешений, связи с бизнесом или политики провайдера.
## Ротация или отключение [#ротация-или-отключение]
Сгенерируйте замещающий токен Страницы, обновите коннектор, протестируйте с разрешённого пользователя, затем аннулируйте старый токен. Обновляйте Make Agent Fast немедленно после ротации секрета приложения.
Отключение или удаление коннектора не отписывает Страницу в Meta. Удалите подписку Страницы и неиспользуемые учётные данные провайдера при окончательном выводе интеграции из эксплуатации.
## Решение проблем [#решение-проблем]
| Симптом | Решение |
| -------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
| Токен отклонён | Убедитесь, что это токен Страницы для нужной Страницы и секрет приложения принадлежит тому же приложению |
| Проверка вебхука не работает | Скопируйте текущий URL и токен проверки точно; используйте публичный HTTPS |
| Проверка работает, но сообщения не приходят | Подпишите Страницу и событие сообщений, затем проверьте режим приложения, роль пользователя и логи доставки Meta |
| Запросы неавторизованы | Исправьте секрет приложения; подписанные POST-запросы не используют токен проверки |
| Входящее сообщение появляется, но ответа нет | Проверьте валидность токена Страницы, разрешения сообщений, ошибку отправки провайдера и статус коннектора |
| Голос получает текстовый ответ | Ожидаемо; исходящий голос Messenger сейчас не поддерживается |
Учётные данные провайдера допустимы только в аутентифицированной форме коннектора или доверенном серверном вызове API.
---
# Обзор коннекторов
Source: /ru/docs/connectors/overview.md
{/* docs-visuals */}
Коннекторы получают события от внешней платформы сообщений, нормализуют текст или поддерживаемое аудио, запускают того же агента сайта и возвращают ответ, подходящий каналу. Каждый внешний пользователь получает историю диалогов с привязкой к каналу, видимую в **Диалогах**.
Подключение **нового** канала требует Operate или Scale. Существующие подключения продолжают работать на Launch.
## Матрица возможностей [#матрица-возможностей]
| Канал | Входящий текст | Входящий голос | Исходящий текст | Исходящий голос | Настройка провайдера после сохранения |
| --------- | -------------- | -------------- | ----------------------- | --------------- | -------------------------------------------------------------------------- |
| Telegram | Да | Да | Да | Опционально | Вебхук регистрируется автоматически |
| WhatsApp | Да | Да | Да | Опционально | Добавьте вебхук Meta и подписку `messages` |
| Messenger | Да | Да | Да | Нет | Добавьте вебхук Meta и подпишите Страницу |
| Instagram | Да | Да | Да | Нет | Добавьте вебхук Meta Instagram и подпишите `messages` |
| Discord | Вопрос `/ask` | Нет | Ответ `/ask` | Нет | Вставьте конечную точку взаимодействий; регистрация команды автоматическая |
| KakaoTalk | Да | Нет | Встроенный ответ скилла | Нет | Добавьте URL скилла, заголовок и блок в Open Builder |
«Входящий голос» означает, что поддерживаемое голосовое/аудио сообщение загружается и транскрибируется. «Исходящий голос» требует работающего провайдера речи и опции коннектора **Отвечать голосом**. Неподдерживаемые вложения вроде изображений и локаций игнорируются, а не интерпретируются как инструкции агенту.
## Перед подключением [#перед-подключением]
1. Протестируйте предполагаемого агента сайта в панели. Публикация рекомендуется, чтобы его публичные ссылки и страницы работали; черновик коннектора всё равно может отвечать.
2. Настройте рабочий ключ модели в **Настройки → Ключи AI-провайдеров**. Настройте ключи речи перед тестированием голоса. См. [Ключи провайдеров](/ru/docs/account/provider-keys).
3. Создайте выделенное приложение, бота, номер или канал у внешнего провайдера. Не используйте повторно учётные данные, принадлежащие несвязанной продакшен-интеграции.
4. Убедитесь, что ваше развёртывание имеет публичный HTTPS базовый URL коннекторов. Вебхуки провайдеров не могут доставлять на `localhost` без защищённого туннеля разработки.
5. Откройте страницу **Коннекторы** сайта и выберите канал.
При сохранении Make Agent Fast вызывает провайдера для проверки отправленных учётных данных. Метка «подключено» означает, что проверка учётных данных и любое автоматическое обеспечение завершились; она не доказывает, что ручной шаг консоли Meta, Discord или Kakao был выполнен.
## Обращение с учётными данными [#обращение-с-учётными-данными]
Формы коннекторов принимают учётные данные провайдеров только из аутентифицированной панели или серверного публичного API. Секреты зашифрованы при хранении и никогда не возвращаются в ответах списка коннекторов. Относитесь к следующим значениям как к паролям:
* Токен бота Telegram
* Токены доступа Meta и секрет приложения
* Токен бота Discord
* REST API ключ Kakao и секрет бота
Не помещайте их в браузерный JavaScript, скриншоты, тикеты поддержки или систему контроля версий. URL вебхука и токен проверки Meta — значения конфигурации, предназначенные для копирования в соответствующую консоль провайдера; они не заменяют учётные данные провайдера.
## Подключение через API [#подключение-через-api]
Используйте серверный ключ MAF API с `connectors:write`. Объект `credentials` конкретного канала доступен только для записи. Ответ опускает секреты в открытом виде и включает URL вебхука, нужный для ручной настройки провайдера.
```bash
curl -X POST "https://makeagent.fast/api/v1/sites/$SITE_ID/connectors" \
-H "Authorization: Bearer $MAF_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: connector-telegram-v1" \
-d '{
"channel": "telegram",
"credentials": { "bot_token": "'$TELEGRAM_BOT_TOKEN'" },
"config": { "reply_with_voice": false }
}'
```
Сохранение того же канала заменяет его учётные данные/конфигурацию, сохраняя токен маршрутизации. Используйте [Аутентификацию API](/ru/docs/api/authentication), [Области и ошибки](/ru/docs/api/scopes-errors) и [Справочник API](/ru/docs/api/reference) для правил продакшен-интеграции.
## Тестируйте и наблюдайте [#тестируйте-и-наблюдайте]
Используйте тестового пользователя провайдера и реалистичный вопрос, зависящий от знаний агента. Подтвердите всё следующее:
* Провайдер принимает или проверяет конечную точку вебхука.
* Сообщение достигает агента и получает ожидаемый ответ.
* **Последнее сообщение** меняется на карточке коннектора.
* Ветка появляется в **Диалогах** с правильным каналом.
* Любое ограничение проверки/режима разработки провайдера понято перед публичным запуском.
* Голос тестируется отдельно от текста, когда канал его поддерживает.
Карточка коннектора показывает последнюю ошибку провайдера или доставки. Панели провайдеров тоже хранят логи доставки; сравнивайте временные метки и идентификаторы событий, когда только одна сторона сообщает о запросе.
## Отключение, ротация или удаление [#отключение-ротация-или-удаление]
**Отключение** останавливает обработку, сохраняя запись коннектора. Вебхук Telegram удаляется при отключении и регистрируется снова при включении; подписки провайдера, настроенные в консоли, остаются и тоже должны быть приостановлены на стороне провайдера при необходимости. **Удаление** удаляет коннектор Make Agent Fast и пытается наилучшими усилиями демонтировать провайдера, но не удаляет внешнее приложение, не отзывает его учётные данные и не стирает существующую историю диалогов.
Для ротации создайте новый токен провайдера, обновите коннектор, протестируйте его, затем отзовите старый токен. Если учётные данные были раскрыты, сначала отзовите их у провайдера и трактуйте интервал как инцидент безопасности.
## Частые сбои [#частые-сбои]
| Симптом | Проверка |
| ------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------- |
| Учётные данные не проходят проверку | Правильное приложение/бот, тип токена, срок действия, требуемое разрешение провайдера и скопированные символы |
| Проверка вебхука не работает | Публичный HTTPS URL, точный токен проверки, правильный продукт провайдера и секрет подписи запросов |
| Проверка успешна, но сообщения не приходят | Подписка на события, связь Страницы/номера/канала, режим приложения провайдера и состояние коннектора |
| Текст работает, голос нет | Возможность канала, ключ речи/транскрибации, поддерживаемое аудио, разрешение медиа и срок загрузки провайдера |
| Ответы прекращаются после ротации | Новые учётные данные сохранены, старые отозваны только после тестирования, и ручная подписка провайдера всё ещё указывает на этот вебхук |
Продолжите гайдом по каналу для точных полей провайдера и последовательности в консоли.
---
# Telegram
Source: /ru/docs/connectors/telegram.md
{/* docs-visuals */}
## Быстрая настройка [#быстрая-настройка]
Если на коннекторе Telegram доступно **Создать через QR**, выберите его, отсканируйте QR-код или нажмите **Открыть Telegram** и коснитесь **Создать бота** в боте настройки. Вернитесь в Make Agent Fast, проверьте имя пользователя бота и выберите **Подключить этого бота**. Копирование токена не требуется. Настройка истекает через 15 минут; её можно отменить и начать заново.
Если быстрая настройка недоступна, используйте **Подключение с токеном бота** ниже. Оба метода используют одни проверки подключения и подтверждение замены.
Форма создания предлагает отображаемое имя вашего агента и имя пользователя в формате `maf___bot`. Оба редактируемы; случайная часть снижает столкновения имён, но финальную проверку доступности делает Telegram. Существующие боты не переименовываются.
После создания бот настройки отправляет кнопку **Подключить этого бота**, открывающую проверку подключения вашего агента с аутентификацией. Одно создание бота не подключает его. После успешного подтверждения **Открыть бота** ведёт к диалогу для тестирования. `/start` или `/help` восстанавливает активную настройку или показывает кнопки панели и гайда.
## Создайте и подготовьте бота вручную [#создайте-и-подготовьте-бота-вручную]
Следуйте официальному [Введению в ботов](https://core.telegram.org/bots) Telegram и [гайду BotFather](https://core.telegram.org/bots/features#botfather):
1. Откройте проверенный аккаунт **@BotFather** в Telegram.
2. Выполните `/newbot`, выберите отображаемое имя и уникальное имя пользователя, заканчивающееся на `bot`.
3. Скопируйте токен бота. Любой с этим токеном управляет ботом.
4. Опционально настройте фото, описание, текст «о боте» и локализованную справку команд в BotFather перед запуском.
Токен предназначен для Telegram Bot API; это не код входа Telegram, API ID или API хеш.
## Подключите в Make Agent Fast [#подключите-в-make-agent-fast]
Откройте страницу **Коннекторы** сайта, выберите **Telegram**, вставьте **Токен бота**, выберите, должны ли поддерживаемые ответы также озвучиваться, и нажмите **Подключить**.
Make Agent Fast вызывает Telegram `getMe` для проверки токена и отображения имени пользователя бота. Затем вызывает `setWebhook` с публичным HTTPS URL коннектора, секретным токеном проверки и `message`, `callback_query` и `my_chat_member` как принимаемыми типами обновлений. Существующие ожидающие обновления не отбрасываются.
Ручной шаг вебхука обычно не требуется. Остановите любой сервис опроса перед подключением. Если у бота есть другой получатель вебхука, проверьте и подтвердите его замену; Make Agent Fast не перехватывает его молча. Только один бот актуален на агента. Бот, уже привязанный к другому агенту, должен быть сначала отключён там.
## Протестируйте диалог [#протестируйте-диалог]
1. Откройте ссылку `t.me` бота с аккаунта Telegram не владельца.
2. Выберите **Запустить**; боты не могут начать диалог с пользователем.
3. Отправьте текстовый вопрос по знаниям.
4. Отправьте голосовое сообщение, если голос включён.
5. Убедитесь, что ответы приходят, **Последнее сообщение** меняется и ветка появляется в **Диалогах**.
Личные сообщения публичны по умолчанию: посетителям не нужно одобрение владельца. Ответы в группах выключены, пока владелец не включит **Отвечать в группах при упоминании или ответе**. Режим приватности Telegram и разрешения групп по-прежнему действуют. Сначала тестируйте личные сообщения.
## Поведение голоса [#поведение-голоса]
Telegram поддерживает входящий голос и исходящий голос в этом коннекторе. Входящий голос загружается и транскрибируется перед ходом агента. С включённым **Отвечать голосом** и доступным провайдером речи Make Agent Fast отправляет голосовой/аудио ответ в дополнение к тексту. Если транскрибация или речь не работает, попросите пользователя повторить текстом и проверьте ошибку коннектора.
## Ротация, отключение или удаление [#ротация-отключение-или-удаление]
Если токен раскрыт, сгенерируйте/отзовите его в BotFather немедленно, обновите коннектор заменой и протестируйте снова. Обновление учётных данных для того же бота сохраняет его настройки и приостановленный статус. Замена другим ботом требует подтверждения и держит историю прежнего бота отдельно.
Отключение останавливает ответы локально; удаление архивирует подключение и сохраняет его историю. Ни то, ни другое не удаляет бота Telegram и не вызывает `deleteWebhook`, что могло бы нарушить работу более нового получателя. Архивированные подключения игнорируют входящие сообщения. Быстро созданные боты могут обновить учётные данные после событий жизненного цикла менеджера, но приостановленный бот остаётся приостановленным, а смена владельца отключает подключение для проверки.
## Решение проблем [#решение-проблем]
| Симптом | Решение |
| ----------------------------------------- | ----------------------------------------------------------------------------------------------------------------- |
| Токен отклонён при сохранении | Скопируйте текущий токен BotFather; уберите пробелы и убедитесь, что он принадлежит этому боту |
| Сообщения достаются более старому сервису | Остановите опрос там, переподключитесь здесь и явно подтвердите любую замену получателя |
| Личные сообщения работают, групповые нет | Включите групповые ответы, упомяните или ответьте боту и проверьте режим приватности Telegram и разрешения группы |
| Бот не пишет новому пользователю первым | Ожидаемое поведение Telegram; попросите пользователя открыть бота и выбрать **Запустить** |
| Текст работает, голос нет | Проверьте ключи модели/транскрибации/речи и повторите с поддерживаемым голосовым сообщением Telegram |
Никогда не вставляйте живой токен в документацию, исходный код, аналитику или скриншот поддержки.
---
# WhatsApp
Source: /ru/docs/connectors/whatsapp.md
{/* docs-visuals */}
## Подготовьте приложение Meta и номер [#подготовьте-приложение-meta-и-номер]
Используйте официальный [гайд по началу работы с WhatsApp Cloud API](https://developers.facebook.com/docs/whatsapp/cloud-api/get-started) Meta, чтобы создать или выбрать приложение Meta, добавить продукт WhatsApp и связать аккаунт WhatsApp Business и номер телефона.
Соберите эти три значения из одного приложения и номера:
| Поле Make Agent Fast | Значение провайдера | Примечания |
| ---------------------- | ------------------------ | ------------------------------------------------------------------------------------------------------------------ |
| **ID номера телефона** | Числовой Phone Number ID | Это не видимый номер `+` и не WABA ID |
| **Токен доступа** | Токен доступа Cloud API | Временные токены панели истекают; используйте подходящий долгоживущий токен системного пользователя для продакшена |
| **Секрет приложения** | Секрет приложения Meta | 32-символьный шестнадцатеричный секрет для проверки подписи вебхука |
Выдавайте только разрешения, нужные для номера и процесса сообщений. Держите ресурсы разработки/тестирования отдельно от продакшен-номера.
## Сохраните и проверьте учётные данные [#сохраните-и-проверьте-учётные-данные]
Откройте страницу **Коннекторы** сайта, выберите **WhatsApp**, введите все три значения, выберите **Отвечать голосом** при необходимости и нажмите **Подключить**.
Make Agent Fast проверяет номер через Graph API с токеном доступа плюс `appsecret_proof`; это ловит неправильный номер, токен или секрет приложения до начала трафика вебхуков. Затем карточка коннектора раскрывает уникальный **URL вебхука** и **Токен проверки**.
## Настройте вебхук Meta [#настройте-вебхук-meta]
В том же приложении Meta:
1. Откройте конфигурацию вебхука WhatsApp.
2. Вставьте **URL вебхука** коннектора как URL обратного вызова.
3. Вставьте **Токен проверки** коннектора точно; он чувствителен к регистру.
4. Завершите проверку.
5. Подпишите аккаунт/номер WhatsApp Business на поле вебхука `messages`.
6. Убедитесь, что приложение и бизнес-ресурсы доступны предполагаемым тестовым или продакшен-пользователям.
Токен проверки доказывает владение во время GET-вызова проверки. Запросы POST во время работы отдельно аутентифицируются подписью секрета приложения Meta; не заменяйте одно другим.
## Тестируйте текст и голос [#тестируйте-текст-и-голос]
Сначала отправьте сообщение с разрешённого тестового номера. В режиме разработки Meta незарегистрированные пользователи могут не достигать приложения. Подтвердите ветку и канал в **Диалогах** и следите за **Последним сообщением** на карточке коннектора.
Входящий текст и голос поддерживаются. С включённым **Отвечать голосом** и настроенной речью Make Agent Fast загружает сгенерированное аудио через Cloud API и отправляет его вместе с текстовым ответом. Изображения, локации, контакты и другие неподдерживаемые типы сообщений игнорируются.
## Готовность к продакшену [#готовность-к-продакшену]
Перед рекламой номера завершите проверку бизнеса Meta, проверку приложения, отображаемое имя, шаблоны и шаги политики сообщений, требуемые для вашего случая. Эти требования контролируются Meta и могут меняться независимо от Make Agent Fast.
Используйте продакшен-учётные данные с намеренным владельцем и процедурой истечения/ротации. Запишите, какое приложение Meta, системный пользователь, WABA и Phone Number ID принадлежат этому коннектору, чтобы оператор мог ротировать его без угадывания.
## Ротация или отключение [#ротация-или-отключение]
Создайте замещающий токен с тем же доступом к ресурсам, обновите коннектор, отправьте тестовое сообщение и только потом отзовите старый токен. Если секрет приложения меняется, обновите его в Make Agent Fast немедленно, иначе каждый подписанный входящий вебхук будет отклонён.
Отключение или удаление коннектора не отписывает и не удаляет конфигурацию вебхука Meta. Удалите подписку провайдера тоже при окончательном выводе номера из эксплуатации.
## Решение проблем [#решение-проблем]
| Симптом | Решение |
| ------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------- |
| Учётные данные отклонены | Убедитесь, что токен может читать точный Phone Number ID и секрет приложения из того же приложения |
| Meta не может проверить обратный вызов | Используйте скопированный HTTPS URL и точный токен проверки; убедитесь, что коннектор всё ещё существует |
| Проверка успешна, но сообщения не приходят | Подпишите `messages`, проверьте связь WABA/номера, режим приложения, доступ тестовых пользователей и логи доставки провайдера |
| Вебхуки возвращают неавторизовано | Введите правильный секрет приложения заново; подписи POST Meta не используют токен проверки |
| Исходящие ответы не работают | Проверьте срок токена, разрешения номера, политику/окно получателя и ошибки Graph API |
| Текст работает, аудио нет | Проверьте ключи провайдеров транскрибации/речи и доступ токена к загрузке/скачиванию медиа |
Никогда не раскрывайте токен доступа или секрет приложения в браузерном коде. Используйте публичный API только с доверенного сервера при автоматизации создания коннекторов.
---
# Astro
Source: /ru/docs/embed/astro.md
{/* docs-visuals */}
## Подготовьте origin развёртывания [#подготовьте-origin-развёртывания]
Включите встраивание для агента Make Agent Fast и разрешите точные origin разработки, предпросмотра и продакшена Astro. Важна финальная scheme/hostname/port в браузере, а не хост сборки или URL репозитория.
## Добавьте в общий макет [#добавьте-в-общий-макет]
Разместите стандартный внешний загрузчик непосредственно перед `