Point de terminaison de chat
Envoyez des messages à votre agent et recevez des réponses d’IA par programmation.
Le point de terminaison Chat vous permet d’envoyer des messages à votre agent et de recevoir des réponses d’IA. Utilisez-le pour créer des interfaces de chat personnalisées ou intégrer les fonctionnalités de l’agent dans vos applications.
Point de terminaison
POST /api/v1/chat
Authentification
Nécessite une authentification par jeton Bearer.
Authorization: Bearer YOUR_API_KEY
Corps de la requête
{
"chatbotId": "uuid",
"messages": [
{ "role": "user", "content": "What are your pricing plans?" }
],
"conversationId": "optional-id",
"stream": false
}
Paramètres
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
chatbotId | chaîne (UUID) | Oui | ID de votre agent |
messages | tableau | Oui | Tableau d’objets message (1 à 100 éléments) |
conversationId | chaîne (16 caractères max) | Non | ID de référence renvoyé par l’en-tête x-conversation-id d’un appel précédent. Une valeur invalide ou manquante amène le serveur à attribuer un nouvel ID. |
stream | booléen | Non | Active la réponse en streaming (par défaut : false) |
Objet message
| Champ | Type | Valeurs | Description |
|---|---|---|---|
role | chaîne | "user", "assistant" | Expéditeur du message |
content | chaîne | 1 à 32 000 caractères | Texte du message |
Limites
- 100 messages maximum par requête
- 32 000 caractères maximum par message
Réponse
Sans streaming (par défaut)
Succès (200) :
{
"text": "Our pricing starts at $29.99/month for the Hobby plan..."
}
Les en-têtes incluent :
X-Conversation-ID: abc123
Streaming
Définissez "stream": true pour obtenir des réponses en streaming.
Succès (200) :
Content-Type: text/plain; charset=utf-8
La réponse diffuse du texte brut au fur et à mesure de sa génération. Utilisez ce mode pour les mises à jour d’interface en temps réel.
Exemples de requêtes
Requête simple
curl -X POST 'https://your-domain.com/api/v1/chat' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"chatbotId": "123e4567-e89b-12d3-a456-426614174000",
"messages": [
{"role": "user", "content": "What are your pricing plans?"}
]
}'
Conversation multi-tours
curl -X POST 'https://your-domain.com/api/v1/chat' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"chatbotId": "123e4567-e89b-12d3-a456-426614174000",
"conversationId": "conv_abc123",
"messages": [
{"role": "user", "content": "What are your pricing plans?"},
{"role": "assistant", "content": "We offer three plans..."},
{"role": "user", "content": "Tell me more about the Pro plan"}
]
}'
Réponse en streaming
curl -X POST 'https://your-domain.com/api/v1/chat' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"chatbotId": "123e4567-e89b-12d3-a456-426614174000",
"messages": [{"role": "user", "content": "Hello"}],
"stream": true
}'
Réponses d’erreur
| Statut | Message | Cause |
|---|---|---|
| 400 | Invalid JSON body | JSON malformé |
| 400 | Invalid request body | Champs manquants ou invalides |
| 401 | Missing or invalid Authorization header | En-tête non fourni ou au mauvais format |
| 401 | Invalid API key | Clé non reconnue |
| 403 | API access requires a Hobby plan or above with active billing | Le forfait ou la facturation ne permet pas l’accès à l’API |
| 403 | Chatbot does not belong to this account | L’agent appartient à un compte différent |
| 404 | Chatbot not found | ID d’agent invalide |
| 429 | Rate limit exceeded | Trop de requêtes |
Format de la réponse d’erreur
{
"message": "Invalid request body",
"details": {
"chatbotId": ["Required"]
}
}
Exemples de code
Node.js
async function sendMessage(chatbotId, message) {
const response = await fetch('https://your-domain.com/api/v1/chat', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.AGENTKIT_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
chatbotId,
messages: [{ role: 'user', content: message }],
}),
});
if (!response.ok) {
throw new Error(`API error: ${response.status}`);
}
const data = await response.json();
return data.text;
}
Python
import requests
def send_message(chatbot_id: str, message: str) -> str:
response = requests.post(
'https://your-domain.com/api/v1/chat',
headers={
'Authorization': f'Bearer {API_KEY}',
'Content-Type': 'application/json',
},
json={
'chatbotId': chatbot_id,
'messages': [{'role': 'user', 'content': message}],
},
)
response.raise_for_status()
return response.json()['text']
Node.js avec streaming
async function streamMessage(chatbotId, message) {
const response = await fetch('https://your-domain.com/api/v1/chat', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.AGENTKIT_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
chatbotId,
messages: [{ role: 'user', content: message }],
stream: true,
}),
});
const reader = response.body.getReader();
const decoder = new TextDecoder();
while (true) {
const { done, value } = await reader.read();
if (done) break;
const text = decoder.decode(value);
process.stdout.write(text); // Print as it streams
}
}
Gestion des conversations
Démarrer une conversation
Omettez conversationId pour démarrer une nouvelle conversation. L’en-tête de réponse X-Conversation-ID renvoie le nouvel ID.
Poursuivre une conversation
Incluez conversationId ainsi que tous les messages précédents pour conserver le contexte.
Historique des messages
Vous devez inclure les messages précédents dans chaque requête. L’API est sans état : nous ne stockons pas l’historique des conversations côté serveur entre les requêtes.
Étapes suivantes
- Configurer les abonnements aux webhooks pour recevoir des notifications d’événements
- Consulter tous les points de terminaison de l’API
- Gérer les clés API