Messagerie
Endpoints REST
| Endpoint | Usage |
|---|---|
GET /chats/conversation_summaries | Liste des conversations |
GET /chats/messages/{otherUserId} | Messages d'une conversation |
POST /chats/send_messages | Envoi (multipart : pièce jointe, référence de contrat/document) |
GET /chatbots | Conversations récentes avec le chatbot |
POST /history_chatbots/{id}/response | Réponse à une conversation de chatbot |
Message
{
id: number;
sender_id: number | null; // null si expéditeur externe (via Channex)
receiver_id: number;
content: string;
attachment: string | null;
is_read: number; // 0/1, entier (pas un booléen)
is_sent_by_me: boolean;
created_at: string;
updated_at: string;
// Présents uniquement pour les messages provenant d'un canal OTA
source?: "internal" | "channex_booking" | "channex_airbnb";
external_thread_id?: string;
external_guest_name?: string;
booking_id?: number;
provider?: "BookingCom" | "Airbnb";
}
Résumé de conversation
{
user_id: number | string; // chaîne si conversation Channex (identifiant externe)
user_name: string;
phone?: string;
last_message: string;
timestamp: string;
is_read: number;
sent_by_me: boolean;
is_online?: boolean;
last_seen?: string;
source?: "internal" | "channex";
provider?: "BookingCom" | "Airbnb";
}
Temps réel (WebSocket)
{
id: number;
sender_id: number;
sender_name: string;
content: string;
type: "text" | "image" | "file";
created_at: string;
reservation_id?: number;
}
remarque
is_read change de type selon le point d'appel : entier (0/1) sur le Message REST, booléen sur le type utilisé en interne par le service d'envoi (ChatMessage). Ne présumez pas d'un type unique pour ce champ selon l'endroit du code où vous l'observez.