Skip to content

座席接口

概述

座席接口提供座席登錄、狀態管理等核心功能。包含三種登錄類型和三種工作類型的支持,滿足不同的業務場景需求。

登錄類型

SDK 支持三種登錄類型,對應不同的座席角色:

代碼名稱說明功能
1座席 (Agent)普通座席接聽來電、撥號、轉接
2監督者 (Supervisor)監督者/主管監聽、插話、耳語、強制登出
3管理員 (Administrator)系統管理員所有權限

工作類型

SDK 支持三種工作類型,對應不同的業務模式:

代碼名稱說明
1入站 (Inbound)接聽來電,處理客戶諮詢
2出站 (Outbound)主動撥號,開展營銷或追蹤
3混合 (Blended)既接聽來電也主動撥號

init() - 初始化 SDK

初始化 AICC Agent SDK。

語法

javascript
const sdk = uni4cc.init(options);

參數

參數名類型必填說明
serverstringWebSocket 伺服器地址 (wss://...)
agentIdstring座席 ID
agentNamestring座席姓名
agentTeamstring座席所屬團隊
janusobjectJanus Gateway 配置
janus.serverstringJanus Gateway WebRTC 伺服器 (wss://...)

範例

javascript
const sdk = uni4cc.init({
  server: 'wss://aicc.example.com:8443',
  agentId: 'agent_001',
  agentName: '王小明',
  agentTeam: '業務部',
  janus: {
    server: 'wss://janus.example.com:8443/janus'
  }
});

login() - 登錄

座席通過密碼登錄。

語法

javascript
sdk.login(password, loginType, workType);

參數

參數名類型必填說明
passwordstring座席密碼 (明文傳輸,由 SDK 在本地進行 SHA256 加密)
loginTypenumber登錄類型 (1:座席, 2:監督者, 3:管理員),預設為 1
workTypenumber工作類型 (1:入站, 2:出站, 3:混合),預設為 3

回傳值

返回 Promise,成功時回傳登錄信息:

javascript
{
  agentId: "agent_001",
  agentName: "王小明",
  token: "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
  loginType: 1,
  workType: 3,
  status: "LOGGEDIN"
}

範例

javascript
// 作為普通座席登錄,混合模式
sdk.login('password123', 1, 3)
  .then((result) => {
    console.log('登錄成功:', result.agentName);
  })
  .catch((error) => {
    console.error('登錄失敗:', error.message);
  });

// 作為監督者登錄
sdk.login('supervisor_password', 2)
  .then(() => {
    console.log('監督者登錄成功');
  })
  .catch((error) => {
    console.error('登錄失敗:', error);
  });

setReady() - 設置就緒

將座席狀態設置為就緒,準備接收來電。

語法

javascript
sdk.setReady();

回傳值

返回 Promise,成功時回傳:

javascript
{
  status: "READY",
  timestamp: "2026-03-23T14:30:00Z"
}

範例

javascript
// 登錄後設置就緒
await sdk.login('password123');
await sdk.setReady();
console.log('座席已就緒,準備接收來電');

setNotReady() - 設置非就緒

將座席狀態設置為非就緒,暫停接收來電。

語法

javascript
sdk.setNotReady(reason);

參數

參數名類型必填說明
reasonstring非就緒原因 (例如"午休"、"會議")

回傳值

返回 Promise,成功時回傳:

javascript
{
  status: "NOT_READY",
  reason: "午休",
  timestamp: "2026-03-23T12:00:00Z"
}

範例

javascript
// 設置非就緒,附帶原因
await sdk.setNotReady('午休');
console.log('座席已設置為非就緒');

// 稍後恢復就緒
setTimeout(async () => {
  await sdk.setReady();
  console.log('座席已恢復就緒');
}, 3600000); // 1 小時後

logout() - 登出

座席登出系統。

語法

javascript
sdk.logout();

回傳值

返回 Promise,成功時回傳:

javascript
{
  status: "OFFLINE",
  timestamp: "2026-03-23T18:00:00Z"
}

範例

javascript
// 頁面關閉前登出
window.addEventListener('beforeunload', async () => {
  await sdk.logout();
  console.log('已安全登出');
});

// 或主動登出
await sdk.logout();

getStatus() - 取得座席狀態

獲取當前座席的狀態。

語法

javascript
const status = sdk.getStatus();

回傳值

返回座席狀態對象:

javascript
{
  agentId: "agent_001",
  agentName: "王小明",
  agentTeam: "業務部",
  status: "READY",
  loginType: 1,
  workType: 3,
  onCallCount: 1,
  onHoldCount: 0,
  loginTime: "2026-03-23T09:00:00Z",
  lastStatusChange: "2026-03-23T09:05:00Z"
}

狀態值說明

狀態值說明
OFFLINE未登錄或已登出
LOGGEDIN已登錄,未設置就緒
READY就緒,可接收來電
NOT_READY非就緒,不接收來電
TALKING通話中
HOLDING通話保持中
TRANSFER轉接中
CONSULT諮詢中
CONFERENCE會議中

範例

javascript
// 定期檢查座席狀態
setInterval(() => {
  const status = sdk.getStatus();
  document.getElementById('agentStatus').textContent = status.status;
  console.log('座席狀態:', status.status);
}, 5000);

on() - 監聽事件

註冊事件監聽器。

語法

javascript
sdk.on(eventName, callback);

座席事件

事件名回調參數說明
statusChanged{ status, reason, timestamp }座席狀態變更
loginSuccess{ agentId, agentName, loginType }登錄成功
loginFailed{ error, message }登錄失敗
logoutSuccess-登出成功
connectionLost{ reason }連接丟失
connectionRestored-連接已恢復

範例

javascript
// 監聽狀態變更
sdk.on('statusChanged', (event) => {
  console.log('座席狀態變更:', event.status);
  updateUI(event.status);
});

// 監聽登錄成功
sdk.on('loginSuccess', (event) => {
  console.log('歡迎', event.agentName);
  document.getElementById('agentName').textContent = event.agentName;
});

// 監聽連接丟失
sdk.on('connectionLost', (event) => {
  console.warn('連接已丟失:', event.reason);
  showAlert('連接已丟失,正在重新連接...');
});

// 監聽連接恢復
sdk.on('connectionRestored', () => {
  console.log('連接已恢復');
  hideAlert();
});

off() - 取消監聽

移除事件監聽器。

語法

javascript
sdk.off(eventName, callback);

參數

參數名類型必填說明
eventNamestring事件名稱
callbackfunction回調函數;若省略則移除該事件的所有監聽

範例

javascript
// 定義監聽器
const handleStatusChange = (event) => {
  console.log('狀態變更:', event.status);
};

// 綁定監聽器
sdk.on('statusChanged', handleStatusChange);

// 稍後移除監聽器
sdk.off('statusChanged', handleStatusChange);

// 或移除所有監聽器
sdk.off('statusChanged');

完整使用示例

場景:座席完整生命週期

javascript
// 1. 初始化 SDK
const sdk = uni4cc.init({
  server: 'wss://aicc.example.com:8443',
  agentId: 'agent_001',
  agentName: '王小明',
  agentTeam: '業務部',
  janus: {
    server: 'wss://janus.example.com:8443/janus'
  }
});

// 2. 監聽事件
sdk.on('statusChanged', (event) => {
  console.log('狀態:', event.status);
  updateStatusUI(event.status);
});

sdk.on('loginFailed', (event) => {
  alert('登錄失敗: ' + event.message);
});

sdk.on('connectionLost', (event) => {
  console.warn('連接丟失:', event.reason);
});

// 3. 登錄
async function login() {
  try {
    const password = document.getElementById('password').value;
    await sdk.login(password, 1, 3); // 座席,混合模式
    console.log('登錄成功');
  } catch (error) {
    console.error('登錄失敗:', error);
  }
}

// 4. 設置就緒
async function readyUp() {
  try {
    await sdk.setReady();
    console.log('已設置為就緒');
  } catch (error) {
    console.error('設置就緒失敗:', error);
  }
}

// 5. 設置非就緒
async function takeBreak() {
  try {
    await sdk.setNotReady('休息');
    console.log('已設置為非就緒');
  } catch (error) {
    console.error('設置非就緒失敗:', error);
  }
}

// 6. 登出
async function logout() {
  try {
    await sdk.logout();
    console.log('已登出');
  } catch (error) {
    console.error('登出失敗:', error);
  }
}

// 7. 定期檢查狀態
setInterval(() => {
  const status = sdk.getStatus();
  console.log('當前狀態:', status.status);
}, 10000);

// 8. 頁面卸載時登出
window.addEventListener('beforeunload', async () => {
  await sdk.logout();
});

常見錯誤

錯誤碼說明解決方案
INVALID_PASSWORD密碼錯誤確認密碼是否正確
AGENT_NOT_FOUND座席不存在確認座席 ID 是否正確
CONNECTION_FAILED連接失敗檢查網絡和伺服器地址
WEBSOCKET_ERRORWebSocket 錯誤檢查瀏覽器控制台錯誤信息
TIMEOUT請求超時檢查網絡延遲

注意事項

  1. 密碼安全:密碼應由使用者手動輸入,不要硬編碼在代碼中
  2. 登錄限制:同一座席同時只能有一個活躍連接;新的登錄會斷開舊連接
  3. 狀態檢查:在執行操作前應檢查座席當前狀態是否允許
  4. 錯誤處理:所有 async 操作都應使用 try-catch 或 .catch() 進行錯誤處理
  5. 資源清理:頁面卸載前應呼叫 logout() 釋放資源

承暉資訊資源中心