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
}'
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
resolvedest le seul état préalable pour passer àclosed:open,pendingetsnoozedne peuvent pas être définis directement surclosed; ils doivent d'abord passer àresolvedavant d'être archivés.closedne peut revenir qu'àopen: les conversations archivées ne peuvent pas passer directement à d'autres états actifs tels queresolved,pendingousnoozed.- 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 cheminssave!,update!etstatus=+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
}
}
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"]
}
Valeur d'énumération de statut inconnue (provient de CustomExceptions::Conversation::InvalidStatus) :
{
"message": "Invalid conversation status: \"foo\" ('foo' is not a valid status)"
}
snoozed_until invalide (provient de CustomExceptions::Conversation::InvalidSnoozedUntil) :
{
"message": "Invalid snoozed_until: \"not-a-timestamp\" (invalid date)"
}










