座席接口
概述
座席接口提供座席登錄、狀態管理等核心功能。包含三種登錄類型和三種工作類型的支持,滿足不同的業務場景需求。
登錄類型
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);參數
| 參數名 | 類型 | 必填 | 說明 |
|---|---|---|---|
server | string | 是 | WebSocket 伺服器地址 (wss://...) |
agentId | string | 是 | 座席 ID |
agentName | string | 是 | 座席姓名 |
agentTeam | string | 是 | 座席所屬團隊 |
janus | object | 是 | Janus Gateway 配置 |
janus.server | string | 是 | Janus 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);參數
| 參數名 | 類型 | 必填 | 說明 |
|---|---|---|---|
password | string | 是 | 座席密碼 (明文傳輸,由 SDK 在本地進行 SHA256 加密) |
loginType | number | 否 | 登錄類型 (1:座席, 2:監督者, 3:管理員),預設為 1 |
workType | number | 否 | 工作類型 (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);參數
| 參數名 | 類型 | 必填 | 說明 |
|---|---|---|---|
reason | string | 否 | 非就緒原因 (例如"午休"、"會議") |
回傳值
返回 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);參數
| 參數名 | 類型 | 必填 | 說明 |
|---|---|---|---|
eventName | string | 是 | 事件名稱 |
callback | function | 否 | 回調函數;若省略則移除該事件的所有監聽 |
範例
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_ERROR | WebSocket 錯誤 | 檢查瀏覽器控制台錯誤信息 |
| TIMEOUT | 請求超時 | 檢查網絡延遲 |
注意事項
- 密碼安全:密碼應由使用者手動輸入,不要硬編碼在代碼中
- 登錄限制:同一座席同時只能有一個活躍連接;新的登錄會斷開舊連接
- 狀態檢查:在執行操作前應檢查座席當前狀態是否允許
- 錯誤處理:所有 async 操作都應使用 try-catch 或 .catch() 進行錯誤處理
- 資源清理:頁面卸載前應呼叫 logout() 釋放資源