Postman可获取Zoom Call Logs API数据,PowerBI导入遇认证问题求参数配置
解决PowerBI导入Zoom Phone通话日志API的认证问题
你遇到的错误是因为PowerBI默认的API Key配置逻辑不匹配Zoom的JWT认证机制,直接用Web导入的默认选项会导致参数格式错误。下面是两种可行的配置方法,已有不少用户成功通过这些方式导入数据:
方法一:使用Web数据源的高级请求头配置
- 在PowerBI中点击「获取数据」→「Web」
- 输入API地址:
https://api.zoom.us/v2/phone/call_logs - 点击「高级」展开选项,在「HTTP请求头」中添加:
- 名称:
Authorization - 值:
Bearer abc(替换abc为你的实际JWT Token,注意Bearer后必须加空格)
- 名称:
- 点击「确定」,按提示完成数据加载即可
方法二:用Power Query编辑器自定义请求(支持分页)
如果需要获取全量数据(Zoom API默认单次返回30条),可以用Power Query的递归函数处理分页:
- 点击「获取数据」→「空白查询」,进入Power Query编辑器
- 打开「高级编辑器」,替换默认代码为以下内容:
let // 定义递归函数获取所有分页数据 GetCallLogs = (optional pageToken as text) => let // 拼接带分页参数的URL url = if pageToken = null then "https://api.zoom.us/v2/phone/call_logs" else "https://api.zoom.us/v2/phone/call_logs?page_token=" & pageToken, // 发送带JWT认证的请求 response = Json.Document(Web.Contents(url, [Headers=[Authorization="Bearer abc"]])), // 提取通话日志列表 logs = response[call_logs], // 获取下一页token(如果存在) nextToken = try response[next_page_token] otherwise null, // 递归调用直到没有下一页 result = if nextToken <> null then logs & GetCallLogs(nextToken) else logs in result, // 调用函数获取全部日志 AllLogs = GetCallLogs(null), // 转换为表格并展开字段(可根据需求调整展开的字段) #"转换为表" = Table.FromList(AllLogs, Splitter.SplitByNothing(), null, null, ExtraValues.Error), #"展开列1" = Table.ExpandRecordColumn(#"转换为表", "Column1", {"id", "call_type", "start_time", "end_time", "duration", "from", "to"}, {"id", "call_type", "start_time", "end_time", "duration", "from", "to"}) in #"展开列1"
- 将代码中的
abc替换为你的JWT Token,点击「完成」即可加载全量数据
关键注意事项
- 不要使用API Key/Secret直接填PowerBI的API Key字段:Zoom Phone API采用JWT认证,必须通过
Authorization请求头传递Bearer Token,而非普通的API Key参数 - JWT Token有效期为1小时,若需自动刷新,可在Power Query中添加生成JWT的逻辑(需处理Base64编码和HMAC-SHA256签名)
- Verification Token仅用于Webhook验证,和API调用无关,无需配置
- 确保你的Zoom应用已开通「Phone Call Logs」权限,且JWT Token未过期(可解码验证有效期)
内容的提问来源于stack exchange,提问作者Chris Hill
相关产品推荐
相关产品推荐

