Drücken Sie die Eingabetaste.
Holen Sie sich Ihre Daten.
REST‑API /api/v1, 53 Bereiche, 239 Endpunkte, 11 Webhook‑Ereignisse und eine JS‑API für das Widget. Chats, Kontakte, KI, Wissensdatenbank, Tickets und Abrechnung – was auch immer das Dashboard leistet, Ihr Code kann es auch.
# Drücken Sie die Eingabetaste oder die Markierung rechts $ curl -H "Authorization: Bearer sb_••••" \ https://smartbtn.me/api/v1/chats?limit=1
Schnellstart
Drei Schritte von Null zur ersten Antwort. Jede Anfrage ist an ein Widget gebunden und mit einem Bearer‑Token authentifiziert.
- Geben Sie einen Token ausDashboard → API‑Tokens: ein Name, ein optionaler Ablauf und die von Ihnen benötigten Bereiche. Ein Token gehört zu genau einem Widget. Das Klartext‑Token wird einmal angezeigt; Smartbtn speichert nur einen Einweg‑Hash, sodass ein verlorenes Token nicht wiederhergestellt, sondern nur widerrufen und erneut ausgestellt werden kann.
- Aktivieren Sie die Widget‑APIAktivieren Sie in den Widget‑Einstellungen „Widget‑API zulassen (JS und REST)“. Durch die Ausgabe eines Tokens wird dieser Schalter für Sie nicht umgelegt.
- Senden Sie die erste AnfrageDas Token geht nur in den Header
Authorization– niemals in die URL.
# Listen Sie die Chats des Widgets auf curl -H "Authorization: Bearer $SMARTBTN_TOKEN" \ https://smartbtn.me/api/v1/chats
// 200 OK · Cursor-Paginierung { "data": [ { "id": 48211, "status": "open", "last_message_at": "2026-10-17T09:41:12+03:00" }, … ], "next_cursor": "eyJpZCI6NDgyMTB9" // null — auf der letzten Seite }
https://smartbtn.me/api/v1 ist der primäre API‑Endpunkt für alle Projektdaten. Senden Sie Anfragen immer über HTTPS und leiten Sie das Token niemals bei Weiterleitungen weiter.401 oder 403 mit einem RFC‑7807 application/problem+json-Body – siehe Fehler.Authentifizierung
Drei Wege, je nachdem, wer wen anruft. Der Zugriff wird standardmäßig verweigert: kein Bereich – kein Aufruf.
Jede Anfrage trägt Authorization: Bearer . Auf dem Server wird das Token in ein Widget und seine Bereiche aufgelöst.
Ausgehende Anfragen werden mit einem mandantenspezifischen Geheimnis signiert: X‑Smartbtn‑Signature. Ein zusätzlicher Inhaberausweis kann hinzugefügt werden, wenn Ihre Seite einen benötigt.
POST /v1/ai/replies verwendet einen eigenen signierten Frame, der an Ihren KI‑Operator und Ihr Widget angeheftet und durch eine dauerhafte causation_id verschlüsselt ist.
Den Schalter vergessen die Leute
„Widget‑API zulassen (JS und REST)“ in den Widget‑Einstellungen öffnet sowohl die REST‑API als auch die Widget‑JS‑API. Durch die Ausgabe eines Tokens wird dieser nicht aktiviert. Die Bereiche eines vorhandenen Schlüssels können im Dashboard (API‑Tokens → Schlüssel → Bereiche bearbeiten) ohne erneute Ausstellung bearbeitet werden – Integrationen funktionieren weiterhin.
Voreinstellungen
| Voreingestellt | Bereiche | Wann |
|---|---|---|
| KI‑Setup 9 | widget:read · widget:write · ai:read · ai:write · ai:apply · kb:read · kb:write · files:write · stats:read | Ihre KI‑App konfiguriert das Widget: Assistent, Wissensdatenbank, Texte. Ersetzt die gesamte Scope‑Auswahl. |
| Schreibgeschützt (Beispielsatz) | chats:read · messages:read · contacts:read · stats:read | Dashboards, BI, Exporte. |
| Helpdesk‑Brücke (Beispielset) | chats:read · messages:read · messages:write · webhooks:write · support:read | Spiegeln Sie Dialoge und Tickets in Ihr CRM. |
ai:credentials:write nur, wenn der Eigentümer die Einrichtung des Anbieterschlüssels autorisiert. Konto-, Abrechnungs- und Partnerrechte sind für die KI‑Einrichtung nicht erforderlich. Der Schlüssel wird einmal angezeigt – widerrufen Sie ihn, wenn die Einrichtung abgeschlossen ist.Bereiche
53 Routenbereiche, plus ein bedingter und ein reservierter. Eine Anfrage ist nur dann erfolgreich, wenn das Token den Routenbereich (oder eine aufgelistete Alternative) enthält.
| Umfang | Zuschüsse |
|---|---|
| chats · 2 | |
| chats:read | Lesen Sie Chats und ihre Metadaten |
| chats:write | Schließen Sie einen Chat, fordern Sie eine Bewertung an, übertragen Sie, fordern Sie einen Agenten an oder trennen Sie ihn |
| messages · 2 | |
| messages:read | Lesen Sie den Nachrichtenverlauf eines Chats |
| messages:write | Senden Sie als Agent Nachrichten, geben Sie Indikatoren ein und lesen Sie Empfangsbestätigungen |
| contacts · 2 | |
| contacts:read | Kontakte lesen |
| contacts:write | Aktualisieren Sie Kontaktfelder und -attribute |
| agents · 3 | |
| agents:read | Lesen Sie Agenten und ihre Anwesenheit |
| agents:writeempfindlich | Agenten einladen, aktualisieren, suspendieren, wiederherstellen oder entfernen; Ein Eingeladener sieht jeden Chat des Widgets |
| agents:events:read | Lesen Sie das Ereignisprotokoll eines Agenten und die Metriken pro Agent |
| tags · 2 | |
| tags:read | Tags lesen |
| tags:write | Fügen Sie einem Kontakt Tags hinzu |
| files · 2 | |
| files:read | Laden Sie eine hochgeladene Datei herunter |
| files:write | Laden Sie eine neue Datei hoch |
| stats · 1 | |
| stats:read | Lesen Sie die zusammengefassten Chat-, Nachrichten- und Bewertungsstatistiken |
| channels · 3 | |
| channels:read | Lesen Sie den Online‑Status eines benutzerdefinierten Kanals |
| channels:write | Übermitteln Sie eine eingehende Nachricht über einen benutzerdefinierten Kanal |
| channels:register | Registrieren Sie einen neuen benutzerdefinierten Kanal (nur installierte Apps) |
| webhooks · 2 | |
| webhooks:read | Webhook‑Abonnements auflisten |
| webhooks:write | Ein Abonnement erstellen, löschen oder erneut bereitstellen |
| quick_phrases · 2 | |
| quick_phrases:read | Lesen Sie die kurzen Sätze eines Agenten |
| quick_phrases:write | Erstellen, bearbeiten oder löschen Sie schnelle Phrasen |
| ratings · 1 | |
| ratings:read | Lesen Sie die Besucherbewertungen und erfahren Sie, welcher Agent jeweils punktet |
| responder · 2 | |
| responder:injectempfindlich | Geben Sie als externer KI‑Operator oder Bot eine Antwort in einen Live‑Chat ein |
| responder:escalatebedingt | Für POST /v1/ai/replies: Anrufergesteuerte Übergabe über escalate=true |
| widget · 2 | |
| widget:read | Lesen Sie das Erscheinungsbild, das Verhalten und die Einbettungseinstellungen des Widgets |
| widget:write | Aktualisieren Sie die Widget‑Einstellungen und leeren Sie den Widget‑Cache |
| departments · 2 | |
| departments:read | Lesen Sie Abteilungen, ihre Agenten und Zeitpläne |
| departments:write | Erstellen, aktualisieren oder löschen Sie Abteilungen und Zeitpläne |
| messengers · 2 | |
| messengers:read | Lesen Sie, welche Messenger verbunden sind (niemals Anmeldeinformationen) |
| messengers:writeempfindlich | Einen Messenger verbinden oder trennen; schreibt Provider‑Anmeldeinformationen |
| ai · 4 | |
| ai:read | Lesen Sie KI‑Assistenten, ihre Konfiguration und Warnungen |
| ai:write | Erstellen und aktualisieren Sie Assistenten, KI‑Einstellungen und KI‑Operatoren, einschließlich Persona und Eingabeaufforderung |
| ai:credentials:writeempfindlich | Anmeldeinformationen von LLM‑Anbietern von Drittanbietern speichern (BYOK) |
| ai:apply | Genehmigen Sie eine Verbesserung, die die Persönlichkeit eines Live‑Assistenten neu schreibt |
| kb · 2 | |
| kb:read | Lesen Sie Wissensdatenbankregeln und aufgenommene Quellen |
| kb:write | Erstellen, aktualisieren oder löschen Sie KB‑Regeln und -Quellen |
| transcripts · 1 | |
| transcripts:read | Exportieren Sie ein Chat‑Transkript |
| account · 2 | |
| account:read | Lesen Sie das Kontoprofil und alle seine juristischen Personen |
| account:write | Aktualisieren Sie nur den Namen, Nachnamen und die Telefonnummer des Kontos |
| billing · 2 | |
| billing:read | Lesen Sie die Rechnungsdatensätze und juristischen Personen des Widgets |
| billing:write | Juristische Personen erstellen, aktualisieren, löschen; stellt keine Rechnungen aus, bewegt kein Geld |
| partners · 2 | |
| partners:read | Partner- und Empfehlungsdaten lesen |
| partners:withdrawreserviert | Reserviert: Es wird heute von keinem Auszahlungsvorgang verwendet |
| support · 4 | |
| support:read | Lesen Sie Tickets, aktive Chats, deren Nachrichten und eigene geprüfte Aktionen |
| support:replyempfindlich | Beantworten Sie als Supportmitarbeiter einen Kunden |
| support:write | Beanspruchen Sie einen Chat oder geben Sie ihn frei, schließen Sie ihn ohne Antwort und öffnen Sie ihn erneut |
| support:tickets:close | Schließen Sie nur ein Ticket – sonst nichts |
| marketing · 2 | |
| marketing:read | Lesen Sie Marketingkampagnen: Banner, Popups, E‑Mail |
| marketing:write | Kampagnen erstellen und bearbeiten, Status ändern, E‑Mail‑Versand starten |
| broadcasts · 2 | |
| broadcasts:read | Messenger‑Sendungen lesen (WhatsApp, Telegram, Messenger, Viber, VK, MAX) |
| broadcasts:write | Erstellen, bearbeiten und starten Sie eine Übertragung |
| problems · 2 | |
| problems:read | Lesen Sie Kundenproblemcluster und -einstellungen |
| problems:write | Einstellungen und Clusterstatus ändern: neu, in Bearbeitung, gelöst, wiederkehrend |
| invitations · 2 | |
| invitations:read | Lesen Sie Einladungsregeln, A/B‑Varianten, Vorlagen und Trichter |
| invitations:write | Erstellen, bearbeiten, aktivieren oder löschen Sie Regeln und Vorlagen |
Endpunkte
Die gesamte öffentliche Oberfläche in einer Liste. Filtern Sie nach Ressource, suchen Sie nach Pfad, klicken Sie auf eine Zeile, um eine fertige Locke zu kopieren.
ai Assistenten, Operatoren, Schlüssel, Lernen, Marktplatz54
chats Dialoge, Nachrichten, Übertragung, Bewertungen18
kb Wissensdatenbank: Regeln, Crawler, Dateien, Suche16
agents Agenten, Einladungen, Metriken14
messengers Messenger, soziale Netzwerke und Marktplatzkanäle13
billing Saldo, Abonnements, Rechnungen, Einheiten12
support Supportmitarbeiter: Tickets und Chats12
widget Einstellungen, Sprache, Übersetzungen, Skins, Cache12
channels Benutzerdefinierte Kanäle8
external‑operators Ihr Bot als Operator8
webhook‑subscriptions Webhook‑Abonnements8
broadcasts Messenger-Übertragungen7
departments Abteilungen und Zeitplan7
invitations Intelligente Einladungen7
marketing Marketingkampagnen7
partner Partnerprogramm7
wishes Wünsche für die KI7
contacts Kontakte und Tags5
problems Analyse von Kundenproblemen4
quick‑phrases Schnelle Sätze4
compat Migrationskompatibilität3
stats Statistiken3
account Konto2
files Dateien2
ratings Bewertungen1
tags Schlagworte1
v1 1
webhook‑events Veranstaltungskatalog1
Pfade sind relativ zu https://smartbtn.me/api. Für Schreibvorgänge sind Content‑Type: application/json und X‑Smartbtn‑Idempotency‑Key erforderlich. Die Gruppe compat ist eine Kompatibilitätsebene für Teams, die von einer anderen Chat‑Plattform wechseln.
Webhooks
Ein signierter JSON-POST an Ihre URL, wann immer ein abonniertes Ereignis stattfindet. Verwalten Sie Abonnements über /v1/webhook‑subscriptions oder im Dashboard.
{
"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"
}
}Grund: human_request | Abrechnung | ai_unresolved | action_request | …; Priorität: hoch | Normal; Quelle: Chat | App | Website. Lesen Sie das Ticket und seinen Dialog mit GET /v1/support/tickets/{number}.
Lieferkopfzeilen
| X‑Smartbtn‑Event | Ereignistyp, z.B. message.created. |
| X‑Smartbtn‑Signature | sha256=v1: des Rohkörpers. |
| X‑Smartbtn‑Idempotency‑Key | Ein Wert pro Ereignis, stabil über Wiederholungsversuche hinweg. Dedupliziere es. |
| X‑Smartbtn‑Delivery | Ein Wert pro Zustellversuch – für Ihre Protokolle. |
| X‑Smartbtn‑Timestamp | Unix‑Zeitpunkt des Sendens. Zur Information, nicht signiert. |
Signaturüberprüfung
HMAC‑SHA256 des Rohkörpers (Bytes wie empfangen, vor der JSON‑Analyse) mit Ihrem Endpunktgeheimnis; in konstanter Zeit vergleichen. Das Geheimnis wird einmalig angezeigt, wenn das Abonnement erstellt wird; Drehen Sie es mit POST /v1/webhook‑subscriptions/{id}/rotate‑secret.
// Node.js · Beispielsweise ist das Geheimnis ein Platzhalter 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; }
Wiederholungen und Bestellung
- Bis zu 4 Versuche (der erste Versand plus 3 Wiederholungsversuche), Backoff
min(60, 2^attempt × 5)s – etwa 10, 20, 40 s. - Nicht‑2xx oder ein Timeout gelten als Fehlversuch. Fehlgeschlagene Zustellungen können mit
POST /v1/webhook‑subscriptions/{id}/redelivererneut gesendet werden – gleicher Idempotenzschlüssel, neue Zustellungs‑ID. - Die Lieferung erfolgt mindestens einmal und ist nicht bestellt. Die Nutzlasten sind minimal – IDs, keine vollständigen Datensätze; Details über die REST‑API abrufen.
JS API
Geben Sie das, was Sie bereits über den Besucher wissen, direkt an den Agenten weiter. Anrufe werden nur von der in den Widget‑Einstellungen festgelegten Domäne angenommen.
smartbtn_widget_api.setContactInfo(info)
Legt die Kontaktdaten des Besuchers fest. Der Agent sieht es so, als ob der Besucher das Einführungsformular ausgefüllt hätte. Name, Telefon und E‑Mail spielen bei Smartbtn eine besondere Rolle – daher eine separate Methode.
| Name | Typ | Beschreibung |
|---|---|---|
| name | string | Besuchername |
| string | Besucher‑E‑Mail | |
| phone | string | Besuchertelefon |
| description | string | Alle zusätzlichen Informationen über den Kunden |
Smartbtn_api.setClientInfo({ name: „Alex Morgan“, email: "email@example.com", phone: "+17584987855", description: "Description text" });
smartbtn_widget_api.setCustomData(fields)
Alle zusätzlichen Daten für das Infofeld rechts in der Agent‑App. Rufen Sie es so oft auf, wie Sie möchten – im offenen Dialog aktualisiert sich das Panel in Echtzeit. Felder werden in Array‑Reihenfolge angezeigt.
| Name | Typ | Beschreibung |
|---|---|---|
| fields | array | Liste der Datenfelder |
| field.title | string | Über dem Feld unterwegs |
| field.content | string | Feldinhalt; Tags werden maskiert |
| field.link | string | Beim Klicken geöffnete URL |
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()
Wechseln Sie das Widget‑Thema im Handumdrehen, ohne die Seite neu zu laden (classic, minimal, capsule, liquid) oder steuern Sie das Chat‑Fenster programmgesteuert. Für eine permanente projektspezifische Anpassung übergeben Sie dieselben Felder an PATCH /v1/widget/settings.
// JS API · Wechseln Sie den Skin auf der Seite in Echtzeit smartbtn_widget_api.setSkin("minimal"); smartbtn_widget_api.setSkin("capsule", { capsuleTitle: "Smartbtn AI", capsuleSubtitle: „Antworten in ~1 s“ }); // REST API · PATCH /v1/widget/settings (Umfang 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 rund um die Uhr“ }
widget_api_contact_sync aktiviert ist, lösen diese Aufrufe auch den Webhook contact.updated aus.Support‑agent API
Ein automatisierter Supportmitarbeiter bearbeitet die Ticketwarteschlange und Kundenchats: Er nimmt einen Chat auf, antwortet als Ihr menschlicher Supportmitarbeiter und schließt das Ticket. Aus, bis der Widget‑Besitzer es einschaltet.
- Der Eigentümer ermöglicht esListet die Token auf, die als Support‑Agenten fungieren dürfen, und die IPs, von denen aus sie anrufen dürfen.
- Lesen Sie die Warteschlange
GET /v1/support/tickets·GET /v1/support/chats - Mieten Sie einen Chat
POST …/chats/{id}/claim·…/release - AntwortEinfacher Text, Links nur zu den zulässigen Hosts des Widgets.
201erst, wenn die Nachricht gespeichert ist. - Schließen oder erneut öffnen
POST …/tickets/{number}/close·…/reopen
| Umfang | Ermöglicht |
|---|---|
| support:read | Tickets, aktive Chats, Nachrichten mit der Bezeichnung „Client/AI/Support/System“, eigene geprüfte Aktionen |
| support:write | Einen Chat beanspruchen/freigeben, ohne Antwort schließen, erneut öffnen |
| support:reply | Dem Kunden als Supportmitarbeiter antworten (sensibel) |
| support:tickets:close | Schließen Sie ein Ticket nur – für eine Schaltfläche „Frage gelöst“ in Ihrem Backend |
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":"Fertig, der Zugriff wurde wiederhergestellt."}'
KI‑API
Alles, was der KI‑Bereich des Dashboards macht: Assistenten, Ihre eigenen Anbieterschlüssel, Wissensdatenbank, Selbstlernen mit Rollback, Wünsche, Probleme, Bedarfssignale und ein Assistent in Ihrer App.
Mehrere Assistenten mit eigener Rolle und Sprache, ein Test vor dem Go‑Live, nach Sprache benannte Operatoren.
- GET/v1/ai/assistants
- POST/v1/ai/assistants/{id}/test
- PATCH/v1/ai/operators/{id}
- POST/v1/ai/handoff
Claude, ChatGPT, DeepSeek, Gemini, Mistral, regionale LLMs oder alle OpenAI‑kompatiblen. Die Modelle werden pro Schlüssel aufgelistet.
- GET/v1/ai/credentials
- POST/v1/ai/credentials
- GET/v1/ai/credentials/{id}/models
Ein Crawler für Ihre Website, PDF- und DOCX‑Uploads, Regeln, Such- und Indexierungsstatus.
- PUT/v1/kb/crawler
- POST/v1/kb/uploads
- POST/v1/kb/rules
- GET/v1/kb/search
Optimieren von Läufen, Zyklen, Verlauf, Persona‑Versionen mit Rollback und einem Kill‑Schalter.
- POST/v1/ai/learning/tune
- GET/v1/ai/learning/cycles
- POST/v1/ai/learning/persona‑versions/{version}/revert
- GET/v1/ai/learning/kill‑switch
Ein Wunsch im Klartext → eine nebenwirkungsfreie Vorschau → genehmigen, ablehnen oder rückgängig machen.
- POST/v1/wishes
- GET/v1/wishes/{id}/preview
- POST/v1/wishes/{id}/approve
- POST/v1/wishes/{id}/revert
Problemcluster mit Status und einer monatlichen Ausgabenobergrenze; Was Kunden gefragt haben, was Sie nicht anbieten.
- GET/v1/problems
- PATCH/v1/problems/settings
- POST/v1/problems/{id}/status
- GET/v1/ai/demand‑signals
Ihr Backend übermittelt den Kundenstatus (registriert, bezahlt, Kunde seit, Servicestatus) in einer HMAC‑signierten Anfrage – die KI gewichtet ihn bei der Beantwortung und Eskalation.
- POST/v1/ai/customer‑status
- POST/v1/ai/tickets
- GET/v1/ai/alerts
Gesprächsrunden, Kontoverknüpfung, Speech‑to‑Text und Text‑to‑Speech, App‑Tickets – über eine signierte Integration.
- 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
Bereite Assistenten nach Nischen: Café, Klinik, Geschäft, Autoservice. Bewerben Sie sich in einer Anfrage.
- GET/v1/ai/marketplace/templates
- POST/v1/ai/marketplace/templates/{slug}/apply
Ihr eigener Bot beantwortet Chats: asynchrone Antworten, Übergabe, Tests und Lebenszyklus.
- POST/v1/ai/replies
- POST/v1/external‑operators/{public_id}/tests
- POST/v1/external‑operators/{public_id}/lifecycle
Tarifbegrenzungen
Pro Token zwei Zähler: Lese- und Schreibvorgänge werden getrennt gezählt, sodass das Abfragen niemals das Schreibbudget verschlingt.
| X‑RateLimit‑Limit | Größe des Zählers, in dem diese Anfrage gezählt wurde (600 oder 120) |
| X‑RateLimit‑Remaining | Im aktuellen Fenster verbleibende Anfragen |
| X‑RateLimit‑Reset | Wenn das Fenster zurückgesetzt wird |
| Retry‑After | Auf 429: Sekunden warten |
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 und /v1/ai/assistant/account‑link haben ihre eigenen Zähler; Die Support‑Agent‑API kann über eine Widget-Überschreibung verfügen.
Fehler
Jeder Fehler ist RFC‑7807 application/problem+json: ein maschinenlesbarer Status und Grund, ein für Menschen lesbares Detail.
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" }
Der Hauptteil nennt „required_scopes“ und gibt an, wo sie gewährt werden sollen. Eine erneute Schlüsselausgabe ist nicht erforderlich.
| Status | Bedeutung |
|---|---|
| 400 | Fehlerhafte Anfrage oder ein erforderlicher Idempotenzschlüssel fehlt |
| 401 | Kein Token, ungültiger oder widerrufener Token |
| 403 | Dem Token fehlt der Umfang; Der Hauptteil fügt required_scopes hinzu und gibt an, wo es gewährt werden soll |
| 404 | In diesem Widget nicht gefunden |
| 405 | Methode nicht zulässig – anhalten und melden; Suchen Sie nicht nach alternativen Schreibvorgängen |
| 409 | Idempotenzschlüssel innerhalb von 24 Stunden wiederverwendet oder ein Zustandskonflikt |
| 422 | Die Validierung ist fehlgeschlagen (z. B. wurde ein schreibgeschütztes Feld gesendet) |
| 429 | Tarifbegrenzung; Respekt Retry‑After |
Idempotenz
Netzwerke scheitern. Ein Schlüssel macht einen wiederholten Schreibversuch sicher: Derselbe Vorgang wird nie zweimal angewendet.
- Senden Sie
X‑Smartbtn‑Idempotency‑Keybei jedem POST / PATCH / PUT / DELETE: eine neue UUID für einen neuen Vorgang, den gleichen Schlüssel für einen Wiederholungsversuch desselben. - Vorgänge, die in OpenAPI mit
x‑idempotency: erforderlichgekennzeichnet sind: kein Schlüssel → 400, der Schlüssel wurde innerhalb von 24 Stunden wiederverwendet → 409 (kein zwischengespeicherter Erfolg). - Nicht sicher, ob es durchgegangen ist? Lesen Sie zuerst den Zustand. Ändern Sie den Schlüssel niemals automatisch; Respekt Retry‑After.
- Ein
502von einem Upstream‑Anbieter gibt den Schlüssel frei – versuchen Sie es erneut mit demselben Schlüssel.
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"}' # Netzwerkfehler? Wiederholen Sie den Vorgang mit demselben $KEY
Changelog
Änderungen an der öffentlichen API und den Webhooks im Jahr 2026. Alles unten ist additiv und bleibt in v1.
Neues Live‑Event‑Ticket.erstellt. GET /v1/support/tickets beantwortet jeden Schlüssel mit support:read, bis ein Support‑Agent konfiguriert ist. Wichtige Bereiche können ohne erneute Ausgabe bearbeitet werden. 403 Gewinne erforderliche_Bereiche.
POST/PATCH /v1/ai/operators akzeptieren name_i18n; Standardnamen werden in die Widget‑Sprache übersetzt; vorhersehbare Wahl der Begrüßung.
Lesevorgänge: 600 pro Minute, Schreibvorgänge: 120. Abfragen verschlingen nicht mehr das Schreibbudget. X‑RateLimit-* beschreibt den verwendeten Zähler.
Chats mit Aktivität seit einem Moment, egal wie alt sie sind. Jeder Chat trägt jetzt last_message_at.
chat.account.email_requested – der Chat wartet auf die Adresse; Agenten dürfen keinen weiteren Codefluss starten.
Schließen Sie ein Ticket und nichts anderes – für einen „Frage gelöst“-Button in Ihrem Backend.
Filtert has_client_messages=1 und q (2–100 Zeichen).
POST /v1/ai/assistant/account‑link und /revoke. Aus, bis der Eigentümer es aktiviert.
Regeln werden mit der Widget‑Taste oder einer aktivierten Assistententaste eingebettet; a 502 gibt den Idempotenzschlüssel frei.
Das Konto ist sichtbar, solange das Ticket geöffnet ist und 7 Tage danach.
Neue /v1/support‑Gruppe: Warteschlange, Chats, Leases, Antworten, Schließen und erneutes Öffnen von Tickets. Aus, bis der Eigentümer es aktiviert.
Felder code_pending, code_expires_at, last_code_result und last_code_at.
WordPress‑Plugin
Das Widget auf einer WordPress‑Site, ohne den Theme‑Code zu berühren.
- HerunterladenLaden Sie das Plugin‑Archiv auf Ihren Computer herunter.
- InstallierenLegen Sie den entpackten Ordner in
wp‑content/plugins/ab – oder laden Sie ihn im WordPress‑Admin hoch. - AktivierenEin Smartbtn-Element erscheint im Menü.
- Fügen Sie das Token einKopieren Sie das Sicherheitstoken aus den Widget‑Einstellungen in Ihrem Dashboard.
Wenn Sie Ihr Passwort ändern, ändert sich auch das Sicherheitstoken und das alte funktioniert nicht mehr – fügen Sie das neue in das Plugin ein.
Codebeispiele
Listen Sie jeden Chat mit Aktivität seit Ihrer letzten Umfrage auf – indem Sie dem Cursor bis zum Ende folgen.
# erste Seite 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 – mit next_cursor aus der Antwort curl -G https://smartbtn.me/api/v1/chats \ -H "Authorization: Bearer $SMARTBTN_TOKEN" \ --data-urlencode "cursor=eyJpZCI6NDgyMDd9"