Pokoje i wiadomości czatu firmowego przez API. Moduł chat musi być aktywny na koncie,
a token mieć uprawnienie chat.
Autoryzacja: Authorization: Bearer TOKEN
Content-Type: application/json; charset=utf-8
API Endpoints
| Metoda | Ścieżka | Opis |
|---|---|---|
| GET | /chat.json |
Pokoje zalogowanego usera (sidebar panelu) |
| GET | /chat/rooms.json |
Wszystkie pokoje konta (tylko admin; wyszukiwarka q, kind) |
| GET | /chat/rooms/:id.json |
Pojedynczy pokój |
| POST | /chat/rooms.json |
Utworzenie/znalezienie pokoju (patrz rodzaje niżej) |
| PATCH | /chat/rooms/:id.json |
Zmiana nazwy pokoju (owner/admin) |
| DELETE | /chat/rooms/:id.json |
Usunięcie pokoju (owner/admin) |
| GET | /chat/rooms/:id/members.json |
Członkowie pokoju (nazwa, login, email, avatar) |
| POST | /chat/rooms/:id/add_member.json?user_id=X |
Dodanie osoby (pokoje group/subject) |
| POST | /chat/rooms/:id/remove_member.json?user_id=X |
Usunięcie osoby (owner/admin) |
| POST | /chat/rooms/:id/join.json |
Dołączenie do pokoju group |
| POST | /chat/rooms/:id/leave.json |
Opuszczenie pokoju (DM-a nie da się opuścić) |
| POST | /chat/rooms/:id/mark_read.json |
Oznaczenie pokoju jako przeczytany |
| GET | /chat/rooms/:id/messages.json |
Historia pokoju, od najnowszych (before_id do paginacji) |
| POST | /chat/rooms/:id/messages.json |
Wysłanie wiadomości |
| GET | /chat/messages.json |
Wszystkie wiadomości konta (tylko admin; q, kind, room_id) |
| PATCH | /chat/messages/:id.json |
Edycja własnej wiadomości |
| DELETE | /chat/messages/:id.json |
Usunięcie wiadomości (autor/admin) |
| POST | /chat/messages/:id/toggle_reaction.json?emoji=👍 |
Dodanie/zdjęcie reakcji |
Uwaga: :id pokoju i wiadomości to uuid (string). W URL-ach panelu pokoje mają numer
per konto (scoped_id, np. /chat/3-nazwa), ale API używa uuid z pola id.
Rodzaje pokoi (kind)
kind)-
dm- rozmowa 1:1, unikalna per para userów. POST zuser_idznajduje albo tworzy:
{ "chat_room": { "kind": "dm", "user_id": 5 } }
-
group- nazwany kanał; twórca zostaje ownerem,user_idsdodaje członków:
{ "chat_room": { "kind": "group", "name": "Ogólny", "user_ids": [5, 7] } }
-
subject- rozmowa w kontekście obiektu (jeden pokój per obiekt, find-or-create). Dozwolonesubject_type:Organize::Task,Organize::Project,Organize::Team,Mail::Email,Helpdesk::Ticket,Crm::Client. Dostęp dziedziczony z obiektu (wymagane uprawnienie modułu). Pokój teamu od razu dołącza członków zespołu:
{ "chat_room": { "kind": "subject", "subject_type": "Organize::Task", "subject_id": 123 } }
Wysłanie wiadomości
{ "chat_message": { "content": "Treść wiadomości", "parent_id": null } }
-
content- markdown;parent_id(uuid) spina wątek (odpowiedź pod wiadomością) -
Wzmianka w treści to token z ID:
@[Imię Nazwisko](user:5)- user 5 dostanie powiadomienie (jeśli jest członkiem pokoju);@all/@herepowiadamia wszystkich członków z włączonym dzwonkiem - Wiadomości mają
kind:message(od usera),system(automatyczne, np. dodanie członka),agent(od agenta AI)
Typowe przepływy
-
Napisz do osoby: znajdź user_id (
GET /account/users.json?q=nazwisko) →POST /chat/rooms.json(kind: dm, user_id) →POST /chat/rooms/:id/messages.json -
Napisz o zadaniu:
POST /chat/rooms.json(kind: subject, Organize::Task, subject_id) → wyślij wiadomość; rozmowa pokaże się też w timeline zadania między komentarzami -
Podsumuj rozmowę:
GET /chat/rooms/:id/messages.json(od najnowszych; doczytuj starsze przezbefore_id= id ostatniej pobranej) → streść treści