JavaScript 節點
概述
JavaScript 節點(JS Node)允許在 IVR 流程中執行自定義 JavaScript 代碼,實現複雜的業務邏輯。通過此節點,開發者可以存取流程變數、進行複雜計算、調用自定義函數和操作 followData 對象。
功能說明
支援在 IVR 流程中直接編寫 JavaScript 函數,可訪問和修改流程變數、進行數據運算和邏輯控制。所有 JavaScript 代碼執行在沙盒環境中,確保安全性。
設定參數
| 參數 | 說明 |
|---|---|
| 節點名稱(Node Name) | JavaScript 節點的識別名稱 |
| JS 函數(JS Functions) | 輸入自定義的 JavaScript 代碼 |
操作步驟
- 拖拉「JavaScript 節點」到 IVR 編輯區
- 雙擊打開配置面板
- 輸入 節點名稱,如「數據處理」
- 在 JS 函數 編輯區輸入 JavaScript 代碼
- 代碼模板示例:javascript
function call(callInfo) { // 訪問流程變數 const array = [0, 1, 2, 3]; // 進行循環和運算 for (let i = array.length - 1; i > 0; i--) { const j = Math.floor(Math.random() * (i + 1)); [array[i], array[j]] = [array[j], array[i]]; } // 存儲結果到 followData for (let i = 0; i < array.length; i++) { var times = 'times' + '_' + i; callInfo.followData.put(times, array[i]); } } - 點擊 確認 保存配置
使用範例
洗牌演算法實現隨機分配:
javascript
function call(callInfo) {
// 初始化座席列表
const agents = [1001, 1002, 1003, 1004];
// 費舍爾-耶茨洗牌演算法
for (let i = agents.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[agents[i], agents[j]] = [agents[j], agents[i]];
}
// 將隨機排列的座席存儲到 followData
for (let i = 0; i < agents.length; i++) {
callInfo.followData.put('agent_' + i, agents[i]);
}
}根據客戶屬性計算優先級:
javascript
function call(callInfo) {
const customerType = callInfo.followData.get('customerType');
const transactionAmount = callInfo.followData.get('amount');
let priority = 5; // 默認優先級
if (customerType === 'VIP') {
priority = 1;
} else if (transactionAmount > 10000) {
priority = 2;
} else if (customerType === 'Regular') {
priority = 3;
}
callInfo.followData.put('priority', priority);
}注意事項
重要提醒
- JavaScript 代碼執行在安全沙盒中,僅支援標準 JavaScript API
- 避免無限迴圈或過於複雜的計算,以免影響 IVR 性能
- 代碼執行超時會導致流程中斷,應設定合理的時間限制
- 確保代碼中訪問的變數已在流程中定義
最佳實踐
- 使用有意義的函數名稱和註解提升代碼可讀性
- 在生產環境前充分測試複雜的 JavaScript 邏輯
- 使用 callInfo.followData 物件進行資料傳遞,確保資料在流程中可用
- 定期監控 JavaScript 節點的執行性能,優化低效代碼
- 避免在 JavaScript 中存儲大量資料,以防內存溢出
操作畫面參考
