Полный справочник API для интеграции с платформой AI Agent поддержки клиентов. Включает аутентификацию, конечные точки, схемы запросов/ответов и практические примеры кода.
API поддерживает два метода аутентификации:
Генерируйте краткосрочные токены JWT для аутентификации виджета. Эта конечная точка позволяет виджетам получать безопасные токены, используя только client_id, избегая необходимости раскрывать client_secret в браузерных средах.
Если вы устанавливаете виджет с помощью стандартного тега скрипта, вам не нужно вызывать это самостоятельно — встраивание выполняет обмен при загрузке. Вызывайте это напрямую только когда вы создаете свою собственную поверхность чата против API. Происхождение запроса должно быть в списке разрешенных источников приложения, а количество монет ограничено 30 в минуту на IP.
curl -X POST https://app.companin.tech/api/v1/auth/widget-token \ -H "Content-Type: application/json" \ -H "Origin: https://your-site.example" \ -d '{ "client_id": "YOUR_CLIENT_ID" }'Ответ:
{ "token": "eyJ...", "expires_in": 3600, "token_type": "Bearer" }API-запросы ограничены 100 в час на организацию. Превышение лимита возвращает HTTP 429; ответы, которые содержат подсказку о задержке, включают заголовок Retry-After. Трафик виджета учитывается отдельно и не засчитывается в этот бюджет. Если вам нужен более высокий лимит, свяжитесь с нами.
Все ошибки API возвращают структурированные JSON-ответы с кодами состояния, деталями ошибок и необязательными полями данных.
{ "status": "error", "status_code": 401, "detail": "Authentication required - ...", "data": null }Вызывайте эти конечные точки с вашего сервера. X-API-Secret никогда не должен попадать в браузер, а запросы браузера с вашего собственного домена отклоняются CORS — см. поддержку CORS ниже.
Управляйте персонами AI-агента с помощью пользовательских конфигураций.
curl -X GET https://app.companin.tech/api/v1/agents/ \ -H "X-API-Key: YOUR_CLIENT_ID" \ -H "X-API-Secret: YOUR_CLIENT_SECRET"curl -X POST https://app.companin.tech/api/v1/agents/ \ -H "X-API-Key: YOUR_CLIENT_ID" \ -H "X-API-Secret: YOUR_CLIENT_SECRET" \ -H "Content-Type: application/json" \ -d '{ "name": "Customer Support Bot", "description": "Helpful agent for customer inquiries", "tone": "professional", "language": "en", "default_tasks": ["answer_questions", "provide_support"], "is_active": true }'Создавайте сессии анонимных посетителей для временных взаимодействий.
curl -X POST https://app.companin.tech/api/v1/sessions/ \ -H "X-API-Key: YOUR_CLIENT_ID" \ -H "X-API-Secret: YOUR_CLIENT_SECRET" \ -H "Content-Type: application/json" \ -d '{ "agent_id": "550e8400-e29b-41d4-a716-446655440000", "visitor_id": "visitor-123", "locale": "en", "metadata": { "source": "website", "page": "/contact" } }'curl -X POST https://app.companin.tech/api/v1/sessions/${SESSION_ID}/messages \ -H "X-API-Key: YOUR_CLIENT_ID" \ -H "X-API-Secret: YOUR_CLIENT_SECRET" \ -H "Content-Type: application/json" \ -d '{ "content": "Hello, I need help with my order", "metadata": { "user_type": "customer" } }'Создавайте постоянные разговоры для аутентифицированных пользователей.
curl -X POST https://app.companin.tech/api/v1/conversations/ \ -H "X-API-Key: YOUR_CLIENT_ID" \ -H "X-API-Secret: YOUR_CLIENT_SECRET" \ -H "Content-Type: application/json" \ -d '{ "agent_id": "550e8400-e29b-41d4-a716-446655440000", "customer_id": "user-456", "title": "Order Support", "locale": "en" }'curl -X POST https://app.companin.tech/api/v1/conversations/${CONVERSATION_ID}/messages \ -H "X-API-Key: YOUR_CLIENT_ID" \ -H "X-API-Secret: YOUR_CLIENT_SECRET" \ -H "Content-Type: application/json" \ -d '{ "content": "Can you help me track my order?", "metadata": { "order_id": "12345" } }'Храните и управляйте контекстом пользователя для персонализированных взаимодействий.
curl -X POST https://app.companin.tech/api/v1/contexts \ -H "X-API-Key: YOUR_CLIENT_ID" \ -H "X-API-Secret: YOUR_CLIENT_SECRET" \ -H "Content-Type: application/json" \ -d '{ "user_reference": "user-456", "traits": { "name": "John Doe", "email": "john@example.com", "subscription_tier": "premium", "preferences": { "language": "en", "notifications": true } } }'Загружайте и управляйте источниками знаний для ваших агентов.
Примечание: POST /api/v1/knowledge/files/ регистрирует запись файла знаний и его метаданные — он не принимает содержимое файла. Чтобы загрузить сам файл, используйте панель управления или отправьте данные формы multipart на /knowledge-base/ с аутентифицированной сессией панели управления.
# Registers a knowledge file entry (metadata only — see the note above). curl -X POST https://app.companin.tech/api/v1/knowledge/files/ \ -H "X-API-Key: YOUR_CLIENT_ID" \ -H "X-API-Secret: YOUR_CLIENT_SECRET" \ -H "Content-Type: application/json" \ -d '{ "title": "Product Manual", "file_type": "pdf", "summary": "Installation and troubleshooting guide" }'curl -X POST https://app.companin.tech/api/v1/knowledge/qa/ \ -H "X-API-Key: YOUR_CLIENT_ID" \ -H "X-API-Secret: YOUR_CLIENT_SECRET" \ -H "Content-Type: application/json" \ -d '{ "question": "What are your business hours?", "answer": "We are open Monday to Friday, 9 AM to 6 PM EST.", "tags": ["hours", "support"] }'// 1. Получить токен виджета для чата на основе браузера async function getWidgetToken() { const response = await fetch('https://app.companin.tech/api/v1/auth/widget-token', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ client_id: 'YOUR_CLIENT_ID' }) }); return (await response.json()).token; } // 2. Создать сессию для анонимного посетителя async function startSupportSession(token, agentId) { const response = await fetch('https://app.companin.tech/api/v1/sessions/', { method: 'POST', headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ agent_id: agentId, visitor_id: 'visitor-' + Date.now(), metadata: { source: 'support_widget' } }) }); return await response.json(); } // 3. Отправить сообщение клиента и получить ответ AI async function sendMessage(token, sessionId, message) { const response = await fetch(`https://app.companin.tech/api/v1/sessions/${sessionId}/messages`, { method: 'POST', headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ content: message, metadata: { user_type: 'customer' } }) }); return await response.json(); } // Пример использования const token = await getWidgetToken(); const session = await startSupportSession(token, 'agent-uuid'); const result = await sendMessage(token, session.data.id, 'Мне нужна помощь с моим заказом');// 1. Создать контекст пользователя для персонализации async function createUserContext(userId, userData) { const response = await fetch('https://app.companin.tech/api/v1/contexts', { method: 'POST', headers: { 'X-API-Key': 'YOUR_CLIENT_ID', 'X-API-Secret': 'YOUR_CLIENT_SECRET', 'Content-Type': 'application/json' }, body: JSON.stringify({ user_reference: userId, traits: { name: userData.name, purchase_history: userData.purchases, preferences: userData.preferences } }) }); return await response.json(); } // 2. Создать постоянный разговор с контекстом async function startPersonalizedChat(agentId, userId) { const response = await fetch('https://app.companin.tech/api/v1/conversations/', { method: 'POST', headers: { 'X-API-Key': 'YOUR_CLIENT_ID', 'X-API-Secret': 'YOUR_CLIENT_SECRET', 'Content-Type': 'application/json' }, body: JSON.stringify({ agent_id: agentId, customer_id: userId, user_context_id: userId, title: 'Product Recommendations', metadata: { source: 'product_page' } }) }); return await response.json(); } // 3. Общаться с продуктовой информацией async function askAboutProduct(conversationId, question) { const response = await fetch(`https://app.companin.tech/api/v1/conversations/${conversationId}/messages`, { method: 'POST', headers: { 'X-API-Key': 'YOUR_CLIENT_ID', 'X-API-Secret': 'YOUR_CLIENT_SECRET', 'Content-Type': 'application/json' }, body: JSON.stringify({ content: question, metadata: { context: 'product_inquiry' } }) }); return await response.json(); } // Пример использования await createUserContext('user-123', { name: 'Alice', purchases: ['laptop-1', 'mouse-2'], preferences: { category: 'electronics' } }); const conversation = await startPersonalizedChat('agent-uuid', 'user-123'); const result = await askAboutProduct(conversation.data.id, 'Какой ноутбук вы рекомендуете?');// 1. Загрузить документацию по продукту async function registerDocumentation(title, summary) { // Registers the entry + its metadata. File content is uploaded separately // (dashboard, or multipart POST to /knowledge-base/ with a dashboard session). const response = await fetch('https://app.companin.tech/api/v1/knowledge/files/', { method: 'POST', headers: { 'X-API-Key': 'YOUR_CLIENT_ID', 'X-API-Secret': 'YOUR_CLIENT_SECRET', 'Content-Type': 'application/json' }, body: JSON.stringify({ title, file_type: 'pdf', summary }) }); return await response.json(); } // 2. Добавить записи FAQ async function addFAQ(question, answer, tags) { const response = await fetch('https://app.companin.tech/api/v1/knowledge/qa/', { method: 'POST', headers: { 'X-API-Key': 'YOUR_CLIENT_ID', 'X-API-Secret': 'YOUR_CLIENT_SECRET', 'Content-Type': 'application/json' }, body: JSON.stringify({ question, answer, tags, source: 'manual' }) }); return await response.json(); } // 3. Добавить веб-контент async function addWebContent(url, title) { const response = await fetch('https://app.companin.tech/api/v1/knowledge/urls/', { method: 'POST', headers: { 'X-API-Key': 'YOUR_CLIENT_ID', 'X-API-Secret': 'YOUR_CLIENT_SECRET', 'Content-Type': 'application/json' }, body: JSON.stringify({ url, title }) }); return await response.json(); } // Пример использования const fileEntry = await registerDocumentation('User Manual v2.0', 'Setup and troubleshooting'); const faq = await addFAQ( 'Как мне сбросить пароль?', 'Перейдите в настройки и нажмите "Сбросить пароль"...', ['password', 'security'] ); const webContent = await addWebContent( 'https://example.tech/blog/new-features', 'Объявление о новых функциях' );curl -X POST https://app.companin.tech/api/v1/auth/widget-token \ -H "Content-Type: application/json" \ -d '{"client_id":"YOUR_CLIENT_ID"}'fetch('https://app.companin.tech/api/v1/sessions', { method: 'POST', headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ agent_id: 'AGENT_UUID' }) })