RingCentral API PHP SDK获取全账号分机在线状态失败求助
解决RingCentral API批量获取所有分机在线状态的问题
我来帮你排查下这个问题,看起来你遇到的核心问题是获取分机列表不完整以及批量查询在线状态的方式需要调整,具体解决步骤如下:
1. 修复分机列表获取逻辑,拿到所有30个用户
你的当前代码只请求了第一页且每页仅10条,更关键的是:只有账号管理员权限的账号才能获取全部分机信息,普通分机调用/account/~/extension只能返回自己的分机。
修改分机列表的获取代码,支持分页循环拉取所有记录:
require_once(__DIR__ . '/_bootstrap.php'); use RingCentral\SDK\SDK; // Create SDK instance $credentials = require(__DIR__ . '/_credentials.php'); $rcsdk = new SDK($credentials['clientId'], $credentials['clientSecret'], $credentials['server'], 'Demo', '1.0.0'); $platform = $rcsdk->platform(); // Authorize - 确保这里用的是账号管理员的用户名/密码 $platform->login($credentials['username'], $credentials['extension'], $credentials['password']); // 循环拉取所有分机 $allExtensions = []; $currentPage = 1; do { $response = $platform->get('/account/~/extension', [ 'perPage' => 100, // 最大支持每页100条,减少请求次数 'page' => $currentPage ])->json(); $allExtensions = array_merge($allExtensions, $response->records); $currentPage++; } while (isset($response->navigation->nextPage)); // 直到没有下一页为止 print 'Users loaded ' . count($allExtensions) . PHP_EOL;
2. 批量查询所有分机的在线状态
RingCentral的Presence API支持通过逗号分隔分机ID的方式批量查询,一次最多支持30个分机(刚好匹配你的需求)。修改在线状态查询代码:
// 提取所有分机ID $extensionIds = array_map(function($ext) { return $ext->id; }, $allExtensions); // 批量请求在线状态,可添加可选参数获取更详细信息 $presenceResponses = $platform->get('/account/~/extension/' . implode(',', $extensionIds) . '/presence', [ 'detailedTelephonyState' => true, // 可选,获取通话状态(如"通话中"、"空闲") 'sipData' => true // 可选,获取SIP相关数据 ])->multipart(); // 遍历输出每个分机的状态 foreach ($presenceResponses as $index => $presenceRes) { $presenceData = $presenceRes->json(); $extInfo = $allExtensions[$index]; print "{$extInfo->name} - 在线状态: {$presenceData->presenceStatus}, 通话状态: {$presenceData->telephonyState}" . PHP_EOL; }
3. 关键权限确认
除了你已经在管理端开启的设备在线状态权限,还要确保:
- 登录的账号是账号管理员(不是普通分机账号),这是获取全部分机信息的核心前提
- 你的RingCentral应用已经添加了
ReadPresence和ReadExtension权限(在开发者后台的应用权限设置中配置)
常见问题排查
- 如果还是只能获取自己的分机:检查登录凭据是否为账号管理员的用户名和密码,普通分机没有跨分机查询的权限
- 分机数量不足:确认分页循环逻辑是否正确,检查
$response->navigation->nextPage是否存在,确保拉取所有分页 - 批量请求报错:如果分机数量超过30,需要拆分批次请求,每批次最多30个分机ID
内容的提问来源于stack exchange,提问作者bones
相关产品推荐
相关产品推荐

