Référence API
Référence API complète pour l'intégration avec la plateforme Assistant. Inclut l'authentification, les points de terminaison, les schémas de requête/réponse, et des exemples de code pratiques.
Authentification
L'API prend en charge deux méthodes d'authentification :
- Authentification par clé API : Utilisez les en-têtes X-API-Key et X-API-Secret pour l'accès direct à l'API
- Authentification par token JWT : Utilisez les tokens Bearer obtenus depuis le point de terminaison du token widget pour les requêtes basées sur navigateur
Point de terminaison du token Widget
Générez des tokens JWT de courte durée pour l'authentification des widgets. Ce point de terminaison permet aux widgets d'obtenir des tokens sécurisés en utilisant uniquement le client_id, évitant ainsi le besoin d'exposer le client_secret dans les environnements de navigateur.
{"client_id": "YOUR_CLIENT_ID"}Réponse :
{ "token": "eyJ...", "expires_in": 3600, "token_type": "Bearer"}Limitation du taux
Les requêtes API sont limitées à 1000 par heure par organisation. Les informations de limitation du taux sont incluses dans les en-têtes de réponse.
Gestion des erreurs
Toutes les erreurs API retournent des réponses JSON structurées avec des codes de statut, des détails d'erreur, et des champs de données optionnels.
{ "status": "error", "status_code": 401, "detail": "Authentication required - ...", "data": null}Points de terminaison API
Assistants
Gérer les personas d'assistant IA avec des configurations personnalisées.
Lister les assistants
curl -X GET https://app.companin.tech/api/v1/assistants/ \ -H "X-API-Key: YOUR_CLIENT_ID" \ -H "X-API-Secret: YOUR_CLIENT_SECRET"Créer un assistant
curl -X POST https://app.companin.tech/api/v1/assistants/ \ -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 assistant for customer inquiries", "tone": "professional", "language": "en", "default_tasks": ["answer_questions", "provide_support"], "is_active": true }'Sessions
Créer des sessions de visiteur anonymes pour des interactions temporaires.
Créer une session
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 '{ "assistant_id": "550e8400-e29b-41d4-a716-446655440000", "visitor_id": "visitor-123", "locale": "en", "metadata": { "source": "website", "page": "/contact" } }'Envoyer un message dans la session
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" } }'Conversations
Créer des conversations persistantes pour les utilisateurs authentifiés.
Créer une conversation
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 '{ "assistant_id": "550e8400-e29b-41d4-a716-446655440000", "customer_id": "user-456", "title": "Order Support", "locale": "en" }'Envoyer un message dans la conversation
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" } }'Contextes utilisateur
Stocker et gérer le contexte utilisateur pour des interactions personnalisées.
Créer un contexte utilisateur
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 } } }'Base de connaissances
Télécharger et gérer les sources de connaissances pour vos assistants.
Télécharger un fichier de connaissances
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" \ -F "title=Product Manual" \ -F "file_type=pdf" \ -F "file=@product_manual.pdf"Ajouter une paire Q&R
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"] }'Cas d'usage
Chatbot de Support Client
// 1. Obtenir le token widget pour le chat basé sur navigateurasync 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. Créer une session pour visiteur anonymeasync function startSupportSession(token, assistantId) { const response = await fetch('https://app.companin.tech/api/v1/sessions/', { method: 'POST', headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ assistant_id: assistantId, visitor_id: 'visitor-' + Date.now(), metadata: { source: 'support_widget' } }) }); return await response.json();}// 3. Envoyer le message client et obtenir la réponse IAasync 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();}// Exemple d'utilisationconst token = await getWidgetToken();const session = await startSupportSession(token, 'assistant-uuid');const result = await sendMessage(token, session.data.id, 'J'ai besoin d'aide avec ma commande');Assistant Produit E-commerce
// 1. Créer le contexte utilisateur pour la personnalisationasync 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. Créer une conversation persistante avec contexteasync function startPersonalizedChat(assistantId, 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({ assistant_id: assistantId, customer_id: userId, user_context_id: userId, title: 'Product Recommendations', metadata: { source: 'product_page' } }) }); return await response.json();}// 3. Chatter avec la connaissance produitasync 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();}// Exemple d'utilisationawait createUserContext('user-123', { name: 'Alice', purchases: ['laptop-1', 'mouse-2'], preferences: { category: 'electronics' }});const conversation = await startPersonalizedChat('assistant-uuid', 'user-123');const result = await askAboutProduct(conversation.data.id, 'Quel ordinateur portable recommandez-vous ?');Système de Gestion des Connaissances
// 1. Télécharger la documentation produitasync function uploadDocumentation(file, title) { const formData = new FormData(); formData.append('title', title); formData.append('file_type', 'pdf'); formData.append('file', file); 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' }, body: formData }); return await response.json();}// 2. Ajouter des entrées FAQasync 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. Ajouter du contenu webasync 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();}// Exemple d'utilisationconst fileUpload = await uploadDocumentation(pdfFile, 'User Manual v2.0');const faq = await addFAQ( 'Comment réinitialiser mon mot de passe ?', 'Allez dans les paramètres et cliquez sur "Réinitialiser le mot de passe"...', ['password', 'security']);const webContent = await addWebContent( 'https://example.tech/blog/new-features', 'Annonce des nouvelles fonctionnalités');Exemples
Obtenir le token Widget
curl -X POST https://app.companin.tech/api/v1/auth/widget-token \ -H "Content-Type: application/json" \ -d '{"client_id":"YOUR_CLIENT_ID"}'Créer une session
fetch('https://app.companin.tech/api/v1/sessions', { method: 'POST', headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ assistant_id: 'ASSISTANT_UUID' })})Support CORS
- Tous les points de terminaison prennent en charge CORS pour les intégrations web
- Les requêtes preflight sont gérées automatiquement
- Les credentials sont pris en charge pour les requêtes authentifiées