Aller au contenu principal

Messagerie

Endpoints REST

EndpointUsage
GET /chats/conversation_summariesListe des conversations
GET /chats/messages/{otherUserId}Messages d'une conversation
POST /chats/send_messagesEnvoi (multipart : pièce jointe, référence de contrat/document)
GET /chatbotsConversations récentes avec le chatbot
POST /history_chatbots/{id}/responseRé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.