电传机 WebSocket 实时同步
建立连接
wss://ydzx.panretro.com/external/api/v1/teleprinter/ws/{accessToken}/{deviceId}
accessToken 需要 OAuth2 chat scope,deviceId 必须已经由该 token 所属用户通过 HTTP register 接口注册。连接成功时服务端刷新设备心跳,并返回:
{ "type": "ready", "deviceId": "paper-01" }
认证失败、设备不存在或设备不属于当前用户时,服务端发送:
{ "type": "error", "code": "UNAUTHORIZED" }
随后关闭连接。
设备发送帧
心跳
{ "type": "heartbeat" }
服务端回复同样的 heartbeat 帧,并更新在线时间。服务端每 25 秒还会发送 WebSocket Ping;客户端应自动回复 Pong。
同步设备文本
{ "type": "sync", "content": "纸带已装入。" }
message 是 sync 的兼容别名。成功后服务端返回:
{
"type": "synced",
"message": {
"id": 1950000000000000002,
"deviceId": "paper-01",
"direction": "from_device",
"content": "纸带已装入。"
}
}
文本不能为空,最大 2000 字符。
服务端推送帧
当网页用户或 HTTP send API 向在线设备发送文本时,设备立即收到:
{
"type": "message",
"message": {
"id": 1950000000000000003,
"deviceId": "paper-01",
"direction": "to_device",
"content": "请打印测试页。",
"delivered": 0
}
}
仅当至少一个仍打开的 WebSocket 已接收推送时,服务端才将该消息标记为已投递。设备离线或没有有效 WebSocket 时,消息保留在队列中,可通过 HTTP poll 获取。
错误帧
{ "type": "error", "code": "BAD_REQUEST" }
| code | 含义 |
|---|---|
UNAUTHORIZED | token 无效、缺少 chat scope,或设备不属于当前用户 |
BAD_REQUEST | JSON 格式、消息内容或状态不合法 |
UNKNOWN_FRAME | 不支持的 type |