按 Enter 键。
获取您的数据。
REST API /api/v1、53 个范围、239 个端点、11 个 Webhook 事件和一个用于小部件的 JS API。聊天、联系人、人工智能、知识库、票证和计费 - 无论仪表板做什么,您的代码也可以做什么。
# 按 Enter 或右侧的标记 $ curl -H "Authorization: Bearer sb_••••" \ https://smartbtn.me/api/v1/chats?limit=1
快速入门
从零到第一个答案的三个步骤。每个请求都与一个小部件绑定,并使用不记名令牌进行身份验证。
- 发行代币仪表板 → API 令牌:名称、可选的到期日和您需要的范围。一个令牌只属于一个小部件。纯文本令牌显示一次; Smartbtn 仅存储单向哈希,因此丢失的令牌无法恢复 - 只能撤销并重新发行。
- 打开小部件 API在小部件设置中,打开“允许小部件 API(JS 和 REST)”。发行代币并不会为您打开这个开关。
- 发送第一个请求令牌仅进入
Authorization标头,而不会进入 URL。
# 列出小部件的聊天记录 curl -H "Authorization: Bearer $SMARTBTN_TOKEN" \ https://smartbtn.me/api/v1/chats
// 200 OK · 光标分页 { "data": [ { "id": 48211, "status": "open", "last_message_at": "2026-10-17T09:41:12+03:00" }, … ], "next_cursor": "eyJpZCI6NDgyMTB9" // null — 在最后一页 }
https://smartbtn.me/api/v1 是所有项目数据的主要 API 端点。始终通过 HTTPS 发送请求,切勿在重定向时转发令牌。认证
三种路径,取决于谁打电话给谁。默认情况下拒绝访问:无范围 — 无调用。
每个请求都携带 Authorization: Bearer 。在服务器上,令牌解析为一个小部件及其范围。
传出请求使用每个租户的密钥进行签名:X‑Smartbtn‑Signature。如果您的一方需要,可以添加额外的持有者凭证。
POST /v1/ai/replies 使用自己的签名框架,固定到您的 AI 操作员和小部件,并由持久的 causation_id 键入。
人们忘记的开关
小部件设置中的“允许小部件 API(JS 和 REST)”会同时打开 REST API 和小部件 JS API。发行令牌并不会启用它。可以在仪表板中编辑现有密钥的范围(API 令牌 → 密钥 → 编辑范围)无需重新颁发 — 集成继续运行。
预设
| 预设 | 范围 | 当 |
|---|---|---|
| 人工智能设置 9 | widget:read · widget:write · ai:read · ai:write · ai:apply · kb:read · kb:write · files:write · stats:read | 您的 AI 应用程序配置小部件:助手、知识库、文本。替换整个范围选择。 |
| 只读(示例集) | chats:read · messages:read · contacts:read · stats:read | 仪表板、BI、导出。 |
| 帮助台桥(示例集) | chats:read · messages:read · messages:write · webhooks:write · support:read | 将对话和票证镜像到您的 CRM 中。 |
ai:credentials:write。 AI 设置不需要帐户、计费和合作伙伴权限。该密钥仅显示一次 - 设置完成后将其撤销。范围
53 个路由范围,加上 1 个条件范围和 1 个保留范围。仅当令牌包含路由范围(或列出的替代方案)时,请求才会成功。
| 适用范围 | 补助金 |
|---|---|
| chats · 2 | |
| chats:read | 读取聊天记录及其元数据 |
| chats:write | 关闭聊天、请求评级、转移、声明、附加或分离代理 |
| messages · 2 | |
| messages:read | 读取聊天消息历史记录 |
| messages:write | 作为代理发送消息、输入指示符并阅读回执 |
| contacts · 2 | |
| contacts:read | 读取联系人 |
| contacts:write | 更新联系人字段和属性 |
| agents · 3 | |
| agents:read | 了解代理及其存在 |
| agents:write敏感的 | 邀请、更新、暂停、恢复或删除代理;受邀者可以看到小部件的每条聊天记录 |
| agents:events:read | 读取代理的事件日志和每个代理的指标 |
| tags · 2 | |
| tags:read | 读取标签 |
| tags:write | 将标签附加到联系人 |
| files · 2 | |
| files:read | 下载已上传的文件 |
| files:write | 上传新文件 |
| stats · 1 | |
| stats:read | 阅读聚合聊天、消息和评级统计数据 |
| channels · 3 | |
| channels:read | 读取自定义频道的在线状态 |
| channels:write | 在自定义渠道上传递入站消息 |
| channels:register | 注册新的自定义频道(仅限已安装的应用程序) |
| webhooks · 2 | |
| webhooks:read | 列出 webhook 订阅 |
| webhooks:write | 创建、删除或重新发送订阅 |
| quick_phrases · 2 | |
| quick_phrases:read | 阅读代理的简短短语 |
| quick_phrases:write | 创建、编辑或删除快速短语 |
| ratings · 1 | |
| ratings:read | 阅读访客评分以及每个客服人员的得分 |
| responder · 2 | |
| responder:inject敏感的 | 作为外部 AI 操作员或机器人将回复注入实时聊天 |
| responder:escalate有条件的 | 对于 POST /v1/ai/replies:通过 escalate=true 进行呼叫者定向切换 |
| widget · 2 | |
| widget:read | 读取小部件的外观、行为和嵌入设置 |
| widget:write | 更新小部件设置并清除小部件缓存 |
| departments · 2 | |
| departments:read | 阅读部门、他们的代理人和时间表 |
| departments:write | 创建、更新或删除部门和计划 |
| messengers · 2 | |
| messengers:read | 读取已连接的信使(绝不是凭据) |
| messengers:write敏感的 | 连接或断开信使;写入提供者凭证 |
| ai · 4 | |
| ai:read | 了解 AI 助手及其配置和警报 |
| ai:write | 创建和更新助手、AI 设置和 AI 操作员、角色和提示 |
| ai:credentials:write敏感的 | 存储第三方 LLM 提供商凭证 (BYOK) |
| ai:apply | 批准重写实时助理角色的改进 |
| kb · 2 | |
| kb:read | 阅读知识库规则和摄取来源 |
| kb:write | 创建、更新或删除知识库规则和源 |
| transcripts · 1 | |
| transcripts:read | 导出聊天记录 |
| account · 2 | |
| account:read | 阅读帐户资料及其所有法律实体 |
| account:write | 仅更新帐户的姓名和电话 |
| billing · 2 | |
| billing:read | 读取小部件的账单记录和法律实体 |
| billing:write | 创建、更新、删除法人实体;不开具发票,不转移资金 |
| partners · 2 | |
| partners:read | 读取合作伙伴和推荐数据 |
| partners:withdraw保留 | 保留:今天没有支付操作使用它 |
| support · 4 | |
| support:read | 阅读票证、活跃聊天、他们的消息和自己审核的操作 |
| support:reply敏感的 | 作为支持操作员回答客户问题 |
| support:write | 声明或释放聊天,关闭而不回复,重新打开 |
| support:tickets:close | 只关闭一张票 - 没有其他 |
| marketing · 2 | |
| marketing:read | 阅读营销活动:横幅、弹出窗口、电子邮件 |
| marketing:write | 创建和编辑营销活动、更改状态、开始发送电子邮件 |
| broadcasts · 2 | |
| broadcasts:read | 阅读即时通讯广播(WhatsApp、Telegram、Messenger、Viber、VK、MAX) |
| broadcasts:write | 创建、编辑和开始广播 |
| problems · 2 | |
| problems:read | 读取客户问题集群和设置 |
| problems:write | 更改设置和集群状态:新的、进行中、已解决、重复 |
| invitations · 2 | |
| invitations:read | 阅读邀请规则、A/B 变体、模板和渠道 |
| invitations:write | 创建、编辑、启用或删除规则和模板 |
端点
整个公共表面都在一个列表中。按资源过滤,按路径搜索,单击一行复制准备好的卷曲。
ai 助理、操作员、钥匙、学习、市场54
chats 对话、消息、传输、评级18
kb 知识库:规则、爬虫、文件、搜索16
agents 代理、邀请、指标14
messengers 通讯工具、社交网络和市场渠道13
billing 余额、订阅、发票、实体12
support 支持代理:票证和聊天12
widget 设置、语言、翻译、皮肤、缓存12
channels 定制频道8
external‑operators 您的机器人作为操作员8
webhook‑subscriptions Webhook 订阅8
broadcasts 信使广播7
departments 部门及日程7
invitations 智能邀请7
marketing 营销活动7
partner 合作伙伴计划7
wishes 对人工智能的愿望7
contacts 联系人和标签5
problems 客户问题分析4
quick‑phrases 快速短语4
compat 迁移兼容性3
stats 统计数据3
account 账户2
files 文件2
ratings 评级1
tags 标签1
v1 1
webhook‑events 活动目录1
路径相对于 https://smartbtn.me/api。写入需要 Content‑Type: application/json 和 X‑Smartbtn‑Idempotency‑Key。 compat 组是一个兼容层,供从其他聊天平台迁移的团队使用。
网络钩子
每当订阅事件发生时,都会将签名的 JSON POST 发送到您的 URL。通过 /v1/webhook‑subscriptions 或在仪表板中管理订阅。
{
"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"
}
}原因: human_request |计费 | ai_未解决 |行动请求| ……;优先级:高 |普通的;来源:聊天 |应用程序 |地点。使用 GET /v1/support/tickets/{number} 阅读票证及其对话框。
交付标头
| X‑Smartbtn‑Event | 事件类型,例如message.created。 |
| X‑Smartbtn‑Signature | 原始正文的 sha256=v1:。 |
| X‑Smartbtn‑Idempotency‑Key | 每个事件一个值,重试后保持稳定。对其进行重复数据删除。 |
| X‑Smartbtn‑Delivery | 每次传输尝试都有一个值 - 对于您的日志。 |
| X‑Smartbtn‑Timestamp | 发送的 Unix 时间。信息性的,未签名。 |
签名验证
原始正文(JSON 解析之前收到的字节)的 HMAC‑SHA256 以及您的端点密钥;在恒定时间内进行比较。创建订阅时,秘密会显示一次;使用 POST /v1/webhook‑subscriptions/{id}/rotate‑secret 旋转它。
// Node.js · 例如,秘密是一个占位符 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; }
重试并订购
- 最多 4 次尝试(第一次发送加上 3 次重试),回退
min(60, 2^attempt × 5)秒 — 大约 10、20、40 秒。 - 非 2xx 或超时算作失败的尝试。失败的交付可以使用
POST /v1/webhook‑subscriptions/{id}/redeliver重新发送 - 相同的幂等密钥、新的交付 ID。 - 交付至少一次并且未订购。有效负载是最小的——ID,而不是完整的记录;通过 REST API 获取详细信息。
JS API
将您对访客的已知信息直接传递给代理。仅接受来自小部件设置中设置的域的呼叫。
smartbtn_widget_api.setContactInfo(info)
设置访客的联系数据。代理将其视为访客填写了介绍表格。姓名、电话和电子邮件在 Smartbtn 中发挥着特殊作用 - 因此是一个单独的方法。
| 名称 | 类型 | 描述 |
|---|---|---|
| name | string | 访客姓名 |
| string | 访客电子邮件 | |
| phone | string | 访客电话 |
| description | string | 有关客户的任何额外信息 |
Smartbtn_api.setClientInfo({ name: “亚历克斯·摩根”, email: "email@example.com", phone: "+17584987855", description: "Description text" });
smartbtn_widget_api.setCustomData(fields)
代理应用程序右侧信息面板的任何额外数据。您可以随意调用它——在打开的对话框中,面板会实时更新。字段按数组顺序显示。
| 名称 | 类型 | 描述 |
|---|---|---|
| fields | array | 数据字段列表 |
| field.title | string | 前往球场上方 |
| field.content | string | 字段内容;标签被转义 |
| field.link | string | 点击打开的网址 |
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()
动态切换小部件主题,无需重新加载页面(classic、minimal、capsule、liquid)或以编程方式控制聊天窗口。对于永久的每个项目自定义,请将相同的字段传递给 PATCH /v1/widget/settings。
// JS API · 实时切换页面皮肤 smartbtn_widget_api.setSkin("minimal"); smartbtn_widget_api.setSkin("capsule", { capsuleTitle: "Smartbtn AI", capsuleSubtitle: “约 1 秒内回复” }); // REST API · PATCH /v1/widget/settings (范围 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": “24/7 在线” }
widget_api_contact_sync 后,这些调用还会触发 contact.updated Webhook。Support‑agent API
自动化支持代理负责工单队列和客户聊天:进行聊天,作为人工支持操作员进行回答,关闭工单。关闭直到小部件所有者将其打开。
- 楼主启用了列出允许充当支持代理的令牌以及它们可以调用的 IP。
- 读取队列
GET /v1/support/tickets·GET /v1/support/chats - 租个聊天室
POST …/chats/{id}/claim·…/release - 回复纯文本,仅链接到小部件允许的主机。
201仅在消息被存储后。 - 关闭或重新打开
POST …/tickets/{number}/close·…/reopen
| 适用范围 | 允许 |
|---|---|
| support:read | 票证、活跃聊天、标记为客户端/人工智能/支持/系统的消息、自己审核的操作 |
| support:write | 声明/释放聊天,关闭而不回复,重新打开 |
| support:reply | 作为支持操作员回答客户问题(敏感) |
| support:tickets:close | 仅关闭票证 - 对于后端的“问题已解决”按钮 |
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":"完成,访问已恢复。"}'
人工智能应用程序接口
仪表板的人工智能部分所做的一切:助手、您自己的提供商密钥、知识库、带回滚的自学、愿望、问题、需求信号和应用程序内的助手。
几个助手有自己的角色和语言,上线前进行测试,按语言指定操作员。
- GET/v1/ai/assistants
- POST/v1/ai/assistants/{id}/test
- PATCH/v1/ai/operators/{id}
- POST/v1/ai/handoff
Claude、ChatGPT、DeepSeek、Gemini、Mistral、地区法学硕士或任何 OpenAI 兼容的。型号按键列出。
- GET/v1/ai/credentials
- POST/v1/ai/credentials
- GET/v1/ai/credentials/{id}/models
用于您的网站、PDF 和 DOCX 上传、规则、搜索和索引状态的爬虫。
- PUT/v1/kb/crawler
- POST/v1/kb/uploads
- POST/v1/kb/rules
- GET/v1/kb/search
通过回滚和终止开关调整运行、周期、历史、角色版本。
- POST/v1/ai/learning/tune
- GET/v1/ai/learning/cycles
- POST/v1/ai/learning/persona‑versions/{version}/revert
- GET/v1/ai/learning/kill‑switch
简单的愿望 → 无副作用的预览 → 批准、拒绝或恢复。
- POST/v1/wishes
- GET/v1/wishes/{id}/preview
- POST/v1/wishes/{id}/approve
- POST/v1/wishes/{id}/revert
具有状态和每月支出上限的问题集群;客户要求但您没有提供的内容。
- GET/v1/problems
- PATCH/v1/problems/settings
- POST/v1/problems/{id}/status
- GET/v1/ai/demand‑signals
您的后端会在 HMAC 签名的请求中推送客户状态(已注册、已付费、自客户以来、服务状态)——AI 在应答和升级时会对其进行权衡。
- POST/v1/ai/customer‑status
- POST/v1/ai/tickets
- GET/v1/ai/alerts
对话轮流、帐户链接、语音转文本和文本转语音、应用程序票证 - 通过签名集成。
- 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
按细分市场准备的助手:咖啡馆、诊所、商店、汽车服务。一次申请。
- GET/v1/ai/marketplace/templates
- POST/v1/ai/marketplace/templates/{slug}/apply
您自己的机器人回答聊天:异步回复、切换、测试和生命周期。
- POST/v1/ai/replies
- POST/v1/external‑operators/{public_id}/tests
- POST/v1/external‑operators/{public_id}/lifecycle
速率限制
每个令牌有两个计数器:读取和写入是分开计算的,因此轮询永远不会消耗写入预算。
| X‑RateLimit‑Limit | 此请求计入的计数器大小(600 或 120) |
| X‑RateLimit‑Remaining | 当前窗口中剩余的请求 |
| X‑RateLimit‑Reset | 当窗口重置时 |
| Retry‑After | On 429:等待秒数 |
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 和 /v1/ai/assistant/account‑link 有自己的计数器;支持代理 API 可以覆盖每个小部件。
错误
每个错误都是 RFC‑7807 application/problem+json:机器可读的状态和原因,人类可读的细节。
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" }
主体名称 required_scopes 以及授予它们的位置。无需重新颁发密钥。
| 状态 | 含义 |
|---|---|
| 400 | 格式错误的请求或缺少所需的幂等性密钥 |
| 401 | 无令牌、令牌无效或已撤销 |
| 403 | 令牌缺乏范围;正文添加 required_scopes 以及授予它的位置 |
| 404 | 在此小部件中找不到 |
| 405 | 不允许的方法——停止并报告;不寻找替代写入 |
| 409 | 幂等密钥在24小时内重复使用,或者状态冲突 |
| 422 | 验证失败(例如发送了只读字段) |
| 429 | 速率限制;尊重重试后 |
幂等性
网络失败。密钥使重试写入变得安全:相同的操作永远不会应用两次。
- 每次 POST / PATCH / PUT / DELETE 时发送
X‑Smartbtn‑Idempotency‑Key:新操作的新 UUID,重试相同操作的相同密钥。 - OpenAPI 中标记为
x‑idempotency: required的操作:无密钥 → 400,密钥在 24 小时内重复使用 → 409(不是缓存的成功)。 - 不确定它通过了吗?首先阅读状态。切勿自动更改密钥;尊重重试后。
- 来自上游提供商的
502释放密钥 - 使用相同的密钥重试。
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"}' # 网络错误?使用相同的 $KEY 重复
Changelog
2026 年公共 API 和 Webhook 的更改。以下所有内容都是附加的,并保留在 v1 中。
新的现场活动门票已创建。 GET /v1/support/tickets 使用 support:read 回答任何键,直到配置支持代理。关键范围可编辑,无需重新发布。 403 获得 required_scopes。
POST/PATCH /v1/ai/operators 接受 name_i18n;默认名称被翻译成小部件语言;可预测的问候语选择。
读取 — 每分钟 600 次,写入 — 120 次。轮询不再占用写入预算。 X‑RateLimit-* 描述所使用的计数器。
无论年龄多大,从一瞬间开始就开始活跃聊天。现在每个聊天都带有last_message_at。
chat.account.email_requested — 聊天等待地址;代理不得启动另一个代码流。
关闭票证,仅此而已 - 只需在后端点击“问题已解决”按钮即可。
过滤 has_client_messages=1 和 q(2–100 个字符)。
POST /v1/ai/assistant/account‑link 和 /revoke。关闭直到所有者启用它。
规则嵌入到小部件键或启用的辅助键中; a 502释放幂等性密钥。
该帐户在票证打开期间及其后 7 天内可见。
新的/v1/支持组:队列、聊天、租赁、回复、关闭和重新打开票证。关闭直到所有者启用它。
字段 code_pending、code_expires_at、last_code_result 和 last_code_at。
WordPress 插件
WordPress 网站上的小部件无需触及主题代码。
代码示例
列出自上次投票以来的所有聊天活动 - 跟随光标一直到末尾。
# 第一页 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 — 响应中的 next_cursor curl -G https://smartbtn.me/api/v1/chats \ -H "Authorization: Bearer $SMARTBTN_TOKEN" \ --data-urlencode "cursor=eyJpZCI6NDgyMDd9"