Service Manuel
Lorsque vous choisissez Webhook comme méthode d'accès au service manuel, vous devez d'abord mettre en place un service Webhook dans votre environnement serveur. Vous devez fournir les trois interfaces suivantes conformément aux spécifications afin de recevoir les demandes de service manuel, les messages utilisateur et les réponses du service client manuel. GPTBots fournit également deux interfaces pour recevoir les réponses du service client et les instructions de clôture de conversation.
Remarques importantes :
- Vous devez vous assurer que votre service Webhook fonctionne correctement, car il impacte directement le bon fonctionnement du service d'assistance humaine.
- Si "Occupé" s'affiche après le lancement de l'assistance humaine, cela signifie que votre service Webhook dysfonctionne.
- Si "Connexion en cours" s'affiche après le lancement de l'assistance humaine, cela signifie que votre service Webhook fonctionne normalement.
- Après avoir initié avec succès une demande de service d'assistance humaine :
- Vous devez appeler l'interface Répondre au message utilisateur (https://api.gptbots.ai/v1/human/message/receive) pour répondre à l'utilisateur avec au moins un message afin d'établir la connexion de la conversation.
- Si vous ne répondez pas au message de l'utilisateur dans le délai d'attente configuré (timeout par défaut 60 secondes), la conversation d'assistance humaine sera automatiquement terminée.
Recevoir la notification de demande de conversation avec un agent humain
Lorsqu'un utilisateur final initie une demande de service humain, GPTBots transmet cette demande à votre service Webhook. Un code de statut de réponse 200 de votre service d'interface indique la création réussie de la conversation de service humain.
Méthode de requête
POST
Endpoint
https://your_domain/conversation/establish
Exemple de requête
curl -X POST 'https://YOUR_DOMAIN/human/service/conversation/establish' \
-H 'Content-Type: application/json' \
-d '{
"body": [
{
"text": "human service",
"message_type": "QUESTION"
},
{
"text": "",
"message_type": "ANSWER"
}
],
"timestamp": 1742265090895,
"email": "bob@gmail.com",
"conversation_id": "67d8db020fa31d1ef64f53dg",
"bot_id": "665d88b03ce2b13cf2d573454",
"user_info": {
"phone": null,
"email": "bob@gmail.com",
"user_id": "KDslas",
"anonymous_id": "652face5184b30540a6ea7fe"
}
}'
Remarque : Le
conversation_iddans ce corps de requête sert uniquement à identifier l'ID unique pour les scénarios de conversation de service humain, ce qui est différent de l'ID unique généré par Créer un ID de conversation pour les scénarios de conversation Agent.
Paramètres de la requête
| Paramètre | Type | Description |
|---|---|---|
| conversation_id | string | ID de conversation pour les scénarios de service client humain (différent des IDs de conversation Agent), doit être transmis à GPTBots dans l'interface de réponse du service client |
| timestamp | long | Horodatage |
| string | E-mail de l'utilisateur, certains systèmes de service manuel nécessitent un e-mail pour fournir les services correctement | |
| bot_id | string | ID de l'Agent (anciennement bot) |
| body | list<Object> | Corps du message |
| body.message_type | string | Type de message, QUESTION/ANSWER |
| body.text | string | La question posée par le client pour le service client manuel et son contexte |
| user_info | object | Informations utilisateur |
| user_info.phone | string | Numéro de téléphone de l'utilisateur, disponible uniquement lors du passage au service client manuel via WhatsApp |
| user_info.email | string | E-mail de l'utilisateur, disponible lorsque l'utilisateur saisit son e-mail |
| user_info.user_id | string | ID utilisateur. Identifiant unique défini par les développeurs d'entreprise pour l'identité utilisateur, paramétré par les développeurs pour un ID anonyme spécifique |
| user_info.anonymous_id | string | ID anonyme. Lorsqu'un utilisateur initie une conversation avec l'Agent sur des plateformes de canal non-API, le système génère un ID anonyme contenant les informations de la plateforme de canal selon la plateforme utilisée par l'utilisateur |
Remarques sur le champ
- Lors de l'initiation d'un service manuel via iframe/Share/Bubble Widget, l'utilisateur doit renseigner son e-mail. Vous pouvez également personnaliser l'e-mail utilisateur pour éviter de demander à l'utilisateur de saisir un e-mail.
- Lors de la demande de service manuel via des plateformes tierces telles que WhatsApp/Telegram/livechat, l'e-mail par défaut utilisé est support@gptbots.ai. Pour livechat, vous pouvez personnaliser l'e-mail utilisateur.
- Lors de la demande de service manuel via API, le champ
Réponse
| Paramètre | Type | Description |
|---|---|---|
| code | int | Code de réponse |
| message | string | Détails |
Interface de chat
En utilisant le conversation_id créé, envoyez le message de l'utilisateur au service client manuel.
Méthode de requête
POST
Endpoint
Exemple de requête
{
"conversation_id": "conv_xxx",
"message_id": "msg_abc124",
"create_time": 1750000005000,
"agent_id": "bot_xxx",
"body": "Ceci est la capture d'écran de ma commande",
"timestamp": 1750000005200,
"files": [
{
"content_type": "Image",
"url": "https://files.gptbots.ai/xxx/order.png",
"name": "order.png",
"format": "png"
}
]
}
Paramètres de la requête
| Paramètre | Type | Description |
|---|---|---|
| conversation_id | string | ID de conversation, doit être transmis à GPTBots dans l'interface de réponse du service client |
| timestamp | long | Horodatage |
| body | string | Message de l'utilisateur |
| message_id | string | ID de ce message utilisateur |
| create_time | long | Heure de création de ce message utilisateur (en millisecondes) |
| agent_id | string | ID de l'Agent (Agent/Bot) |
| files | array | Liste des pièces jointes téléchargées par l'utilisateur avec le message ; à omettre ou laisser vide en l'absence de pièces jointes |
| content_type | string | Énumération du type de contenu : Image / Audio / Video / Document / File / Text, etc. |
| url | string | URL de téléchargement de la pièce jointe (accessible côté GPTBots ; les développeurs doivent la télécharger/transférer eux-mêmes) |
| name | string | Nom du fichier (avec extension), conforme à l'API « Obtenir le détail de la conversation » |
| format | string | Format/extension du fichier, conforme à l'API « Obtenir le détail de la conversation » |
Réponse
| Paramètre | Type | Description |
|---|---|---|
| code | int | Code de réponse |
| message | string | Détails |
Interface de clôture de conversation
Lorsqu'une conversation utilisateur expire ou que l'utilisateur Agent ferme activement la conversation, cette interface est appelée pour clôturer la conversation.
Méthode de requête
POST
Endpoint
https://your_domain/conversation/close
En-tête de la requête
| Champ | Type | Description |
|---|---|---|
| Authorization | Bearer ${token} | Utilisez Authorization: Bearer ${token} pour l'authentification. Obtenez le token depuis la page de clé API. |
| Content-Type | application/json | Type de données, à définir sur application/json. |
Paramètres de la requête
| Paramètre | Type | Description |
|---|---|---|
| conversation_id | string | ID de conversation, doit être transmis à GPTBots dans l'interface de réponse du service client |
| timestamp | long | Horodatage |
| type | string | Type de clôture, TIMEOUT (clôture pour expiration) / USER_CLOSED (fermeture active par l'utilisateur) |
Réponse
| Paramètre | Type | Description |
|---|---|---|
| code | int | Code de réponse |
| message | string | Détails |
Répondre aux messages utilisateur
Lorsque vous choisissez webhook comme méthode d'intégration du service humain, GPTBots fournit une interface pour répondre aux messages utilisateur. Cette interface permet aux agents du service client humain d'envoyer du contenu de message aux utilisateurs.
Méthode de requête
POST
Endpoint
https://api-${endpoint}.gptbots.ai/v1/human/message/receive
En-tête de la requête
| Champ | Type | Description |
|---|---|---|
| Authorization | Bearer ${token} | Utilisez Authorization: Bearer ${token} pour l'authentification. Obtenez le token depuis la page de clé API. |
| Content-Type | application/json | Type de données, à définir sur application/json. |
Exemple de requête
{
"conversation_id": "conv_xxx",
"timestamp": 1750000000000,
"body": "Voici la facture que vous avez demandée",
"files": [
{ "content_type": "Document", "url": "https://your-cdn.com/files/invoice.pdf", "name": "invoice.pdf", "format": "pdf" },
{ "content_type": "Image", "url": "https://your-cdn.com/files/screenshot.png", "name": "screenshot.png", "format": "png" }
]
}
Paramètres de la requête
| Paramètre | Type | Description | Obligatoire |
|---|---|---|---|
| conversation_id | string | ID de conversation, transmis dans l'interface de création de conversation et l'interface de chat, à transmettre tel quel | true |
| timestamp | long | Horodatage | true |
| body | string | Contenu de la réponse du service client manuel | true |
| files | array | Liste des pièces jointes téléchargées par l'utilisateur avec le message ; à omettre ou laisser vide en l'absence de pièces jointes | |
| content_type | string | Énumération du type de contenu : Image / Audio / Video / Document / File / Text, etc. |
|
| url | string | URL de téléchargement de la pièce jointe (accessible côté GPTBots ; les développeurs doivent la télécharger/transférer eux-mêmes) | |
| name | string | Nom du fichier (avec extension), conforme à l'API « Obtenir le détail de la conversation » | |
| format | string | Format/extension du fichier, conforme à l'API « Obtenir le détail de la conversation » |
Réponse
| Paramètre | Type | Description |
|---|---|---|
| code | int | Code de réponse |
| message | string | Détails |
Le service client manuel clôture la conversation
Lorsque vous choisissez webhook comme méthode d'accès au service manuel, le service client manuel fourni par GPTBots peut clôturer activement la conversation si nécessaire. Après la clôture, l'utilisateur ne recevra plus de messages du service client, sauf s'il initie à nouveau une conversation de service client manuel.
Méthode de requête
POST
Endpoint
https://api-${endpoint}.gptbots.ai/v1/human/close
En-tête de la requête
| Champ | Type | Description |
|---|---|---|
| Authorization | Bearer ${API Key} | Utilisez Authorization: Bearer ${API Key} pour l'authentification. Obtenez la clé API depuis la page de clé API. |
| Content-Type | application/json | Type de données, à définir sur application/json. |
Paramètres de la requête
| Paramètre | Type | Description |
|---|---|---|
| conversation_id | string | ID de conversation, doit être transmis à GPTBots dans l'interface de réponse du service client |
| timestamp | long | Horodatage |
Réponse
| Paramètre | Type | Description | Obligatoire |
|---|---|---|---|
| conversation_id | string | ID de conversation, transmis dans l'interface de création de conversation et l'interface de chat, à transmettre tel quel | true |
| timestamp | long | Horodatage | true |
Détection de l'état du service GPTBots
GPTBots fournit une interface de vérification de l'état (health-check) permettant de détecter l'état de son propre service humain. Les développeurs peuvent l'appeler pour vérifier si le service humain GPTBots est disponible. Si elle retourne le code de statut HTTP 200 et que le corps de la réponse correspond à l'indicateur de service normal en texte brut (par exemple service is normal), le service humain GPTBots est disponible. Cette interface ne nécessite aucune authentification et retourne du texte brut.
Méthode de requête
GET
Endpoint
https://api.gptbots.ai/v1/human/health
Exemple de requête
curl -X GET 'https://api.gptbots.ai/v1/human/health'
Réponse
Lorsque le service GPTBots est disponible, il retourne le code de statut HTTP 200 et un indicateur de service normal en texte brut.
service is normal
Recommandation d'évaluation de la disponibilité
L'appelant n'a besoin que du code de statut HTTP comme critère :
| Situation | Décision |
|---|---|
Retourne 200 et le corps est service is normal |
Le service GPTBots est disponible |
Retourne un code différent de 200 (par exemple 5xx) / délai de requête dépassé / échec de connexion |
Le service GPTBots est indisponible |
Définissez un délai de requête raisonnable (par exemple 3 à 5 secondes) et interrogez à une fréquence fixe (QPM : 3). Cette interface ne nécessite aucune authentification ; aucune clé API n'est requise.
