WebSocket API

Connection

目錄

  1. 連線資訊
  2. 認證方式
  3. 訊息格式
  4. 心跳機制(Health)

連線資訊

項目
端點wss://vas-poc.vurbo.ai/ws
協定WebSocket
資料格式JSON
認證方式Ticket(見下方)

認證方式

VAS WebSocket 使用 Ticket 機制 進行認證,透過 Sec-WebSocket-Protocol 傳遞一次性 Ticket。詳細說明請參考 認證機制

步驟 1:取得 Ticket

使用 API Key 向 REST API 換取一次性 Ticket:

POST /api/v1/auth/ticket
X-API-Key: vas_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

回應:

{
  "ticket": "aBcDeFgHiJkLmNoPqRsTuVwXyZ012345",
  "expires_in": 60
}
欄位類型說明
ticketstring一次性 Ticket(32 字元)
expires_inint有效期(秒)

步驟 2:使用 Ticket 連線 WebSocket

將 Ticket 放入 Sec-WebSocket-Protocol,格式為 ticket.{TICKET_VALUE}

// 瀏覽器原生支援
const ws = new WebSocket('wss://vas-poc.vurbo.ai/ws', [`ticket.${ticket}`]);

ws.onopen = () => {
  console.log('Connected! Protocol:', ws.protocol);
  // 開始使用 WebSocket...
};

ws.onerror = (error) => {
  console.error('Connection failed:', error);
};

Node.js 範例:

const WebSocket = require('ws');

const ws = new WebSocket('wss://vas-poc.vurbo.ai/ws', [`ticket.${ticket}`]);

Ticket 特性

特性說明
有效期60 秒
使用次數僅能使用一次(使用後立即刪除)
安全性API Key 不會暴露在 WebSocket 連線中
防重放攻擊使用原子操作確保一次性

Ticket 錯誤碼

錯誤碼HTTP 狀態碼說明
ticket_invalid401Ticket 無效或已過期
ticket_expired401Ticket 已過期
ticket_already_used401Ticket 已被使用
ticket_validation_failed500Ticket 驗證失敗

完整 API 規格請參考 Auth Ticket API


訊息格式

所有訊息使用統一的巢狀結構:

{
  "type": "服務類型",
  "data": { ... }
}

服務類型

type說明
health心跳機制
voice-translation語音翻譯服務
error錯誤訊息

錯誤訊息格式

當發生錯誤時,伺服器會回傳 type: "error" 的訊息:

{
  "type": "error",
  "data": {
    "error_code": "auth_invalid_api_key",
    "severity": "fatal",
    "message": "API Key 無效",
    "context": "auth",
    "request_id": "req_abc123xyz789",
    "timestamp": "2026-01-15T10:30:45.123Z"
  }
}
欄位類型說明
error_codestring錯誤碼(程式化處理用)
severitystring嚴重程度:fatal / error / warning
messagestring人類可讀的錯誤訊息
contextstring錯誤來源分類
request_idstring請求追蹤 ID
timestampstring錯誤發生時間(ISO 8601)

完整錯誤碼列表請參考 錯誤碼參考


心跳機制(Health)

功能說明

用於確認 WebSocket 連線是否正常。建議每 30 秒發送一次 ping,若未收到 pong 則視為斷線並重連。

使用場景

  • 維持長時間連線
  • 檢測連線狀態
  • 防止連線逾時

請求 - Ping

{
  "type": "health",
  "data": {
    "action": "ping"
  }
}

回應 - Pong

{
  "type": "health",
  "data": {
    "action": "pong"
  }
}

版本:V1.5.7 最後更新:2026-05-20

Copyright © 2026