Mettre à jour le statut de la conversation

Utilisez l'API toggle_status pour modifier le statut d'une conversation spécifiée. Le serveur vérifie si le statut cible est valide selon la matrice de transition d'état STATUS_TRANSITIONS.

Méthode de requête

POST

Point de terminaison

https://livedesk-api.engagelab.com/api/v2/accounts/conversations/{conversation_id}/toggle_status

Authentification

Pour plus de détails, consultez la description de la méthode d'authentification dans la vue d'ensemble 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 requête

Field Type Description
Authorization string Utilisez Authorization: Basic base64(API Key:API Secret) pour l'authentification. Accédez à la page des clés API pour obtenir l'API Key et l'API Secret, puis reliez-les par deux-points et encodez le résultat en Base64.
Content-Type application/json Type de contenu. Utilisez application/json pour les messages en texte brut.

Paramètres de chemin

Field Type Required Description
conversation_id string Yes ID de la conversation.

Paramètres du corps de la requête

Field Type Required Description
status string Yes Statut cible. Voir les valeurs d'énumération ci-dessous.
snoozed_until integer No Prend effet uniquement lorsque status=snoozed. Horodatage UNIX (en secondes). S'il est omis, la conversation est mise en veille indéfiniment.
sender_type string No 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 flux bot_handoff! est déclenché et l'événement CONVERSATION_BOT_HANDOFF est émis.

Valeurs d'énumération de status

Value Meaning
open En cours
resolved Résolue
pending En attente de traitement par le bot/l'agent
snoozed Mise en veille
closed Fermée (archivée)

Matrice de transition d'état (STATUS_TRANSITIONS)

Current Status Allowed Target Status
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 clés

  • resolved est le seul état préalable pour passer à closed : open, pending et snoozed ne peuvent pas être définis directement sur closed ; ils doivent d'abord passer à resolved avant d'être archivés.
  • closed ne peut revenir qu'à open : les conversations archivées ne peuvent pas passer directement à d'autres états actifs tels que resolved, pending ou snoozed.
  • Définir le même statut est idempotent : si le statut cible est identique au statut actuel, la validation est ignorée et la réussite est renvoyée 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= + save.

Réponse

Réponse en cas de succès

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

Field Type Description
success boolean Valeur de retour de save ; true si la mise à jour du statut réussit.
conversation_id integer Le display_id de la conversation (ID visible par le compte).
current_status string Le statut de la conversation après la mise à jour.
snoozed_until integer / null L'horodatage d'expiration de la mise en veille actuellement en vigueur ; toujours null lorsque le statut n'est pas snoozed.

Réponses d'erreur

HTTP Status Code Trigger Condition
401 Non authentifié ou échec de l'authentification
403 L'utilisateur actuel n'a pas accès à la boîte de réception à laquelle appartient la conversation
404 Aucune conversation avec le display_id correspondant n'a été trouvée dans le compte actuel
422 status n'est pas une valeur d'énumération valide, snoozed_until ne peut pas être analysé, ou le statut cible enfreint la matrice STATUS_TRANSITIONS

Structure de la réponse 422

Violation de la matrice de transition d'état (provient de la validation au niveau du modèle et est renvoyé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 d'énumération de statut inconnue (provient 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

snoozed_until invalide (provient 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