Naciśnij Enter.
Uzyskaj swoje dane.
REST API /api/v1, 53 zakresy, 239 punktów końcowych, 11 zdarzeń webhook i API JS dla widgetu. Czaty, kontakty, sztuczna inteligencja, baza wiedzy, zgłoszenia i rozliczenia — cokolwiek robi panel, Twój kod też może to zrobić.
# naciśnij Enter lub znak po prawej stronie $ curl -H "Authorization: Bearer sb_••••" \ https://smartbtn.me/api/v1/chats?limit=1
Szybki start
Trzy kroki od zera do pierwszej odpowiedzi. Każde żądanie jest powiązane z jednym widżetem i uwierzytelniane za pomocą tokena na okaziciela.
- Wydaj tokenPanel → Tokeny API: nazwa, opcjonalny okres ważności i potrzebne zakresy. Token należy do dokładnie jednego widgetu. Token w postaci zwykłego tekstu jest wyświetlany raz; Smartbtn przechowuje tylko jednokierunkowy skrót, więc utraconego tokena nie można odzyskać – można go jedynie unieważnić i ponownie wystawić.
- Włącz API widżetuW ustawieniach widgetu włącz opcję „Zezwalaj na API widgetów (JS i REST)”. Wydanie tokena nie powoduje przełączenia tego przełącznika za Ciebie.
- Wyślij pierwszą prośbęToken trafia tylko do nagłówka
Authorization— nigdy do adresu URL.
# wyświetl listę czatów widżetu curl -H "Authorization: Bearer $SMARTBTN_TOKEN" \ https://smartbtn.me/api/v1/chats
// 200 OK · paginacja kursora { "data": [ { "id": 48211, "status": "open", "last_message_at": "2026-10-17T09:41:12+03:00" }, … ], "next_cursor": "eyJpZCI6NDgyMTB9" // null — na ostatniej stronie }
https://smartbtn.me/api/v1 to główny punkt końcowy interfejsu API dla wszystkich danych projektu. Zawsze wysyłaj żądania przez HTTPS i nigdy nie przesyłaj dalej tokena w przypadku przekierowań.401 lub 403 z treścią application/problem+json RFC‑7807 — zobacz Błędy.Uwierzytelnianie
Trzy ścieżki, w zależności od tego, kto do kogo dzwoni. Dostęp jest domyślnie odmowy: brak zakresu — brak połączenia.
Każde żądanie zawiera Autoryzację: Bearer . Na serwerze token jest rozpoznawany jako jeden widget i jego zakresy.
Żądania wychodzące są podpisane tajemnicą przypadającą na dzierżawcę: X‑Smartbtn‑Signature. Można dodać dodatkowe dane uwierzytelniające na okaziciela, jeśli Twoja strona ich potrzebuje.
POST /v1/ai/replies wykorzystuje własną podpisaną ramkę, przypinaną do operatora AI i widżetu oraz kluczowaną przez trwały causation_id.
Przełącznik, o którym ludzie zapominają
«Zezwól na API widgetów (JS i REST)» w ustawieniach widgetu otwiera zarówno API REST, jak i API widgetu JS. Wydanie tokena nie umożliwia takiej możliwości. Zakresy istniejącego klucza można edytować w panelu kontrolnym (tokeny API → klucz → Edytuj zakresy) bez ponownego wydawania – integracje działają dalej.
Ustawienia wstępne
| Wstępnie ustawione | Zakresy | Kiedy |
|---|---|---|
| Konfiguracja AI 9 | widget:read · widget:write · ai:read · ai:write · ai:apply · kb:read · kb:write · files:write · stats:read | Twoja aplikacja AI konfiguruje widżet: asystenta, bazę wiedzy, teksty. Zastępuje cały wybór zakresu. |
| Tylko do odczytu (zestaw przykładowy) | chats:read · messages:read · contacts:read · stats:read | Dashboardy, BI, eksport. |
| Mostek Helpdesk (przykładowy zestaw) | chats:read · messages:read · messages:write · webhooks:write · support:read | Odbij okna dialogowe i zgłoszenia w swoim systemie CRM. |
ai:credentials:write tylko wtedy, gdy właściciel autoryzuje konfigurację klucza dostawcy. Do konfiguracji AI nie są potrzebne uprawnienia do konta, rozliczeń ani partnera. Klucz zostanie wyświetlony raz — unieważnij go po zakończeniu konfiguracji.Zakresy
53 zakresy tras, plus jeden warunkowy i jeden zarezerwowany. Żądanie powiedzie się tylko wtedy, gdy token zawiera zakres trasy (lub wymienioną alternatywę).
| Zakres | Dotacje |
|---|---|
| chats · 2 | |
| chats:read | Przeczytaj czaty i ich metadane |
| chats:write | Zamknij czat, poproś o ocenę, przenieś, zgłoś wniosek, dołącz lub odłącz agenta |
| messages · 2 | |
| messages:read | Przeczytaj historię wiadomości czatu |
| messages:write | Wysyłaj wiadomości, wpisz wskaźniki i potwierdzenia przeczytania jako agent |
| contacts · 2 | |
| contacts:read | Przeczytaj kontakty |
| contacts:write | Zaktualizuj pola i atrybuty kontaktów |
| agents · 3 | |
| agents:read | Przeczytaj agentów i ich obecność |
| agents:writewrażliwy | Zapraszaj, aktualizuj, zawieszaj, przywracaj lub usuwaj agentów; zaproszona osoba widzi każdy czat widżetu |
| agents:events:read | Przeczytaj dziennik zdarzeń agenta i metryki poszczególnych agentów |
| tags · 2 | |
| tags:read | Czytaj tagi |
| tags:write | Dołącz tagi do kontaktu |
| files · 2 | |
| files:read | Pobierz przesłany plik |
| files:write | Prześlij nowy plik |
| stats · 1 | |
| stats:read | Przeczytaj zbiorcze statystyki czatów, wiadomości i ocen |
| channels · 3 | |
| channels:read | Przeczytaj status online kanału niestandardowego |
| channels:write | Dostarcz wiadomość przychodzącą na niestandardowym kanale |
| channels:register | Zarejestruj nowy kanał niestandardowy (tylko zainstalowane aplikacje) |
| webhooks · 2 | |
| webhooks:read | Lista subskrypcji webhooka |
| webhooks:write | Utwórz, usuń lub ponownie dostarcz subskrypcję |
| quick_phrases · 2 | |
| quick_phrases:read | Przeczytaj krótkie frazy agenta |
| quick_phrases:write | Twórz, edytuj lub usuwaj szybkie frazy |
| ratings · 1 | |
| ratings:read | Zapoznaj się z ocenami gości i oceną każdego agenta |
| responder · 2 | |
| responder:injectwrażliwy | Wstaw odpowiedź na czacie na żywo jako zewnętrzny operator AI lub bot |
| responder:escalatewarunkowy | Dla POST /v1/ai/replies: przekazywanie kierowane do rozmówcy poprzez escalate=true |
| widget · 2 | |
| widget:read | Przeczytaj wygląd, zachowanie i ustawienia widżetu |
| widget:write | Zaktualizuj ustawienia widżetu i wyczyść pamięć podręczną widżetów |
| departments · 2 | |
| departments:read | Przeczytaj działy, ich agentów i harmonogramy |
| departments:write | Twórz, aktualizuj lub usuwaj działy i harmonogramy |
| messengers · 2 | |
| messengers:read | Przeczytaj, którzy komunikatorzy są połączeni (nigdy dane uwierzytelniające) |
| messengers:writewrażliwy | Podłącz lub odłącz komunikator; zapisuje dane uwierzytelniające dostawcy |
| ai · 4 | |
| ai:read | Przeczytaj asystentów AI, ich konfigurację i alerty |
| ai:write | Twórz i aktualizuj asystentów, ustawienia AI i operatorów AI, osobowość i podpowiedzi |
| ai:credentials:writewrażliwy | Przechowuj dane uwierzytelniające zewnętrznego dostawcy LLM (BYOK) |
| ai:apply | Zatwierdź ulepszenie, które zmienia osobowość asystenta na żywo |
| kb · 2 | |
| kb:read | Przeczytaj reguły bazy wiedzy i przetworzone źródła |
| kb:write | Twórz, aktualizuj lub usuwaj reguły i źródła KB |
| transcripts · 1 | |
| transcripts:read | Eksportuj transkrypcję czatu |
| account · 2 | |
| account:read | Przeczytaj profil konta i wszystkie jego podmioty prawne |
| account:write | Aktualizuj tylko imię, nazwisko i telefon konta |
| billing · 2 | |
| billing:read | Przeczytaj zapisy rozliczeniowe widżetu i osoby prawne |
| billing:write | Twórz, aktualizuj, usuwaj osoby prawne; nie wystawia żadnych faktur, nie przekazuje pieniędzy |
| partners · 2 | |
| partners:read | Przeczytaj dane partnerów i poleceń |
| partners:withdrawzarezerwowane | Zarezerwowane: obecnie nie jest używana żadna operacja wypłaty |
| support · 4 | |
| support:read | Czytaj zgłoszenia, aktywne czaty, ich wiadomości i własne kontrolowane działania |
| support:replywrażliwy | Odpowiedz klientowi jako operator wsparcia |
| support:write | Odbierz lub rozłącz czat, zamknij bez odpowiedzi, otwórz ponownie |
| support:tickets:close | Zamknij tylko bilet — nic więcej |
| marketing · 2 | |
| marketing:read | Czytaj kampanie marketingowe: banery, pop‑upy, e‑maile |
| marketing:write | Twórz i edytuj kampanie, zmieniaj status, rozpocznij wysyłanie e‑maili |
| broadcasts · 2 | |
| broadcasts:read | Czytaj transmisje komunikatorów (WhatsApp, Telegram, Messenger, Viber, VK, MAX) |
| broadcasts:write | Twórz, edytuj i rozpocznij transmisję |
| problems · 2 | |
| problems:read | Przeczytaj klastry i ustawienia problemów klientów |
| problems:write | Zmień ustawienia i status klastra: nowy, w toku, rozwiązany, cykliczny |
| invitations · 2 | |
| invitations:read | Przeczytaj zasady zaproszeń, warianty A/B, szablony i lejek |
| invitations:write | Twórz, edytuj, włączaj lub usuwaj reguły i szablony |
Punkty końcowe
Cała powierzchnia publiczna na jednej liście. Filtruj według zasobu, szukaj według ścieżki, kliknij wiersz, aby skopiować gotowy zawinięcie.
ai Asystenci, operatorzy, klucze, nauka, rynek54
chats Dialogi, wiadomości, transfer, oceny18
kb Baza wiedzy: reguły, crawler, pliki, wyszukiwanie16
agents Agenci, zaproszenia, metryki14
messengers Komunikatory, sieci społecznościowe i kanały rynkowe13
billing Saldo, subskrypcje, faktury, podmioty12
support Agent wsparcia: bilety i czaty12
widget Ustawienia, język, tłumaczenia, skórki, pamięć podręczna12
channels Kanały niestandardowe8
external‑operators Twój bot jako operator8
webhook‑subscriptions Subskrypcje webhooków8
broadcasts Transmisje na Messengerze7
departments Działy i harmonogram7
invitations Inteligentne zaproszenia7
marketing Kampanie marketingowe7
partner Program partnerski7
wishes Życzenia dla AI7
contacts Kontakty i tagi5
problems Analiza problemów klientów4
quick‑phrases Szybkie frazy4
compat Zgodność migracji3
stats Statystyki3
account Konto2
files Pliki2
ratings Oceny1
tags Tagi1
v1 1
webhook‑events Katalog wydarzeń1
Ścieżki są zależne od https://smartbtn.me/api. Zapisy wymagają Content‑Type: application/json i X‑Smartbtn‑Idempotency‑Key. Grupa compat to warstwa zgodności dla zespołów przenoszących się z innej platformy czatu.
Haki internetowe
Podpisany JSON POST na Twój adres URL za każdym razem, gdy nastąpi subskrybowane wydarzenie. Zarządzaj subskrypcjami poprzez /v1/webhook‑subscriptions lub w panelu kontrolnym.
{
"id": "evt_01JAB3K9Q7",
"type": "ticket.created",
"data": {
"button_guid": "b_3f9c2e",
"ticket_number": 10482,
"chat_id": 48211,
"client_id": 9134,
"reason": "human_request",
"priority": "high",
"sla_hours": 4,
"source": "chat",
"created_at": "2026-10-17T10:15:00+03:00"
}
}powód: human_request | rozliczenia | ai_nierozwiązany | żądanie_akcji | …; priorytet: wysoki | normalna; źródło: czat | aplikacja | strona. Przeczytaj zgłoszenie i jego okno dialogowe za pomocą GET /v1/support/tickets/{number.
Nagłówki dostawy
| X‑Smartbtn‑Event | Typ zdarzenia, np. wiadomość.utworzona. |
| X‑Smartbtn‑Signature | sha256=v1: surowej treści. |
| X‑Smartbtn‑Idempotency‑Key | Jedna wartość na zdarzenie, stabilna przy kolejnych próbach. Deduplikuj to. |
| X‑Smartbtn‑Delivery | Jedna wartość na próbę dostarczenia — dla Twoich dzienników. |
| X‑Smartbtn‑Timestamp | Unixowy czas wysyłania. Informacyjne, niepodpisane. |
Weryfikacja podpisu
HMAC‑SHA256 surowej treści (bajty w postaci otrzymanej, przed analizą JSON) z sekretem punktu końcowego; porównać w stałym czasie. Sekret jest pokazywany jednorazowo podczas tworzenia subskrypcji; obróć go za pomocą POST /v1/webhook‑subscriptions/{id}/rotate‑secret.
// Node.js · na przykład sekret jest symbolem zastępczym import crypto from 'node:crypto'; function verify(rawBody, header, secret) { const expected = 'sha256=v1:' + crypto.createHmac('sha256', secret).update(rawBody).digest('hex'); const a = Buffer.from(expected), b = Buffer.from(header || ''); return a.length === b.length && crypto.timingSafeEqual(a, b); }
// PHP $expected = 'sha256=v1:' . hash_hmac('sha256', file_get_contents('php://input'), $secret); if (!hash_equals($expected, $_SERVER['HTTP_X_SMARTBTN_SIGNATURE'] ?? '')) { http_response_code(401); exit; }
Ponów próbę i zamów
- Do 4 prób (pierwsza wysyłka plus 3 ponowne próby), opóźnienie
min(60, 2^attempt × 5)s — około 10, 20, 40 s. - Wartość inna niż 2xx lub przekroczenie limitu czasu liczy się jako nieudana próba. Nieudane dostawy można wysłać ponownie za pomocą
POST /v1/webhook‑subscriptions/{id}/redeliver— ten sam klucz idempotencji, nowy identyfikator dostawy. - Dostawa odbywa się co najmniej raz i nie jest zamawiana. Ładunki są minimalne — identyfikatory, a nie pełne rekordy; pobierz szczegóły za pośrednictwem interfejsu API REST.
JS API
Przekaż wszystko, co już wiesz o gościu, bezpośrednio agentowi. Połączenia akceptowane są wyłącznie z domeny ustawionej w ustawieniach widgetu.
smartbtn_widget_api.setContactInfo(info)
Ustawia dane kontaktowe odwiedzającego. Agent widzi to tak, jakby odwiedzający wypełnił formularz wprowadzający. Imię i nazwisko, telefon i e‑mail odgrywają w Smartbtn szczególną rolę — stąd osobna metoda.
| Imię | Wpisz | Opis |
|---|---|---|
| name | string | Imię gościa |
| string | E‑mail gościa | |
| phone | string | Telefon gościa |
| description | string | Wszelkie dodatkowe informacje o kliencie |
Smartbtn_api.setClientInfo({ name: „Aleks Morgan”, email: "email@example.com", phone: "+17584987855", description: "Description text" });
smartbtn_widget_api.setCustomData(fields)
Wszelkie dodatkowe dane do panelu informacyjnego po prawej stronie aplikacji agenta. Nazywaj go tak często, jak chcesz — w otwartym oknie dialogowym panel aktualizuje się w czasie rzeczywistym. Pola są wyświetlane w kolejności tablicowej.
| Imię | Wpisz | Opis |
|---|---|---|
| fields | array | Lista pól danych |
| field.title | string | Kierunek nad polem |
| field.content | string | Zawartość pola; tagi są ucieczki |
| field.link | string | Adres URL otwierany po kliknięciu |
Smartbtn_api.setClientCustomData([ { title: "Order", content: "#10482 · 3 items", link: "https://shop.example/orders/10482" }, { title: "Actions", content: "Open customer profile", link: "https://crm.example/c/9134" } ]);
smartbtn_widget_api.setSkin(skin, opts) · open() · close()
Zmień motyw widżetu w locie, bez ponownego ładowania strony (classic, minimal, capsule, liquid) lub programowo kontroluj okno czatu. Aby trwale dostosować projekt do potrzeb, przekaż te same pola do PATCH /v1/widget/settings.
// JS API · przełączaj skórkę na stronie w czasie rzeczywistym smartbtn_widget_api.setSkin("minimal"); smartbtn_widget_api.setSkin("capsule", { capsuleTitle: "Smartbtn AI", capsuleSubtitle: „Odpowiedzi za ~1 s” }); // REST API · PATCH /v1/widget/settings (zakres widget:write) { "skin": "minimal", "widget_header_align": "center", "widget_show_operator_avatars": false, "widget_show_tabs_bar": false, "chat_bg": "#FAF8F5", "capsule_title": "Smartbtn AI", "capsule_subtitle": „Online 24 godziny na dobę, 7 dni w tygodniu” }
widget_api_contact_sync jest włączona, te wywołania uruchamiają również webhook contact.updated.Support‑agent API
Zautomatyzowany agent wsparcia obsługuje kolejkę zgłoszeń i czaty z klientami: bierze udział w czacie, odpowiada jako operator wsparcia technicznego, zamyka zgłoszenie. Wyłączone, dopóki właściciel widżetu go nie włączy.
- Właściciel to umożliwiaWyświetla listę tokenów, które mogą działać jako agenci wsparcia, oraz adresy IP, z których mogą dzwonić.
- Przeczytaj kolejkę
GET /v1/support/tickets·GET /v1/support/chats - Wynajmij czat
POST …/chats/{id}/claim·…/release - OdpowiedzZwykły tekst, linki tylko do dozwolonych hostów widżetu.
201tylko po zapisaniu wiadomości. - Zamknij lub otwórz ponownie
POST …/tickets/{number}/close·…/reopen
| Zakres | Pozwala |
|---|---|
| support:read | Bilety, aktywne czaty, wiadomości oznaczone etykietą klient / AI / wsparcie / system, własne kontrolowane działania |
| support:write | Odbierz / rozłącz czat, zamknij bez odpowiedzi, otwórz ponownie |
| support:reply | Odpowiedz klientowi jako operator wsparcia (wrażliwy) |
| support:tickets:close | Zamknij tylko zgłoszenie — aby wyświetlić przycisk „Pytanie rozwiązane” na swoim backendzie |
curl -X POST https://smartbtn.me/api/v1/support/chats/48211/reply \ -H "Authorization: Bearer $AGENT_TOKEN" \ -H "Content-Type: application/json" \ -H "X-Smartbtn-Idempotency-Key: $(uuidgen)" \ -d '{"text":"Gotowe, dostęp został przywrócony."}'
API AI
Wszystko, co robi sekcja AI na pulpicie nawigacyjnym: asystenci, własne klucze dostawców, baza wiedzy, samokształcenie z wycofywaniem, życzenia, problemy, sygnały zapotrzebowania i asystent w Twojej aplikacji.
Kilku asystentów z własną rolą i językiem, test przed uruchomieniem, operatorzy wymienieni według języka.
- GET/v1/ai/assistants
- POST/v1/ai/assistants/{id}/test
- PATCH/v1/ai/operators/{id}
- POST/v1/ai/handoff
Claude, ChatGPT, DeepSeek, Gemini, Mistral, regionalne LLM lub dowolne kompatybilne z OpenAI. Modele są wymienione według klucza.
- GET/v1/ai/credentials
- POST/v1/ai/credentials
- GET/v1/ai/credentials/{id}/models
Robot indeksujący Twoją witrynę, przesyłane pliki PDF i DOCX, reguły, stan wyszukiwania i indeksowania.
- PUT/v1/kb/crawler
- POST/v1/kb/uploads
- POST/v1/kb/rules
- GET/v1/kb/search
Dostrajanie przebiegów, cykli, historii, wersji postaci z wycofywaniem i wyłącznikiem awaryjnym.
- POST/v1/ai/learning/tune
- GET/v1/ai/learning/cycles
- POST/v1/ai/learning/persona‑versions/{version}/revert
- GET/v1/ai/learning/kill‑switch
Życzenie w prostych słowach → podgląd wolny od skutków ubocznych → zatwierdź, odrzuć lub przywróć.
- POST/v1/wishes
- GET/v1/wishes/{id}/preview
- POST/v1/wishes/{id}/approve
- POST/v1/wishes/{id}/revert
Klastry problemowe ze statusami i miesięcznym limitem wydatków; o co prosili klienci, a tego nie oferujesz.
- GET/v1/problems
- PATCH/v1/problems/settings
- POST/v1/problems/{id}/status
- GET/v1/ai/demand‑signals
Twój backend przesyła status klienta (zarejestrowany, opłacony, klient od czasu, stan usługi) w żądaniu podpisanym przez HMAC — sztuczna inteligencja waży go podczas odpowiadania i eskalacji.
- POST/v1/ai/customer‑status
- POST/v1/ai/tickets
- GET/v1/ai/alerts
Zwroty dialogów, łączenie kont, zamiana mowy na tekst i zamiana tekstu na mowę, bilety aplikacji — w ramach podpisanej integracji.
- POST/v1/ai/assistant/turn
- POST/v1/ai/assistant/account‑link
- POST/v1/ai/assistant/speech‑to‑text
- POST/v1/ai/assistant/text‑to‑speech
Gotowi asystenci według niszy: kawiarnia, przychodnia, sklep, serwis samochodowy. Złóż wniosek w jednym wniosku.
- GET/v1/ai/marketplace/templates
- POST/v1/ai/marketplace/templates/{slug}/apply
Twój własny bot odpowiada na czaty: odpowiedzi asynchroniczne, przekazywanie, testy i cykl życia.
- POST/v1/ai/replies
- POST/v1/external‑operators/{public_id}/tests
- POST/v1/external‑operators/{public_id}/lifecycle
Limity stawek
Na token przypadają dwa liczniki: odczyty i zapisy, więc odpytywanie nigdy nie pochłania budżetu zapisu.
| X‑RateLimit‑Limit | Rozmiar licznika, w którym zostało naliczone to żądanie (600 lub 120) |
| X‑RateLimit‑Remaining | Żądania pozostawione w bieżącym oknie |
| X‑RateLimit‑Reset | Kiedy okno się resetuje |
| Retry‑After | Na 429: sekundy oczekiwania |
HTTP/1.1 429 Too Many Requests Content-Type: application/problem+json Retry-After: 12 X-RateLimit-Limit: 120 X-RateLimit-Remaining: 0 { "status": 429, "title": "Too Many Requests", "reason": "rate_limited" }
/v1/ai/assistant/tickets/status i /v1/ai/assistant/account‑link mają własne liczniki; interfejs API agenta wsparcia może mieć zastąpienie poszczególnych widżetów.
Błędy
Każdy błąd to RFC‑7807 application/problem+json: status i przyczyna czytelne dla maszyny, szczegóły czytelne dla człowieka.
HTTP/1.1 403 · Content-Type: application/problem+json { "type": "https://smartbtn.me/problems/forbidden", "title": "Forbidden", "status": 403, "detail": "Token lacks scope chats:write.", "required_scopes": [ "chats:write" ], "hint": "Dashboard → API tokens → key → Edit scopes" }
Treść zawiera nazwy wymagane_zakresy i miejsce ich przyznania. Nie ma potrzeby ponownego wydawania klucza.
| Stan | Znaczenie |
|---|---|
| 400 | Źle sformułowane żądanie lub brak wymaganego klucza idempotencji |
| 401 | Brak tokena, nieprawidłowy lub unieważniony token |
| 403 | Token nie ma zakresu; treść dodaje required_scopes i gdzie je przyznać |
| 404 | Nie znaleziono w tym widżecie |
| 405 | Metoda niedozwolona — zatrzymaj się i zgłoś; nie szukaj alternatywnych zapisów |
| 409 | Klucz idempotencji ponownie wykorzystany w ciągu 24 godzin lub konflikt stanu |
| 422 | Walidacja nie powiodła się (np. wysłano pole tylko do odczytu) |
| 429 | Limit stawki; szanuj opcję Ponów próbę po |
Idempotencja
Sieci zawodzą. Klucz sprawia, że ponowna próba zapisu jest bezpieczna: ta sama operacja nigdy nie jest wykonywana dwukrotnie.
- Wysyłaj
X‑Smartbtn‑Idempotency‑Keyprzy każdym POST/PATCH/PUT/DELETE: nowy UUID dla nowej operacji, ten sam klucz dla ponownej próby tego samego. - Operacje oznaczone
x‑idempotency: wymaganew OpenAPI: brak klucza → 400, klucz ponownie użyty w ciągu 24 godzin → 409 (nie jest to sukces zapisany w pamięci podręcznej). - Nie jesteś pewien, czy przeszło? Najpierw przeczytaj stan. Nigdy nie zmieniaj klucza automatycznie; szanuj opcję Ponów próbę po.
502od dostawcy wyższego szczebla zwalnia klucz — spróbuj ponownie, używając tego samego klucza.
KEY=$(uuidgen) curl -X PATCH https://smartbtn.me/api/v1/widget/settings \ -H "Authorization: Bearer $SMARTBTN_TOKEN" \ -H "Content-Type: application/json" \ -H "X-Smartbtn-Idempotency-Key: $KEY" \ -d '{"language":"ru"}' # błąd sieci? powtórz z tym samym $KEY
Changelog
Zmiany w publicznym API i webhookach w 2026 roku. Wszystko poniżej ma charakter addytywny i pozostaje w wersji v1.
Utworzono nowy bilet na wydarzenie na żywo. GET /v1/support/tickets odpowiada na dowolny klucz za pomocą support:read, dopóki nie zostanie skonfigurowany agent wsparcia. Kluczowe zakresy można edytować bez ponownego wydawania. 403 zyski wymagane_zakresy.
POST/PATCH /v1/ai/operatorzy akceptują nazwę_i18n; nazwy domyślne są tłumaczone na język widgetów; przewidywalny wybór powitania.
Odczytuje — 600 na minutę, pisze — 120. Odpytywanie nie pochłania już budżetu na zapis. X‑RateLimit-* opisuje użyty licznik.
Czaty z aktywnością od chwili, niezależnie od ich wieku. Każdy czat zawiera teraz last_message_at.
chat.account.email_requested — czat oczekuje na adres; agenci nie mogą rozpoczynać kolejnego przepływu kodu.
Zamknij zgłoszenie i nic więcej — aby uzyskać przycisk „Pytanie rozwiązane” na swoim backendzie.
Filtruje has_client_messages=1 i q (2–100 znaków).
POST /v1/ai/assistant/account‑link i /revoke. Wyłączone, dopóki właściciel tego nie włączy.
Reguły są osadzone za pomocą klawisza widgetu lub włączonego klawisza asystenta; 502 zwalnia klucz idempotencji.
Konto widoczne jest w trakcie ważności biletu oraz przez 7 dni po jego zakończeniu.
Nowa grupa wsparcia /v1/: kolejka, czaty, dzierżawy, odpowiedzi, zamykanie i ponowne otwieranie zgłoszeń. Wyłączone, dopóki właściciel tego nie włączy.
Pola code_pending, code_expires_at, last_code_result i last_code_at.
Wtyczka WordPressa
Widget na stronie WordPress bez dotykania kodu motywu.
- Pobierzarchiwum wtyczek na swój komputer.
- ZainstalujUmieść rozpakowany folder w
wp‑content/plugins/— lub prześlij go do panelu administracyjnego WordPress. - AktywujW menu pojawi się pozycja Smartbtn.
- Wklej tokenSkopiuj token bezpieczeństwa z ustawień widżetu na pulpicie nawigacyjnym.
Gdy zmienisz hasło, zmienia się także token bezpieczeństwa, a stary przestaje działać — wklej nowy do wtyczki.
Próbki kodu
Wypisz każdy czat z aktywnością od czasu ostatniej ankiety — podążając za kursorem do końca.
# pierwsza strona curl -G https://smartbtn.me/api/v1/chats \ -H "Authorization: Bearer $SMARTBTN_TOKEN" \ --data-urlencode "updated_since=2026-10-17T09:00:00+03:00" # next — z next_cursor z odpowiedzi curl -G https://smartbtn.me/api/v1/chats \ -H "Authorization: Bearer $SMARTBTN_TOKEN" \ --data-urlencode "cursor=eyJpZCI6NDgyMDd9"