RingCentral API获取指定分机上周通话日志报错求助
解决RingCentral API获取分机通话日志的「TypeError: extensions is not iterable」问题
错误原因
这个错误是因为你尝试遍历的extensions变量并非可迭代对象(比如数组)。RingCentral通话日志API的返回结构中,通话记录存储在records字段下,而非extensions,你大概率是误将某个非数组字段当成了可迭代对象进行遍历。
正确示例代码
首先确保安装RingCentral SDK:
npm install @ringcentral/sdk
以下是完整的Node.js代码,用于获取指定分机过去一周的通话日志并输出到控制台:
const RC = require('@ringcentral/sdk').SDK; // 配置账号信息,替换为你的实际值 const rcsdk = new RC({ server: 'https://platform.ringcentral.com', // 沙箱环境用 https://platform.devtest.ringcentral.com clientId: 'YOUR_CLIENT_ID', clientSecret: 'YOUR_CLIENT_SECRET' }); const platform = rcsdk.platform(); // 账号认证 async function authenticate() { try { await platform.login({ username: 'YOUR_PHONE_NUMBER', // 带国家码的完整号码,比如 +18001234567 extension: 'YOUR_EXTENSION_NUMBER', // 分机号,主分机可填"101"或留空 password: 'YOUR_PASSWORD' }); console.log('认证成功'); await fetchCallLogs(); } catch (err) { console.error('认证失败:', err.message); } } // 获取过去一周的通话日志 async function fetchCallLogs() { try { // 计算时间范围:过去一周 const endDate = new Date(); const startDate = new Date(endDate.getTime() - 7 * 24 * 60 * 60 * 1000); // 转换为API要求的ISO 8601格式 const dateFrom = startDate.toISOString(); const dateTo = endDate.toISOString(); // 调用通话日志接口 const res = await platform.get('/restapi/v1.0/account/~/extension/~/call-log', { dateFrom, dateTo, view: 'Detailed' // 获取完整通话信息,可选 }); const data = await res.json(); // 处理返回的通话记录数组 if (data.records && Array.isArray(data.records)) { console.log(`共找到 ${data.records.length} 条通话记录:\n`); data.records.forEach((log, idx) => { console.log(`=== 记录 ${idx + 1} ===`); console.log(`方向: ${log.direction}`); console.log(`对方号码: ${log.to?.phoneNumber || '未知'}`); console.log(`开始时间: ${new Date(log.startTime).toLocaleString()}`); console.log(`时长: ${log.duration} 秒`); console.log(`状态: ${log.status.name}\n`); }); } else { console.log('未找到通话记录或返回格式异常'); } } catch (err) { console.error('获取通话日志失败:', err.message); // 如需排查,可打印完整错误信息 // console.error(err); } finally { await platform.logout(); } } // 启动流程 authenticate();
关键注意事项
- 替换所有大写占位符为你的实际账号/应用信息
- 时间参数
dateFrom和dateTo必须是ISO 8601格式,代码中已自动处理 - 通话记录在返回结果的
records数组中,不要错误遍历extensions字段 - 确保你的RingCentral应用已在开发者后台开启「Call Log」权限
- 分机号需正确,若为主分机可填
101或留空
排查技巧
如果仍有问题,可在const data = await res.json();后添加console.log(data);,打印完整API返回结果,确认数据结构是否符合预期,再调整处理逻辑。
内容的提问来源于stack exchange,提问作者NewSoftwareguy
相关产品推荐
相关产品推荐

