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

使用Curl拉取RingCentral通话日志数据的技术求助

解决RingCentral API认证问题及完整入门指引

首先,你遇到的“unsupported grant type”错误大概率是因为授权类型参数不正确或者请求格式不对,毕竟Server Only No UI类型的Sandbox应用有特定的认证方式,我先帮你搞定这个核心问题,再一步步给你后续的通话数据拉取、ELK导入和Kibana仪表板搭建的思路。

一、快速解决Token认证错误

你的“Server Only No UI”应用需要使用密码授权(Password Grant),而且必须用application/x-www-form-urlencoded格式传递参数,不能用JSON(很多新手容易踩这个坑)。以下是CentOS7下可用的Curl命令,替换掉占位符即可:

# 替换为你自己的Sandbox应用凭据和账号信息
CLIENT_ID="你的应用Client ID"
CLIENT_SECRET="你的应用Client Secret"
USERNAME="你的Sandbox手机号(带国家码,比如+18001234567)"
PASSWORD="你的Sandbox账号密码"
EXTENSION="101" # 主分机默认是101,子分机请修改

curl -X POST "https://platform.devtest.ringcentral.com/restapi/oauth/token" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=password" \
  -d "client_id=${CLIENT_ID}" \
  -d "client_secret=${CLIENT_SECRET}" \
  -d "username=${USERNAME}" \
  -d "password=${PASSWORD}" \
  -d "extension=${EXTENSION}"

执行后如果成功,会返回包含access_token、refresh_token的JSON响应,拿到access_token就可以继续调用API了。如果还是报错,检查这两点:

  • 确认应用权限:在Sandbox控制台的应用设置里,确保开启了Call Log > Read All权限
  • 检查参数格式:所有参数都要通过-d传递,不要用-H或者JSON体

二、拉取通话记录的示例脚本

拿到有效Token后,用下面的脚本拉取指定时间范围的通话记录,保存为JSON文件方便后续导入ELK:

ACCESS_TOKEN="上面拿到的access_token"
DATE_FROM="2024-01-01"
DATE_TO="2024-01-31"

# 拉取通话记录并保存到文件
curl -X GET "https://platform.devtest.ringcentral.com/restapi/v1.0/account/~/extension/~/call-log?dateFrom=${DATE_FROM}&dateTo=${DATE_TO}&type=Voice" \
  -H "Authorization: Bearer ${ACCESS_TOKEN}" \
  -o call_logs.json

参数说明:

  • dateFrom/dateTo:过滤指定日期范围的通话
  • type=Voice:只拉取语音通话,去掉则包含短信等其他类型
  • account/~/extension/~/:~代表当前账号和当前分机,如果你要拉取整个账号的通话记录,把extension/~/改成extension/*/

三、将通话记录导入ELK

这里提供两种常用的导入方式,你可以根据自己的ELK部署情况选择:

方式1:用Logstash批量导入

  1. 创建Logstash配置文件ringcentral_call_logs.conf:
input {
  file {
    path => "/path/to/your/call_logs.json" # 替换为你的JSON文件路径
    start_position => "beginning"
    codec => "json"
  }
}

filter {
  # 可选:对通话数据进行清洗,比如提取通话时长、运营商等字段
  mutate {
    add_field => { "[@metadata][index_prefix]" => "ringcentral-call-logs" }
  }
}

output {
  elasticsearch {
    hosts => ["http://your_elk_server:9200"] # 替换为你的ES地址
    index => "%{[@metadata][index_prefix]}-%{+YYYY.MM.dd}"
  }
  stdout { codec => rubydebug } # 控制台打印导入日志,可删除
}
  1. 启动Logstash导入:
/usr/share/logstash/bin/logstash -f ringcentral_call_logs.conf

方式2:用Curl直接POST到Elasticsearch

如果没有部署Logstash,可以用jq工具把通话记录转换成ES批量导入格式:

# 安装jq(CentOS7下)
sudo yum install -y jq

# 转换为ES Bulk格式
cat call_logs.json | jq -c '.records[] | {"index":{}}, .' > call_logs_bulk.json

# 导入到ES
curl -X POST "http://your_elk_server:9200/ringcentral-call-logs/_bulk" \
  -H "Content-Type: application/json" \
  --data-binary "@call_logs_bulk.json"

四、用Kibana搭建通话数据仪表板

  1. 创建索引模式:登录Kibana后,进入Stack Management > Index Patterns,创建匹配ringcentral-call-logs-*的索引模式,指定时间字段(比如startTime)
  2. 验证数据:进入Discover页面,选择刚创建的索引模式,确认通话数据已经成功导入
  3. 构建可视化:
    • 柱状图:统计每日通话数量,X轴选startTime(日粒度),Y轴选Count
    • 饼图:统计呼入/呼出占比,用direction字段分组
    • 表格:展示通话详情,选择from、to、duration、status等字段
  4. 组装仪表板:进入Dashboard页面,把创建好的可视化组件添加进去,调整布局后保存即可。

额外注意事项

  • Token有效期:access_token默认1小时过期,用refresh_token可以刷新获取新的Token,示例命令:
curl -X POST "https://platform.devtest.ringcentral.com/restapi/oauth/token" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=refresh_token" \
  -d "client_id=${CLIENT_ID}" \
  -d "client_secret=${CLIENT_SECRET}" \
  -d "refresh_token=你的refresh_token"
  • 生产环境切换:如果后续要迁移到生产环境,把API端点从platform.devtest.ringcentral.com改成platform.ringcentral.com即可

内容的提问来源于stack exchange,提问作者R Seals

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:55:46