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 }'
              
              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
}'

            
Afficher ce bloc de code dans la fenêtre flottante

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

  • resolved est le seul statut prérequis pour passer à closed : open, pending et snoozed ne peuvent pas être directement transformés en closed. Ils doivent d'abord passer à resolved avant d'être archivés.
  • closed peut uniquement revenir à open : une conversation archivée ne peut pas passer directement à d'autres statuts actifs, tels que resolved, pending ou snoozed.
  • 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 chemins save!, update! et status= suivis de save.

Réponse

Réponse réussie

HTTP 200 :

{ "meta": {}, "payload": { "success": true, "conversation_id": 45, "current_status": "resolved", "snoozed_until": null } }
              
              {
  "meta": {},
  "payload": {
    "success": true,
    "conversation_id": 45,
    "current_status": "resolved",
    "snoozed_until": null
  }
}

            
Afficher ce bloc de code dans la fenêtre flottante

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"] }
              
              {
  "message": "Status can't transition from open to closed",
  "attributes": ["status"]
}

            
Afficher ce bloc de code dans la fenêtre flottante

Valeur énumérée inconnue pour le statut (issue de CustomExceptions::Conversation::InvalidStatus) :

{ "message": "Invalid conversation status: \"foo\" ('foo' is not a valid status)" }
              
              {
  "message": "Invalid conversation status: \"foo\" ('foo' is not a valid status)"
}

            
Afficher ce bloc de code dans la fenêtre flottante

Valeur snoozed_until non valide (issue de CustomExceptions::Conversation::InvalidSnoozedUntil) :

{ "message": "Invalid snoozed_until: \"not-a-timestamp\" (invalid date)" }
              
              {
  "message": "Invalid snoozed_until: \"not-a-timestamp\" (invalid date)"
}

            
Afficher ce bloc de code dans la fenêtre flottante
Icon Solid Transparent White Qiyu
Contactez-nous