Mettre à jour le statut de la conversation
Utilisez l'API toggle_status pour modifier le statut d'une conversation donnée. Le serveur vérifie si le statut cible est valide conformément à la matrice de transitions de statut STATUS_TRANSITIONS.
Méthode de requête
POST
URL de requête
https://livedesk-api.engagelab.com/api/v2/accounts/conversations/{conversation_id}/toggle_status
Authentification
Pour plus de détails, consultez les instructions d'authentification dans Présentation de l'API.
Requête
Exemple de requête
curl -X POST 'https://livedesk-api.engagelab.com/api/v2/accounts/conversations/{conversation_id}/toggle_status' \
-H 'Content-Type: application/json' \
-H 'Authorization: Basic base64(api_key:api_secret)' \
-d '{
"status": "resolved",
"snoozed_until": 1715000000
}'
En-têtes de la requête
| Champ | Type | Description |
|---|---|---|
| Authorization | string | Authentifiez-vous avec Authorization: Basic base64(API Key:API Secret). Accédez à la page API Keys pour obtenir la clé et le secret API, séparez-les par deux-points, puis encodez le résultat en Base64. |
| Content-Type | application/json | Type de contenu. Utilisez application/json pour les messages texte classiques. |
Paramètres de chemin
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
| conversation_id | string | Oui | ID de la conversation. |
Paramètres du corps de la requête
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
| status | string | Oui | Statut cible. Consultez les valeurs énumérées ci-dessous. |
| snoozed_until | integer | Non | Prend effet uniquement lorsque status=snoozed. Horodatage UNIX en secondes. Si cette valeur est omise, la conversation est mise en pause indéfiniment. |
| sender_type | string | Non | Utilisé uniquement pour l'identification interne côté serveur. Lorsque l'appelant est AgentBot, que le statut actuel est pending et que le statut cible est open, le processus bot_handoff! est déclenché et l'événement CONVERSATION_BOT_HANDOFF est distribué. |
Valeurs énumérées de status
| Valeur | Signification |
|---|---|
| open | Ouverte |
| resolved | Résolue |
| pending | En attente de traitement par le bot ou l'agent |
| snoozed | Mise en pause |
| closed | Fermée (archivée) |
Matrice de transitions de statut (STATUS_TRANSITIONS)
| Statut actuel | Transitions autorisées |
|---|---|
| open | open, resolved, pending, snoozed |
| resolved | resolved, open, pending, snoozed, closed |
| pending | pending, open, resolved, snoozed |
| snoozed | snoozed, open, resolved, pending |
| closed | closed, open |
Contraintes principales
resolvedest le seul statut prérequis pour passer àclosed:open,pendingetsnoozedne peuvent pas être directement transformés enclosed. Ils doivent d'abord passer àresolvedavant d'être archivés.closedpeut uniquement revenir àopen: une conversation archivée ne peut pas passer directement à d'autres statuts actifs, tels queresolved,pendingousnoozed.- L'écriture du même statut est idempotente : lorsque le statut cible est identique au statut actuel, la validation est ignorée et la requête aboutit directement. Aucun callback n'est déclenché.
- La validation est implémentée au niveau du modèle ActiveRecord via
validate :status_transition_allowed, if: :will_save_change_to_status?et s'applique à tous les cheminssave!,update!etstatus=suivis desave.
Réponse
Réponse réussie
HTTP 200 :
{
"meta": {},
"payload": {
"success": true,
"conversation_id": 45,
"current_status": "resolved",
"snoozed_until": null
}
}
Paramètres de réponse
| Champ | Type | Description |
|---|---|---|
| success | boolean | Valeur renvoyée par save ; true lorsque la modification du statut réussit. |
| conversation_id | integer | display_id de la conversation, c'est-à-dire l'ID visible dans le compte. |
| current_status | string | Statut de la conversation après la modification. |
| snoozed_until | integer / null | Horodatage d'expiration actuellement effectif de la mise en pause ; toujours null pour les statuts autres que snoozed. |
Réponses d'erreur
| Code d'état HTTP | Condition de déclenchement |
|---|---|
| 401 | Utilisateur non authentifié ou échec de l'authentification. |
| 403 | L'utilisateur actuel n'est pas autorisé à accéder à la boîte de réception à laquelle appartient la conversation. |
| 404 | Aucune conversation correspondant au display_id ne peut être trouvée dans le compte actuel. |
| 422 | status n'est pas une valeur énumérée valide, l'analyse de snoozed_until échoue ou le statut cible enfreint la matrice STATUS_TRANSITIONS. |
Structure de la réponse 422
Violation de la matrice de transitions de statut (issue de la validation au niveau du modèle et générée sous forme de full_messages par RequestExceptionHandler) :
{
"message": "Status can't transition from open to closed",
"attributes": ["status"]
}
Valeur énumérée inconnue pour le statut (issue de CustomExceptions::Conversation::InvalidStatus) :
{
"message": "Invalid conversation status: \"foo\" ('foo' is not a valid status)"
}
Valeur snoozed_until non valide (issue de CustomExceptions::Conversation::InvalidSnoozedUntil) :
{
"message": "Invalid snoozed_until: \"not-a-timestamp\" (invalid date)"
}










