Endpointy widgetów
| Metoda | Ścieżka | Opis |
|——–|———|——|
| GET | /webchat/widgets.json | Lista widgetów |
| GET | /webchat/widgets/:id.json | Pojedynczy widget |
| POST | /webchat/widgets.json | Utworzenie widgetu |
| PATCH | /webchat/widgets/:id.json | Aktualizacja widgetu |
| DELETE | /webchat/widgets/:id.json | Usunięcie widgetu |
Autoryzacja: Authorization: Bearer TOKEN (uprawnienie: webchat)
Pola widget
| Pole | Typ | Opis |
|——|—–|——|
| name | string | Nazwa widgetu (wymagane) |
| title | string | Tytuł wyświetlany w czacie |
| description | text | Opis pod tytułem |
| color | string | Kolor HEX |
| active | boolean | Czy aktywny (domyślnie true) |
| orientation | string | Pozycja widgetu |
| placeholder | string | Tekst zastępczy w polu wiadomości |
| user_name | string | Wyświetlane imię operatora |
| locale | string | Język widgetu |
| email | string | E-mail kontaktowy |
| own_css | text | Własny CSS |
| introduce | boolean | Czy wymagać przedstawienia się |
| any_user | boolean | Czy wszyscy użytkownicy obsługują |
| offline_messages | boolean | Czy przyjmować wiadomości offline |
| offline_messages_welcome | string | Wiadomość powitalna offline |
| offline_messages_reply | string | Tekst po wysłaniu wiadomości offline |
| poke | text | Tekst attention grabbera |
| selected_responsible_id | string | ID domyślnej grupy/zespołu |
| department_id | integer | ID działu |
| opening_time | object | Harmonogram godzin pracy |
Pola w fields (JSONB)
| Klucz | Typ | Opis |
|——-|—–|——|
| sound_notifications | boolean | Powiadomienia dźwiękowe |
| use_avatar | boolean | Wyświetlaj avatar |
| avatar_option | string | widget lub user |
| just_name | boolean | Tylko imię (bez nazwiska) |
| require_client_data | boolean | Wymagaj imienia/e-maila |
| allow_client_attachments | boolean | Zezwól na załączniki |
| allow_auto_assign | boolean | Auto-przydzielanie do operatora |
Publiczny endpoint (bez autoryzacji)
GET /webchat/widget_data
Pobiera dane widgetu i wiadomości dla sesji czatu.
| Parametr | Opis |
|———-|——|
| token | Token sesji (space_token) |
| widget_id | ID widgetu |
Odpowiedź:
{
"messages": [...],
"description": "Opis widgetu",
"user_name": "Jan",
"title": "Pomoc",
"active": true,
"open": true,
"messages_after_hours": true,
"closed_message": "Jesteśmy offline",
"widget_avatar": "https://...",
"require_client_data": false,
"allow_client_attachments": true
}
Godziny pracy (opening_time)
{
"opening_time": {
"timezone": "Europe/Warsaw",
"monday": { "from": "08:00", "to": "17:00" },
"tuesday": { "from": "08:00", "to": "17:00" },
"wednesday": { "from": "08:00", "to": "17:00" },
"thursday": { "from": "08:00", "to": "17:00" },
"friday": { "from": "08:00", "to": "16:00" }
}
}
Kod osadzenia
<link rel="stylesheet" href="STYLESHEET_URL">
<div class="sugester-widget" id="intum-webchat-widget"></div>
<script>
var intumEchoOrigin = "wss://echo.intum.net";
var intumChatConfig = {
accountUrl: "https://konto.intum.pl",
account_id: 123,
widget_id: 1,
widget_token: "TOKEN",
email: "",
checksum: "SHA256_HASH",
sound_notifications: true,
locale: "pl"
};
</script>
<script src="WIDGET_URL"></script>
<script>webChatWidget = new IntumWebchatWidget(intumChatConfig, intumEchoOrigin);</script>
Komunikacja WebSocket
Widget łączy się z serwerem echo przez Phoenix Channels:
-
Kanał:
webchat:user/{widget_token}/{room_token} -
Wysyłanie:
push("new_msg", { message, widget_id, ... }) -
Odbieranie: event
new_msgz wiadomością operatora