ИИ-агенты и MCP
Документация подготовлена для ИИ-помощников: у каждой страницы есть Markdown, вся документация собрана в один файл, а готовый промпт задает агенту правила интеграции.
Промпт для ИИ-помощника
Вставьте этот текст в чат Claude, ChatGPT, Cursor или другого помощника. Он прочитает документацию API и будет следовать нашим правилам интеграции. Ключа в тексте нет.
Посмотреть текст промпта
# Промпт для ИИ-агента: интеграция с API Meliora
Ты помогаешь разработчику подключиться к публичному API Meliora. Meliora: сервис автоматических рассылок и переписки в Telegram для B2B-аутрича. В нем есть кабинет (организация), пространства, кампании (цепочки сообщений), лиды (участие контакта в кампании), сохраненная переписка и лента событий.
## Сначала прочитай документацию
Прежде чем писать код или отвечать, прочитай эти файлы. Они точнее твоей памяти:
1. https://docs.melioralab.io/llms.txt: оглавление документации со ссылками на Markdown каждой страницы.
2. https://docs.melioralab.io/llms-full.txt: вся документация одним файлом.
3. https://docs.melioralab.io/openapi.json: спецификация OpenAPI 3.1, единственный источник маршрутов, параметров и полей.
Если у тебя нет доступа к сети, попроси пользователя прислать содержимое этих файлов.
## Что умеет API
- Версия v1, только чтение. Записи нет: добавить контакты, запустить или остановить цепочку через API нельзя, это делается в кабинете.
- Базовый адрес: https://api.melioralab.io/v1
- Маршруты, все GET: /me, /workspaces, /campaigns, /campaigns/{id}, /leads, /leads/{id}, /leads/{id}/messages, /events.
- Ответы в JSON, время в UTC ISO 8601 с миллисекундами. Ошибки в формате application/problem+json с полями status, code, param и request_id. Обрабатывай ошибки по status и code, а не по тексту.
## Ключ и безопасность
- Ключ передается только в заголовке Authorization: Bearer <ключ>. Никогда не передавай ключ в адресе запроса.
- Бери ключ из переменной окружения MELIORA_API_KEY. Не проси пользователя вставить ключ в чат, не выводи ключ в ответах, коде, журналах и коммитах.
- Вызывай API только с сервера, не из браузера.
- Первый шаг всегда GET /v1/me: он показывает права (scopes), охват (scope) и лимиты ключа. Проверь, что прав хватает для задачи, прежде чем писать остальной код.
## Правила интеграции
- Списки листаются курсором: повторяй запрос с cursor=next_cursor и теми же фильтрами, пока has_more равен true. limit до 100, у /events до 200. Курсор списка живет 15 минут.
- Лента /events содержит два типа событий: lead.first_message_sent и lead.replied. Сохраняй next_cursor из каждого ответа, даже пустого. Применяй события страницы и сохраняй новый курсор в одной транзакции. Дедуплицируй события по event.id. Если has_more равен false, подожди перед следующим опросом, от минуты до часа.
- Первый запуск ленты: GET /v1/events?start=now дает курсор, затем сверь лидов через /v1/leads, затем читай ленту от этого курсора.
- Ответ 410 cursor_expired или 400 cursor_mismatch у ленты: отметь разрыв, получи новый курсор через start=now, сверь кампании и лидов, продолжи опрос.
- Ответы 429 и 503: повтори тот же запрос через Retry-After секунд со случайным разбросом, при повторных 503 увеличивай паузу. Ошибка не сдвигает курсор. Не повторяй в цикле запросы, получившие 401.
- Связь с CRM: ключ связи fields.record_id в карточке лида (/v1/leads, /v1/leads/{id}), только если record_id_status равен valid. В событиях record_id пока не передается: связывай событие с лидом по data.lead.id. Ник Telegram не уникален, не используй его как ключ.
- Статусы в CRM обновляй только вперед: ответ лида не должен откатываться в статус «в работе».
- Тексты сообщений доступны, только если у ключа есть право messages:read и включен «Текст сообщений».
- Пока не приходят: delivery_state со значениями failed и waiting_queue, automation_state со значением completed, reason_code со значениями schedule_window и service_unavailable. В событии ответа automation_stopped всегда null. Архив переписки и лента могут быть неполными: смотри meta.completeness и meta.coverage. Значение unknown нормально, это не ошибка.
## Чего не делать
- Не выдумывай маршруты, параметры, поля и значения, которых нет в openapi.json. Если нужного нет, так и скажи и предложи решение на существующих маршрутах.
- Не обещай запись через API: в v1 ее нет.
- Спорные места сверяй с документацией и давай ссылку на нужную страницу.
Документация: https://docs.melioralab.io
Поддержка: https://t.me/meliora_support
#Файлы для агентов
| Файл | Что внутри |
|---|---|
| llms.txt | Оглавление: ссылки на Markdown каждой страницы с кратким описанием. |
| llms-full.txt | Вся документация одним Markdown-файлом: руководства и справочник. |
| openapi.json | Спецификация OpenAPI 3.1: маршруты, параметры, схемы ответов и примеры. |
/md/<страница>.md | Markdown отдельной страницы, например /md/events-polling.md или /md/reference/leads.md. |
| agent-prompt.txt | Промпт для ИИ-агента текстом. |
На каждой странице руководства и справочника справа от заголовка есть меню «Копировать страницу»: скопировать Markdown страницы, открыть его отдельно или открыть страницу в ChatGPT или Claude с готовым вопросом.
#Как подключить документацию
#Claude, ChatGPT и другие чаты
Вставьте в чат промпт кнопкой «Скопировать промпт». Если у помощника есть доступ в интернет, он сам прочитает llms-full.txt и openapi.json. Если доступа нет, приложите файл llms-full.txt к сообщению.
Для вопроса по одной странице откройте меню «Копировать страницу» и выберите «Открыть в ChatGPT» или «Открыть в Claude».
#Cursor
Добавьте документацию как источник: в настройках документации Cursor укажите адрес https://docs.melioralab.io/llms-full.txt, затем ссылайтесь на нее в чате через @. Промпт можно сохранить в правилах проекта, в папке .cursor/rules.
#Claude Code и другие агенты в терминале
Сохраните промпт в файл инструкций проекта, например CLAUDE.md или AGENTS.md, или передайте его в начале сессии. Агент с доступом к сети прочитает документацию по ссылкам из промпта. Без сети скачайте файлы в проект:
curl -o docs/meliora-llms-full.txt https://docs.melioralab.io/llms-full.txt
curl -o docs/meliora-openapi.json https://docs.melioralab.io/openapi.json#Ключ и агент
Агенту нужен ключ, только если он сам выполняет запросы к API. Чтобы прочитать документацию и написать код, ключ не нужен.
Если агент должен выполнять запросы:
- Выпустите для него отдельный ключ, не тот, что работает в вашей интеграции.
- Дайте минимальные права: обычно хватает «Кампании» и «Лиды». Текст сообщений включайте, только если он действительно нужен.
- Ограничьте охват одной тестовой кампанией.
- Задайте срок действия, например на неделю, и при возможности список разрешенных IP.
- Передайте ключ через переменную окружения
MELIORA_API_KEYв среде, где агент запускает код. Промпт требует от агента брать ключ оттуда и не выводить его. - После работы отзовите ключ.
Подробнее о правах, охвате и отзыве в руководстве Аутентификация и ключи.
#Сервер MCP
Собственного сервера MCP у Meliora пока нет: он есть в планах на странице Что дальше. Агенты с поддержкой MCP могут работать с документацией через свой инструмент чтения веб-страниц или файлов: дайте им ссылки на llms-full.txt и openapi.json или промпт.
Сторонние серверы MCP, которые выдают себя за сервер Meliora, к нам отношения не имеют. Не передавайте им ключи.