HTTP API для интеграций
Как подключить Eggent к своему сайту, CRM, боту или автоматизации — получить токен, отправить сообщение, передать файл, получать ответ потоком и сохранять разговор между запросами.
Внешний API — способ дать задачу агенту из другой программы: бэкенда сайта, CRM, n8n или Make, своего бота, фоновой задачи. Ты отправляешь сообщение, Eggent выполняет его как обычный чат и возвращает ответ.
Адрес
| Где Eggent | Базовый адрес |
|---|---|
| Облако | https://имя.cloud.eggent.ai |
| Свой сервер | адрес, по которому открывается Eggent, например https://eggent.example.com |
Получить токен
- Открой Настройки → API.
- Сгенерируй токен внешнего API.
- Сохрани его в своей системе как секрет.
Токен передаётся в заголовке Authorization: Bearer <токен>. Не вставляй его в код, который выполняется в браузере: с ним можно давать агенту любые задачи. На своём сервере вместо генерации можно задать переменную EXTERNAL_API_TOKEN; токен из настроек главнее.
Отправить сообщение
POST /api/external/message
Authorization: Bearer <токен>
Content-Type: application/json
curl -X POST https://имя.cloud.eggent.ai/api/external/message \
-H "Authorization: Bearer $EGGENT_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"sessionId": "crm:client-42",
"projectName": "Продажи",
"message": "Напиши короткое письмо клиенту по последним заметкам"
}'
Поля запроса
| Поле | Обязательно | Что это |
|---|---|---|
sessionId |
да | Постоянный ключ разговора. Один на пользователя, тред, клиента или задачу |
message |
да | Текст задачи, непустой |
projectId |
нет | id проекта (или точное имя, если оно одно) |
projectName |
нет | Точное имя проекта |
chatId |
нет | Существующий чат. Обычно не нужен |
currentPath |
нет | Подсказка рабочей папки для задач с файлами |
Без проекта сообщение уходит оркестратору.
Ответ
{
"success": true,
"sessionId": "crm:client-42",
"reply": "Здравствуйте, Анна! …",
"context": {
"activeProjectId": "sales",
"activeProjectName": "Продажи",
"activeChatId": "0a2f…",
"activeChatTitle": "Звонок с Анной",
"currentPath": ""
},
"chatChanged": false,
"switchedProject": null,
"createdProject": null
}
Если агент во время работы переключил или создал проект, это видно в switchedProject и createdProject. chatChanged равно true, когда разговор теперь в другом чате, чем до этого сообщения — агент его перевёл, — а activeChatTitle называет этот чат.
Как работает sessionId
Eggent помнит для каждого sessionId текущий проект, текущий чат и рабочую папку. Повторяй тот же sessionId — и агент продолжит тот же разговор, с историей. Новый sessionId — новый разговор.
Хорошие ключи: telegram:<user-id>, crm:<client-id>, slack:<channel>:<thread>, job:daily-report.
Ответ потоком
Если добавить заголовок Accept: text/event-stream, ответ придёт потоком событий (SSE) — удобно, чтобы показывать текст по мере написания. Каждое событие — JSON в строке data::
| Событие | Что значит |
|---|---|
{"type":"text","delta":"…"} |
Очередной кусок ответа |
{"type":"tool","name":"…","phase":"start"} |
Агент начал или закончил ("end") использовать инструмент |
{"type":"done","result":{…}} |
Готово; result — тот же JSON, что и без потока |
{"type":"error","status":500,"payload":{…}} |
Ошибка с тем кодом, который вернулся бы без потока |
Если клиент отключился посреди ответа, работа не прерывается: агент доделает её, и результат сохранится в чате.
Отправить файл
POST /api/external/media-message
Authorization: Bearer <токен>
Content-Type: multipart/form-data
Поля те же, что у /message, плюс file и kind (document, photo, audio, video, voice, file). Файл сохраняется во вложения чата, агент его видит. Голосовое (kind=voice) сначала расшифровывается в текст.
curl -X POST https://имя.cloud.eggent.ai/api/external/media-message \
-H "Authorization: Bearer $EGGENT_API_TOKEN" \
-F "sessionId=crm:client-42" \
-F "message=Выпиши из договора все сроки" \
-F "kind=document" \
-F "file=@./contract.pdf"
Ошибки
| Код | Причина | Что сделать |
|---|---|---|
400 |
Нет sessionId или message |
Передай оба непустыми строками |
401 |
Нет токена или он неверный | Проверь заголовок Authorization: Bearer … |
404 |
Проект или чат не найден | Проверь id и имена проектов |
409 |
Имя проекта неоднозначно или чат из другого проекта | Используй projectId или убери chatId |
503 |
Токен не настроен | Сгенерируй его в Настройки → API |
Советы
- Вызывай API только с сервера и только по HTTPS.
- Ставь большой таймаут: сложная задача может выполняться несколько минут. Или используй поток.
- Один реальный разговор — один
sessionId. - Сообщение, которое начинается с
@и названия проекта, поручает задачу этому проекту, как в приложении: проект работает в своём чате, а его ответ входит в ответ API. См. Проекты. - Ответы через API тратят баланс так же, как чат, и всегда работают в полном режиме.