Appuyez sur Entrée.
Récupérez vos données.
API REST /api/v1, 53 étendues, 239 points de terminaison, 11 événements webhook et une API JS pour le widget. Chats, contacts, IA, base de connaissances, tickets et facturation : quoi que fasse le tableau de bord, votre code peut le faire aussi.
# appuyez sur Entrée ou sur la marque à droite $ curl -H "Authorization: Bearer sb_••••" \ https://smartbtn.me/api/v1/chats?limit=1
Démarrage rapide
Trois étapes de zéro à la première réponse. Chaque demande est liée à un widget et authentifiée avec un jeton de porteur.
- Émettre un jetonTableau de bord → Jetons API : un nom, une expiration facultative et les étendues dont vous avez besoin. Un jeton appartient à exactement un widget. Le jeton en texte brut est affiché une fois ; Smartbtn stocke uniquement un hachage unidirectionnel, de sorte qu'un jeton perdu ne peut pas être récupéré, mais seulement révoqué et réémis.
- Activez l'API du widgetDans les paramètres du widget, activez «Autoriser l'API du widget (JS et REST)». L'émission d'un jeton ne fait pas basculer ce commutateur à votre place.
- Envoyez la première demandeLe jeton va uniquement dans l'en‑tête
Authorization- jamais dans l'URL.
# lister les chats du widget curl -H "Authorization: Bearer $SMARTBTN_TOKEN" \ https://smartbtn.me/api/v1/chats
// 200 OK · pagination du curseur { "data": [ { "id": 48211, "status": "open", "last_message_at": "2026-10-17T09:41:12+03:00" }, … ], "next_cursor": "eyJpZCI6NDgyMTB9" // null — sur la dernière page }
https://smartbtn.me/api/v1 est le point de terminaison principal de l'API pour toutes les données du projet. Envoyez toujours des requêtes via HTTPS et ne transférez jamais le jeton lors des redirections.401 ou 403 avec un corps application/problem+json RFC‑7807 — voir Erreurs.Authentification
Trois chemins, selon qui appelle qui. L'accès est refusé par défaut : pas de portée, pas d'appel.
Chaque requête porte une Autorisation : Porteur . Sur le serveur, le jeton est résolu en un widget et ses étendues.
Les requêtes sortantes sont signées avec un secret par locataire : X‑Smartbtn‑Signature. Un identifiant de porteur supplémentaire peut être ajouté si votre camp en a besoin.
POST /v1/ai/replies utilise son propre cadre signé, épinglé à votre opérateur IA et à votre widget et saisi par un causation_id durable.
Le changement que les gens oublient
«Autoriser l'API du widget (JS et REST)» dans les paramètres du widget ouvre à la fois l'API REST et l'API JS du widget. L'émission d'un jeton ne l'active pas. Les étendues d'une clé existante peuvent être modifiées dans le tableau de bord (jetons API → clé → Modifier les étendues) sans la réémettre : les intégrations continuent de fonctionner.
Préréglages
| Préréglage | Portées | Quand |
|---|---|---|
| Configuration de l'IA 9 | widget:read · widget:write · ai:read · ai:write · ai:apply · kb:read · kb:write · files:write · stats:read | Votre application IA configure le widget : assistant, base de connaissances, textes. Remplace toute la sélection de portée. |
| Lecture seule (exemple) | chats:read · messages:read · contacts:read · stats:read | Tableaux de bord, BI, exports. |
| Pont de support technique (exemple) | chats:read · messages:read · messages:write · webhooks:write · support:read | Mettez en miroir les boîtes de dialogue et les tickets dans votre CRM. |
ai:credentials:write uniquement lorsque le propriétaire autorise la configuration de la clé du fournisseur. Les droits de compte, de facturation et de partenaire ne sont pas nécessaires pour la configuration de l'IA. La clé est affichée une fois – révoquez‑la une fois la configuration terminée.Portées
53 étendues d'itinéraire, plus une conditionnelle et une réservée. Une requête ne réussit que si le jeton contient la portée de la route (ou une alternative répertoriée).
| Portée | Subventions |
|---|---|
| chats · 2 | |
| chats:read | Lire les chats et leurs métadonnées |
| chats:write | Fermer un chat, demander une note, transférer, réclamer, attacher ou détacher un agent |
| messages · 2 | |
| messages:read | Lire l'historique des messages d'un chat |
| messages:write | Envoyer des messages, taper des indicateurs et lire des accusés de réception en tant qu'agent |
| contacts · 2 | |
| contacts:read | Lire les contacts |
| contacts:write | Mettre à jour les champs et les attributs du contact |
| agents · 3 | |
| agents:read | Lire les agents et leur présence |
| agents:writesensible | Inviter, mettre à jour, suspendre, restaurer ou supprimer des agents ; un invité voit chaque discussion du widget |
| agents:events:read | Lire le journal des événements d'un agent et les métriques par agent |
| tags · 2 | |
| tags:read | Lire les balises |
| tags:write | Attacher des balises à un contact |
| files · 2 | |
| files:read | Télécharger un fichier téléchargé |
| files:write | Téléchargez un nouveau fichier |
| stats · 1 | |
| stats:read | Lire les statistiques globales de chat, de message et d'évaluation |
| channels · 3 | |
| channels:read | Lire l'état en ligne d'une chaîne personnalisée |
| channels:write | Envoyer un message entrant sur un canal personnalisé |
| channels:register | Enregistrez une nouvelle chaîne personnalisée (applications installées uniquement) |
| webhooks · 2 | |
| webhooks:read | Répertorier les abonnements aux webhooks |
| webhooks:write | Créer, supprimer ou restituer un abonnement |
| quick_phrases · 2 | |
| quick_phrases:read | Lire les phrases rapides d'un agent |
| quick_phrases:write | Créer, modifier ou supprimer des phrases rapides |
| ratings · 1 | |
| ratings:read | Lisez les évaluations des visiteurs et quel agent chacun obtient. |
| responder · 2 | |
| responder:injectsensible | Injectez une réponse dans un chat en direct en tant qu'opérateur IA externe ou bot |
| responder:escalateconditionnel | Pour POST /v1/ai/replies : transfert dirigé par l'appelant via escalate=true |
| widget · 2 | |
| widget:read | Lire l'apparence, le comportement et les paramètres d'intégration du widget |
| widget:write | Mettre à jour les paramètres du widget et purger le cache du widget |
| departments · 2 | |
| departments:read | Lire les départements, leurs agents et les horaires |
| departments:write | Créer, mettre à jour ou supprimer des départements et des horaires |
| messengers · 2 | |
| messengers:read | Lire quels messagers sont connectés (jamais d'identifiants) |
| messengers:writesensible | Connecter ou déconnecter un messager ; écrit les informations d'identification du fournisseur |
| ai · 4 | |
| ai:read | Lire les assistants IA, leur configuration et leurs alertes |
| ai:write | Créez et mettez à jour les assistants, les paramètres d'IA et les opérateurs d'IA, le personnage et l'invite inclus |
| ai:credentials:writesensible | Stocker les informations d'identification du fournisseur LLM tiers (BYOK) |
| ai:apply | Approuver une amélioration qui réécrit le personnage d'un assistant en direct |
| kb · 2 | |
| kb:read | Lire les règles de la base de connaissances et les sources ingérées |
| kb:write | Créer, mettre à jour ou supprimer des règles et des sources de la base de connaissances |
| transcripts · 1 | |
| transcripts:read | Exporter une transcription de discussion |
| account · 2 | |
| account:read | Lire le profil du compte et toutes ses entités juridiques |
| account:write | Mettre à jour uniquement le nom, le prénom et le téléphone du compte |
| billing · 2 | |
| billing:read | Lire les enregistrements de facturation et les entités juridiques du widget |
| billing:write | Créer, mettre à jour, supprimer des entités juridiques ; n'émet aucune facture, ne déplace aucun argent |
| partners · 2 | |
| partners:read | Lire les données des partenaires et des références |
| partners:withdrawréservé | Réservé : aucune opération de paiement ne l'utilise aujourd'hui |
| support · 4 | |
| support:read | Lisez les tickets, les discussions actives, leurs messages et vos propres actions auditées |
| support:replysensible | Répondre à un client en tant qu'opérateur de support |
| support:write | Réclamez ou libérez un chat, fermez sans réponse, rouvrez |
| support:tickets:close | Fermez uniquement un ticket - rien d'autre |
| marketing · 2 | |
| marketing:read | Lire les campagnes marketing : bannières, popups, e‑mails |
| marketing:write | Créer et modifier des campagnes, modifier le statut, lancer un envoi d'e‑mail |
| broadcasts · 2 | |
| broadcasts:read | Lire les diffusions de messagerie (WhatsApp, Telegram, Messenger, Viber, VK, MAX) |
| broadcasts:write | Créer, modifier et démarrer une diffusion |
| problems · 2 | |
| problems:read | Lire les clusters et les paramètres de problèmes client |
| problems:write | Modifier les paramètres et l'état du cluster : nouveau, en cours, résolu, récurrent |
| invitations · 2 | |
| invitations:read | Lire les règles d'invitation, les variantes A/B, les modèles et l'entonnoir |
| invitations:write | Créer, modifier, activer ou supprimer des règles et des modèles |
Points de terminaison
Tout le public apparaît dans une seule liste. Filtrez par ressource, recherchez par chemin, cliquez sur une ligne pour copier une boucle prête.
ai Assistants, opérateurs, clés, apprentissage, place de marché54
chats Dialogues, messages, transfert, évaluations18
kb Base de connaissances : règles, robot d'exploration, fichiers, recherche16
agents Agents, invitations, métriques14
messengers Messagers, réseaux sociaux et canaux de marché13
billing Solde, abonnements, factures, entités12
support Agent de support : tickets et chats12
widget Paramètres, langue, traductions, skins, cache12
channels Chaînes personnalisées8
external‑operators Votre bot en tant qu'opérateur8
webhook‑subscriptions Abonnements webhooks8
broadcasts Diffusions Messenger7
departments Départements et horaires7
invitations Invitations intelligentes7
marketing Campagnes marketing7
partner Programme partenaire7
wishes Vœux pour l'IA7
contacts Contacts et tags5
problems Analyse des problèmes clients4
quick‑phrases Phrases rapides4
compat Compatibilité des migrations3
stats Statistiques3
account Compte2
files Fichiers2
ratings Notes1
tags Balises1
v1 1
webhook‑events Catalogue d'événements1
Les chemins sont relatifs à https://smartbtn.me/api. Les écritures nécessitent Content‑Type : application/json et X‑Smartbtn‑Idempotency‑Key. Le groupe compat est une couche de compatibilité pour les équipes migrant depuis une autre plateforme de chat.
Webhooks
Un POST JSON signé à votre URL chaque fois qu'un événement souscrit se produit. Gérez les abonnements via /v1/webhook‑subscriptions ou dans le tableau de bord.
{
"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"
}
}raison : human_request | facturation | ai_non résolu | action_request | … ; priorité : élevée | normale; source : discuter | application | site. Lisez le ticket et sa boîte de dialogue avec GET /v1/support/tickets/{number}.
En‑têtes de livraison
| X‑Smartbtn‑Event | Type d'événement, par ex. message.created. |
| X‑Smartbtn‑Signature | sha256=v1 : du corps brut. |
| X‑Smartbtn‑Idempotency‑Key | Une valeur par événement, stable au fil des tentatives. Déduisez dessus. |
| X‑Smartbtn‑Delivery | Une valeur par tentative de livraison — pour vos journaux. |
| X‑Smartbtn‑Timestamp | Heure d'envoi Unix. Informatif, non signé. |
Vérification des signatures
HMAC‑SHA256 du corps brut (octets tels que reçus, avant analyse JSON) avec le secret de votre point de terminaison ; comparer en temps constant. Le secret est affiché une fois, lors de la création de l'abonnement ; faites‑le pivoter avec POST /v1/webhook‑subscriptions/{id}/rotate‑secret.
// Node.js · exemple, le secret est un espace réservé 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; }
Nouvelles tentatives et commande
- Jusqu'à 4 tentatives (le premier envoi plus 3 tentatives), intervalle de
min(60, 2^attempt × 5)s — environ 10, 20, 40 s. - Un non‑2xx ou un délai d'attente compte comme une tentative échouée. Les livraisons échouées peuvent être renvoyées avec
POST /v1/webhook‑subscriptions/{id}/redeliver— même clé d'idempotence, nouvel identifiant de livraison. - La livraison est effectuée au moins une fois et non commandée. Les charges utiles sont minimes : des identifiants, pas des enregistrements complets ; récupérer les détails via l'API REST.
JS API
Transmettez ce que vous savez déjà sur le visiteur directement à l'agent. Les appels sont acceptés uniquement à partir du domaine défini dans les paramètres du widget.
smartbtn_widget_api.setContactInfo(info)
Définit les données de contact du visiteur. L'agent voit cela comme si le visiteur avait rempli le formulaire d'introduction. Le nom, le téléphone et l'e‑mail jouent un rôle particulier dans Smartbtn — d'où une méthode distincte.
| Nom | Tapez | Descriptif |
|---|---|---|
| name | string | Nom du visiteur |
| string | E‑mail du visiteur | |
| phone | string | Téléphone visiteur |
| description | string | Toute information supplémentaire sur le client |
Smartbtn_api.setClientInfo({ name: "Alex Morgan", email: "email@example.com", phone: "+17584987855", description: "Description text" });
smartbtn_widget_api.setCustomData(fields)
Toutes les données supplémentaires pour le panneau d'informations à droite de l'application agent. Appelez‑le aussi souvent que vous le souhaitez : dans une boîte de dialogue ouverte, le panneau est mis à jour en temps réel. Les champs sont affichés dans l'ordre du tableau.
| Nom | Tapez | Descriptif |
|---|---|---|
| fields | array | Liste des champs de données |
| field.title | string | En route au‑dessus du terrain |
| field.content | string | Contenu du champ ; les balises sont échappées |
| field.link | string | URL ouverte au clic |
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()
Changez le thème du widget à la volée sans recharger la page (classic, minimal, capsule, liquid) ou contrôlez la fenêtre de discussion par programme. Pour une personnalisation permanente par projet, transmettez les mêmes champs à PATCH /v1/widget/settings.
// JS API · changer de skin sur la page en temps réel smartbtn_widget_api.setSkin("minimal"); smartbtn_widget_api.setSkin("capsule", { capsuleTitle: "Smartbtn AI", capsuleSubtitle: "Réponses dans ~1 s" }); // REST API · PATCH /v1/widget/settings (portée 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": "En ligne 24h/24 et 7j/7" }
widget_api_contact_sync est activé, ces appels déclenchent également le webhook contact.updated.Support‑agent API
Un agent d'assistance automatisé gère la file d'attente des tickets et les discussions avec les clients : prend une conversation, répond en tant qu'opérateur d'assistance humain, ferme le ticket. Désactivé jusqu'à ce que le propriétaire du widget l'active.
- Le propriétaire le permetRépertorie les jetons autorisés à agir en tant qu'agents de support et les adresses IP à partir desquelles ils peuvent appeler.
- Lire la file d'attente
GET /v1/support/tickets·GET /v1/support/chats - Louer un chat
POST …/chats/{id}/claim·…/release - RépondreTexte brut, liens uniquement vers les hôtes autorisés du widget.
201uniquement une fois le message stocké. - Fermer ou rouvrir
POST …/tickets/{number}/close·…/reopen
| Portée | Permet |
|---|---|
| support:read | Tickets, chats actifs, messages étiquetés client / ai / support / système, propres actions auditées |
| support:write | Réclamez/libérez un chat, fermez sans réponse, rouvrez |
| support:reply | Répondre au client en tant qu'opérateur support (sensible) |
| support:tickets:close | Fermez uniquement un ticket — pour un bouton « question résolue » sur votre 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": "Terminé, l'accès a été restauré."}'
API IA
Tout ce que fait la section IA du tableau de bord : assistants, vos propres clés de fournisseur, base de connaissances, auto‑apprentissage avec restauration, souhaits, problèmes, signaux de demande et un assistant dans votre application.
Plusieurs assistants avec leur propre rôle et langue, un test avant la mise en ligne, des opérateurs nommés par langue.
- GET/v1/ai/assistants
- POST/v1/ai/assistants/{id}/test
- PATCH/v1/ai/operators/{id}
- POST/v1/ai/handoff
Claude, ChatGPT, DeepSeek, Gemini, Mistral, LLM régionaux ou tout compatible OpenAI. Les modèles sont répertoriés par clé.
- GET/v1/ai/credentials
- POST/v1/ai/credentials
- GET/v1/ai/credentials/{id}/models
Un robot d'exploration pour votre site, les téléchargements PDF et DOCX, les règles, l'état de recherche et d'indexation.
- PUT/v1/kb/crawler
- POST/v1/kb/uploads
- POST/v1/kb/rules
- GET/v1/kb/search
Réglage des exécutions, des cycles, de l'historique, des versions de personnages avec restauration et kill switch.
- POST/v1/ai/learning/tune
- GET/v1/ai/learning/cycles
- POST/v1/ai/learning/persona‑versions/{version}/revert
- GET/v1/ai/learning/kill‑switch
Un souhait en termes simples → un aperçu sans effets secondaires → approuver, rejeter ou revenir.
- POST/v1/wishes
- GET/v1/wishes/{id}/preview
- POST/v1/wishes/{id}/approve
- POST/v1/wishes/{id}/revert
Groupes de problèmes avec statuts et plafond de dépenses mensuel ; ce que les clients ont demandé et que vous ne proposez pas.
- GET/v1/problems
- PATCH/v1/problems/settings
- POST/v1/problems/{id}/status
- GET/v1/ai/demand‑signals
Votre backend transmet le statut du client (enregistré, payé, client depuis, état du service) dans une demande signée HMAC – l'IA le pèse lors de la réponse et de la remontée.
- POST/v1/ai/customer‑status
- POST/v1/ai/tickets
- GET/v1/ai/alerts
Tours de dialogue, liaison de compte, synthèse vocale et synthèse vocale, tickets d'application - via une intégration signée.
- 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
Assistants prêts par niche : café, clinique, magasin, service automobile. Postulez en une seule demande.
- GET/v1/ai/marketplace/templates
- POST/v1/ai/marketplace/templates/{slug}/apply
Votre propre bot répond aux discussions : réponses asynchrones, transfert, tests et cycle de vie.
- POST/v1/ai/replies
- POST/v1/external‑operators/{public_id}/tests
- POST/v1/external‑operators/{public_id}/lifecycle
Limites de taux
Par jeton, deux compteurs : les lectures et les écritures sont comptées séparément, de sorte que l'interrogation ne consomme jamais le budget d'écriture.
| X‑RateLimit‑Limit | Taille du compteur dans lequel cette demande a été comptabilisée (600 ou 120) |
| X‑RateLimit‑Remaining | Demandes laissées dans la fenêtre actuelle |
| X‑RateLimit‑Reset | Lorsque la fenêtre se réinitialise |
| Retry‑After | Sur 429 : secondes à attendre |
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 et /v1/ai/assistant/account‑link ont leurs propres compteurs ; l'API de l'agent de support peut avoir un remplacement par widget.
Erreurs
Chaque erreur est RFC‑7807 application/problem+json : un statut et une raison lisibles par machine, un détail lisible par l'homme.
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" }
Le corps nomme les require_scopes et où les accorder. Pas besoin de réémettre la clé.
| Statut | Signification |
|---|---|
| 400 | Demande mal formée ou clé d'idempotence requise manquante |
| 401 | Aucun jeton, jeton invalide ou révoqué |
| 403 | Le jeton n'a pas de portée ; le corps ajoute required_scopes et où l'accorder |
| 404 | Introuvable dans ce widget |
| 405 | Méthode non autorisée : arrêt et rapport ; ne cherchez pas d'écritures alternatives |
| 409 | Clé d'idempotence réutilisée sous 24 h, ou conflit d'état |
| 422 | La validation a échoué (par exemple, un champ en lecture seule a été envoyé) |
| 429 | Limite de taux ; respecter Réessayer‑Après |
Idempotence
Les réseaux échouent. Une clé sécurise une nouvelle tentative d'écriture : la même opération n'est jamais appliquée deux fois.
- Envoyez
X‑Smartbtn‑Idempotency‑Keyà chaque POST / PATCH / PUT / DELETE : un nouvel UUID pour une nouvelle opération, la même clé pour une nouvelle tentative de la même. - Opérations marquées
x‑idempotency : obligatoiredans OpenAPI : pas de clé → 400, la clé réutilisée dans les 24 heures → 409 (pas de succès en cache). - Vous n'êtes pas sûr que cela soit passé ? Lisez d'abord l'état. Ne changez jamais la clé automatiquement ; respectez Retry‑After.
- Un
502d'un fournisseur en amont libère la clé – réessayez avec la même clé.
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"}' # erreur réseau ? répéter avec le même $KEY
Changelog
Modifications apportées à l'API publique et aux webhooks en 2026. Tout ce qui suit est additif et reste dans v1.
Nouveau billet d'événement en direct créé. GET /v1/support/tickets répond à n'importe quelle clé avec support:read jusqu'à ce qu'un agent de support soit configuré. Les étendues clés sont modifiables sans réédition. 403 gagne require_scopes.
POST/PATCH /v1/ai/operators accepte name_i18n ; les noms par défaut sont traduits dans le langage des widgets ; choix de salutation prévisible.
Lectures : 600 par minute, écritures : 120. Les sondages ne consomment plus le budget d'écriture. X‑RateLimit-* décrit le compteur qui a été utilisé.
Chats avec activité depuis un instant, quel que soit leur âge. Chaque discussion porte désormais last_message_at.
chat.account.email_requested — le chat attend l'adresse ; les agents ne doivent pas démarrer un autre flux de code.
Fermez un ticket et rien d'autre — pour un bouton « question résolue » sur votre backend.
Filtres has_client_messages=1 et q (2 à 100 caractères).
POST /v1/ai/assistant/account‑link et /revoke. Éteint jusqu'à ce que le propriétaire l'autorise.
Les règles sont intégrées à la clé du widget ou à une clé d'assistant activée ; un 502 libère la clé d'idempotence.
Le compte est visible tant que le ticket est ouvert et pendant 7 jours après.
Nouveau groupe /v1/support : file d'attente, chats, baux, réponses, fermeture et réouverture des tickets. Éteint jusqu'à ce que le propriétaire l'autorise.
Champs code_ending, code_expires_at, last_code_result et last_code_at.
Plugin WordPress
Le widget sur un site WordPress sans toucher au code du thème.
- Téléchargerl'archive du plugin sur votre ordinateur.
- InstallerPlacez le dossier décompressé dans
wp‑content/plugins/— ou téléchargez‑le dans l'administrateur WordPress. - ActiverUn élément Smartbtn apparaît dans le menu.
- Collez le jetonCopiez le jeton de sécurité à partir des paramètres du widget dans votre tableau de bord.
Lorsque vous modifiez votre mot de passe, le jeton de sécurité change également et l'ancien cesse de fonctionner : collez le nouveau dans le plugin.
Exemples de codes
Répertoriez toutes les discussions ayant eu une activité depuis votre dernier sondage, en suivant le curseur jusqu'à la fin.
# première page 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 — avec next_cursor de la réponse curl -G https://smartbtn.me/api/v1/chats \ -H "Authorization: Bearer $SMARTBTN_TOKEN" \ --data-urlencode "cursor=eyJpZCI6NDgyMDd9"