Task Interface
Un point de terminaison. Du langage naturel. L'agent gère tout le reste.
Le changement
Les intégrations traditionnelles vous obligent à apprendre des points de terminaison, à mapper des champs, à versionner des schémas et à gérer chaque cas limite. Le Chat Agent Gateway remplace tout cela par la communication agentique. Décrivez ce dont vous avez besoin. L'agent propre à SOIS interprète votre intention, négocie les détails, exécute sur votre espace de travail et répond avec le résultat. C'est la rampe d'accès pour les appelants qui n'ont pas d'IA à eux. Si vous avez déjà un agent, connectez-le directement via le serveur MCP.
Aucun connecteur. Aucun middleware. Aucune couche d'automatisation tierce.
Authentification
Chaque message nécessite deux identifiants :
| En-tête | Valeur | Rôle |
|---|---|---|
Authorization |
Bearer <token> |
Prouve qui vous êtes |
X-Api-Key |
sois_... |
Contrôle votre budget, votre webhook et la signature |
Pourquoi deux ? Votre jeton prouve votre identité. Votre clé contrôle les dépenses. Si l'un des deux fuite seul, il est inutile sans l'autre. Un utilisateur peut avoir plusieurs clés avec des budgets différents pour différentes intégrations.
Récupérez les deux depuis Settings dans votre espace de travail Sois AI.
Envoyer un message
POST /api/agent
Headers
Authorization: Bearer <your_token>
X-Api-Key: sois_...
Content-Type: application/json
Body
| Champ | Type | Requis | Description |
|---|---|---|---|
message |
string | Oui | Dites à l'agent ce dont vous avez besoin, en langage naturel, jusqu'à 10 000 caractères |
context.entity_type |
string | Non | Indice : contact, task, document, inbox, etc. |
context.entity_id |
string | Non | Un enregistrement précis sur lequel travailler |
context.action |
string | Non | Indice : create, update, search, summarize |
metadata |
object | Non | Toute donnée clé-valeur supplémentaire pour l'agent |
Exemple
curl -X POST "https://your-workspace.sois.ai/api/agent" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "X-Api-Key: sois_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"message": "Create a contact for John Smith at Acme Corp, [email protected], +44 7700 900000",
"context": { "entity_type": "contact", "action": "create" }
}'
Réponse 202 Accepted
{
"conversation_uuid": "6cafd8ba-dd51-4411-808e-671d1dd59561",
"status": "accepted",
"message": "Your request has been queued."
}
Votre message est dans la passerelle. L'agent prend le relais à partir d'ici.
Recevoir la réponse
Vous avez deux options : attendre le webhook ou interroger la conversation.
Option 1 : Webhook (recommandé)
Si votre clé a une response_url, l'agent vous livre le résultat directement une fois terminé : signé, vérifié, sans polling.
POST https://your-app.com/webhook
Content-Type: application/json
X-Signature: <hmac_sha256>
X-Conversation-UUID: 6cafd8ba-...
Resolved :
{
"conversation_uuid": "6cafd8ba-...",
"status": "resolved",
"response": "Contact created: John Smith, Acme Corp, [email protected], +44 7700 900000."
}
Failed :
{
"conversation_uuid": "6cafd8ba-...",
"status": "failed",
"error": "An error occurred while processing your request."
}
Option 2 : Interroger la conversation
GET /api/agent/{conversation_uuid}
Authorization: Bearer <your_token>
X-Api-Key: sois_...
Réponse 200 OK :
{
"conversation_uuid": "6cafd8ba-...",
"status": "resolved",
"turns": [
{
"role": "user",
"payload": { "message": "Find all contacts from London" },
"timestamp": "2026-02-12T01:07:03+00:00"
},
{
"role": "agent",
"payload": {
"content": "I found 12 contacts based in London..."
},
"timestamp": "2026-02-12T01:07:13+00:00"
}
],
"webhook": {
"status": "delivered",
"delivered_at": "2026-02-12T01:07:14+00:00"
},
"resolved_at": "2026-02-12T01:07:13+00:00",
"expires_at": "2026-02-13T01:07:03+00:00",
"created_at": "2026-02-12T01:07:03+00:00"
}
États de la conversation
| État | Ce qui se passe |
|---|---|
open |
Dans la passerelle, en attente de l'agent |
processing |
L'agent y travaille |
resolved |
Terminé, la réponse est dans le dernier turn |
failed |
N'a pas pu aboutir après les nouvelles tentatives |
Vérification des signatures de webhook
Chaque webhook est signé avec HMAC-SHA256 à l'aide du signing secret de votre clé. Vérifiez toujours avant de traiter.
Python :
import hmac, hashlib
expected = hmac.new(
key=your_signing_secret.encode(),
msg=raw_request_body.encode(),
digestmod=hashlib.sha256
).hexdigest()
assert expected == request.headers['X-Signature']
Node.js :
const crypto = require('crypto');
const expected = crypto
.createHmac('sha256', signingSecret)
.update(rawBody)
.digest('hex');
if (expected !== req.headers['x-signature']) {
throw new Error('Invalid signature');
}
PHP :
$expected = hash_hmac('sha256', $rawBody, $signingSecret);
if (!hash_equals($expected, $request->header('X-Signature'))) {
abort(403, 'Invalid signature');
}
Exemples de conversations
L'agent a un accès complet à votre espace de travail Sois AI. Voici quelques exemples de demandes possibles :
Rechercher :
{ "message": "Find all contacts from London" }
Créer :
{
"message": "Create a contact: Jane Doe, CEO of Acme Corp, [email protected]",
"context": { "entity_type": "contact", "action": "create" }
}
E-mail :
{
"message": "Send an email to [email protected] introducing our new product line",
"context": { "entity_type": "inbox", "action": "compose" }
}
Tâches :
{
"message": "Create a task: Research competitor pricing for Q1 2026",
"context": { "entity_type": "task", "action": "create" }
}
Résumer :
{
"message": "Give me a full summary of this contact",
"context": { "entity_type": "contact", "entity_id": "abc-123", "action": "summarize" }
}
Multi-étapes :
{ "message": "Find the Q1 report, summarise it, and email the summary to the sales team" }
L'agent négocie l'ambiguïté. S'il doit rechercher avant de pouvoir agir, il recherche. Si plusieurs enregistrements correspondent, il choisit le meilleur et vous explique pourquoi. Aucun schéma rigide, juste l'intention.
Gestion des clés
Gérez vos clés depuis Settings > API Keys dans votre espace de travail Sois AI, ou par programmation.
Créer une clé
POST /api/api-keys
{
"label": "My CRM Integration",
"response_url": "https://your-app.com/webhook",
"budget_usd_cents": 5000,
"budget_period": "monthly"
}
La réponse inclut votre clé (affichée une seule fois, copiez-la immédiatement) et votre signing secret pour la vérification des webhooks.
| Champ | Type | Requis | Description |
|---|---|---|---|
label |
string | Non | Un nom pour cette clé |
response_url |
url | Non | Où livrer les réponses webhook |
budget_usd_cents |
integer | Non | Plafond de dépense en cents de dollar |
budget_period |
string | Non | daily, monthly ou total |
Gérer les clés
| Méthode | Point de terminaison | Description |
|---|---|---|
GET |
/api/api-keys |
Lister toutes vos clés |
POST |
/api/api-keys |
Créer une nouvelle clé |
GET |
/api/api-keys/{id} |
Détails de la clé et statistiques d'utilisation |
PUT |
/api/api-keys/{id} |
Mettre à jour le libellé, l'URL du webhook ou le budget |
DELETE |
/api/api-keys/{id} |
Révoquer une clé |
Contrôles de budget
Les intégrations traditionnelles vous bridaient avec des limites de débit arbitraires : 100 requêtes par minute, 10 000 par jour. Le Chat Agent Gateway utilise des dollars.
Définissez un budget par clé. L'agent facture des credits par action. Vous décidez de la valeur de chaque intégration.
| Champ | Description |
|---|---|
budget_usd_cents |
Plafond en cents de dollar (ex. 5000 = 50 $). null = illimité. |
budget_period |
daily se réinitialise à minuit, monthly se réinitialise le 1er, total ne se réinitialise jamais |
Lorsqu'un budget est dépassé, les messages renvoient 429 avec une explication claire, et non un code d'erreur obscur.
Erreurs
Chaque erreur suit le même format :
{
"error": {
"code": "ERROR_CODE",
"message": "A clear, human-readable explanation."
}
}
| HTTP | Code | Ce qui s'est passé |
|---|---|---|
| 401 | UNAUTHENTICATED |
Jeton d'accès manquant ou invalide |
| 401 | INVALID_API_KEY |
Clé manquante ou invalide |
| 403 | KEY_OWNER_MISMATCH |
La clé ne vous appartient pas |
| 403 | KEY_REVOKED |
Cette clé a été révoquée |
| 404 | NOT_FOUND |
Conversation introuvable ou expirée |
| 422 | - | Erreur de validation (consultez le message) |
| 429 | BUDGET_EXCEEDED |
Votre budget est épuisé, rechargez ou attendez la réinitialisation |
Limites
| Quoi | Limite |
|---|---|
| Longueur du message | 10 000 caractères |
| Expiration de la conversation | 24 heures |
| Budget | Par clé, vous décidez |