You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 17:32:41