Local API

通过 HTTP 从您自己的软件控制正在运行的 Q-Booth(同一台电脑或局域网):开启活动、拍照、打印、显示二维码并读取拍照亭状态。

12 分钟阅读 更新于 26 Oct 2026

Local API 让您自己的软件通过 HTTP 控制正在运行的 Q-Booth——可以在同一台电脑上,也可以在局域网中的其他设备上。开启活动、引导宾客完成拍摄、打印、显示二维码,并随时读取拍照亭当前的状态。

注意

本页说明的是 API 版本 1。拍照亭会在 status → app.apiVersion 中报告它运行的版本。该 API 仅在局域网内可用,无法通过互联网访问。

快速开始

  1. 打开应用设置窗口,进入高级 → Local API,打开开启 Local API。(如果看不到高级,请先打开显示全部设置。)
  2. 密码留空会自动生成,也可以自行输入。默认端口为 8730。
  3. 如需从其他设备调用,请打开允许网络中的其他设备。Windows 可能会询问一次是否允许 Q-Booth 通过防火墙——请选择允许。
  4. 点击保存设置,然后点击打开测试页面。测试页面为每个命令提供一个按钮,并附有拍照亭自带的这份参考文档。

地址为 http://<拍照亭电脑>:8730(在拍照亭电脑本机上为 http://localhost:8730)。所有命令都位于 /api/v1/ 之下。

curl http://localhost:8730/api/v1/status -H "Authorization: Bearer 您的密码"

密码

除 GET /api/v1/commands 外,每次调用都需要密码。可用以下任一方式发送:

  • Authorization: Bearer <密码>(推荐)
  • X-QBooth-Key: <密码>
  • 在网址中加 ?key=<密码>,适用于只能打开链接的工具

密码错误或缺失时返回 401。同一地址在一分钟内输错十次,将被封锁一分钟(429)。密码相当于操作员的钥匙——任何拿到它的人都能控制拍照亭,请妥善保管。

返回格式

读取类命令使用 GET,返回 200 和数据:

{ "ok": true, "data": { ... } }

操作类命令使用 POST,参数放在 JSON 正文(或查询字符串)中。也可以用 GET,方便只能发送 GET 的触发工具。操作被接受后,拍照亭一收到就返回 202——不会等待拍照、打印或宾客操作完成:

{ "ok": true, "accepted": "camera/capture" }

被拒绝的调用会说明原因,并附带可供程序判断的代码:

{ "ok": false, "error": { "code": "wrong_page", "message": "The booth is on the welcome page. This needs the Camera page." } }

API 不会把命令排队稍后执行。如果拍照亭当前状态不允许,会立即拒绝。错误信息始终为英文;请在程序中使用 code 进行判断。

状态

GET /api/v1/status 告诉您拍照亭当前所处的位置。执行操作后可定时调用来跟进结果——每 300 到 1000 毫秒一次即可。如果完全无法连接,说明 Q-Booth 没有运行(或 Local API 未开启)。

{
  "app":     { "name": "QBooth", "version": "5.9.1.0", "apiVersion": "1" },
  "event":   { "id": "1781706869_H5A4", "name": "Wedding" },
  "page":    "camera",
  "session": { "active": true, "templateId": "…", "templateName": "Strip 3" },
  "camera":  { "phase": "review", "shot": 3, "shots": 3, "captured": 3, "feed": "live", "retakesLeft": 1 },
  "result":  null,
  "busy":    { "dialog": false, "processing": false },
  "available": ["camera/retake", "camera/process", "session/end", "event/stop"]
}
字段含义
event正在运行的活动;未运行活动时为 null。
pagenone、welcome、survey、categoryPicker、templatePicker、input、camera 或 result。
session宾客开始(且在收费活动中已付款)后 active 为 true,以及目前选中的模板。
camera仅在拍照页面出现。phase 为 liveIdle、counting、recording、capturing、reveal、shotDelay 或 review。retakesLeft 为 null 表示不限次数。
result仅在结果页面出现:当前显示第几张结果,共几张。
busy屏幕上有对话框(付款、PIN、二维码、提示),或照片正在处理。任一为真时,操作都会被拒绝。
available拍照亭此刻会接受的操作——与操作本身使用同样的检查,可直接用来启用或置灰您软件中的按钮。

一位宾客的完整流程

典型流程,每一步都在 status 中等待所示的页面或阶段:

调用然后等待
POST event/start {"id": "…"}page: welcome
POST session/startpage: templatePicker(或 categoryPicker / survey,取决于活动设置)
POST template/select {"index": 1}page: camera、camera.phase: liveIdle、camera.feed: live
POST camera/capturecamera.phase: review
POST camera/processpage: result
POST result/print—
POST session/endpage: welcome
提示

API 遵循与宾客相同的规则。问卷、表单、付款或 PIN 会像点击后一样出现在拍照亭屏幕上,API 不会替宾客填写。打印数量限制和打印 PIN 同样有效。

命令

所有路径都以 /api/v1/ 开头。index 从 1 开始,顺序与宾客看到的卡片一致(左上方的图库在前)。id 和 index 二选一;如果两者都发送,以 id 为准。

命令可用时机作用
GET status随时拍照亭当前位置,以及会接受哪些操作。见状态。
GET commands随时,无需密码命令列表及 API 版本——测试页面即由此生成。
GET events随时电脑上的所有活动:id、name、archived、templateCount、running。
POST event/start
{"id": "…"}
没有活动在运行、没有对话框、活动编辑器未打开其他活动或有未保存的修改开启活动,与活动的启动按钮相同。如有模板警告,会先显示在拍照亭屏幕上。
POST event/stop活动正在运行、没有对话框、未在处理结束拍照亭会话并返回应用。不会询问退出 PIN。
GET templates
?eventId=…(可选)
带 eventId 时随时可用;不带时需有活动在运行宾客可选的模板。带 eventId:任何已保存的活动,无论是否在运行。不带:正在运行的活动,在其模板选择页(或带模板图库的欢迎页)上 onScreen 和 index 表示显示了哪些卡片。
GET categories
?eventId=…(可选)
带 eventId 时随时可用;不带时需有活动在运行活动中已启用的分类,eventId 规则相同。在正在运行的活动的分类选择页上,onScreen 和 index 表示显示了哪些卡片。
POST session/start欢迎页开始按钮。如活动设有开始 PIN 或付款,会显示在拍照亭屏幕上。
POST session/end欢迎页之后的任何页面主页按钮:结束该宾客的会话并返回欢迎页。
POST category/select
{"id": "…"} 或 {"index": n}
分类选择页像点击卡片一样选择分类,然后打开模板选择页。
POST template/select
{"id": "…"} 或 {"index": n}
欢迎页(活动中的任意模板),或模板选择页且该模板显示在页面上在模板选择页:像点击卡片一样选择模板并确认(会替您按下“下一步”按钮)。在欢迎页:以该模板开始会话,如同点击欢迎页模板图库中的卡片。启动 PIN 或付款会先显示在拍照机屏幕上,然后跳过选择页。在欢迎页上,index 按欢迎页图库的卡片计数;若欢迎页没有图库,请用 id 选择。
POST camera/capture拍照页面,实时取景待机(或两张照片之间的等待),相机在线拍照按钮:开始倒计时和拍摄。在手动多张拍摄的间隔中,拍下一张。
POST camera/retake拍照页面,正在查看照片,仍有重拍次数对当前显示的照片按下重拍按钮,遵循该按钮的点击后设置。
POST camera/process拍照页面,正在查看照片处理按钮:把照片交给模板处理。
POST result/print结果页面,已设置打印机,允许打印对当前显示的结果按下打印按钮。打印 PIN、数量限制和打印后锁定均有效;若在出售额外打印,则打开购买流程。
POST result/qr
{"type": "web"} 或 "local"
结果页面,且已在设置中配置该类型的二维码显示当前结果的二维码,与 QR Web / QR Local 按钮相同。默认 web。

错误

HTTP代码含义
400bad_request参数缺失或无效。
401unauthorized没有密码或密码错误。
404not_found未知的路径或命令。
404unknown_event、unknown_template、unknown_category找不到该 id 或 index 对应的活动、模板或分类。
405method_not_allowed对读取类命令发送了 POST。
409no_event该命令需要有活动在运行。
409event_running已有活动在运行。
409editor_open拍照亭电脑上的活动编辑器已打开(其他活动,或有未保存的修改)。
409no_templates该活动没有模板。
409wrong_page在拍照亭当前显示的页面上不可用。
409wrong_phase在拍照页面,但还未到可以执行的阶段。
409dialog_open拍照亭屏幕上有对话框打开。
409processing照片正在处理。
409busy拍照亭仍在完成上一个操作,请稍后再试。
409not_allowed被规则阻止:重拍次数用完、达到打印上限、打印后锁定中。
409not_configured没有打印机,或该类型的二维码未在设置中配置。
429too_many_attempts密码错误次数过多,请等待一分钟。
503busyQ-Booth 没有及时响应,请重试。

日志

每次调用都会写入应用日志文件夹 log\local_api\,每天一个文件:调用方地址、命令及其参数、返回结果以及被拒绝的原因。密码从不写入日志。成功的 status 轮询不会记录。

版本历史

API 版本Q-Booth 版本变更
1即将推出首个版本:status、commands、events、活动开启 / 结束、templates、categories、会话开始 / 结束、分类与模板选择、相机拍照 / 重拍 / 处理、结果打印与二维码。

仍需要帮助?

我们的团队在 WhatsApp 上为您解答。请告知 Q-Booth 版本及屏幕上显示的内容。

WhatsApp 联系