@clawhub-thursda-54de83acb0
提及移动会议/云视讯、视频会议、会议API集成时,自动激活本技能, 也可使用手动加载本技能( use_skill mobile-meeting-api)。涵盖登录鉴权、会议管理(创建/编辑/取消/查询)、会议控制(会中操作)、网络研讨会管理等模块。
---
name: mobile-meeting-api
description: 提及移动会议/云视讯、视频会议、会议API集成时,自动激活本技能, 也可使用手动加载本技能( use_skill mobile-meeting-api)。涵盖登录鉴权、会议管理(创建/编辑/取消/查询)、会议控制(会中操作)、网络研讨会管理等模块。
homepage: https://www.125339.com.cn/developerCenter/ReBar/63/222
version: 1.0.0
tags: [API, 会议, 集成开发]
---
# 移动会议服务端API集成指导
## 概述
本skill基于`./references`文件夹中的接口文档,提供移动会议API集成的完整集成指导。
**API基本信息:**
- 协议:HTTPS/RESTful API
- 生产环境:`apigw.125339.com.cn`
- 鉴权方式:App ID鉴权(SDK用户及鉴权)+ 标准账号鉴权(高清、App账号及鉴权)
## 参考文档及执行脚本
- 完整API文档位于`./references`文件夹中。如需全量接口文档,可以从[云视讯/移动会议-开发者中心下载](https://www.125339.com.cn/developerCenter/ReBar/63/197),或联系云视讯/移动会议集成开发支撑团队获取
## 触发原则
- 会议管理场景:创建会议、修改会议、查询历史会议、查询会议详情
- 录像管理:查询录制列表、查询会议录制详情、查询录制详情
- 会议控制场景:获取会控token、查询会议实时信息、挂断与会者、删除与会者
- 会议事件推送:会议级事件推送、企业级会议事件推送、事件推送设置
## 不触发边界
不要在以下场景使用此技能:
- 用户进行聊天、打电话、PSTN通话、视频剪辑等
- 用户要查询日历日程但不涉及云视讯/移动会议
- 用户要预约线下会议室(非线上会议)
- 用户询问的是其他视频会议平台(如 Zoom、Teams、腾讯会议、飞书会议、钉钉)
## 使用原则
### 1. 严格基于文档回答
**重要:** 回答用户问题时,必须:
1. 先读取`./references`文件夹中文档中的相关章节
2. 严格按照文档中的参数定义、字段说明、枚举值回答
3. **不要参考其他信息源或通用知识**
4. 如果未找到相关接口说明,提示从[云视讯/移动会议-开发者中心下载](https://www.125339.com.cn/developerCenter/ReBar/63/197)下载,或联系云视讯/移动会议集成开发支撑团队获取
### 2. 模块快速索引
根据用户问题,定位到对应模块查阅:
| 用户问题类型 | 查阅文件 | 关键词 |
|:---|:---|:---|
| 如何登录/获取Token | app_auth.html, CreateAppIdToken.md | `appauth`、`getToken` |
| 创建会议 | CreateMeeting.md | `创建会议` |
| 取消会议 | CancelMeeting.md | `取消预约` |
| 编辑会议 | UpdateMeeting.md | `修改会议` |
| 开始会议 | StartMeeting.md | `开始会议` |
| 查询会议列表/详情 | SearchMeetings.md, ShowMeetingDetail.md, SearchHisMeetings.md, ShowHisMeetingDetail.md | `查询会议` |
| 会中操作(静音/邀请/挂断等) | InviteParticipant.md, ListOnlineConfAttendee.md, SearchCtlRecordsOfHisMeeting.md | `会控`、`invite` |
| 参会记录 | SearchAttendanceRecordsOfHisMeeting.md | `参会记录` |
| 录制相关 | SearchRecordings.md, ShowRecordingDetail.md, ShowRecordingFileDownloadUrls.md, DeleteRecordings.md | `录制`、`download` |
## 工作流程
### 回答API问题
```
1. 理解用户问题(哪个功能模块)
2. 读取文档对应章节或文件
3. 提取准确的接口信息:
- 请求方法(GET/POST/PUT/DELETE)
- URL路径
- 请求头要求(如Authorization签名)
- 请求参数(必填/可选、类型、说明)
- 响应字段
4. 按文档组织回答,不添加文档外内容
```
### 生成代码示例
如果用户需要代码示例:
```
1. 询问用户使用的编程语言(支持Python、JavaScript、Java等)
2. 读取文档中对应接口的完整参数定义
3. 生成代码,包含:
- 完整的请求构造
- 所有必填参数(按文档要求)
- 请求头设置(特别是Authorization签名)
- 错误处理
4. 添加注释说明参数来源(来自文档第X章或对应文件)
```
## 关键接口速查
### 登录鉴权
#### App ID鉴权 - 获取Token
```
POST /v2/usg/acs/auth/appauth
```
**关键参数:**
- `Authorization`: HMAC-SHA256签名 `appId:userId:expireTime:nonce`。签名可以使用`./scripts/app_auth.html`验证是否正确。
- `X-Token-Type`: 固定值 `LongTicket`
- `clientType`: 72(API调用类型)
**响应:**
- `accessToken`: 访问令牌(12-24小时有效)
- `refreshToken`: 刷新令牌(30天有效)
### 会议管理
- 创建会议: ` POST /v1/mmc/management/conferences `
- 查询会议列表: `GET /v1/mmc/management/conferences`
- 取消预约会议: `DELETE /v1/mmc/management/conferences`
- 查询会议详情: `GET /v1/mmc/management/conferences/confDetail`
- 查询录制文件下载链接: ` GET /v1/mmc/management/record/downloadurls`
### 会议控制
- 获取会控Token ` GET /v1/mmc/control/conferences/token `
- 邀请与会者 ` POST /v1/mmc/control/conferences/participants`
- 静音与会者 ` PUT /v1/mmc/control/conferences/participants/mute `
- 全场静音 ` PUT /v1/mmc/control/conferences/mute `
### 打开移动会议app
```
ysx://com.zhongtai.ysx/app/callup?num=375xxx389&random=mnaibtK0wChtuoV8gPZDcpV99n2nARqge
```
## 脚本工具
为方便用户快速测试API,本skill提供可执行Python脚本。脚本位于`./scripts/`文件夹,支持核心接口调用。
**使用前准备:**
1. 安装Python 3和requests库:`pip install requests`
2. 获取APP_ID、APP_KEY、USER_ID(从开发者中心获取)
3. 运行脚本时按提示输入参数
**可用脚本:**
- [获取Token](./scripts/get_token.py):获取API访问令牌
- [创建会议](./scripts/create_meeting.py):创建新会议
- [查询会议](./scripts/search_meetings.py):查询会议列表
- [取消会议](./scripts/cancel_meeting.py):取消预约会议
**签名调试工具:**
- [app_auth.html](./scripts/app_auth.html):浏览器端交互式 HMAC-SHA256 签名生成器,**无需任何服务器或依赖**,直接用浏览器打开即可使用。输入 App ID、App Key、User ID,自动生成 Authorization 签名,适合在对接初期排查鉴权问题。
**注意:** 脚本仅用于测试,请勿在生产环境直接使用。确保网络安全,避免泄露密钥。
## 注意事项
1. **Token有效期**:accessToken 12-24小时,refreshToken 30天
2. **clientType固定值**:API调用时固定为72
3. **Authorization签名**:必须使用HMAC-SHA256,格式严格按文档。可以通过返回错误码或使用`./scripts/app_auth.html`,确定签名是否正确。
4. **错误处理**:参考错误码处理异常情况
## 常见问题
- **如何处理鉴权失败?**:检查App ID和Token是否正确,参考app_auth.html和CreateAppIdToken.md。
- **会议创建失败的原因?**:确认必填参数,如会议主题、开始时间等,参考CreateMeeting.md。
- **如何获取录制文件?**:使用ShowRecordingFileDownloadUrls.md中的接口获取下载链接。
- **事件推送如何配置?**:参考接口文档中的推送章节,设置Webhook或WebSocket。
最后更新日期:2026年4月27日
FILE:README.md
# Mobile Meeting API Integration Skill
移动会议/云视讯API集成技能,为开发者提供完整的会议管理API集成指导和工具。
## 功能特性
- **会议管理**:创建、查询、更新、取消会议
- **录制管理**:查询录制文件和下载链接
- **会议控制**:会中操作,如邀请、静音、挂断
- **用户管理**:企业通讯录查询
- **可执行脚本**:提供Python脚本快速测试API
## 快速开始
### 1. 获取API凭证
从[云视讯/移动会议开发者中心](https://www.125339.com.cn/developerCenter/ReBar/63/222)获取:
- APP_ID
- APP_KEY
- USER_ID
### 2. 运行脚本示例
```bash
# 获取Token
python scripts/get_token.py
# 创建会议
python scripts/create_meeting.py
# 查询会议
python scripts/search_meetings.py
```
### 3. 使用技能
在支持的环境中,提及“移动会议”、“云视讯”或“会议API”即可激活技能。或者使用user_skill指令手动激活技能mobile-meeting-api
## API文档
完整API文档位于`references/`文件夹,或访问[开发者中心](https://www.125339.com.cn/developerCenter/ReBar/63/197)。
## 项目结构
```
mobile-meeting/
├── SKILL.md # 技能主文档
├── README.md # 项目说明
├── requirements.txt # Python依赖
├── examples/ # 代码示例
│ ├── python_example.py
│ └── javascript_example.js
├── scripts/ # 可执行脚本
│ ├── get_token.py
│ ├── create_meeting.py
│ ├── search_meetings.py
│ └── cancel_meeting.py
└── references/ # API文档
├── CreateMeeting.md
├── SearchMeetings.md
└── ...
```
## 贡献
欢迎提交Issue和Pull Request!
## 许可证
MIT License
FILE:scripts/get_token.py
#!/usr/bin/env python3
"""
获取Access Token脚本
基于references/app_auth.html和CreateAppIdToken.md
用途:获取API访问令牌,用于后续API调用。
"""
import requests
import hmac
import hashlib
import base64
import time
import uuid
import sys
# 用户配置(请修改为实际值)
BASE_URL = "https://apigw.125339.com.cn"
APP_ID = input("请输入APP_ID: ").strip()
APP_KEY = input("请输入APP_KEY: ").strip()
USER_ID = input("请输入USER_ID(可留空): ").strip()
def generate_auth_header(app_id, app_key, user_id, expire_time, nonce):
"""生成Authorization头(HMAC-SHA256签名)"""
# 文档示例中签名字符串始终为 appId:userId:expireTime:nonce
sign_content = f"{app_id}:{user_id}:{expire_time}:{nonce}"
signature = hmac.new(
app_key.encode('utf-8'),
sign_content.encode('utf-8'),
hashlib.sha256
).hexdigest()
access = base64.b64encode(app_id.encode('utf-8')).decode('utf-8')
return {
"Authorization": f"HMAC-SHA256 signature={signature},access={access}",
"X-Token-Type": "LongTicket",
"Content-Type": "application/json; charset=UTF-8",
"Accept-Language": "zh-CN",
"X-Request-ID": str(uuid.uuid4())
}
def get_token():
"""获取Access Token"""
url = f"{BASE_URL}/v2/usg/acs/auth/appauth"
expire_time = int(time.time()) + 3600
nonce = str(uuid.uuid4()).replace('-', '')[:40]
headers = generate_auth_header(APP_ID, APP_KEY, USER_ID, expire_time, nonce)
payload = {
"appId": APP_ID,
"clientType": 72,
"expireTime": expire_time,
"nonce": nonce,
"userId": USER_ID
}
try:
response = requests.post(url, json=payload, headers=headers)
response.raise_for_status()
data = response.json()
print("Token获取成功:")
print(f"Access Token: {data.get('accessToken')}")
print(f"Refresh Token: {data.get('refreshToken')}")
return data
except requests.exceptions.RequestException as e:
print(f"请求失败: {e}")
sys.exit(1)
if __name__ == "__main__":
get_token()
FILE:scripts/requirements.txt
requests>=2.28.0
FILE:scripts/cancel_meeting.py
#!/usr/bin/env python3
"""
取消会议脚本
基于references/CancelMeeting.md
用途:取消已预约的会议。
"""
import requests
import sys
# 用户配置
BASE_URL = "https://apigw.125339.com.cn"
ACCESS_TOKEN = input("请输入Access Token (从get_token.py获取): ").strip()
def cancel_meeting(conference_id, force_end=False):
"""取消会议"""
url = f"{BASE_URL}/v1/mmc/management/conferences"
headers = {
"X-Access-Token": ACCESS_TOKEN
}
params = {
"conferenceID": conference_id
}
if force_end:
params["type"] = 1 # 结束正在召开的会议
try:
response = requests.delete(url, headers=headers, params=params)
response.raise_for_status()
print("会议取消成功")
return True
except requests.exceptions.HTTPError as e:
status_code = e.response.status_code if e.response is not None else None
if status_code == 403:
print("请求失败: 403 Forbidden。可能原因:当前Token没有权限取消该会议,或您不是会议创建者/企业管理员,或会议已开始且未使用 type=1 强制结束。")
elif status_code == 401:
print("请求失败: 401 Unauthorized。请检查Access Token是否有效或是否已过期。")
else:
print(f"请求失败: {e}")
if e.response is not None:
print(f"响应内容: {e.response.text}")
sys.exit(1)
except requests.exceptions.RequestException as e:
print(f"请求失败: {e}")
sys.exit(1)
if __name__ == "__main__":
conference_id = input("请输入会议ID: ").strip()
force_end = input("是否强制结束正在召开的会议? (y/n, 默认n): ").strip().lower() == 'y'
cancel_meeting(conference_id, force_end)
FILE:scripts/search_meetings.py
#!/usr/bin/env python3
"""
查询会议列表脚本
基于references/SearchMeetings.md
用途:查询尚未结束的会议列表。
"""
import requests
import sys
# 用户配置
BASE_URL = "https://apigw.125339.com.cn"
ACCESS_TOKEN = input("请输入Access Token (从get_token.py获取): ").strip()
def search_meetings(limit=20, search_key=""):
"""查询会议列表"""
url = f"{BASE_URL}/v1/mmc/management/conferences"
headers = {
"X-Access-Token": ACCESS_TOKEN
}
params = {
"limit": limit
}
if search_key:
params["searchKey"] = search_key
try:
response = requests.get(url, headers=headers, params=params)
response.raise_for_status()
data = response.json()
print("会议查询成功:")
conferences = []
if isinstance(data, dict) and "conferences" in data:
conferences = data.get("conferences", [])
elif isinstance(data, list):
conferences = data
else:
print("未识别的返回结构:")
print(data)
return data
if not conferences:
print("没有查询到会议列表。请确认Access Token及查询条件是否正确。")
print("返回数据:")
print(data)
return data
for conf in conferences:
conference_id = conf.get("conferenceID") or conf.get("conferenceId")
print(f"- ID: {conference_id}, 主题: {conf.get('subject')}, 开始时间: {conf.get('startTime')}")
return data
except requests.exceptions.RequestException as e:
print(f"请求失败: {e}")
sys.exit(1)
if __name__ == "__main__":
limit = int(input("请输入查询数量 (默认20): ") or 20)
search_key = input("请输入搜索关键词 (可留空): ").strip()
search_meetings(limit, search_key)
FILE:scripts/create_meeting.py
#!/usr/bin/env python3
"""
创建会议脚本
基于references/CreateMeeting.md
用途:创建新的会议。
"""
import requests
import sys
# 用户配置
BASE_URL = "https://apigw.125339.com.cn"
ACCESS_TOKEN = input("请输入Access Token (从get_token.py获取): ").strip()
def create_meeting(subject, start_time="", length=30, media_types="HDVideo"):
"""创建会议"""
url = f"{BASE_URL}/v1/mmc/management/conferences"
headers = {
"X-Access-Token": ACCESS_TOKEN,
"Content-Type": "application/json"
}
payload = {
"subject": subject,
"mediaTypes": media_types,
"length": length
}
if start_time:
payload["startTime"] = start_time
try:
response = requests.post(url, json=payload, headers=headers)
response.raise_for_status()
data = response.json()
print("会议创建成功:")
if isinstance(data, dict):
conference_id = data.get('conferenceID') or data.get('conferenceId')
print(f"会议ID: {conference_id}")
print(f"会议主题: {data.get('subject')}")
elif isinstance(data, list) and data:
first = data[0]
if isinstance(first, dict):
conference_id = first.get('conferenceID') or first.get('conferenceId')
print(f"会议ID: {conference_id}")
print(f"会议主题: {first.get('subject')}")
else:
print(f"返回数据: {data}")
else:
print(f"返回数据: {data}")
return data
except requests.exceptions.RequestException as e:
print(f"请求失败: {e}")
sys.exit(1)
if __name__ == "__main__":
subject = input("请输入会议主题: ").strip()
start_time = input("请输入开始时间 (UTC, yyyy-MM-dd HH:mm, 可留空): ").strip()
length = int(input("请输入持续时长(分钟, 默认30): ") or 30)
media_types = input("请输入媒体类型 (HDVideo或Voice, 默认HDVideo): ").strip() or "HDVideo"
create_meeting(subject, start_time, length, media_types)
FILE:scripts/app_auth.html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>App ID鉴权 - Signature生成</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.2.0/crypto-js.min.js"></script>
<style>
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
max-width: 1200px;
margin: 0 auto;
padding: 20px;
background-color: #f5f5f5;
}
h1 {
color: #333;
text-align: center;
margin-bottom: 30px;
font-size: 24px;
}
.main-container {
display: flex;
gap: 20px;
min-height: 500px;
}
.left-panel, .right-panel {
flex: 1;
background: white;
padding: 30px;
border-radius: 8px;
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
}
.section-title {
font-size: 18px;
font-weight: 600;
color: #333;
margin-bottom: 25px;
padding-bottom: 10px;
border-bottom: 2px solid #4CAF50;
}
.form-group {
margin-bottom: 20px;
}
label {
display: block;
margin-bottom: 8px;
font-weight: 600;
color: #555;
}
.required::after {
content: " *";
color: #e74c3c;
}
input[type="text"],
input[type="number"] {
width: 100%;
padding: 10px 12px;
border: 1px solid #ddd;
border-radius: 4px;
font-size: 14px;
transition: border-color 0.3s;
}
input:focus {
outline: none;
border-color: #4CAF50;
}
.field-hint {
display: block;
margin-top: 5px;
font-size: 12px;
color: #888;
}
.computed-value {
display: block;
margin-top: 8px;
padding: 8px 12px;
background: #e8f5e9;
border-radius: 4px;
font-size: 13px;
color: #2e7d32;
font-family: monospace;
word-break: break-all;
}
.btn-primary {
display: block;
width: 100%;
padding: 12px 24px;
margin-top: 30px;
border: none;
border-radius: 4px;
font-size: 16px;
cursor: pointer;
background-color: #4CAF50;
color: white;
transition: background-color 0.3s;
}
.btn-primary:hover {
background-color: #45a049;
}
.right-panel {
display: flex;
flex-direction: column;
}
.result-content {
flex: 1;
}
.result-item {
margin-bottom: 20px;
padding: 15px;
background: #f8f9fa;
border-radius: 6px;
border-left: 4px solid #2196F3;
}
.result-label {
font-weight: 600;
color: #1976d2;
font-size: 13px;
margin-bottom: 8px;
display: block;
}
.result-value {
font-family: monospace;
font-size: 13px;
color: #333;
word-break: break-all;
line-height: 1.5;
}
.authorization-box {
margin-top: 25px;
padding: 20px;
background: #e3f2fd;
border-radius: 6px;
border: 2px solid #2196F3;
}
.authorization-label {
font-weight: 600;
color: #1976d2;
font-size: 14px;
margin-bottom: 10px;
display: block;
}
.authorization-value {
font-family: monospace;
font-size: 12px;
color: #333;
word-break: break-all;
line-height: 1.6;
background: white;
padding: 12px;
border-radius: 4px;
border: 1px solid #bbdefb;
}
.copy-btn {
margin-top: 10px;
padding: 8px 20px;
font-size: 13px;
background: #2196F3;
color: white;
border: none;
border-radius: 4px;
cursor: pointer;
transition: background 0.3s;
}
.copy-btn:hover {
background: #1976D2;
}
.copy-btn.copied {
background: #4CAF50;
}
.empty-state {
flex: 1;
display: flex;
align-items: center;
justify-content: center;
color: #999;
font-size: 14px;
text-align: center;
}
.error {
color: #e74c3c;
font-size: 13px;
margin-top: 10px;
padding: 10px;
background: #ffebee;
border-radius: 4px;
display: none;
}
.error.show {
display: block;
}
@media (max-width: 900px) {
.main-container {
flex-direction: column;
}
}
</style>
</head>
<body>
<h1>App ID 鉴权 - Signature 生成</h1>
<div class="main-container">
<!-- 左侧面板:表单 -->
<div class="left-panel">
<div class="section-title">签名参数</div>
<div class="form-group">
<label for="appId" class="required">App ID</label>
<input type="text" id="appId" placeholder="请输入App ID">
<span class="field-hint">应用ID,用于计算signature和access</span>
</div>
<div class="form-group">
<label for="appKey" class="required">App Key</label>
<input type="text" id="appKey" placeholder="请输入App Key">
<span class="field-hint">应用密钥,用于计算HMAC-SHA256签名</span>
</div>
<div class="form-group">
<label for="userId">User ID</label>
<input type="text" id="userId" placeholder="请输入User ID" value="user1">
<span class="field-hint">第三方用户ID,默认值为 user1</span>
</div>
<div class="form-group">
<label for="expireMinutes" class="required">有效时长</label>
<input type="number" id="expireMinutes" placeholder="分钟数" value="10" min="1">
<span class="computed-value" id="expireTimeDisplay">ExpireTime: 计算中...</span>
<span class="field-hint">输入分钟数,系统自动计算Unix时间戳</span>
</div>
<div class="form-group">
<label for="nonce">Nonce</label>
<input type="text" id="nonce" placeholder="留空自动生成32位UUID">
<span class="field-hint">随机字符串(32-64位),留空时自动生成32位UUID</span>
</div>
<div id="errorMsg" class="error"></div>
<button type="button" class="btn-primary" onclick="generateSignature()">计算 Signature</button>
</div>
<!-- 右侧面板:计算结果 -->
<div class="right-panel">
<div class="section-title">计算结果</div>
<div class="result-content" id="emptyState">
<div class="empty-state">
点击左侧"计算 Signature"按钮<br>查看计算结果
</div>
</div>
<div class="result-content" id="resultState" style="display: none;">
<div class="result-item">
<span class="result-label">Nonce 实际值</span>
<span class="result-value" id="resultNonce"></span>
</div>
<div class="result-item">
<span class="result-label">ExpireTime 实际值</span>
<span class="result-value" id="resultExpireTime"></span>
</div>
<div class="result-item">
<span class="result-label">签名字符串</span>
<span class="result-value" id="resultSignString"></span>
</div>
<div class="authorization-box">
<span class="authorization-label">Authorization Header</span>
<div class="authorization-value" id="resultAuthorization"></div>
<button class="copy-btn" onclick="copyAuthorization()">复制</button>
</div>
</div>
</div>
</div>
<script>
// 生成32位UUID
function generateUUID() {
return 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
var r = Math.random() * 16 | 0,
v = c == 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
}
// 计算并显示ExpireTime
function updateExpireTime() {
const minutes = parseInt(document.getElementById('expireMinutes').value) || 10;
const now = Math.floor(Date.now() / 1000);
const expireTime = now + minutes * 60;
document.getElementById('expireTimeDisplay').textContent = `ExpireTime: expireTime (minutes分钟后)`;
return expireTime;
}
// 监听分钟数变化
document.getElementById('expireMinutes').addEventListener('input', updateExpireTime);
// 页面加载时初始化
window.onload = function() {
document.getElementById('nonce').value = generateUUID();
updateExpireTime();
};
// 生成Signature
function generateSignature() {
const errorMsg = document.getElementById('errorMsg');
errorMsg.textContent = '';
errorMsg.classList.remove('show');
const appId = document.getElementById('appId').value.trim();
const appKey = document.getElementById('appKey').value.trim();
const userId = document.getElementById('userId').value.trim();
const minutes = parseInt(document.getElementById('expireMinutes').value);
let nonce = document.getElementById('nonce').value.trim();
// 验证必填参数
if (!appId) {
errorMsg.textContent = '请填写 App ID';
errorMsg.classList.add('show');
return;
}
if (!appKey) {
errorMsg.textContent = '请填写 App Key';
errorMsg.classList.add('show');
return;
}
if (!minutes || minutes < 1) {
errorMsg.textContent = '请填写有效的分钟数(至少1分钟)';
errorMsg.classList.add('show');
return;
}
// 如果nonce为空,自动生成
if (!nonce) {
nonce = generateUUID();
document.getElementById('nonce').value = nonce;
}
// 验证nonce长度
if (nonce.length < 32 || nonce.length > 64) {
errorMsg.textContent = 'Nonce 长度必须在 32-64 位之间';
errorMsg.classList.add('show');
return;
}
try {
// 计算expireTime
const now = Math.floor(Date.now() / 1000);
const expireTime = now + minutes * 60;
// 构建签名字符串
const signString = appId + ":" + userId + ":" + expireTime + ":" + nonce;
// 计算 HMAC-SHA256
const hmac = CryptoJS.HmacSHA256(signString, appKey);
// Hex编码
const signature = hmac.toString(CryptoJS.enc.Hex);
// Base64编码 appId
const access = CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(appId));
// 构建 Authorization 头
const authorization = `HMAC-SHA256 signature=signature,access=access`;
// 显示结果
document.getElementById('resultNonce').textContent = nonce;
document.getElementById('resultExpireTime').textContent = expireTime + ` (minutes分钟后过期)`;
document.getElementById('resultSignString').textContent = signString;
document.getElementById('resultAuthorization').textContent = authorization;
// 切换显示
document.getElementById('emptyState').style.display = 'none';
document.getElementById('resultState').style.display = 'block';
// 更新显示的ExpireTime
updateExpireTime();
} catch (error) {
errorMsg.textContent = '计算 Signature 失败: ' + error.message;
errorMsg.classList.add('show');
}
}
// 复制Authorization到剪贴板
function copyAuthorization() {
const authText = document.getElementById('resultAuthorization').textContent;
navigator.clipboard.writeText(authText).then(function() {
const btn = document.querySelector('.copy-btn');
btn.textContent = '已复制';
btn.classList.add('copied');
setTimeout(() => {
btn.textContent = '复制';
btn.classList.remove('copied');
}, 2000);
}).catch(function(err) {
alert('复制失败: ' + err);
});
}
</script>
</body>
</html>
FILE:references/StartMeeting.md
# 激活会议 - StartMeeting<a name="ZH-CN_TOPIC_0000001220016280"></a>
## 描述<a name="section698218449183"></a>
该接口用于通过会议ID和会议密码激活会议。所有的会控接口都需要在会议激活后才能调用,可以通过该接口先激活会议。
> **说明:**
>来宾密码是否可以激活会议取决于会议创建时是否设置了“是否允许来宾启动会议”(allowGuestStartConf=true)。
## URI<a name="section379619558285"></a>
POST /v1/mmc/management/conferences/start
## 请求参数<a name="section1997124142020"></a>
**表 1** 参数说明
<a name="table1285113481520"></a>
| 参数 | 是否必须 | 类型 | 位置 | 描述 |
|---|---|---|---|---|
| X-Access-Token | 是 | String | Header | 授权令牌。获取“ 执行App ID鉴权 ”响应的accessToken。 |
| conferenceID | 是 | String | Body | 会议ID。 |
| password | 是 | String | Body | 会议密码。 |
## 状态码<a name="section109461801032"></a>
**表 2** 状态码说明
<a name="table102780442391"></a>
| HTTP状态码 | 描述 |
|---|---|
| 200 | 操作成功。 |
| 400 | 参数异常。 |
| 401 | 未鉴权或鉴权失败。 |
| 403 | 权限受限。 |
| 500 | 服务端异常。 |
## 响应参数<a name="section498722842014"></a>
**表 3** 响应参数
<a name="table187113520490"></a>
| 参数 | 类型 | 描述 |
|---|---|---|
| uuid | String | uuid。 说明: 废弃参数,请勿使用。 |
| regionIP | String | 会议所在区域的公网IP地址。 |
## 请求消息示例<a name="section11143759102417"></a>
```
POST /v1/mmc/management/conferences/start HTTP/1.1
Connection: keep-alive
X-Access-Token: *******
user-agent: WeLink-desktop
Host: apigw.125339.com.cn
User-Agent: Apache-HttpClient/4.5.3 (Java/1.8.0_191)
{
"conferenceID": "986030665",
"password": "******"
}
```
## 响应消息示例<a name="section339419481201"></a>
```
HTTP/1.1 200 OK
Content-Length: 141
Cache-Control: no-store
Connection: keep-alive
Content-Type: application/json
Date: Thu, 24 Dec 2020 06:25:59 GMT
Server: api-gateway
X-APIG-Latency: 261
X-APIG-Ratelimit-Api: remain:99,limit:100,time:1 minute
X-APIG-Ratelimit-Api-Allenv: remain:199,limit:200,time:1 second
X-APIG-Upstream-Latency: 259
X-Envoy-Upstream-Service-Time: 210
X-Request-Id: f991eeec77df1692c74f253d765ca146
{
"uuid": "stb7fe307f8971e44acc5cf8be2112575ff8387ff6ddea68a5e",
"regionIP": "100.94.23.40"
}
```
## 错误码<a name="section1358132410353"></a>
如果遇到"MMC"或者"USG"开头的错误码,请参考接口文档中错误码表
## CURL命令示例<a name="section2790610197"></a>
```
curl -k -i -H 'content-type: application/json' -X POST -H 'X-Access-Token:stbX5ElstO5QwOwPB9KGQWUZ1DHoFrTsQjjC' -d '{"conferenceID": "986030665","password": "******"}' 'https://apigw.125339.com.cn/v1/mmc/management/conferences/start'
```
FILE:references/CreateAuthRandom.md
# 获取会议鉴权随机数 - CreateAuthRandom<a name="ZH-CN_TOPIC_0000002003833272"></a>
## 描述<a name="section1320411065418"></a>
该接口用于获取会议鉴权随机数。根据会议ID + 密码鉴权返回鉴权随机数,如果是小程序调用时,需要企业支持小程序功能。
## URI<a name="section379619558285"></a>
GET /v2/mms/ncms/conferences/auth/random
## 请求参数<a name="section220581045418"></a>
**表 1** 参数说明
<a name="table120571013547"></a>
| 参数 | 是否必须 | 类型 | 位置 | 描述 |
|---|---|---|---|---|
| conf_id | 是 | String | Query | 会议ID。 |
| guest_waiting | 否 | Interger | Query | 0-不支持来宾会前等待页能力(默认)、1-支持来宾会前等待页能力 |
| X-Password | 是 | String | Header | 会议密码。 |
## 状态码<a name="section149720335114"></a>
**表 2** 状态码说明
<a name="table102780442391"></a>
| HTTP状态码 | 描述 |
|---|---|
| 200 | 操作成功。 |
| 400 | 参数异常。 |
| 401 | 未鉴权或鉴权失败。 |
| 403 | 权限受限。 |
| 500 | 服务端异常。 |
## 响应参数<a name="section920651085413"></a>
**表 3** 响应参数
<a name="table1420618109547"></a>
| 参数 | 类型 | 描述 |
|---|---|---|
| random | String | 鉴权随机数 |
| subject | String | 会议主题 |
| conf_mode | String | 会议类型模型: COMMON:MCU会议 RTC:MMR会议 |
| webinar | Boolean | 是否为网络研讨会 |
| need_password | Boolean | 是否需要密码 |
| support_applets | Boolean | 是否支持小程序 |
## 请求消息示例<a name="section32075107547"></a>
```
GET /v2/mms/ncms/conferences/auth/random?conf_id=914047175
Connection: keep-alive
X-Access-Token: *******
X-Password: *******
user-agent: WeLink-desktop
Host: apigw.125339.com.cn
User-Agent: Apache-HttpClient/4.5.3 (Java/1.8.0_191)
```
## 响应消息示例<a name="section19208410165412"></a>
```
HTTP/1.1 200 OK
X-Request-Id: 01ab6499-db00-4029-9600-82046297767c
Pragma: no-cache
Cache-Control: no-cache
Expires: Thu, 01 Jan 1970 00:00:00 GMT
X-Xss-Protection: 1; mode=block
X-Download-Options: noopen
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-Frame-Options: SAMEORIGIN
Content-Security-Policy: connect-src 'self' *.125339.com ;style-src 'self' 'unsafe-inline' 'unsafe-eval';object-src 'self'; font-src 'self' data:;
Vary: Origin,Access-Control-Request-Method,Access-Control-Request-Headers
Etag: "03eb377e7dedca62136c5db551858b5f6"
Content-Type: application/json;charset=UTF-8
Content-Length: 134
Date: Thu, 29 Aug 2024 09:24:48 GMT
X-Envoy-Upstream-Service-Time: 34
Server: istio-envoy
Requestid: 01ab6499-db00-4029-9600-82046297767c
{
"random": "397381479198454",
"subject": "zhang的会议",
"conf_mode": "RTC",
"webinar": false,
"need_password": false,
"support_applets": true
}
```
## 错误码<a name="section1208110135417"></a>
如果遇到"MMC"或者"USG"开头的错误码,请参考接口文档中错误码表
## CURL命令示例<a name="section3208810175415"></a>
```
curl -k -i -X GET -H "X-Password:******" -H "X-Access-Token:******" https://apigw.125339.com.cn/v2/mms/ncms/conferences/auth/random?conf_id=914047175
```
FILE:references/CreateMeeting.md
# 创建会议 - CreateMeeting<a name="ZH-CN_TOPIC_0212714557"></a>
## 描述<a name="section698218449183"></a>
该接口用于创建立即会议和预约会议。
## URI<a name="section1822710121015"></a>
POST /v1/mmc/management/conferences
## 请求参数<a name="section1997124142020"></a>
**表 1** 参数说明
<a name="table958712610276"></a>
| 参数 | 是否必须 | 类型 | 位置 | 描述 |
|---|---|---|---|---|
| userUUID | 否 | String | Query | 用户的UUID。 说明: 该参数将废弃,请勿使用。 |
| X-Access-Token | 是 | String | Header | 授权令牌。获取“ 执行App ID鉴权 ”响应的accessToken。 |
| X-Authorization-Type | 否 | String | Header | 标识是否为第三方portal过来的请求。 说明: 该参数将废弃,请勿使用。 |
| X-Site-Id | 否 | String | Header | 用于区分到哪个HCSO站点鉴权。 说明: 该参数将废弃,请勿使用。 |
| startTime | 否 | String | Body | 会议开始时间(UTC时间)。格式:yyyy-MM-dd HH:mm。 说明: 创建预约会议时,如果没有指定开始时间或填空串,则表示会议马上开始 时间是UTC时间,即0时区的时间 |
| length | 否 | Integer | Body | 会议持续时长,单位分钟。默认30分钟。 最大1440分钟(24小时),最小15分钟。 |
| subject | 否 | String | Body | 会议主题。最多128个字符。 |
| mediaTypes | 是 | String | Body | 会议的媒体类型。 Voice:语音会议 HDVideo:视频会议 |
| groupuri | 否 | String | Body | 软终端创建即时会议时在当前字段带临时群组ID,由服务器在邀请其他与会者时在或者conference-info头域中携带。 长度限制为31个字符。 |
| attendees | 否 | Array of Attendee objects | Body | 与会者列表。 |
| cycleParams | 否 | CycleParams object | Body | 周期会议的参数,当会议是周期会议的时候该参数必须填写。 |
| isAutoRecord | 否 | Integer | Body | 会议是否自动启动录制,在录播类型为:录播、录播+直播时才生效。默认为不自动启动。 1:自动启动录制 0:不自动启动录制 |
| encryptMode | 否 | Integer | Body | 会议媒体加密模式。默认值由企业级的配置填充。 0:自适应加密 1 : 强制加密 2 : 不加密 |
| language | 否 | String | Body | 会议通知短信或邮件的语言。默认中文。 zh-CN:中文 en-US:英文 |
| timeZoneID | 否 | String | Body | 会议通知中会议时间的时区信息。时区信息,参考 时区映射关系 。 说明: 举例:“timeZoneID”:"26",则通过移动会议发送的会议通知中的时间将会标记为如“2021/11/11 星期四 00:00 - 02:00 (GMT) 格林威治标准时间:都柏林, 爱丁堡, 里斯本, 伦敦”。 非周期会议,如果会议通知是通过第三方系统发送,则这个字段不用填写。 |
| recordType | 否 | Integer | Body | 录播类型。默认为禁用。 0: 禁用 1: 直播 2: 录播 3: 直播+录播 说明: 当录播类型含有直播属性(recordType为1或3),则liveAddress或者auxAddress至少填一个,否则会中无直播功能。 |
| liveAddress | 否 | String | Body | 主流直播推流地址,在录播类型为 :直播、直播+录播时有效。最大不超过255个字符。 |
| auxAddress | 否 | String | Body | 辅流直播推流地址,在录播类型为 :直播、直播+录播时有效。最大不超过255个字符。 |
| recordAuxStream | 否 | Integer | Body | 是否录制辅流,在录播类型为:录播、录播+直播时有效。默认只录制视频主流,不录制辅流。 0:不录制 1:录制 |
| confConfigInfo | 否 | ConfConfigInfo object | Body | 会议其他配置信息。 |
| recordAuthType | 否 | Integer | Body | 录播观看鉴权方式,在录播类型为:录播、直播+录播时有效。 0:可通过链接观看/下载 1:企业用户可观看/下载 2:与会者可观看/下载 |
| vmrFlag | 否 | Integer | Body | 是否使用云会议室或者个人会议ID召开预约会议。默认0。 0:不使用云会议室或者个人会议ID 1:使用云会议室或者个人会议ID |
| vmrID | 否 | String | Body | 绑定给当前创会账号的VMR ID。通过 查询云会议室及个人会议ID 接口获取。 说明: vmrID取上述查询接口中返回的id,不是vmrId 创建个人会议ID的会议时,使用vmrMode=0的VMR;创建云会议室的会议时,使用vmrMode=1的VMR vmrID使用个人会议ID占用并发资源,使用云会议室ID占用云会议室资源;vmrID既不使用个人会议ID也不使用云会议室ID(vmrflag=0,vmrID=null)占用并发资源 |
| concurrentParticipants | 否 | Integer | Body | 会议方数,会议最大与会人数限制。 0:无限制 大于0:会议最大与会人数 |
| supportSimultaneousInterpretation | 否 | Boolean | Body | 会议是否支持同声传译 true:支持 false:不支持 |
| confResType | 否 | Integer | Body | 会议资源类型,此参数创建后不支持修改: 0: 并发 1: 云会议室 2: 网络研讨会 3: 预留模式,暂未开放 |
**表 2** Attendee 数据结构
<a name="table862782215199"></a>
| 参数 | 是否必须 | 类型 | 描述 |
|---|---|---|---|
| userUUID | 否 | String | 与会者的用户UUID。 |
| accountId | 否 | String | 与会者的账号。 如果是账号/密码鉴权场景: 选填,表示移动会议账号ID 如果是APP ID鉴权场景:必填,表示第三方的User ID,同时需要携带参数appId |
| appId | 否 | String | App ID。如果是APP ID鉴权场景,此项必填。参考“ App ID的申请 ”“ App ID的申请 ”。 |
| name | 否 | String | 与会者名称。长度限制为96个字符。 |
| role | 否 | Integer | 会议中的角色。默认为普通与会者。 0:普通与会者 1:会议主持人 |
| phone | 否 | String | 号码。支持SIP号码或者手机号码。 如果是账号/密码鉴权场景:必填 如果是APP ID鉴权场景:选填 说明: 号码可以通过 查询企业通讯 接口录获取。返回的number是SIP号码,phone是手机号码 填SIP号码系统会呼叫对应的软终端或者硬终端;填手机号码系统会呼叫手机 呼叫手机需要开通PSTN权限,否则无法呼叫 |
| phone2 | 否 | String | 预留字段,取值类型同参数 “phone” 。 |
| phone3 | 否 | String | 预留字段,取值类型同参数 “phone” 。 |
| email | 否 | String | 邮件地址。需要发邮件通知时填写。 |
| sms | 否 | String | 短信通知的手机号码。需要发短信通知时填写。 |
| isMute | 否 | Integer | 用户入会时是否需要自动静音 。默认不静音。 0: 不需要静音 1: 需要静音 说明: 仅会中邀请与会者时才生效。 |
| isAutoInvite | 否 | Integer | 会议开始时是否自动邀请该与会者。默认值由企业级配置决定。 0:不自动邀请。 1:自动邀请。 说明: 仅并发会议资源的随机会议ID会议才生效。 |
| type | 否 | String | 终端类型,类型枚举如下: normal:软终端 terminal:硬终端 outside:外部与会人 mobile:用户手机号码 ideahub:ideahub board: 电子白板(SmartRooms),含Maxhub、海信大屏、IdeaHub B2 hwvision:华为智慧屏TV customnumber: 自定义呼叫号码(包括级联会议号、手机号码、硬终端SIP号码等) |
| address | 否 | String | 预留字段,终端所在会议室信息。 |
| deptUUID | 否 | String | 部门ID。 |
| deptName | 否 | String | 部门名称。最大不超过128个字符。 |
| uniqueType | 否 | Integer | 企业内唯一会场标识, 0标识为普通与会者,1标识为企业内唯一会场 说明: 创建级联会议时,uniqueType 为1, 同时type为customnumber |
**表 3** CycleParams 数据结构
<a name="table977474913540"></a>
| 参数 | 是否必须 | 类型 | 描述 |
|---|---|---|---|
| startDate | 是 | String | 周期会议的开始日期,格式:YYYY-MM-DD。 开始日期不能早于当前日期。 说明: 日期是timeZoneID指定的时区的日期,非UTC时间的日期。 |
| endDate | 是 | String | 周期会议的结束日期,格式:YYYY-MM-DD。 开始日期和结束日期间的时间间隔最长不能超过1年。开始日期和结束日期之间最多允许50个子会议,若超过50个子会议,会自动调整结束日期。 说明: 日期是timeZoneID指定的时区的日期,非UTC时间的日期。 |
| cycle | 是 | String | 周期类型。 Day:天 Week:星期 Month:月 |
| interval | 否 | Integer | 子会议间隔。 “cycle” 选择了 “Day” ,表示每几天召开一次,取值范围[1,15] “cycle” 选择了 “Week” ,表示每几周召开一次,取值范围[1,5] “cycle” 选择了 “Month” ,Interval表示隔几月,取值范围[1,3] |
| point | 否 | Array of integers | 周期内的会议召开点。仅当按周和月时有效。 “cycle” 选择了 “Week” ,point中填入了两个元素1和3,则表示每个周一和周三召开会议,0表示周日 “cycle” 选择了 “Month” ,point中填入了12和20则表示每个月的12号和20号召开会议,取值范围为[1,31],若当月没有该值,则为月末 |
| preRemindDays | 是 | Integer | 提前通知天数。所有与会者在每个子会议开始前N天收到会议通知。取值范围[0,30]。 默认值是1。 |
**表 4** ConfConfigInfo 数据结构
<a name="table193021239133"></a>
| 参数 | 是否必须 | 类型 | 描述 |
|---|---|---|---|
| isSendNotify | 否 | Boolean | 是否需要发送会议邮件通知。默认值由企业级配置决定。 true:需要 false:不需要 |
| isSendSms | 否 | Boolean | 是否需要发送会议短信通知。 true:需要 false:不需要 说明: 保留字段,暂不提供短信通知能力。 |
| isSendCalendar | 否 | Boolean | 是否需要发送会议邮件日历通知。默认值由企业级配置决定。 true:需要 false:不需要 |
| isAutoMute | 否 | Boolean | 来宾入会,软终端是否自动静音。默认值由企业级配置决定。 true:自动静音 false:不自动静音 |
| isHardTerminalAutoMute | 否 | Boolean | 来宾入会,硬终端是否自动静音。默认值由企业级配置决定。 true:自动静音 false:不自动静音 |
| isGuestFreePwd | 否 | Boolean | 是否来宾免密。 true:免密 false:需要密码 说明: 仅随机会议ID的会议生效。 |
| callInRestriction | 否 | Integer | 允许加入会议的范围。 0:所有用户 2:企业内用户 3:被邀请用户 |
| allowGuestStartConf | 否 | Boolean | 是否允许来宾启动会议。 true:允许来宾启动会议 false:禁止来宾启动会议 说明: 仅随机会议ID的会议生效。 |
| guestPwd | 否 | String | 来宾密码(4-16位长度的纯数字)。 |
| vmrIDType | 否 | Integer | 云会议室的会议ID模式。 0:固定会议ID 1:随机会议ID |
| prolongLength | 否 | Integer | 自动延长会议时长(取值范围0-60)。 0:表示会议到点自动结束,不延长会议。 其他:表示自动延长的时长。 说明: 自动结束会议是按照会议时长计算。比如预定的会议是9:00开始11:00结束,会议时长2个小时,如果与会者8:00就加入会议了,那会议在10:00就会自动结束 设置成其他值时,只要会中还有与会者,会议自动多次延长 |
| enableWaitingRoom | 否 | Boolean | 是否开启等候室(只对MMR企业生效)。 true:开启 false:不开启 |
| isHostCameraOn | 否 | Boolean | 主持人入会是否开启摄像头。 true:开启 false:不开启 |
| isGuestCameraOn | 否 | Boolean | 来宾入会是否开启摄像头。 true:开启 false:不开启 |
## 状态码<a name="section11407328568"></a>
**表 5** 状态码说明
<a name="table102780442391"></a>
| HTTP状态码 | 描述 |
|---|---|
| 200 | 操作成功。 |
| 400 | 参数异常。 |
| 401 | 未鉴权或鉴权失败。 |
| 403 | 权限受限。 |
| 500 | 服务端异常。 |
## 响应参数<a name="section498722842014"></a>
**表 6** 响应参数
<a name="table4990175112163"></a>
| 参数 | 类型 | 描述 |
|---|---|---|
| [数组元素] | Array of ConferenceInfo | 会议信息列表。 |
**表 7** ConferenceInfo 数据结构
<a name="table1022474182320"></a>
| 参数名称 | 参数类型 | 描述 |
|---|---|---|
| conferenceID | String | 会议ID。 |
| subject | String | 会议主题。 |
| size | Integer | 会议预约时添加的会议者数量。 |
| timeZoneID | String | 会议通知中会议时间的时区信息。时区信息,参考 时区映射关系 。 说明: 举例:“timeZoneID”:"26",则通过移动会议发送的会议通知中的时间将会标记为如“2021/11/11 星期四 00:00 - 02:00 (GMT) 格林威治标准时间:都柏林, 爱丁堡, 里斯本, 伦敦”。 |
| startTime | String | 会议起始时间 (YYYY-MM-DD HH:MM )。 |
| endTime | String | 会议结束时间 (YYYY-MM-DD HH:MM )。 |
| mediaTypes | String | 会议的媒体类型。 由1个或多个枚举String组成,多个枚举时,每个枚举值之间通过”,”逗号分隔。如:mediaTypes:“Voice,Data,HDVideo” “Voice”:语音 “Video”:标清视频 “HDVideo”:高清视频 “Data”:数据 |
| conferenceState | String | 会议状态。 “Schedule”:预定状态 “Creating”:正在创建状态 “Created”:会议已经被创建,并正在召开 “Destroyed”:会议已经关闭 |
| language | String | 会议通知短信或邮件的语言。默认中文。 zh-CN:中文 en-US:英文 |
| accessNumber | String | 会议接入的SIP号码。 |
| passwordEntry | Array of PasswordEntry objects | 会议密码。 说明: 创建会议时,返回主持人密码和来宾密码 主持人查询会议时,返回主持人密码和来宾密码 来宾查询会议时,返回来宾密码 |
| userUUID | String | 会议预订者的用户UUID。 |
| scheduserName | String | 会议预订者名称。 |
| conferenceType | Integer | 会议类型。 0 : 普通会议。 2 : 周期性会议。 |
| confType | String | 会议类型。 FUTURE:将来开始的会议(创建时) IMMEDIATELY:立即开始的会议(创建时) CYCLE:周期会议 |
| cycleParams | CycleParams object | 周期会议参数。当会议是周期会议的时候携带该参数。 |
| isAutoMute | Integer | 是否入会自动静音。 0 : 不自动静音 1 : 自动静音 |
| isAutoRecord | Integer | 是否自动开启云录制。 0 : 不自动启动 1 : 自动启动 |
| chairJoinUri | String | 主持人会议链接地址。 |
| guestJoinUri | String | 普通与会者会议链接地址。 |
| audienceJoinUri | String | 网络研讨会观众会议链接地址。 |
| recordType | Integer | 录播类型。 0: 禁用 1: 直播 2: 录播 3: 直播+录播 |
| auxAddress | String | 辅流直播推流地址。 |
| liveAddress | String | 主流直推流播地址。 |
| recordAuxStream | Integer | 是否录制辅流。 0:否 1:是 |
| recordAuthType | Integer | 录播观看鉴权方式。 0:可通过链接观看/下载 1:企业用户可观看/下载 2:与会者可观看/下载 |
| liveUrl | String | 直播观看地址。 |
| confConfigInfo | ConfConfigInfo object | 会议其他配置信息。 |
| vmrFlag | Integer | 是否使用云会议室或个人会议ID召开预约会议。 0:不使用云会议室或个人会议ID 1:使用云会议室或个人会议ID |
| isHasRecordFile | Boolean | 是否有会议录制文件。仅历史会议查询时返回。 true:有录制文件。 false:没有录制文件。 |
| vmrConferenceID | String | 云会议室会议ID或个人会议ID。如果 “vmrFlag” 为 “1” ,则该字段不为空。 |
| confUUID | String | 会议的UUID。 说明: 只有创建立即开始的会议才返回UUID,如果是预约未来的会议,不会返回UUID 可以通过 查询历史会议列表 获取历史会议的UUID |
| partAttendeeInfo | Array of PartAttendee objects | 被邀请的部分与会者信息。 说明: 只返回被邀请的前20条软终端与会者信息和前20条硬终端与会者信息 不返回会中主动加入的与会者信息 “ 查询会议列表 ”和“ 查询会议详情 ”接口,返回预约会议时邀请的与会者和会中主持人邀请的与会者 “ 查询在线会议列表 ”、“ 查询在线会议详情 ”、“ 查询历史会议列表 ”和“ 查询历史会议详情 ”接口返回预约会议时邀请的与会者。不返回会中主持人邀请的与会者 |
| terminlCount | Integer | 硬终端个数,如IdeaHub,TE30等。 |
| normalCount | Integer | 软终端个数,如PC端、手机端App等。 |
| deptName | String | 会议预定者的企业名称。 |
| role | String | 与会者角色。 chair :主持人 general :来宾 audience : 观众 说明: 仅在查询会议详情时返回 返回查询者本身的角色 |
| multiStreamFlag | Integer | 标识是否为多流视频会议。 1 :多流会议 |
| webinar | Boolean | 是否是网络研讨会。 |
| onlineAttendeeAmount | Integer | 当前在线与会人数。包含被邀入会和主动入会的与会者。 说明: 仅在“ 查询在线会议列表 ”接口中返回。 |
| confMode | String | 会议模型。 COMMON :MCU会议 RTC :MMR会议 |
| scheduleVmr | Boolean | VMR预约记录。 true :VMR会议 false :普通会议 说明: 该参数将废弃,请勿使用。 |
| vmrID | String | 云会议室ID。 |
| concurrentParticipants | Integer | 会议最大与会人数。默认值0。 0:无限制 大于0:会议最大与会人数 |
| supportSimultaneousInterpretation | Boolean | 会议是否支持同声传译 true :支持 false :不支持 |
| picDisplay | MultiPicDisplayDO object | 多画面信息。 |
| subConfs | Array of Subconfs objects | 周期子会议列表。 |
| cycleSubConfID | String | 第一个周期子会议的UUID。 |
**表 8** PasswordEntry 数据结构
<a name="table94617321319"></a>
| 参数 | 参数类型 | 描述 |
|---|---|---|
| conferenceRole | String | 会议角色。 chair:会议主持人 general:普通与会者 |
| password | String | 会议中角色的密码(明文)。 |
**表 9** PartAttendee 数据结构
<a name="table132851410183118"></a>
| 参数 | 参数类型 | 描述 |
|---|---|---|
| name | String | 与会者名称。 |
| phone | String | 号码。SIP号码或者手机号码。 |
| phone2 | String | 预留字段,取值类型同参数 “phone” 。 |
| phone3 | String | 预留字段,取值类型同参数 “phone” 。 |
| type | String | 终端类型,类型枚举如下: normal:软终端 terminal:硬终端 outside:外部与会人 mobile:用户手机号码 ideahub:ideahub board: 电子白板(SmartRooms)。含Maxhub、海信大屏、IdeaHub B2 hwvision:华为智慧屏TV |
| role | Integer | 会议中的角色。默认为普通与会者。 0:普通与会者 1:会议主持人 |
| isMute | Integer | 用户入会时是否需要自动静音 。默认不静音。 0: 不需要静音 1: 需要静音 说明: 仅会中邀请与会者时才生效。 |
**表 10** MultiPicDisplayDO 数据结构
<a name="table1375715395424"></a>
| 参数 | 类型 | 描述 |
|---|---|---|
| manualSet | Integer | 是否为手工设置多画面。 0 :系统自动多画面 1 :手工设置多画面 |
| imageType | String | 画面类型。取值范围: Single: 单画面 Two: 二画面 Three: 三画面, Three-2: 三画面-2, Three-3: 三画面-3, Three-4: 三画面-4 Four: 四画面, Four-2: 四画面-2, Four-3: 四画面-3 Five: 五画面, Five-2: 五画面-2 Six: 六画面, Six-2: 六画面-2, Six-3: 六画面-3, Six-4: 六画面-4, Six-5: 六画面-5 Seven: 七画面, Seven-2: 七画面-2, Seven-3: 七画面-3, Seven-4: 七画面-4 Eight: 八画面, Eight-2: 八画面-2, Eight-3: 八画面-3, Eight-4: 八画面-4 Nine: 九画面 Ten: 十画面, Ten-2: 十画面-2, Ten-3: 十画面-3, Ten-4: 十画面-4, Ten-5: 十画面-5, Ten-6: 十画面-6 Thirteen: 十三画面, Thirteen-2: 十三画面-2, Thirteen-3: 十三画面-3,Thirteen-4: 十三画面-4, Thirteen-5: 十三画面-5, ThirteenR: 十三画面R, ThirteenM: 十三画面M Sixteen: 十六画面 Seventeen: 十七画面 Twenty-Five: 二十五画面 Custom: 自定义多画面(当前不支持) |
| subscriberInPics | Array of PicInfoNotify objects | 子画面列表。 |
| switchTime | Integer | 表示轮询间隔,单位:秒。当同一个子画面中包含有多个视频源时,此参数有效。 |
| picLayoutInfo | PicLayoutInfo object | 自定义多画面布局信息。预留字段,当前不支持。 |
**表 11** PicInfoNotify 数据结构
<a name="table1321955012914"></a>
| 参数 | 类型 | 描述 |
|---|---|---|
| index | Integer | 多画面中每个画面的编号,编号从1开始。 |
| id | Array of strings | 每个画面中的与会者SIP号码。SIP号码可以通过 查询企业通讯 接口录获取。 |
| share | Integer | 是否为辅流 0: 不是辅流 1: 是辅流 |
**表 12** PicLayoutInfo 数据结构
<a name="table176947316228"></a>
| 参数 | 类型 | 描述 |
|---|---|---|
| x | Integer | 横向小格子数。 |
| y | Integer | 纵向小格子数。 |
| subPicLayoutInfoList | Array of SubPicLayoutInfo objects | 多画面信息。 |
**表 13** SubPicLayoutInfo 数据结构
<a name="table1529643635110"></a>
| 参数 | 类型 | 描述 |
|---|---|---|
| id | Integer | 子画面索引。 |
| left | Integer | 子画面从左到右的索引。 |
| top | Integer | 子画面从上到下的索引。 |
| xSize | Integer | 子画面横向尺寸。 |
| ySize | Integer | 子画面纵向尺寸。 |
**表 14** CycleParams 数据结构
<a name="table128225874014"></a>
| 参数 | 类型 | 描述 |
|---|---|---|
| startDate | String | 周期会议的开始日期,格式:YYYY-MM-DD。 开始日期不能早于当前日期。 说明: 日期是timeZoneID指定的时区的日期,非UTC时间的日期。 |
| endDate | String | 周期会议的结束日期,格式:YYYY-MM-DD。 开始日期和结束日期间的时间间隔最长不能超过1年。开始日期和结束日期之间最多允许50个子会议,若超过50个子会议,会自动调整结束日期。 说明: 日期是timeZoneID指定的时区的日期,非UTC时间的日期。 |
| cycle | String | 周期类型。 Day:天 Week:星期 Month:月 |
| interval | Integer | 子会议间隔。 “cycle” 选择了 “Day” ,表示每几天召开一次,取值范围[1,15] “cycle” 选择了 “Week” ,表示每几周召开一次,取值范围[1,5] “cycle” 选择了 “Month” ,Interval表示隔几月,取值范围[1,3] |
| point | Array of integers | 周期内的会议召开点。仅当按周和月时有效。 “cycle” 选择了 “Week” ,point中填入了两个元素1和3,则表示每个周一和周三召开会议,0表示周日 “cycle” 选择了 “Month” ,point中填入了12和20则表示每个月的12号和20号召开会议,取值范围为[1,31],若当月没有该值,则为月末 |
| preRemindDays | Integer | 提前通知天数。所有与会者在每个子会议开始前N天收到会议通知。取值范围[0,30]。 默认值是1。 |
**表 15** ConfConfigInfo 数据结构
<a name="table58585814406"></a>
| 参数 | 类型 | 描述 |
|---|---|---|
| isSendNotify | Boolean | 是否需要发送会议邮件通知。默认值由企业级配置决定。 true:需要 false:不需要 |
| isSendSms | Boolean | 是否需要发送会议短信通知。 true:需要 false:不需要 说明: 保留字段,暂不提供短信通知能力。 |
| isSendCalendar | Boolean | 是否需要发送会议日历通知。默认值由企业级配置决定。 true:需要 false:不需要 |
| isAutoMute | Boolean | 来宾入会,软终端是否自动静音。默认值由企业级配置决定。 true:自动静音 false:不自动静音 |
| isHardTerminalAutoMute | Boolean | 来宾入会,硬终端是否自动静音。默认值由企业级配置决定。 true:自动静音 false:不自动静音 |
| isGuestFreePwd | Boolean | 是否来宾免密(仅随机会议有效)。 true:免密 false:需要密码 说明: 仅随机会议ID的会议生效。 |
| callInRestriction | Integer | 允许加入会议的范围。 0:所有用户 2:企业内用户 3:被邀请用户 |
| allowGuestStartConf | Boolean | 是否允许来宾启动会议。 true:允许来宾启动会议。 false:禁止来宾启动会议。 说明: 仅随机会议ID的会议生效。 |
| guestPwd | String | 来宾密码(4-16位长度的纯数字)。 |
| vmrIDType | Integer | 云会议室的会议ID模式。 0:固定会议ID 1:随机会议ID |
| prolongLength | Integer | 自动延长会议时长(取值范围0-60)。 0:表示会议到点自动结束,不延长会议 其他:表示自动延长的时长 说明: 自动结束会议是按照会议时长计算。比如预定的会议是9:00开始11:00结束,会议时长2个小时,如果与会者8:00就加入会议了,那会议在10:00就会自动结束 设置成其他值时,只要会中还有与会者,会议可以多次延迟 |
| enableWaitingRoom | Boolean | 开启或者关闭等候室。 true:开启 false:不开启 |
| isHostCameraOn | Boolean | 主持人入会是否开启摄像头。 true:开启 false:不开启 |
| isGuestCameraOn | Boolean | 来宾入会是否开启摄像头。 true:开启 false:不开启 |
## 请求消息示例<a name="section1498763918202"></a>
```
POST /v1/mmc/management/conferences
Connection: keep-alive
X-Access-Token: stbX5ElstO5QwOwPB9KGQWUZ1DHoFrTsQjjC
Content-Type: application/json
user-agent: WeLink-desktop
Content-Length: 548
Host: apigw.125339.com.cn
User-Agent: Apache-HttpClient/4.5.3 (Java/1.8.0_191)
{
"subject": "例行会议",
"mediaTypes": "HDVideo",
"startTime": "2022-08-30 12:00",
"length": 60,
"attendees": [
{
"accountId": "[email protected]",
"appId": "caaab5a3e584497990f6a9b582a0ae42"
}
],
"confConfigInfo": {
"isSendNotify": false,
"isSendSms": false,
"isSendCalendar": false
}
}
```
## 响应消息示例<a name="section339419481201"></a>
```
HTTP/1.1 200
Date: Wed, 18 Dec 2019 06:20:40 GMT
Content-Type: application/json;charset=UTF-8
Content-Length: 1153
Connection: keep-alive
http_proxy_id: 79ea4d8bdb461a4b811a117f9cf3dbde
Server: api-gateway
X-Request-Id: 1ccc1d7937dd0f66067aeecb9f1df241
[
{
"conferenceID": "914673889",
"mediaTypes": "Data,Voice,HDVideo",
"subject": "例行会议",
"size": 1,
"timeZoneID": "56",
"startTime": "2022-08-30 12:00",
"endTime": "2022-08-30 13:00",
"conferenceState": "Schedule",
"accessNumber": "+991117",
"language": "zh-CN",
"passwordEntry": [
{
"conferenceRole": "chair",
"password": "******"
},
{
"conferenceRole": "general",
"password": "******"
}
],
"userUUID": "ff80808167ef1edf0167f339533d05a6",
"scheduserName": "金秘书",
"conferenceType": 0,
"confType": "FUTURE",
"isAutoMute": 1,
"isAutoRecord": 0,
"chairJoinUri": "https://c.meeting.125339.com/#/j/914673889/6a30b8b5a325105da031442627828e496f91021ece36405f",
"guestJoinUri": "https://c.meeting.125339.com/#/j/914673889/9505dc3349228b1ce0db8165590cc977bcff89785130fe0d",
"recordType": 2,
"confConfigInfo": {
"isSendNotify": false,
"isSendSms": false,
"isAutoMute": true
},
"vmrFlag": 0,
"partAttendeeInfo": [
{
"phone": "+99111********4158",
"name": "张三",
"type": "normal"
}
],
"terminlCount": 0,
"normalCount": 1,
"deptName": "企业协同云服务项目群"
}
]
```
## 错误码<a name="section222616171078"></a>
如果遇到"MMC"或者"USG"开头的错误码,请参考接口文档中错误码表
## CURL命令示例<a name="section2790610197"></a>
```
curl -k -i -H 'content-type: application/json' -X POST -H 'X-Access-Token:stbX5ElstO5QwOwPB9KGQWUZ1DHoFrTsQjjC' -d '{"conferenceType": "0","subject": "user01 conference","mediaTypes": "HDVideo","attendees": [{"name": "user01","role": 1,"phone": "+8657*******"}]}' 'https://apigw.125339.com.cn/v1/mmc/management/conferences'
```
FILE:references/SearchRecordings.md
# 查询录制列表 - SearchRecordings<a name="ZH-CN_TOPIC_0212714556"></a>
## 描述<a name="section17948858131615"></a>
该接口用于查询会议录制列表。管理员可以查询本企业内所有的录制,普通用户仅能查询自己创建的会议的录制。不带查询参数时,默认查询权限范围内的录制。
## URI<a name="section11404162361811"></a>
GET /v1/mmc/management/record/files
## 请求参数<a name="section1997124142020"></a>
**表 1** 参数说明
<a name="table1285113481520"></a>
| 参数 | 是否必须 | 类型 | 位置 | 描述 |
|---|---|---|---|---|
| userUUID | 否 | String | Query | 用户的UUID。 说明: 仅管理员有权限查询本企业其他用户的会议录制;普通账号该字段无效,只能查询自己的。 |
| offset | 否 | Integer | Query | 查询偏移量。默认为0。 |
| limit | 否 | Integer | Query | 查询数量。默认是20,最大500条。 |
| queryAll | 否 | Boolean | Query | 是否查询企业下所有用户的会议录制。 true:查询所有用户的会议录制 false:仅查询管理员自己的会议录制 说明: 仅对企业管理员生效。 |
| searchKey | 否 | String | Query | 查询条件。会议主题、会议预约人和会议ID等可作为搜索内容。 |
| startDate | 是 | long | Query | 查询的起始时间戳(单位毫秒)。 |
| endDate | 是 | long | Query | 查询的截止时间戳(单位毫秒)。 |
| sortType | 否 | String | Query | 查询结果排序类型。 ASC_StartTIME:按录制开始时间升序排序 DSC_StartTIME:按录制开始时间降序排序 |
| X-Access-Token | 是 | String | Header | 授权令牌。获取“ 执行App ID鉴权 ”响应的accessToken。 |
| X-Authorization-Type | 否 | String | Header | 标识是否为第三方portal过来的请求。 说明: 该参数将废弃,请勿使用。 |
| X-Site-Id | 否 | String | Header | 用于区分到哪个HCSO站点鉴权。 说明: 该参数将废弃,请勿使用。 |
## 状态码<a name="section25301025184019"></a>
**表 2** 状态码说明
<a name="table102780442391"></a>
| HTTP状态码 | 描述 |
|---|---|
| 200 | 操作成功。 |
| 400 | 参数异常。 |
| 401 | 未鉴权或鉴权失败。 |
| 403 | 权限受限。 |
| 500 | 服务端异常。 |
## 响应参数<a name="section498722842014"></a>
**表 3** 响应参数
<a name="table68601830154519"></a>
| 参数 | 类型 | 描述 |
|---|---|---|
| offset | Integer | 查询偏移量。 |
| limit | Integer | 每页的记录数。 |
| count | Integer | 总记录数。 |
| data | Array of RecordFileInfo objects | 录播文件列表。 |
**表 4** RecordFileInfo 数据结构
<a name="table6981112405218"></a>
| 参数 | 类型 | 描述 |
|---|---|---|
| confUUID | String | 会议UUID。 |
| confID | String | 会议ID。 |
| url | String[] | 录播观看地址。 |
| rcdTime | Integer | 录制时长(单位秒)。 |
| rcdSize | Integer | 录制文件大小(MB)。 |
| subject | String | 会议主题。 |
| scheduserName | String | 会议预订者名称。 |
| startTime | String | 会议开始时间。 |
| isDecodeFinish | Boolean | 录制文件是否转码完成。 |
| decodeEndTime | long | 录制文件预计转码完成时间。 |
| available | Boolean | 录播文件是否可观看。 |
| recordAuthType | Integer | 录播观看鉴权方式,在录播类型为:录播、直播+录播时有效。 0:可通过链接观看/下载 1:企业用户可观看/下载 2:与会者可观看/下载 |
## 请求消息示例<a name="section1498763918202"></a>
```
GET /v1/mmc/management/record/files?startDate=1574092800000&endDate=1576771199999
Connection: keep-alive
X-Access-Token: stbX5ElstO5QwOwPB9KGQWUZ1DHoFrTsQjjC
user-agent: WeLink-desktop
Host: api.meeting.125339.com
User-Agent: Apache-HttpClient/4.5.3 (Java/1.8.0_191)
```
## 响应消息示例<a name="section339419481201"></a>
```
HTTP/1.1 200
Date: Wed, 18 Dec 2019 06:20:40 GMT
Content-Type: application/json;charset=UTF-8
Content-Length: 683
Connection: keep-alive
Expires: 0
Pragma: No-cache
Cache-Control: no-cache
http_proxy_id: 25b89efb63970d80e715503650157098
Server: api-gateway
X-Request-Id: a9af536f02e45c516513a8248bfe04c3
{
"offset": 0,
"limit": 20,
"count": 1,
"data": [
{
"confUUID": "51adf610220411eaaae03f22d33cc26b",
"confID": "912049654",
"url": [
"https://114.116.237.2/rse/rse/html/play/Mediaxplay.html?rseid=00030&recordId=000301fa-0512-412f-b363-cb9f76063628&token=24e4f6d9850a42365783c88ceb36701bb87f5393a595af82&confID=51adf610220411eaaae03f22d33cc26b&isSecure=true"
],
"rcdTime": 71,
"rcdSize": 0,
"subject": "user8002的会议",
"scheduserName": "user8002",
"startTime": "2019-12-19 02:07",
"isDecodeFinish": false,
"decodeEndTime": 1576721412885,
"available": true,
"recordAuthType":2
}
]
}
```
## 错误码<a name="section1765741813247"></a>
如果遇到"MMC"或者"USG"开头的错误码,请参考接口文档中错误码表
## CURL命令示例<a name="section4952152111818"></a>
```
curl -k -i -X GET -H 'X-Access-Token:stbX5ElstO5QwOwPB9KGQWUZ1DHoFrTsQjjC' 'https://api.meeting.125339.com/v1/mmc/management/record/files?startDate=1574092800000&endDate=1576771199999'
```
FILE:references/SearchMeetings.md
# 查询会议列表 - SearchMeetings<a name="ZH-CN_TOPIC_0212714510"></a>
## 描述<a name="section698218449183"></a>
该接口用于查询尚未结束的会议。
- 管理员可以查询本企业内所有的会议,普通用户仅能查询自己创建或者需要参加的会议。不带查询参数时,默认查询权限范围内正在召开或还未召开的会议。
- 只能查询尚未结束的会议(既正在召开的会议和已预约还未召开的会议)。如果需要查询历史会议列表,请参考[查询历史会议列表 - SearchHisMeetings](查询历史会议列表---SearchHisMeetings.md)。
## URI<a name="section1228394174"></a>
GET /v1/mmc/management/conferences
## 请求参数<a name="section1997124142020"></a>
**表 1** 参数说明
<a name="table1285113481520"></a>
| 参数 | 是否必须 | 类型 | 位置 | 描述 |
|---|---|---|---|---|
| userUUID | 否 | String | Query | 用户的UUID。 说明: 仅管理员有权限查询本企业其他用户的会议列表;普通账号该字段无效,只能查询自己的。 |
| offset | 否 | Integer | Query | 查询偏移量。默认为0。 |
| limit | 否 | Integer | Query | 查询数量。默认是20,最大500条。 |
| queryAll | 否 | Boolean | Query | 是否查询企业下所有用户的会议记录。默认值为false。 true:查询所有用户的会议 false:仅查询管理员自己创建的会议 说明: 仅对企业管理员生效。 |
| searchKey | 否 | String | Query | 查询条件 。会议主题、会议预约人和会议ID等可作为搜索内容。长度限制为1-128个字符。 |
| queryConfMode | 否 | String | Query | 查询时间范围。 ADAY:一天 AWEEK:一周 AMONTH:一个月 ALL:查询所有 |
| sortType | 否 | String | Query | 查询结果排序。 ASC_StartTIME:按会议开始时间升序排序 DSC_StartTIME:按会议开始时间降序排序 |
| X-Access-Token | 是 | String | Header | 授权令牌。获取“ 执行App ID鉴权 ”响应的accessToken。 |
| X-Authorization-Type | 否 | String | Header | 标识是否为第三方portal过来的请求。 说明: 该参数将废弃,请勿使用。 |
| X-Site-Id | 否 | String | Header | 用于区分到哪个HCSO站点鉴权。 说明: 该参数将废弃,请勿使用。 |
## 状态码<a name="section9243191618122"></a>
**表 2** 状态码说明
<a name="table102780442391"></a>
| HTTP状态码 | 描述 |
|---|---|
| 200 | 操作成功。 |
| 400 | 参数异常。 |
| 401 | 未鉴权或鉴权失败。 |
| 403 | 权限受限。 |
| 500 | 服务端异常。 |
## 响应参数<a name="section498722842014"></a>
**表 3** 响应参数
<a name="table4990175112163"></a>
| 参数 | 类型 | 描述 |
|---|---|---|
| offset | Integer | 查询偏移量。 |
| limit | Integer | 每页的记录数。 |
| count | Integer | 总记录数。 |
| data | Array of ConferenceInfo objects | 会议列表。 |
## 请求消息示例<a name="section1498763918202"></a>
```
GET /v1/mmc/management/conferences
Connection: keep-alive
X-Access-Token: stbX5ElstO5QwOwPB9KGQWUZ1DHoFrTsQjjC
user-agent: WeLink-desktop
Host: apigw.125339.com.cn
User-Agent: Apache-HttpClient/4.5.3 (Java/1.8.0_191)
```
## 响应消息示例<a name="section339419481201"></a>
```
HTTP/1.1 200
Date: Wed, 18 Dec 2019 06:20:40 GMT
Content-Type: application/json;charset=UTF-8
Content-Length: 2450
Connection: keep-alive
Expires: 0
Pragma: No-cache
Cache-Control: no-cache
http_proxy_id: 6fba0eff9f832b463580fb06c5b0ff9c
Server: api-gateway
X-Request-Id: ac9f75ec3c97c823f128526a924532b2
{
"data": [
{
"conferenceID": "914083136",
"mediaTypes": "Data,Video,Voice",
"subject": "user01的会议",
"size": 1,
"timeZoneID": "56",
"startTime": "2019-12-18 07:28",
"endTime": "2019-12-18 09:28",
"conferenceState": "Created",
"accessNumber": "+991117",
"language": "zh-CN",
"passwordEntry": [
{
"conferenceRole": "chair",
"password": "******"
},
{
"conferenceRole": "general",
"password": "******"
}
],
"userUUID": "ff808081699b56cb0169be103500012b",
"scheduserName": "user8002",
"multiStreamFlag": 1,
"conferenceType": 0,
"confType": "IMMEDIATELY",
"isAutoMute": 1,
"isAutoRecord": 0,
"chairJoinUri": "https://c.meeting.125339.com/#/j/914083136/6a30b8b5a325105da031442627828e496f91021ece36405f",
"guestJoinUri": "https://c.meeting.125339.com/#/j/914083136/9505dc3349228b1ce0db8165590cc977bcff89785130fe0d",
"recordType": 0,
"recordAuxStream": 0,
"confConfigInfo": {
"isSendNotify": true,
"isSendSms": true,
"isAutoMute": true
},
"vmrFlag": 0,
"scheduleVmr": false,
"isHasRecordFile": false,
"partAttendeeInfo": [
{
"phone": "+99111*****815",
"name": "user01",
"role": 0,
"isMute": 0,
"type": "normal"
}
],
"terminlCount": 0,
"normalCount": 1,
"deptName": "wangyue",
"confUUID": "050c7898216811eaa6958bf3bb9ac167"
}
],
"offset": 0,
"limit": 20,
"count": 1
}
```
## 错误码<a name="section7638934101419"></a>
如果遇到"MMC"或者"USG"开头的错误码,请参考接口文档中错误码表
## CURL命令示例<a name="section2790610197"></a>
```
curl -k -i -X GET -H 'X-Access-Token:stbX5ElstO5QwOwPB9KGQWUZ1DHoFrTsQjjC' https://apigw.125339.com.cn/v1/mmc/management/conferences
```
FILE:references/UpdateMeeting.md
# 编辑预约会议 - UpdateMeeting<a name="ZH-CN_TOPIC_0212714519"></a>
## 描述<a name="section698218449183"></a>
该接口用于修改已预约的会议。会议开始后,不能被修改。
## URI<a name="section5402174021111"></a>
PUT /v1/mmc/management/conferences
## 请求参数<a name="section1997124142020"></a>
**表 1** 参数说明
<a name="table1065133153514"></a>
| 参数 | 是否必须 | 类型 | 位置 | 描述 |
|---|---|---|---|---|
| conferenceID | 是 | String | Query | 会议ID。 说明: 创建会议时返回的conferenceID。不是vmrConferenceID。 |
| userUUID | 否 | String | Query | 用户的UUID。 说明: 该参数将废弃,请勿使用。 |
| X-Access-Token | 是 | String | Header | 授权令牌。获取“ 执行App ID鉴权 ”响应的accessToken。 |
| X-Authorization-Type | 否 | String | Header | 标识是否为第三方portal过来的请求。 说明: 该参数将废弃,请勿使用。 |
| X-Site-Id | 否 | String | Header | 用于区分到哪个HCSO站点鉴权。 说明: 该参数将废弃,请勿使用。 |
| conferenceType | 否 | Integer | Body | 创建会议类型(默认为普通会议)。 0 : 普通会议。 1:周期会议,此时 “cycleParams” 必须填写。 |
| startTime | 否 | String | Body | 会议开始时间(UTC时间)。格式:yyyy-MM-dd HH:mm。 说明: 如果没有指定开始时间或填空串,则表示会议马上开始 时间是UTC时间,即0时区的时间 |
| length | 否 | Integer | Body | 会议持续时长,单位分钟。默认30分钟。 最大1440分钟(24小时),最小15分钟。 |
| subject | 否 | String | Body | 会议主题。长度限制为128个字符。 |
| mediaTypes | 是 | String | Body | 会议的媒体类型。 Voice:语音会议 HDVideo:视频会议 |
| groupuri | 否 | String | Body | 软终端创建即时会议时在当前字段带临时群组ID,由服务器在邀请其他与会者时在或者conference-info头域中携带。 长度限制为31个字符。 |
| attendees | 否 | Array of Attendee objects | Body | 与会者列表。 |
| cycleParams | 否 | CycleParams object | Body | 周期会议的参数,当会议是周期会议的时候该参数必须填写。 |
| isAutoRecord | 否 | Integer | Body | 会议是否自动启动录制,在录播类型为:录播、录播+直播时才生效。默认为不自动启动。 1:自动启动录制 0:不自动启动录制 |
| encryptMode | 否 | Integer | Body | 会议媒体加密模式。默认值由企业级的配置填充。 0:自适应加密 1 : 强制加密 2 : 不加密 |
| language | 否 | String | Body | 会议通知短信或邮件的语言。默认中文。 zh-CN:中文 en-US:英文 |
| timeZoneID | 否 | String | Body | 会议通知中会议时间的时区信息。时区信息,参考 时区映射关系 。 说明: 举例:“timeZoneID”:"26",则通过移动会议发送的会议通知中的时间将会标记为如“2021/11/11 星期四 00:00 - 02:00 (GMT) 格林威治标准时间:都柏林, 爱丁堡, 里斯本, 伦敦”。 非周期会议,如果会议通知是通过第三方系统发送,则这个字段不用填写。 |
| recordType | 否 | Integer | Body | 录播类型。默认为禁用。 0: 禁用 1: 直播 2: 录播 3: 直播+录播 |
| liveAddress | 否 | String | Body | 主流直播推流地址,在录播类型为 :直播、直播+录播时有效。最大不超过255个字符。 |
| auxAddress | 否 | String | Body | 辅流直播推流地址,在录播类型为 :直播、直播+录播时有效。最大不超过255个字符。 |
| recordAuxStream | 否 | Integer | Body | 是否录制辅流,在录播类型为:录播、录播+直播时有效。默认只录制视频主流,不录制辅流。 0:不录制 1:录制 |
| confConfigInfo | 否 | ConfConfigInfo object | Body | 会议其他配置信息。 |
| recordAuthType | 否 | Integer | Body | 录播观看鉴权方式,在录播类型为:录播、直播+录播时有效。 0:可通过链接观看/下载 1:企业用户可观看/下载 2:与会者可观看/下载 |
| vmrFlag | 否 | Integer | Body | 是否使用云会议室召开预约会议。默认不使用云会议室。 0:不使用云会议室 1:使用云会议室 说明: vmrFlag不支持修改。 |
| vmrID | 否 | String | Body | 绑定给当前创会账号的VMR ID。通过 查询云会议室及个人会议ID 接口获取。 说明: vmrID取上述查询接口中返回的id,不是vmrId。 创建个人会议ID的会议时,使用vmrMode=0的VMR;创建云会议室的会议时,使用vmrMode=1的VMR vmrID不支持修改。 |
| concurrentParticipants | 否 | Integer | Body | 会议方数,会议最大与会人数限制。 0:无限制 大于0:会议最大与会人数 |
| supportSimultaneousInterpretation | 否 | Boolean | Body | 会议是否支持同声传译 true:支持 false:不支持 |
| confResType | 否 | Integer | Body | 会议资源类型,此参数创建后不支持修改: 0: 并发 1: 云会议室 2: 网络研讨会 3: 预留模式,暂未开放 |
## 状态码<a name="section79356216109"></a>
**表 2** 状态码说明
<a name="table102780442391"></a>
| HTTP状态码 | 描述 |
|---|---|
| 200 | 操作成功。 |
| 400 | 参数异常。 |
| 401 | 未鉴权或鉴权失败。 |
| 403 | 权限受限。 |
| 500 | 服务端异常。 |
## 响应参数<a name="section498722842014"></a>
**表 3** 响应参数
<a name="table4990175112163"></a>
| 参数 | 类型 | 描述 |
|---|---|---|
| [数组元素] | Array of ConferenceInfo | 会议信息列表。 |
## 请求消息示例<a name="section1498763918202"></a>
```
PUT /v1/mmc/management/conferences?conferenceID=914087436
Connection: keep-alive
X-Access-Token: stbX5ElstO5QwOwPB9KGQWUZ1DHoFrTsQjjC
Content-Type: application/json
user-agent: WeLink-desktop
Content-Length: 372
Host: apigw.125339.com.cn
User-Agent: Apache-HttpClient/4.5.3 (Java/1.8.0_191)
{
"mediaTypes": "HDVideo",
"startTime": "2022-08-30 12:00",
"length": 120,
"attendees": [
{
"accountId": "[email protected]",
"appId": "caaab5a3e584497990f6a9b582a0ae42"
}
],
"subject": "例行会议"
}
```
## 响应消息示例<a name="section339419481201"></a>
```
HTTP/1.1 200
Date: Wed, 18 Dec 2019 06:20:40 GMT
Content-Type: application/json;charset=UTF-8
Content-Length: 1157
Connection: keep-alive
http_proxy_id: 462abfcfa8a41c2c5450eb7648bf5ad2
Server: api-gateway
X-Request-Id: 7ba6f742610c03a64262b126fb336a5d
[
{
"conferenceID": "914673889",
"mediaTypes": "Data,Voice,HDVideo",
"subject": "例行会议",
"size": 1,
"timeZoneID": "56",
"startTime": "2022-08-30 12:00",
"endTime": "2022-08-30 13:00",
"conferenceState": "Schedule",
"accessNumber": "+991117",
"language": "zh-CN",
"passwordEntry": [
{
"conferenceRole": "chair",
"password": "******"
},
{
"conferenceRole": "general",
"password": "******"
}
],
"userUUID": "ff80808167ef1edf0167f339533d05a6",
"scheduserName": "金秘书",
"conferenceType": 0,
"confType": "FUTURE",
"isAutoMute": 1,
"isAutoRecord": 0,
"chairJoinUri": "https://c.meeting.125339.com/#/j/914673889/6a30b8b5a325105da031442627828e496f91021ece36405f",
"guestJoinUri": "https://c.meeting.125339.com/#/j/914673889/9505dc3349228b1ce0db8165590cc977bcff89785130fe0d",
"recordType": 2,
"confConfigInfo": {
"isSendNotify": false,
"isSendSms": false,
"isAutoMute": true
},
"vmrFlag": 0,
"partAttendeeInfo": [
{
"phone": "+99111********4158",
"name": "张三",
"type": "normal"
}
],
"terminlCount": 0,
"normalCount": 1,
"deptName": "企业协同云服务项目群"
}
]
```
## 错误码<a name="section69831715181215"></a>
如果遇到"MMC"或者"USG"开头的错误码,请参考接口文档中错误码表
## CURL命令示例<a name="section2790610197"></a>
```
curl -k -i -H 'content-type: application/json' -X PUT -H 'X-Access-Token:stbX5ElstO5QwOwPB9KGQWUZ1DHoFrTsQjjC' -d '{"mediaTypes": "Voice","attendees": [{"name": "user02","role": 1,"phone": "+8657*******"}],"conferenceType": "0","subject": "user02 conference"}' 'https://apigw.125339.com.cn/v1/mmc/management/conferences?conferenceID=914087436'
```
FILE:references/ShowHisMeetingDetail.md
# 查询历史会议详情 - ShowHisMeetingDetail<a name="ZH-CN_TOPIC_0212714501"></a>
## 描述<a name="section17948858131615"></a>
该接口用户查询指定历史会议的详情。管理员可以查询本企业内所有的历史会议详情,普通用户仅能查询自己创建或者被邀请的历史会议详情。
## URI<a name="section1392764619274"></a>
GET /v1/mmc/management/conferences/history/confDetail
## 请求参数<a name="section1997124142020"></a>
**表 1** 参数说明
<a name="table1285113481520"></a>
| 参数 | 是否必须 | 类型 | 位置 | 描述 |
|---|---|---|---|---|
| confUUID | 是 | String | Query | 会议UUID。 |
| offset | 否 | Integer | Query | 查询偏移量。默认为0。针对 PageParticipant 中的与会者分页。 |
| limit | 否 | Integer | Query | 查询数量。默认值20。 |
| searchKey | 否 | String | Query | 查询条件 。会议主题、会议预约人和会议ID等可作为搜索内容。长度限制为1-128个字符。 |
| userUUID | 否 | String | Query | 用户的UUID。 说明: 该参数将废弃,请勿使用。 |
| X-Access-Token | 是 | String | Header | 授权令牌。获取“ 执行App ID鉴权 ”响应的accessToken。 |
| X-Type | 否 | Integer | Header | 默认值为0。 0:不区分会议室和与会人。 1:分页查询区分会议室和与会人,结果合并返回。 2:单独查询会议室与与会人,结果也是单独返回。 |
| X-Query-Type | 否 | Integer | Header | 当 “X-Type” 为 “2” 时,该字段有效。默认值为 “0” 。 0:查询与会人。 1:查询终端。 |
| X-Authorization-Type | 否 | String | Header | 标识是否为第三方portal过来的请求。 说明: 该参数将废弃,请勿使用。 |
| X-Site-Id | 否 | String | Header | 用于区分到哪个HCSO站点鉴权。 说明: 该参数将废弃,请勿使用。 |
## 状态码<a name="section18795183024715"></a>
**表 2** 状态码说明
<a name="table102780442391"></a>
| HTTP状态码 | 描述 |
|---|---|
| 200 | 操作成功。 |
| 400 | 参数异常。 |
| 401 | 未鉴权或鉴权失败。 |
| 403 | 权限受限。 |
| 500 | 服务端异常。 |
## 响应参数<a name="section498722842014"></a>
**表 3** 响应参数
<a name="table4990175112163"></a>
| 参数 | 类型 | 描述 |
|---|---|---|
| conferenceData | ConferenceInfo object | 会议信息。 |
| data | PageParticipant object | 被邀请的与会者信息。包含预约会议时邀请的与会者。 说明: 不返回会中主动加入的与会者信息。 |
## 请求消息示例<a name="section1498763918202"></a>
```
GET /v1/mmc/management/conferences/history/confDetail?confUUID=9a0fa6d10a5b11eaae5e191763c22c0e
Connection: keep-alive
X-Access-Token: stbX5ElstO5QwOwPB9KGQWUZ1DHoFrTsQjjC
user-agent: WeLink-desktop
Host: apigw.125339.com.cn
User-Agent: Apache-HttpClient/4.5.3 (Java/1.8.0_191)
```
## 响应消息示例<a name="section339419481201"></a>
```
HTTP/1.1 200
Date: Wed, 18 Dec 2019 06:20:40 GMT
Content-Type: application/json;charset=UTF-8
Content-Length: 1816
Connection: keep-alive
Expires: 0
Pragma: No-cache
Cache-Control: no-cache
http_proxy_id: b74350ba75078e9ad1ec3610f2ec5550
Server: api-gateway
X-Request-Id: e71ece483fad1f909dd45c796af8360
{
"conferenceData": {
"conferenceID": "914083388",
"mediaTypes": "Data,Voice,Video",
"subject": "user8001测试会议",
"size": 1,
"timeZoneID": "56",
"startTime": "2019-11-18 23:31",
"endTime": "2019-11-18 23:32",
"accessNumber": "+991117",
"language": "zh-CN",
"passwordEntry": [
{
"conferenceRole": "chair",
"password": "******"
},
{
"conferenceRole": "general",
"password": "******"
}
],
"userUUID": "ff8080816a024f05016a4e2342480a60",
"scheduserName": "test008",
"multiStreamFlag": 1,
"conferenceType": 0,
"confType": "IMMEDIATELY",
"isAutoMute": 1,
"isAutoRecord": 0,
"chairJoinUri": "https://c.meeting.125339.com/#/j/914083388/69a5b84756d19dc9a222805819ec68945f8d86369d966d43",
"guestJoinUri": "https://c.meeting.125339.com/#/j/914083388/1f215673e636444b55845ee1d1af630e8d8ca0235e491972",
"recordType": 0,
"recordAuxStream": 0,
"recordAuthType": 0,
"confConfigInfo": {
"prolongLength": 15,
"isGuestFreePwd": false,
"isSendNotify": true,
"isSendSms": true,
"isAutoMute": true,
"isSendCalendar": true,
"callInRestriction": 0,
"allowGuestStartConf": true,
"isHardTerminalAutoMute": true,
"enableWaitingRoom": true
},
"vmrFlag": 0,
"scheduleVmr": false,
"isHasRecordFile": false,
"partAttendeeInfo": [
{
"phone": "+99111****380",
"name": "user8002",
"type": "normal"
}
],
"terminlCount": 0,
"normalCount": 1,
"deptName": "wangyue"
},
"data": {
"offset": 0,
"limit": 20,
"count": 1,
"data": [
{
"participantID": "+991116004380",
"name": "user8002",
"role": 1,
"state": "MEETTING",
"attendeeType": "normal",
"accountId": "user8002@corpnew",
"sms": "+8612*****5965",
"deptName": "wangyue",
"userUUID": "ff808081699b56cb0169be103500012b"
}
]
}
}
```
## 错误码<a name="section11516235143011"></a>
如果遇到"MMC"或者"USG"开头的错误码,请参考接口文档中错误码表
## CURL命令示例<a name="section4952152111818"></a>
```
curl -k -i -X GET -H 'X-Access-Token:stbX5ElstO5QwOwPB9KGQWUZ1DHoFrTsQjjC' 'https://apigw.125339.com.cn/v1/mmc/management/conferences/history/confDetail?confUUID=9a0fa6d10a5b11eaae5e191763c22c0e'
```
FILE:references/DeleteRecordings.md
# 批量删除录制 - DeleteRecordings<a name="ZH-CN_TOPIC_0212714572"></a>
## 描述<a name="section698218449183"></a>
该接口用于批量删除会议的录制。
## URI<a name="section1331211304272"></a>
DELETE /v1/mmc/management/record/files
## 请求参数<a name="section1997124142020"></a>
**表 1** 参数说明
<a name="table1285113481520"></a>
| 参数 | 是否必须 | 类型 | 位置 | 描述 |
|---|---|---|---|---|
| confUUIDs | 是 | String | Query | 会议UUID列表,多个会议UUID之间以英文逗号隔开。 |
| userUUID | 否 | String | Query | 用户的UUID。 说明: 该参数将废弃,请勿使用。 |
| X-Access-Token | 是 | String | Header | 授权令牌。获取“ 执行App ID鉴权 ”响应的accessToken。 |
| X-Authorization-Type | 否 | String | Header | 标识是否为第三方portal过来的请求。 说明: 该参数将废弃,请勿使用。 |
| X-Site-Id | 否 | String | Header | 用于区分到哪个HCSO站点鉴权。 说明: 该参数将废弃,请勿使用。 |
## 状态码<a name="section15337174804411"></a>
**表 2** 状态码说明
<a name="table102780442391"></a>
| HTTP状态码 | 描述 |
|---|---|
| 200 | 操作成功。 |
| 400 | 参数异常。 |
| 401 | 未鉴权或鉴权失败。 |
| 403 | 权限受限。 |
| 500 | 服务端异常。 |
## 响应参数<a name="section498722842014"></a>
无
## 请求消息示例<a name="section11143759102417"></a>
```
DELETE /v1/mmc/management/record/files?confUUIDs=51adf610220411eaaae03f22d33cc26b
Connection: keep-alive
X-Access-Token: stbX5ElstO5QwOwPB9KGQWUZ1DHoFrTsQjjC
user-agent: WeLink-desktop
Host: apigw.125339.com.cn
User-Agent: Apache-HttpClient/4.5.3 (Java/1.8.0_191)
```
## 响应消息示例<a name="section339419481201"></a>
```
HTTP/1.1 200
Date: Wed, 18 Dec 2019 06:20:40 GMT
Content-Type: application/json;charset=UTF-8
Content-Length: 39
Connection: keep-alive
http_proxy_id: 91e7ab61cb9d601d27d7d6d6490e7eee
Server: api-gateway
X-Request-Id: 0f01f95bf9c4b4235226d93c19f42396
```
## 错误码<a name="section1779215942712"></a>
如果遇到"MMC"或者"USG"开头的错误码,请参考接口文档中错误码表
## CURL命令示例<a name="section2790610197"></a>
```
curl -k -i -X DELETE -H 'X-Access-Token:stbX5ElstO5QwOwPB9KGQWUZ1DHoFrTsQjjC' https://apigw.125339.com.cn/v1/mmc/management/record/files?confUUIDs=51adf610220411eaaae03f22d33cc26b
```
FILE:references/ListOnlineConfAttendee.md
# 查询在线会议与会者信息 - ListOnlineConfAttendee<a name="ZH-CN_TOPIC_0000002112516106"></a>
## 描述<a name="section1320411065418"></a>
该接口用于查询指定会议的在线与会者信息。
## URI<a name="section379619558285"></a>
GET /v1/mmc/management/conferences/online/conf-attendee
## 请求参数<a name="section220581045418"></a>
**表 1** 参数说明
<a name="table120571013547"></a>
| 参数 | 是否必须 | 类型 | 位置 | 描述 |
|---|---|---|---|---|
| X-Access-Token | 是 | String | Header | 授权令牌。获取“ 执行App ID鉴权 ”响应的accessToken。 |
| conf_id | 是 | String | Query | 会议ID。 |
| offset | 否 | Integer | Query | 记录数偏移.默认为0。 |
| limit | 否 | Integer | Query | 返回的与会者记录数。默认是20, 最大500条。 |
| search_key | 否 | Integer | Query | 查询条件,支持name、call_number、third_account查询。 |
## 状态码<a name="section149720335114"></a>
**表 2** 状态码说明
<a name="table102780442391"></a>
| HTTP状态码 | 描述 |
|---|---|
| 200 | 操作成功。 |
| 400 | 参数异常。 |
| 401 | 未鉴权或鉴权失败。 |
| 403 | 权限受限。 |
| 500 | 服务端异常。 |
## 响应参数<a name="section920651085413"></a>
**表 3** 响应参数
<a name="table1420618109547"></a>
| 参数 | 类型 | 描述 |
|---|---|---|
| data | Array of OnlineAttendeeRecordInfo objects | 在线与会者信息列表 。 |
| offset | Integer | 记录数偏移,第几条。 |
| limit | Integer | 每页的记录数。 |
| count | Integer | 总记录数 |
**表 4** OnlineAttendeeRecordInfo 数据结构
<a name="table637344121814"></a>
| 参数 | 类型 | 描述 |
|---|---|---|
| participant_id | String | 与会者标识。 |
| name | String | 与会者名称。 |
| call_number | String | 呼叫号码。 |
| role | Integer | 会议中的角色,枚举值如下: 1:会议主席 0:普通与会者。 |
| third_account | String | 开放性场景标识第三方账号信息。 |
| account | String | 用户账号。 |
| user_id | String | 用户UUID。 |
## 请求消息示例<a name="section32075107547"></a>
```
GET /v1/mmc/management/conferences/online/conf-attendee?conf_id=964138987&search_key=wu
Connection: keep-alive
X-Access-Token: *******
user-agent: WeLink-desktop
Host: apigw.125339.com.cn
User-Agent: Apache-HttpClient/4.5.3 (Java/1.8.0_191)
```
## 响应消息示例<a name="section19208410165412"></a>
```
HTTP/1.1 200 OK
X-Request-Id: 0905d26b-8de3-42f3-8a35-e8cff505ea74
Pragma: no-cache
Cache-Control: no-cache
Expires: Thu, 01 Jan 1970 00:00:00 GMT
X-Xss-Protection: 1; mode=block
X-Download-Options: noopen
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-Frame-Options: SAMEORIGIN
Content-Security-Policy: connect-src 'self' *.125339.com ;style-src 'self' 'unsafe-inline' 'unsafe-eval';object-src 'self'; font-src 'self' data:;
Vary: Origin,Access-Control-Request-Method,Access-Control-Request-Headers
Etag: "0765cdce0f557b279da32b567609d4ba5"
Content-Type: application/json;charset=UTF-8
Content-Length: 17
Date: Thu, 14 Nov 2024 02:19:47 GMT
X-Envoy-Upstream-Service-Time: 123
Server: istio-envoy
{
"data": [
{
"participant_id": "afa4157fa71611ef8f3fc33c80df3afd",
"name": "test",
"call_number": "+8657135*****769",
"role": 1,
"third_account": "testAccount",
"account": "Auto-5ee7fc8cc06d470db323f1c4ca4f914e",
"user_id": "17486137a62f47138b01ca53e9e1de79"
}
],
"offset": 0,
"limit": 20,
"count": 1
}
```
## 错误码<a name="section1208110135417"></a>
如果遇到"MMC"或者"USG"开头的错误码,请参考接口文档中错误码表
## CURL命令示例<a name="section3208810175415"></a>
```
curl -k -i -X GET -H "X-Access-Token:******" https://apigw.125339.com.cn/v1/mmc/management/conferences/online/conf-attendee?conf_id=964138987&search_key=wu
```
FILE:references/ShowRecordingFileDownloadUrls.md
# 查询录制文件下载链接 - ShowRecordingFileDownloadUrls<a name="ZH-CN_TOPIC_0000001107892998"></a>
## 描述<a name="section17948858131615"></a>
该接口用于查询指定会议录制文件下载链接。
> **说明:**
>- 仅企业管理员权限的账号才能查询录制文件的下载链接
## URI<a name="section11103208192715"></a>
GET /v1/mmc/management/record/downloadurls
## 请求参数<a name="section1997124142020"></a>
**表 1** 参数说明
<a name="table1285113481520"></a>
| 参数 | 是否必须 | 类型 | 位置 | 描述 |
|---|---|---|---|---|
| confUUID | 是 | String | Query | 会议UUID(通过 查询录制列表 获取)。 |
| offset | 否 | Integer | Query | 查询偏移量。默认为0。 |
| limit | 否 | Integer | Query | 查询数量。默认是20,最大500条。 |
| X-Access-Token | 是 | String | Header | 授权令牌。获取“ 执行App ID鉴权 ”响应的accessToken。 |
| X-Authorization-Type | 否 | String | Header | 标识是否为第三方portal过来的请求。 说明: 该参数将废弃,请勿使用。 |
| X-Site-Id | 否 | String | Header | 用于区分到哪个HCSO站点鉴权。 说明: 该参数将废弃,请勿使用。 |
## 状态码<a name="section963985011428"></a>
**表 2** 状态码说明
<a name="table102780442391"></a>
| HTTP状态码 | 描述 |
|---|---|
| 200 | 操作成功。 |
| 400 | 参数异常。 |
| 401 | 未鉴权或鉴权失败。 |
| 403 | 权限受限。 |
| 500 | 服务端异常。 |
## 响应参数<a name="section498722842014"></a>
**表 3** 响应参数
<a name="table6981112405218"></a>
| 参数 | 类型 | 描述 |
|---|---|---|
| recordUrls | Array of DownloadInfo objects | 会议录制文件下载链接信息。 |
**表 4** DownloadInfo数据结构
<a name="table965442515915"></a>
| 参数 | 类型 | 描述 |
|---|---|---|
| confUuid | String | 会议UUID。 |
| urls | Array of UrlInfo objects | 下载链接信息。 |
**表 5** UrlInfo数据结构
<a name="table5334113071114"></a>
| 参数 | 类型 | 描述 |
|---|---|---|
| token | String | 下载鉴权token,下载文件时,使用该token鉴权。(一小时内有效,使用后立即失效)。 |
| fileType | String | 文件类型。 Aux:辅流(会议中的共享画面;分辨率为720p) Hd:高清(会议中的视频画面;分辨率和会议中视频画面的分辨率一致,1080p或者720p) Sd:标清(会议中视频画面和共享画面的合成画面,视频画面是大画面,共享画面是小画面,共享画面布局在右下方;分辨率为4CIF) 说明: 单会议录制时长超过3小时将拆分成多个文件,有多个下载链接(旧版录制文件仍按1GB拆分)。 |
| url | String | 文件下载url,最大1000个字符。 |
## 请求消息示例<a name="section1498763918202"></a>
```
GET /v1/mmc/management/record/downloadurls?confUUID=51adf610220411eaaae03f22d33cc26b
Connection: keep-alive
X-Access-Token: stbX5ElstO5QwOwPB9KGQWUZ1DHoFrTsQjjC
user-agent: WeLink-desktop
Host: apigw.125339.com.cn
User-Agent: Apache-HttpClient/4.5.3 (Java/1.8.0_191)
```
## 响应消息示例<a name="section339419481201"></a>
```
HTTP/1.1 200
Date: Wed, 18 Dec 2019 06:20:40 GMT
Content-Type: application/json;charset=UTF-8
Content-Length: 505
Connection: keep-alive
Expires: 0
Pragma: No-cache
Cache-Control: no-cache
http_proxy_id: 4556e88832e5990723d1712395f5bee8
Server: api-gateway
X-Request-Id: 629891c82bb852d8796e2f6acc74721e
{
"recordUrls": [
{
"confUuid": "ef67f6ada67e11eba6374db4b9a61d2c",
"urls": [
{
"token": "f8fe906eaa6d690ef72bc831df54ffd9fc906412aefd329ace96d100cf1bc4be",
"fileType": "Aux",
"url": "https://100.85.230.37/download/typeThree/video/resource/00037/00037ed2-351a-4741-8ce6-a2078f21ba6b/videoAux/0_0.mp4"
},
{
"token": "ad8a6f6e009d643ca21f8be306e9e2cadd726360236f07bd176c1b85423b7136",
"fileType": "Hd",
"url": "https://100.85.230.37/download/typeThree/video/resource/00037/00037ed2-351a-4741-8ce6-a2078f21ba6b/videoHD/0_0.mp4"
},
{
"token": "fe7a59c69e3f97e831c83d55193a061e5e33e019f4704e5eb441c7f1fa629ad2",
"fileType": "Sd",
"url": "https://100.85.230.37/download/typeThree/video/resource/00037/00037ed2-351a-4741-8ce6-a2078f21ba6b/videoSD/0_0.mp4"
},
{
"token": "38e6b3fe7f7c62dd2141a408f4f64b911d1b58a5e04a4f6e0cfd2602181a8ad3",
"fileType": "Aux",
"url": "https://100.85.230.37/download/typeThree/video/resource/00037/00037ed2-351a-4741-8ce6-a2078f21ba6b/videoAux/0_1.mp4"
},
{
"token": "843731642aba1ebb720195a7c44f3f1e32ab409d29b2ecd1c58f30ee269f6da6",
"fileType": "Hd",
"url": "https://100.85.230.37/download/typeThree/video/resource/00037/00037ed2-351a-4741-8ce6-a2078f21ba6b/videoHD/0_1.mp4"
},
{
"token": "9fd3471e9dc047c3c345308f0cbed005f227bf48aa47875c7fe752c5a817cbd9",
"fileType": "Sd",
"url": "https://100.85.230.37/download/typeThree/video/resource/00037/00037ed2-351a-4741-8ce6-a2078f21ba6b/videoSD/0_1.mp4"
}
]
}
]
}
```
## 下载示例<a name="section450918479153"></a>
通过调用接口,获取到下载链接和鉴权token后,可以通过以下示例代码(Java)下载录制文件:
```
/**
* 录制文件下载
*
* @param downloadUrl 录制文件下载链接
* @param localPath 本地保存路径
* @param token 下载鉴权token
*/
public static void httpDownload(String downloadUrl, String localPath, String token) {
int byteRead;
try {
URL url = new URL(downloadUrl);
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
// 请求头域中携带下载鉴权token
connection.setRequestProperty("Authorization", token);
connection.setHostnameVerifier(new HostnameVerifier() {
@Override
public Boolean verify(String hostname, SSLSession sslSession) {
return true;
}
});
TrustManager[] trustManagers = new TrustManager[]{
new X509TrustManager() {
public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
}
public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
}
public X509Certificate[] getAcceptedIssuers() {
return null;
}
}
};
SSLContext ctx = SSLContext.getInstance("TLS");
ctx.init(null, trustManagers, null);
connection.setSSLSocketFactory(ctx.getSocketFactory());
// 获取文件流
InputStream inStream = connection.getInputStream();
// 保存到本地路径下
FileOutputStream fs = new FileOutputStream(localPath);
byte[] buffer = new byte[1024];
while ((byteRead = inStream.read(buffer)) != -1) {
fs.write(buffer, 0, byteRead);
}
inStream.close();
fs.close();
} catch (IOException | KeyManagementException | NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
```
## 错误码<a name="section288814321256"></a>
如果遇到"MMC"或者"USG"开头的错误码,请参考接口文档中错误码表
## CURL命令示例<a name="section4952152111818"></a>
```
curl -k -i -X GET -H 'X-Access-Token:stbX5ElstO5QwOwPB9KGQWUZ1DHoFrTsQjjC' 'https://apigw.125339.com.cn/v1/mmc/management/record/downloadurls?confUUID=51adf610220411eaaae03f22d33cc26b'
```
FILE:references/CancelMeeting.md
# 取消预约会议 - CancelMeeting<a name="ZH-CN_TOPIC_0212714547"></a>
## 描述<a name="section698218449183"></a>
该接口用于取消已预约的会议。企业管理员可以取消本企业下用户创建的会议,普通用户只能取消自己创建的会议。
## URI<a name="section188661421151117"></a>
DELETE /v1/mmc/management/conferences
## 请求参数<a name="section1997124142020"></a>
**表 1** 参数说明
<a name="table1285113481520"></a>
| 参数 | 是否必须 | 类型 | 位置 | 描述 |
|---|---|---|---|---|
| conferenceID | 是 | String | Query | 会议ID。 说明: 创建会议时返回的conferenceID。不是vmrConferenceID。 |
| userUUID | 否 | String | Query | 用户的UUID。 说明: 该参数将废弃,请勿使用。 |
| type | 否 | Integer | Query | 取消会议操作类型。默认已召开的会议不能取消。 1:需要结束正在召开的会议 |
| X-Access-Token | 是 | String | Header | 授权令牌。获取“ 执行App ID鉴权 ”响应的accessToken。 |
| X-Authorization-Type | 否 | String | Header | 标识是否为第三方portal过来的请求。 说明: 该参数将废弃,请勿使用。 |
| X-Site-Id | 否 | String | Header | 用于区分到哪个HCSO站点鉴权。 说明: 该参数将废弃,请勿使用。 |
## 状态码<a name="section675018451427"></a>
**表 2** 状态码说明
<a name="table1053212578214"></a>
| HTTP状态码 | 描述 |
|---|---|
| 200 | 操作成功。 |
| 401 | 未鉴权或鉴权失败。 |
| 403 | 权限受限。 |
| 500 | 服务端异常。 |
## 响应参数<a name="section498722842014"></a>
无
## 请求消息示例<a name="section1498763918202"></a>
```
DELETE /v1/mmc/management/conferences?conferenceID=914087436
Connection: keep-alive
X-Access-Token: stbX5ElstO5QwOwPB9KGQWUZ1DHoFrTsQjjC
user-agent: WeLink-desktop
Host: apigw.125339.com.cn
User-Agent: Apache-HttpClient/4.5.3 (Java/1.8.0_191)
```
## 响应消息示例<a name="section339419481201"></a>
```
HTTP/1.1 200
Date: Wed, 18 Dec 2019 06:20:40 GMT
Content-Type: application/json;charset=UTF-8
Content-Length: 39
Connection: keep-alive
http_proxy_id: 40c9d32a92b43f85e5cd12617b49535b
Server: api-gateway
X-Request-Id: a02164ff20cbc841c6c0e9ab38a07e5b
```
## 错误码<a name="section12728183221012"></a>
如果遇到"MMC"或者"USG"开头的错误码,请参考接口文档中错误码表
## CURL命令示例<a name="section2790610197"></a>
```
curl -k -i -X DELETE -H 'X-Access-Token:stbX5ElstO5QwOwPB9KGQWUZ1DHoFrTsQjjC' 'https://apigw.125339.com.cn/v1/mmc/management/conferences?conferenceID=914087436'
```
FILE:references/SearchHisMeetings.md
# 查询历史会议列表 - SearchHisMeetings<a name="ZH-CN_TOPIC_0212714401"></a>
## 描述<a name="section17948858131615"></a>
该接口用于查询已经结束的会议。管理员可以查询本企业内所有的历史会议,普通用户仅能查询自己创建或者被邀请的历史会议。不带查询参数时,默认查询权限范围内的历史会议。
> **说明:**
>- 普通用户如果只是通过会议ID或者会议链接接入会议,不是预定者会前邀请或者会中主持人邀请的,则历史会议中无法查到
>- 如果同一个会议召开并结束多次,则会产生多条历史会议(会议ID相同,会议UUID不同)
>- 历史会议记录默认保留6个月,最长保留12个月。保留时间管理员可在“会议设置”的“历史会议留存时间”中修改
## URI<a name="section1392764619274"></a>
GET /v1/mmc/management/conferences/history
## 请求参数<a name="section1997124142020"></a>
**表 1** 参数说明
<a name="table1285113481520"></a>
| 参数 | 是否必须 | 类型 | 位置 | 描述 |
|---|---|---|---|---|
| userUUID | 否 | string | Query | 用户的UUID。 说明: 该参数将废弃,请勿使用。 |
| offset | 否 | Integer | Query | 查询偏移量。默认为0。 |
| limit | 否 | Integer | Query | 查询数量。默认是20,最大500条。 |
| searchKey | 否 | string | Query | 查询条件。会议主题、会议预约人和会议ID等可作为搜索内容。 |
| scheduledUUID | 否 | string | Query | 预约会议的UUID |
| queryAll | 否 | Boolean | Query | 是否查询企业下所有用户的历史会议。 true:查询所有用户的历史会议 false:仅查询管理员自己的历史会议 说明: 仅对企业管理员生效。 |
| startDate | 是 | long | Query | 查询的起始时间戳(单位毫秒)。 |
| endDate | 是 | long | Query | 查询的截止时间戳(单位毫秒)。 |
| sortType | 否 | String | Query | 查询结果排序类型。 ASC_StartTIME:根据会议开始时间升序排序 DSC_StartTIME:根据会议开始时间降序排序 ASC_RecordTYPE:根据是否具有录播文件排序,之后默认按照会议开始时间升序排序 DSC_RecordTYPE:根据是否含有录播文件排序,之后默认按照会议开始时间降序排序 |
| X-Access-Token | 是 | String | Header | 授权令牌。获取“ 执行App ID鉴权 ”响应的accessToken。 |
| X-Authorization-Type | 否 | String | Header | 标识是否为第三方portal过来的请求。 说明: 该参数将废弃,请勿使用。 |
| X-Site-Id | 否 | String | Header | 用于区分到哪个HCSO站点鉴权。 说明: 该参数将废弃,请勿使用。 |
## 状态码<a name="section11547950134517"></a>
**表 2** 状态码说明
<a name="table102780442391"></a>
| HTTP状态码 | 描述 |
|---|---|
| 200 | 操作成功。 |
| 400 | 参数异常。 |
| 401 | 未鉴权或鉴权失败。 |
| 403 | 权限受限。 |
| 500 | 服务端异常。 |
## 响应参数<a name="section498722842014"></a>
**表 3** 响应参数
<a name="table4990175112163"></a>
| 参数 | 类型 | 描述 |
|---|---|---|
| offset | Integer | 查询偏移量。 |
| limit | Integer | 每页的记录数。 |
| count | Integer | 总记录数。 |
| data | Array of ConferenceInfo objects | 会议列表。 |
## 请求消息示例<a name="section1498763918202"></a>
```
GET /v1/mmc/management/conferences/history?startDate=1574092800000&endDate=1574179199999
Connection: keep-alive
X-Access-Token: stbX5ElstO5QwOwPB9KGQWUZ1DHoFrTsQjjC
user-agent: WeLink-desktop
Host: apigw.125339.com.cn
User-Agent: Apache-HttpClient/4.5.3 (Java/1.8.0_191)
```
## 响应消息示例<a name="section339419481201"></a>
```
HTTP/1.1 200
Date: Wed, 18 Dec 2019 06:20:40 GMT
Content-Type: application/json;charset=UTF-8
Content-Length: 2420
Connection: keep-alive
Expires: 0
Pragma: No-cache
Cache-Control: no-cache
http_proxy_id: 43bee1151af8115d90358994a7c14cfc
Server: api-gateway
X-Request-Id: 53c883710d86aebf01e92ce7bcea1984
{
"data": [
{
"conferenceID": "914083388",
"mediaTypes": "Voice,Video,Data",
"subject": "user8001测试会议",
"size": 1,
"timeZoneID": "56",
"startTime": "2019-11-18 23:31",
"endTime": "2019-11-18 23:32",
"conferenceState": "Destroyed",
"accessNumber": "+991117",
"language": "zh-CN",
"passwordEntry": [
{
"conferenceRole": "general",
"password": "******"
}
],
"userUUID": "ff8080816a024f05016a4e2342480a60",
"scheduserName": "test008",
"multiStreamFlag": 1,
"conferenceType": 0,
"confType": "IMMEDIATELY",
"isAutoMute": 1,
"isAutoRecord": 0,
"guestJoinUri": "https://c.meeting.125339.com/#/j/914083388/1f215673e636444b55845ee1d1af630e8d8ca0235e491972",
"recordType": 0,
"recordAuxStream": 0,
"recordAuthType": 0,
"confConfigInfo": {
"prolongLength": 15,
"isGuestFreePwd": false,
"isSendNotify": true,
"isSendSms": true,
"isAutoMute": true,
"isSendCalendar": true,
"callInRestriction": 0,
"allowGuestStartConf": true,
"isHardTerminalAutoMute": true,
"enableWaitingRoom": true
},
"vmrFlag": 0,
"scheduleVmr": false,
"isHasRecordFile": false,
"partAttendeeInfo": [
{
"phone": "+99111****380",
"name": "user8002",
"type": "normal"
}
],
"terminlCount": 0,
"normalCount": 1,
"deptName": "wangyue",
"confUUID": "9a0fa6d10a5b11eaae5e191763c22c0e"
},
{
"conferenceID": "914088193",
"mediaTypes": "Voice,Video,Data",
"subject": "user8001的会议",
"size": 1,
"timeZoneID": "56",
"startTime": "2019-11-18 23:31",
"endTime": "2019-11-18 23:31",
"conferenceState": "Destroyed",
"accessNumber": "+991117",
"language": "zh-CN",
"passwordEntry": [
{
"conferenceRole": "general",
"password": "******"
}
],
"userUUID": "ff8080816a024f05016a4e2342480a60",
"scheduserName": "test008",
"multiStreamFlag": 1,
"conferenceType": 0,
"confType": "IMMEDIATELY",
"isAutoMute": 1,
"isAutoRecord": 0,
"guestJoinUri": "https://c.meeting.125339.com/#/j/914088193/5b00be0e5121eb2f6f865162a4bc7f1f7f05d37cd802dded",
"recordType": 2,
"recordAuxStream": 0,
"recordAuthType": 0,
"confConfigInfo": {
"prolongLength": 15,
"isGuestFreePwd": false,
"isSendNotify": true,
"isSendSms": true,
"isAutoMute": true,
"isSendCalendar": true,
"callInRestriction": 0,
"allowGuestStartConf": true,
"isHardTerminalAutoMute": true,
"enableWaitingRoom": true
},
"vmrFlag": 0,
"scheduleVmr": false,
"isHasRecordFile": false,
"partAttendeeInfo": [
{
"phone": "+991116004380",
"name": "user8002",
"type": "normal"
}
],
"terminlCount": 0,
"normalCount": 1,
"deptName": "wangyue",
"confUUID": "7c421ac60a5b11eaa5e83b30677ab12b"
},
{
"conferenceID": "914085971",
"mediaTypes": "Voice,Video,Data",
"subject": "user8001的会议",
"size": 1,
"timeZoneID": "56",
"startTime": "2019-11-18 23:30",
"endTime": "2019-11-18 23:31",
"conferenceState": "Destroyed",
"accessNumber": "+991117",
"language": "zh-CN",
"passwordEntry": [
{
"conferenceRole": "general",
"password": "******"
}
],
"userUUID": "ff8080816a024f05016a4e2342480a60",
"scheduserName": "test008",
"multiStreamFlag": 1,
"conferenceType": 0,
"confType": "IMMEDIATELY",
"isAutoMute": 1,
"isAutoRecord": 0,
"guestJoinUri": "https://c.meeting.125339.com/#/j/914085971/40300b325ad71ad1ff2c1dbdda1250328ccd8ec9ff45bd03",
"recordType": 2,
"recordAuxStream": 0,
"recordAuthType": 0,
"confConfigInfo": {
"prolongLength": 15,
"isGuestFreePwd": false,
"isSendNotify": true,
"isSendSms": true,
"isAutoMute": true,
"isSendCalendar": true,
"callInRestriction": 0,
"allowGuestStartConf": true,
"isHardTerminalAutoMute": true,
"enableWaitingRoom": true
},
"vmrFlag": 0,
"scheduleVmr": false,
"isHasRecordFile": false,
"partAttendeeInfo": [
{
"phone": "+99111****380",
"name": "user8002",
"type": "normal"
}
],
"terminlCount": 0,
"normalCount": 1,
"deptName": "wangyue",
"confUUID": "6d2a6cd90a5b11eaa5e8f14973e50d03"
}
],
"offset": 0,
"limit": 20,
"count": 3
}
```
## 错误码<a name="section10417115102813"></a>
如果遇到"MMC"或者"USG"开头的错误码,请参考接口文档中错误码表
## CURL命令示例<a name="section4952152111818"></a>
```
curl -k -i -X GET -H 'X-Access-Token:stbX5ElstO5QwOwPB9KGQWUZ1DHoFrTsQjjC' 'https://apigw.125339.com.cn/v1/mmc/management/conferences/history?startDate=1574092800000&endDate=1574179199999'
```
FILE:references/SearchAttendanceRecordsOfHisMeeting.md
# 查询历史会议的与会者记录 - SearchAttendanceRecordsOfHisMeeting<a name="ZH-CN_TOPIC_0212714385"></a>
## 描述<a name="section17948858131615"></a>
该接口用于查询指定历史会议的与会者记录。
## URI<a name="section379619558285"></a>
GET /v1/mmc/management/conferences/history/confAttendeeRecord
## 请求参数<a name="section1997124142020"></a>
**表 1** 参数说明
<a name="table1285113481520"></a>
| 参数 | 是否必须 | 类型 | 位置 | 描述 |
|---|---|---|---|---|
| confUUID | 是 | String | Query | 会议UUID。 |
| offset | 否 | Integer | Query | 查询偏移量。默认为0。 |
| limit | 否 | Integer | Query | 查询数量。默认值20,最大500条。 |
| searchKey | 否 | String | Query | 查询条件 。 |
| userUUID | 否 | String | Query | 用户的UUID。 说明: 该参数将废弃,请勿使用。 |
| X-Access-Token | 是 | String | Header | 授权令牌。获取“ 执行App ID鉴权 ”响应的accessToken。 |
| X-Authorization-Type | 否 | String | Header | 标识是否为第三方portal过来的请求。 说明: 该参数将废弃,请勿使用。 |
| X-Site-Id | 否 | String | Header | 用于区分到哪个HCSO站点鉴权。 说明: 该参数将废弃,请勿使用。 |
| Accept-Language | 否 | String | Header | 语言 。默认简体中文。 zh-CN:简体中文。 en-US:美国英文。 |
## 状态码<a name="section11564745135220"></a>
**表 2** 状态码说明
<a name="table102780442391"></a>
| HTTP状态码 | 描述 |
|---|---|
| 200 | 操作成功。 |
| 400 | 参数异常。 |
| 401 | 未鉴权或鉴权失败。 |
| 403 | 权限受限。 |
| 500 | 服务端异常。 |
## 响应参数<a name="section498722842014"></a>
**表 3** 响应参数
<a name="table6214171810123"></a>
| 参数 | 类型 | 描述 |
|---|---|---|
| offset | Integer | 查询偏移量。 |
| limit | Integer | 每页的记录数。 |
| count | Integer | 总记录数。 |
| data | Array of data objects | 与会者列表。 |
**表 4** data数据结构说明
<a name="table1281264113140"></a>
| 参数 | 类型 | 描述 |
|---|---|---|
| displayName | String | 与会者名称。 |
| callNumber | String | 号码。 |
| deviceType | String | 设备类型。 |
| joinTime | long | 入会时间(UTC时间,单位毫秒)。 |
| leftTime | long | 离会时间(UTC时间,单位毫秒)。 |
| mediaType | String | 媒体类型。 |
| deptName | String | 部门名称。 |
## 请求消息示例<a name="section1498763918202"></a>
```
GET /v1/mmc/management/conferences/history/confAttendeeRecord?confUUID=9a0fa6d10a5b11eaae5e191763c22c0e
Connection: keep-alive
X-Access-Token: stbX5ElstO5QwOwPB9KGQWUZ1DHoFrTsQjjC
user-agent: WeLink-desktop
Host: apigw.125339.com.cn
User-Agent: Apache-HttpClient/4.5.3 (Java/1.8.0_191)
```
## 响应消息示例<a name="section339419481201"></a>
```
HTTP/1.1 200
Date: Wed, 18 Dec 2019 06:20:40 GMT
Content-Type: application/json;charset=UTF-8
Content-Length: 337
Connection: keep-alive
Expires: 0
Pragma: No-cache
Cache-Control: no-cache
http_proxy_id: 2f3aa1fe64f6784b1eb6f75a67ef2b9d
Server: api-gateway
X-Request-Id: ba03d2ae3b805d8c545c83494c862b48
{
"data": [
{
"displayName": "user8002",
"callNumber": "+991116004380",
"deviceType": "软终端",
"joinTime": 1574119917872,
"leftTime": 1574119956881,
"mediaType": "视频",
"deptName": "wangyue"
},
{
"displayName": "+991116005905",
"callNumber": "+991116005905",
"deviceType": "软终端",
"joinTime": 1574119935467,
"leftTime": 1574119947620,
"mediaType": "视频",
"deptName": "wangyue"
}
],
"offset": 0,
"limit": 20,
"count": 2
}
```
## 错误码<a name="section1648691953419"></a>
如果遇到"MMC"或者"USG"开头的错误码,请参考接口文档中错误码表
## CURL命令示例<a name="section4952152111818"></a>
```
curl -k -i -X GET -H 'X-Access-Token:stbX5ElstO5QwOwPB9KGQWUZ1DHoFrTsQjjC' 'https://apigw.125339.com.cn/v1/mmc/management/conferences/history/confAttendeeRecord?confUUID=9a0fa6d10a5b11eaae5e191763c22c0e'
```
FILE:references/CreateAppIdToken.md
# 执行App ID鉴权 - CreateAppIdToken<a name="ZH-CN_TOPIC_0277183540"></a>
## 描述<a name="section698218449183"></a>
该接口使用App ID方式进行鉴权,鉴权通过后生成一个Access Token。App ID鉴权的原理介绍请参考https://www.125339.com.cn/developerCenter/ReBar/63/191
> **说明:**
>- 当clientType取值为72时,同一个userId,同时最多能创建64个Token。比如已经创建了64个Token,并且Token都在有效期内,再用同一个userId创建一个Token,前64个Token中最早创建的Token将失效。
>- 当clientType取值为非72时,同一个userId,同时最多能创建1个Token。
>- Token有效期是12\~24小时。
## URI<a name="section1089982010481"></a>
POST /v2/usg/acs/auth/appauth
## 请求参数<a name="section1997124142020"></a>
**表 1** 参数说明
<a name="table1285113481520"></a>
| 参数 | 是否必须 | 类型 | 位置 | 描述 |
|---|---|---|---|---|
| Authorization | 是 | String | Header | 携带应用鉴权信息。 规则:HMAC-SHA256 signature=HexEncode(HMAC256((appId + ":" + userId + ":" + expireTime + ":" + nonce), appKey)),access=base64(appId) 样例:HMAC-SHA256 signature=07f31aa9eafb06652c6899248b145c1a3264242e2ccf4c81b1b6eb99bb5c,access=ZmRiOGU0Njk5NTg2NDU4YmJkMTBjODM0ODcyZGNjNjI= 说明: 如携带了userId信息,则Body中,也需填写对应的userId信息。 (必填)鉴权头域携带access内容为对应颁发应用id进行base64编码。 |
| X-Token-Type | 是 | String | Header | Token类型设置为:LongTicket |
| Content-Type | 是 | String | Header | Body的媒体格式。 样例:application/json; charset=UTF-8 |
| X-Request-ID | 否 | String | Header | 请求requestId,用来标识一路请求,用于问题跟踪定位,建议使用UUID,若不携带,则后台自动生成。 |
| Accept-Language | 否 | String | Header | 语言参数,默认为中文zh-CN,英文为en-US。 |
| appId | 是 | String | Body | App ID。如何获取App ID请参考“ App ID的申请 ”“ App ID的申请 ”。 |
| clientType | 是 | Integer | Body | 登录账号类型。 72:API调用类型 登录客户端类型。 50:手机客户端 51:PAD客户端 52:PC客户端 53:电视客户端 54:大屏客户端 55:WEB客户端 72:API类型(Token不互踢) |
| corpId | 否 | String | Body | 企业ID。 说明: 当SP应用场景携带,如果corpId和userId字段未携带或值为空字符串时,当作SP默认管理员登录。 仅在SP模式下需要填写,单企业模式不要填写,否则会鉴权失败。 |
| expireTime | 是 | Long | Body | 应用鉴权信息过期时间戳,单位秒。 说明: 当收到App ID鉴权请求时服务端的Unix时间戳大于expireTime时,本次鉴权失败。 样例:如果要求App ID鉴权信息10分钟后过期,expireTime = 当前Unix时间戳 + 60*10。 如果要求应用鉴权信息始终不过期,expireTime = 0。 |
| nonce | 是 | String | Body | 随机字符串,用于计算应用鉴权信息。 minLength:32 maxLength:64 |
| userEmail | 否 | String | Body | email地址。 |
| userId | 否 | String | Body | 第三方用户ID。 说明: 当userId字段未携带或值为空字符串时,当作企业默认管理员登录。 |
| userName | 否 | String | Body | 用户名称。 |
| userPhone | 否 | String | Body | 手机号,例如中国大陆手机+86xxxxxxx |
| deptCode | 否 | String | Body | 部门编码。通过“ 查询部门及其一级子部门列表 ”接口获取。 |
## 状态码<a name="section94280449413"></a>
**表 2** 状态码说明
<a name="table18118135764112"></a>
| HTTP状态码 | 描述 |
|---|---|
| 200 | 操作成功。 |
| 400 | 参数异常。 |
| 401 | 鉴权失败。 |
| 403 | 没有权限。 |
| 412 | 账号被停用。 |
| 423 | 账号已被锁定。 |
| 500 | 服务端异常。 |
## 响应参数<a name="section1957919610182"></a>
**表 3** 响应参数
<a name="table1110424213369"></a>
| 参数 | 类型 | 描述 |
|---|---|---|
| accessToken | String | Access Token字符串。 |
| clientType | Integer | 登录账号类型。 72:API调用类型 登录客户端类型。 50:手机客户端 51:PAD客户端 52:PC客户端 53:电视客户端 54:大屏客户端 55:WEB客户端 72:API类型(Token不互踢) |
| createTime | Long | Access token的创建时间戳,单位:毫秒。 |
| daysPwdAvailable | Integer | 密码有效天数。 |
| delayDelete | Boolean | 是否延时删除状态。 |
| expireTime | Long | Access Token的失效时间戳,单位:秒。 |
| firstLogin | Boolean | 是否首次登录。 说明: 首次登录表示尚未修改过密码。首次登录时,系统会提醒用户需要修改密码。 默认值:false。 |
| forceLoginInd | Integer | 抢占登录标识。 0:非抢占 1:抢占(未启用) |
| proxyToken | ProxyTokenDTO object | 代理鉴权信息。 |
| pwdExpired | Boolean | 密码是否过期。 默认值:false。 |
| refreshCreateTime | Long | Refresh Token的创建时间戳,单位:毫秒。 |
| refreshExpireTime | Long | Refresh Token的失效时间戳,单位:秒。 |
| refreshToken | String | Refresh Token字符串。 |
| refreshValidPeriod | Long | Refresh Token有效时长,单位:秒。 |
| tokenIp | String | 用户IP。 |
| tokenType | Integer | Token类型。 0:用户ACCESS TOKEN 1:会控TOKEN 2:一次性TOKEN |
| user | UserInfo object | 用户鉴权信息。 |
| validPeriod | Long | Access Token的有效时长,单位:秒。 |
## 请求消息示例<a name="section1498763918202"></a>
```
POST /v2/usg/acs/auth/appauth
Connection: keep-alive
Content-Type: application/json
X-Request-ID: 5162fa32dc7e47afafeee39a72a2eec3
Accept-Language: zh-CN
Host: apigw.125339.com.cn
X-Token-Type: LongTicket
Authorization: HMAC-SHA256 signature=3eca3f0f1e90ed55de38388066d02f1b7a86571a8ce30823af1df7c4edd7e086,access=ZmRiOGU0Njk5NTg2NDU4YmJkMTBjODM0ODcyZGNjNjI=
User-Agent: Apache-HttpClient/4.5.3 (Java/1.8.0_191)
{
"appId": "fdb8e4699586458bbd10c834872dcc62",
"clientType": 72,
"expireTime": 1627722929,
"nonce": "EycLQsHwxhzK9OW8UEKWNfH2I3CGR2nINuU1EBpv162d42d92s",
"userEmail": "******",
"userId": "[email protected]",
"userName": "testuser",
"userPhone": "173****9092"
}
```
## 响应消息示例<a name="section339419481201"></a>
```
HTTP/1.1 200
"X-Envoy-Upstream-Service-Time": "230",
"Server": "api-gateway",
"X-Request-Id": "085d1f96cd9ddd6f3c50d70a0b2eb239",
"X-Content-Type-Options": "nosniff",
"Connection": "keep-alive",
"X-Download-Options": "noopen",
"Pragma": "No-cache",
"Date": "Sat, 31 Jul 2021 06:18:07 GMT",
"X-Frame-Options": "SAMEORIGIN",
"Strict-Transport-Security": "max-age=31536000; includeSubDomains",
"Cache-Control": "no-cache",
"X-Xss-Protection": "1; mode=block",
"Content-Security-Policy": "connect-src 'self' *.huaweicloud.com ;style-src 'self' 'unsafe-inline' 'unsafe-eval';object-src 'self'; font-src 'self' data:;",
"Expires": "Thu, 01 Jan 1970 00:00:00 GMT",
"Content-Length": "1250",
"Content-Type": "application/json"
{
"accessToken":"cnr1316vcp2ceIkbfko3z13Y2J8UdioOw0ER4kTK",
"tokenIp":"49.4.112.60",
"validPeriod":56326,
"expireTime":1627768613,
"createTime":1627712287360,
"user":{
"realm":"huaweicloud.com",
"userId":"53e2759d388e413abf6a56743a2694c5",
"ucloginAccount":"Auto-53e2759d388e413abf6a56743a2694c5",
"serviceAccount":"sip:[email protected]",
"numberHA1":"065eb94e5b090f70c77d4d1439f35b8e",
"alias1":null,
"companyId":"651543334",
"spId":"8a8df0a174a1c6680174a26f578b0000",
"companyDomain":null,
"userType":2,
"adminType":2,
"name":"[email protected]",
"nameEn":"",
"isBindPhone":null,
"freeUser":false,
"thirdAccount":"[email protected]",
"visionAccount":null,
"headPictureUrl":null,
"password":null,
"status":0,
"paidAccount":null,
"paidPassword":null,
"weLinkUser":false,
"appId":"fdb8e4699586458bbd10c834872dcc62",
"tr069Account":null,
"corpType":5,
"cloudUserId":"",
"grayUser":true
},
"clientType":72,
"forceLoginInd":null,
"firstLogin":false,
"pwdExpired":false,
"daysPwdAvailable":-19678,
"proxyToken":null,
"tokenType":0,
"refreshToken":"cnr13168neNyRDfomYEIci7zVjBBybZQG90fYdX2",
"refreshValidPeriod":2592000,
"refreshExpireTime":1630304287,
"refreshCreateTime":1627712287360
}
```
## 错误码<a name="section111851469514"></a>
如果遇到"MMC"或者"USG"开头的错误码,请参考接口文档中错误码表
## CURL命令示例<a name="section2790610197"></a>
```
curl -k -i -H 'content-type: application/json' -X POST -H 'Content-Type: application/json,Accept-Language: zh-CN,X-Token-Type: LongTicket,Authorization: HMAC-SHA256 signature=3eca3f0f1e90ed55de38388066d02f1b7a86571a8ce30823af1df7c4edd7e086,access=ZmRiOGU0Njk5NTg2NDU4YmJkMTBjODM0ODcyZGNjNjI=' -d '{"appId": "fdb8e4699586458bbd10c834872dcc62","clientType": 72,"corpId": "807074304","expireTime": 1597824907000,"nonce": "EycLQsHwxhzK9OW8UEKWNfH2I3CGR2nINuU1EBpQ","userEmail": "******","userId": "alice@ent01","userName": "alice","userPhone": "173****9092"}' 'https://apigw.125339.com.cn/v2/usg/acs/auth/appauth'
```
FILE:references/ShowMeetingDetail.md
# 查询会议详情 - ShowMeetingDetail<a name="ZH-CN_TOPIC_0212714393"></a>
## 描述<a name="section698218449183"></a>
该接口用于查询指定会议的详情。
- 管理员可以查询本企业内所有会议的详情,普通用户仅能查询自己创建或者需要参加的会议详情。
- 只能查询尚未结束的会议(既正在召开的会议和已预约还未召开的会议)。如果需要查询历史会议列详情,请参考[查询历史会议详情 - ShowHisMeetingDetail](查询历史会议详情---ShowHisMeetingDetail.md)。
## URI<a name="section18941101622013"></a>
GET /v1/mmc/management/conferences/confDetail
## 请求参数<a name="section1997124142020"></a>
**表 1** 参数说明
<a name="table1285113481520"></a>
| 参数 | 是否必须 | 类型 | 位置 | 描述 |
|---|---|---|---|---|
| conferenceID | 是 | String | Query | 会议ID。 说明: 创建会议时返回的conferenceID。不是vmrConferenceID。 |
| offset | 否 | Integer | Query | 查询偏移量。默认为0。针对 PageParticipant 中的与会者分页。 |
| limit | 否 | Integer | Query | 查询数量。默认值20。 |
| searchKey | 否 | String | Query | 查询条件。长度限制为1-128个字符。 |
| userUUID | 否 | String | Query | 用户的UUID。 说明: 该参数将废弃,请勿使用。 |
| X-Access-Token | 是 | String | Header | 授权令牌。获取“ 执行App ID鉴权 ”响应的accessToken。 |
| X-Type | 否 | Integer | Header | 默认值为0。 0:不区分终端和与会人 1:分页查询区分终端和与会人,结果合并返回 2:单独查询终端和与会人,结果单独返回 |
| X-Query-Type | 否 | Integer | Header | 当 “X-Type” “2” 时,有效。默认为0。 0:查询与会人 1:查询终端 |
| X-Authorization-Type | 否 | String | Header | 标识是否为第三方portal过来的请求。 说明: 该参数将废弃,请勿使用。 |
| X-Site-Id | 否 | String | Header | 用于区分到哪个HCSO站点鉴权。 说明: 该参数将废弃,请勿使用。 |
## 状态码<a name="section3250161841314"></a>
**表 2** 状态码说明
<a name="table102780442391"></a>
| HTTP状态码 | 描述 |
|---|---|
| 200 | 操作成功。 |
| 400 | 参数异常。 |
| 401 | 未鉴权或鉴权失败。 |
| 403 | 权限受限。 |
| 500 | 服务端异常。 |
## 响应参数<a name="section498722842014"></a>
**表 3** 响应参数
<a name="table4990175112163"></a>
| 参数 | 类型 | 描述 |
|---|---|---|
| conferenceData | ConferenceInfo object | 会议信息。 |
| data | PageParticipant object | 与会者列表。 |
**表 4** PageParticipant 数据结构
<a name="table17895153518491"></a>
| 参数 | 类型 | 描述 |
|---|---|---|
| limit | Integer | 每页的记录数。 |
| count | Integer | 总记录数。 |
| offset | Integer | 查询偏移量。 |
| data | Array of ParticipantInfo objects | 被邀请的与会者信息。包含预约会议时邀请的与会者和会中主持人邀请的与会者。 说明: 不返回会中主动加入的与会者信息。 |
**表 5** ParticipantInfo 数据结构
<a name="table166381555145215"></a>
| 参数 | 类型 | 描述 |
|---|---|---|
| participantID | String | 与会者的号码。 |
| name | String | 与会者的名称。 |
| subscriberID | String | 与会者的号码(预留字段)。 |
| role | Integer | 与会者的角色。 1:会议主持人 0:普通与会者 |
| state | String | 用户状态。目前固定返回MEETTING。 |
| address | String | 终端所在会议室信息(预留字段)。 |
| attendeeType | String | 与会者终端类型。 “normal”:软终端。 “terminal”:会议室或硬终端。 “outside”:外部与会人。 “mobile”:用户手机号码。 |
| accountId | String | 与会者的账号。 如果是账号/密码鉴权场景,表示移动会议账号 如果是APP ID鉴权场景,表示第三方的User ID |
| phone2 | String | 预留字段。 |
| phone3 | String | 预留字段。 |
| email | String | 邮件地址。 |
| sms | String | 短信通知的手机号码。 |
| deptName | String | 部门名称。 |
| userUUID | String | 预订者的用户UUID。 |
| appId | String | App ID。参考“ App ID的申请 ”“ App ID的申请 ”。 |
| isAutoInvite | Integer | 会议开始时是否自动邀请该与会者。默认值由企业级配置决定。 0: 不自动邀请 1: 自动邀请 说明: 仅对并发会议资源的随机会议ID的会议生效。 |
| isNotOverlayPidName | Boolean | 是否不叠加会场名(VDC场景下适用)。 true:不叠加 false:叠加 |
## 请求消息示例<a name="section754195281617"></a>
- 请求示例(普通会议)
```
GET /v1/mmc/management/conferences/confDetail?conferenceID=914083136
Connection: keep-alive
X-Access-Token: stbX5ElstO5QwOwPB9KGQWUZ1DHoFrTsQjjC
user-agent: WeLink-desktop
Host: apigw.125339.com.cn
User-Agent: Apache-HttpClient/4.5.3 (Java/1.8.0_191)
```
- 请求示例(周期会议)
```
GET /v1/mmc/management/conferences/confDetail?conferenceID=969304019
Connection: keep-alive
X-Access-Token: stbX5ElstO5QwOwPB9KGQWUZ1DHoFrTsQjjC
user-agent: WeLink-desktop
Host: apigw.125339.com.cn
User-Agent: Apache-HttpClient/4.5.3 (Java/1.8.0_191)
```
## 响应消息示例<a name="section339419481201"></a>
- 响应示例(普通会议)
```
HTTP/1.1 200
Date: Wed, 18 Dec 2019 06:20:40 GMT
Content-Type: application/json;charset=UTF-8
Content-Length: 1811
Connection: keep-alive
Expires: 0
Pragma: No-cache
Cache-Control: no-cache
http_proxy_id: acf5bd2cc7c7f90fe7ab6b95a8c753d5
Server: api-gateway
X-Request-Id: e2bc0a1429cb2fd52db88ba6fa2c44a8
{
"conferenceData": {
"conferenceID": "914083136",
"mediaTypes": "Voice,Data,Video",
"subject": "user01的会议",
"size": 1,
"timeZoneID": "56",
"startTime": "2019-12-18 07:28",
"endTime": "2019-12-18 09:28",
"conferenceState": "Created",
"accessNumber": "+991117",
"language": "zh-CN",
"passwordEntry": [
{
"conferenceRole": "chair",
"password": "******"
},
{
"conferenceRole": "general",
"password": "******"
}
],
"userUUID": "ff808081699b56cb0169be103500012b",
"scheduserName": "user8002",
"multiStreamFlag": 1,
"conferenceType": 0,
"confType": "IMMEDIATELY",
"isAutoMute": 1,
"isAutoRecord": 0,
"chairJoinUri": "https://c.meeting.125339.com/#/j/914083136/6a30b8b5a325105da031442627828e496f91021ece36405f",
"guestJoinUri": "https://c.meeting.125339.com/#/j/914083136/9505dc3349228b1ce0db8165590cc977bcff89785130fe0d",
"recordType": 0,
"recordAuxStream": 0,
"confConfigInfo": {
"isSendNotify": true,
"isSendSms": true,
"isAutoMute": true
},
"vmrFlag": 0,
"scheduleVmr": false,
"isHasRecordFile": false,
"partAttendeeInfo": [
{
"phone": "+99111****815",
"name": "user01",
"type": "normal"
}
],
"terminlCount": 0,
"normalCount": 1,
"deptName": "wangyue",
"confUUID": "050c7898216811eaa6958bf3bb9ac167"
},
"data": {
"offset": 0,
"limit": 20,
"count": 1,
"data": [
{
"participantID": "+991116003815",
"name": "user01",
"role": 0,
"state": "MEETTING",
"attendeeType": "normal",
"accountId": "user01"
}
]
}
}
```
- 响应示例(周期会议)
```
HTTP/1.1 200
Date: Wed, 18 Dec 2019 06:20:40 GMT
Content-Type: application/json;charset=UTF-8
Content-Length: 1811
Connection: keep-alive
Expires: 0
Pragma: No-cache
Cache-Control: no-cache
http_proxy_id: acf5bd2cc7c7f90fe7ab6b95a8c753d5
Server: api-gateway
X-Request-Id: e2bc0a1429cb2fd52db88ba6fa2c44a8
{
"conferenceData": {
"conferenceID": "969304019",
"mediaTypes": "Voice,Data,Video",
"subject": "user01的会议",
"size": 1,
"timeZoneID": "56",
"startTime": "2019-12-18 07:28",
"endTime": "2019-12-18 09:28",
"accessNumber": "+991117",
"language": "zh-CN",
"passwordEntry": [
{
"conferenceRole": "chair",
"password": "******"
},
{
"conferenceRole": "general",
"password": "******"
}
],
"userUUID": "ff808081699b56cb0169be103500012b",
"scheduserName": "user8002",
"multiStreamFlag": 1,
"conferenceType": 2,
"confType": "CYCLE",
"cycleParams": {
"startDate": "2019-12-18",
"cycle": "Day",
"endDate": "2019-12-19",
"interval": 1
},
"isAutoMute": 1,
"isAutoRecord": 0,
"chairJoinUri": "https://c.meeting.125339.com/#/j/914083136/6a30b8b5a325105da031442627828e496f91021ece36405f",
"guestJoinUri": "https://c.meeting.125339.com/#/j/914083136/9505dc3349228b1ce0db8165590cc977bcff89785130fe0d",
"recordType": 0,
"recordAuxStream": 0,
"confConfigInfo": {
"isSendNotify": true,
"isSendSms": true,
"isAutoMute": true
},
"vmrFlag": 0,
"scheduleVmr": false,
"subConfs": [
{
"cycleSubConfID": "84bfd3816e744b81a02d76a5537a49dc",
"conferenceID": "969304019",
"mediaType": "Voice,Data,HDVideo",
"startTime": "2019-12-18 07:28",
"endTime": "2019-12-18 09:28",
"isAutoRecord": 0,
"confConfigInfo": {
"callInRestriction": 0,
"audienceCallInRestriction": 0,
"allowGuestStartConf": true,
"joinBeforeHostTime": 0,
"enableWaitingRoom": true
}
},
{
"cycleSubConfID": "2e447d1e012c49d9b682ea6af73b6fa6",
"conferenceID": "969304019",
"mediaType": "Voice,Data,HDVideo",
"startTime": "2019-12-18 07:28",
"endTime": "2019-12-18 09:28",
"isAutoRecord": 0,
"confConfigInfo": {
"callInRestriction": 0,
"audienceCallInRestriction": 0,
"allowGuestStartConf": true,
"joinBeforeHostTime": 0,
"enableWaitingRoom": true
}
}],
"isHasRecordFile": false,
"partAttendeeInfo": [
{
"phone": "+99111****815",
"name": "user01",
"type": "normal"
}
],
"terminlCount": 0,
"normalCount": 1,
"deptName": "wangyue",
"confUUID": "050c7898216811eaa6958bf3bb9ac167"
},
"data": {
"offset": 0,
"limit": 20,
"count": 1,
"data": [
{
"participantID": "+991116003815",
"name": "user01",
"role": 0,
"state": "MEETTING",
"attendeeType": "normal",
"accountId": "user01"
}
]
}
}
```
## 错误码<a name="section1451618557175"></a>
如果遇到"MMC"或者"USG"开头的错误码,请参考接口文档中错误码表
## CURL命令示例<a name="section2790610197"></a>
```
curl -k -i -X GET -H 'X-Access-Token:stbX5ElstO5QwOwPB9KGQWUZ1DHoFrTsQjjC' 'https://apigw.125339.com.cn/v1/mmc/management/conferences/confDetail?conferenceID=914083136'
```
FILE:references/InviteParticipant.md
# 邀请与会者 - InviteParticipant<a name="ZH-CN_TOPIC_0212714376"></a>
## 描述<a name="section698218449183"></a>
该接口用于邀请与会者加入会议。
## URI<a name="section148819213215"></a>
POST /v1/mmc/control/conferences/participants
## 请求参数<a name="section1997124142020"></a>
**表 1** 参数说明
<a name="table476284317292"></a>
| 参数 | 是否必须 | 类型 | 位置 | 描述 |
|---|---|---|---|---|
| conferenceID | 是 | String | Query | 会议ID。 |
| X-Conference-Authorization | 是 | String | Header | 会控Token,通过 获取会控token 接口获得。 |
| attendees | 是 | Array of attendee objects | Body | 邀请的与会者列表。 |
**表 2** attendee数据结构说明
<a name="table862782215199"></a>
| 参数 | 是否必须 | 类型 | 描述 |
|---|---|---|---|
| userUUID | 否 | String | 与会者的用户UUID。 |
| accountId | 否 | String | 与会者的移动会议账号。 |
| name | 是 | String | 与会者名称,长度限制为96个字符。 |
| role | 否 | Integer | 会议中的角色。默认为普通与会者。 0:普通与会者 1:会议主持人 |
| phone | 是 | String | 号码。支持SIP号码或者手机号码。 说明: 号码可以通过 查询企业通讯 接口录获取。返回的number是SIP号码,phone是手机号码 填SIP号码系统会呼叫对应的软终端或者硬终端;填手机号码系统会呼叫手机 呼叫手机需要开通PSTN权限,否则无法呼叫 |
| phone2 | 否 | String | 预留字段,取值类型同参数 “phone” 。 |
| phone3 | 否 | String | 预留字段,取值类型同参数 “phone” 。 |
| email | 否 | String | 邮件地址。 说明: 会中邀请不发会议通知,不用填写。 |
| sms | 否 | String | 短信通知的手机号码。 说明: 会中邀请不发会议通知,不用填写。 |
| type | 是 | String | 终端类型,类型枚举如下: normal:软终端 terminal:硬终端 outside:外部与会人 mobile:用户手机号码 ideahub:ideahub board: 电子白板(SmartRooms)。含Maxhub、海信大屏、IdeaHub B2 hwvision:华为智慧屏TV |
| deptUUID | 否 | String | 部门编码。 |
| deptName | 否 | String | 部门名称。 |
## 状态码<a name="section2836452597"></a>
**表 3** 状态码说明
<a name="table102780442391"></a>
| HTTP状态码 | 描述 |
|---|---|
| 200 | 操作成功。 |
| 400 | 参数异常。 |
| 401 | 未鉴权或鉴权失败。 |
| 403 | 权限受限。 |
| 500 | 服务端异常。 |
## 响应参数<a name="section498722842014"></a>
无
## 请求消息示例<a name="section1498763918202"></a>
```
POST /v1/mmc/control/conferences/participants?conferenceID=914083136
Connection: keep-alive
X-Conference-Authorization:stbaf8fa2ea8a1b0e3ab2e007a85a75f88c55d5f6d5c1912dfb
Content-Type: application/json
user-agent: WeLink-desktop
Content-Length: 175
Host: apigw.125339.com.cn
User-Agent: Apache-HttpClient/4.5.3 (Java/1.8.0_191)
{
"attendees": [
{
"name": "上海分会场",
"role": 1,
"phone": "+8657*******",
"type": "normal"
}]
}
```
## 响应消息示例<a name="section339419481201"></a>
```
HTTP/1.1 200
Date: Wed, 18 Dec 2019 06:20:40 GMT
Content-Type: application/json;charset=UTF-8
Content-Length: 39
Connection: keep-alive
http_proxy_id: b77bb5478e0b1fc0dbbb4e8d4e26ba65
Server: api-gateway
X-Request-Id: 479fdc1d80e2e7ae19c4a08c28821822
```
## 错误码<a name="section2083618812462"></a>
如果遇到"MMC"或者"USG"开头的错误码,请参考接口文档中错误码表
## CURL命令示例<a name="section2790610197"></a>
```
curl -k -i -H 'content-type: application/json' -X POST -H 'X-Conference-Authorization:stb39b3f21898d4972fed86b3f22ac70914a77303def15e126a' -d '{"attendees":[{"name":"user01","role":0,"phone":"+8657*******"}]}' https://apigw.125339.com.cn/v1/mmc/control/conferences/participants?conferenceID=914083136
```
FILE:references/ShowRecordingDetail.md
# 查询录制详情 - ShowRecordingDetail<a name="ZH-CN_TOPIC_0212714575"></a>
## 描述<a name="section17948858131615"></a>
该接口用于查询某个会议录制的详情。
## URI<a name="section3464194610267"></a>
GET /v1/mmc/management/conferences/record/files
## 请求参数<a name="section1997124142020"></a>
**表 1** 参数说明
<a name="table1285113481520"></a>
| 参数 | 是否必须 | 类型 | 位置 | 描述 |
|---|---|---|---|---|
| confUUID | 是 | String | Query | 会议UUID(通过 查询录制列表 获取)。 |
| userUUID | 否 | String | Query | 用户的UUID。 说明: 该参数将废弃,请勿使用。 |
| X-Access-Token | 是 | String | Header | 授权令牌。获取“ 执行App ID鉴权 ”响应的accessToken。 |
| X-Authorization-Type | 否 | String | Header | 标识是否为第三方portal过来的请求。 说明: 该参数将废弃,请勿使用。 |
| X-Site-Id | 否 | String | Header | 用于区分到哪个HCSO站点鉴权。 说明: 该参数将废弃,请勿使用。 |
## 状态码<a name="section12277182184211"></a>
**表 2** 状态码说明
<a name="table102780442391"></a>
| HTTP状态码 | 描述 |
|---|---|
| 200 | 操作成功。 |
| 400 | 参数异常。 |
| 401 | 未鉴权或鉴权失败。 |
| 403 | 权限受限。 |
| 500 | 服务端异常。 |
## 响应参数<a name="section498722842014"></a>
**表 3** 响应参数
<a name="table6981112405218"></a>
| 参数 | 类型 | 描述 |
|---|---|---|
| confUUID | String | 会议UUID。 |
| confID | String | 会议ID。 |
| url | String[] | 录播观看地址。 |
| rcdTime | Integer | 录制时长(单位秒)。 |
| rcdSize | Integer | 录制文件大小(MB)。 |
| subject | String | 会议主题。 |
| scheduserName | String | 会议预订者名称。 |
| startTime | String | 会议开始时间。 |
| isDecodeFinish | Boolean | 录制文件是否转码完成。 |
| decodeEndTime | long | 录制文件预计转码完成时间。 |
| available | Boolean | 录播文件是否可观看。 |
| recordAuthType | Integer | 观看/下载录播的鉴权方式。 0: 可通过链接观看/下载 1: 企业用户可观看/下载 2: 与会者可观看/下载 |
## 请求消息示例<a name="section1498763918202"></a>
```
GET /v1/mmc/management/conferences/record/files?confUUID=51adf610220411eaaae03f22d33cc26b
Connection: keep-alive
X-Access-Token: stbX5ElstO5QwOwPB9KGQWUZ1DHoFrTsQjjC
user-agent: WeLink-desktop
Host: apigw.125339.com.cn
User-Agent: Apache-HttpClient/4.5.3 (Java/1.8.0_191)
```
## 响应消息示例<a name="section339419481201"></a>
```
HTTP/1.1 200
Date: Wed, 18 Dec 2019 06:20:40 GMT
Content-Type: application/json;charset=UTF-8
Content-Length: 505
Connection: keep-alive
Expires: 0
Pragma: No-cache
Cache-Control: no-cache
http_proxy_id: 4556e88832e5990723d1712395f5bee8
Server: api-gateway
X-Request-Id: 629891c82bb852d8796e2f6acc74721e
{
"confUUID": "51adf610220411eaaae03f22d33cc26b",
"confID": "912049654",
"url": [
"https://114.116.237.2/rse/rse/html/play/Mediaxplay.html?rseid=00030&recordId=000301fa-0512-412f-b363-cb9f76063628&token=24e4f6d9850a42365783c88ceb36701bb87f5393a595af82&confID=51adf610220411eaaae03f22d33cc26b&isSecure=true"
],
"rcdTime": 71,
"rcdSize": 0,
"subject": "user8002的会议",
"scheduserName": "user8002",
"startTime": "2019-12-19 02:07",
"isDecodeFinish": true,
"decodeEndTime": 1576721412885,
"available": true,
"recordAuthType":2
}
```
## 错误码<a name="section288814321256"></a>
如果遇到"MMC"或者"USG"开头的错误码,请参考接口文档中错误码表
## CURL命令示例<a name="section4952152111818"></a>
```
curl -k -i -X GET -H 'X-Access-Token:stbX5ElstO5QwOwPB9KGQWUZ1DHoFrTsQjjC' 'https://apigw.125339.com.cn/v1/mmc/management/conferences/record/files?confUUID=51adf610220411eaaae03f22d33cc26b'
```
FILE:references/SearchCtlRecordsOfHisMeeting.md
# 查询历史会议的会控记录 - SearchCtlRecordsOfHisMeeting<a name="ZH-CN_TOPIC_0212714423"></a>
## 描述<a name="section17948858131615"></a>
该接口用于查询指定历史会议的会控记录。
## URI<a name="section1392764619274"></a>
GET /v1/mmc/management/conferences/history/confCtlRecord
## 请求参数<a name="section1997124142020"></a>
**表 1** 参数说明
<a name="table1285113481520"></a>
| 参数 | 是否必须 | 类型 | 位置 | 描述 |
|---|---|---|---|---|
| confUUID | 是 | String | Query | 会议UUID。 |
| offset | 否 | Integer | Query | 查询偏移量。默认为0。 |
| limit | 否 | Integer | Query | 查询数量。默认值20,最大500条。 |
| userUUID | 否 | String | Query | 用户的UUID。 说明: 该参数将废弃,请勿使用。 |
| X-Access-Token | 是 | String | Header | 授权令牌。获取“ 执行App ID鉴权 ”响应的accessToken。 |
| X-Authorization-Type | 否 | String | Header | 标识是否为第三方portal过来的请求。 说明: 该参数将废弃,请勿使用。 |
| X-Site-Id | 否 | String | Header | 用于区分到哪个HCSO站点鉴权。 说明: 该参数将废弃,请勿使用。 |
| Accept-Language | 否 | String | Header | 语言 。默认简体中文。 zh-CN:简体中文。 en-US:美国英文。 |
## 状态码<a name="section746264155116"></a>
**表 2** 状态码说明
<a name="table102780442391"></a>
| HTTP状态码 | 描述 |
|---|---|
| 200 | 操作成功。 |
| 400 | 参数异常。 |
| 401 | 未鉴权或鉴权失败。 |
| 403 | 权限受限。 |
| 500 | 服务端异常。 |
## 响应参数<a name="section498722842014"></a>
**表 3** 响应参数
<a name="table10381220417"></a>
| 参数 | 类型 | 描述 |
|---|---|---|
| offset | Integer | 查询偏移量。 |
| limit | Integer | 每页的记录数。 |
| count | Integer | 总记录数。 |
| data | Array of data objects | 会控操作列表。 |
**表 4** data数据结构说明
<a name="table15981319111212"></a>
| 参数 | 类型 | 描述 |
|---|---|---|
| operateTime | long | 操作时间(UTC时间,单位毫秒)。 |
| operateSource | String | 操作来源。 |
| operator | String | 操作者。 |
| operateCode | String | 操作描述。 |
| operationObject | String | 被操作对象。 |
| operateResult | String | 操作结果。 |
| detail | String | 详情。 |
## 请求消息示例<a name="section1498763918202"></a>
```
GET /v1/mmc/management/conferences/history/confCtlRecord?confUUID=9a0fa6d10a5b11eaae5e191763c22c0e
Connection: keep-alive
X-Access-Token: stbX5ElstO5QwOwPB9KGQWUZ1DHoFrTsQjjC
user-agent: WeLink-desktop
Host: apigw.125339.com.cn
User-Agent: Apache-HttpClient/4.5.3 (Java/1.8.0_191)
```
## 响应消息示例<a name="section339419481201"></a>
```
HTTP/1.1 200
Date: Wed, 18 Dec 2019 06:20:40 GMT
Content-Type: application/json;charset=UTF-8
Content-Length: 472
Connection: keep-alive
Expires: 0
Pragma: No-cache
Cache-Control: no-cache
http_proxy_id: 2f3aa1fe64f6784b1eb6f75a67ef2b9d
Server: api-gateway
X-Request-Id: ba03d2ae3b805d8c545c83494c862b48
{
"data": [
{
"operateTime": 1574119913464,
"operateSource": "MCU",
"operator": "MCU",
"operateCode": "启动声控",
"operateResult": "成功"
},
{
"operateTime": 1574119917864,
"operateSource": "Conference System",
"operator": "Conference System",
"operateCode": "呼叫与会方",
"operationObject": "9bd1c8b20a5b11eab31381603f51d3ae",
"operateResult": "成功"
},
{
"operateTime": 1574119917870,
"operateSource": "MCU",
"operator": "MCU",
"operateCode": "关闭与会方麦克风",
"operationObject": "9bd1c8b20a5b11eab31381603f51d3ae",
"operateResult": "成功"
},
{
"operateTime": 1574119918064,
"operateSource": "MCU",
"operator": "MCU",
"operateCode": "打开与会方麦克风",
"operationObject": "9bd1c8b20a5b11eab31381603f51d3ae",
"operateResult": "成功"
},
{
"operateTime": 1574119917889,
"operateSource": "Conference System",
"operator": "Conference System",
"operateCode": "设置主持人",
"operationObject": "9bd1c8b20a5b11eab31381603f51d3ae",
"operateResult": "成功"
},
{
"operateTime": 1574119932913,
"operateSource": "Portal",
"operator": "Conference Operator",
"operateCode": "添加与会方",
"operationObject": "**********905",
"operateResult": "成功"
},
{
"operateTime": 1574119935460,
"operateSource": "Conference System",
"operator": "Conference System",
"operateCode": "呼叫与会方",
"operationObject": "a5db36ce0a5b11eab313a52e57f34bda",
"operateResult": "成功"
},
{
"operateTime": 1574119935465,
"operateSource": "MCU",
"operator": "MCU",
"operateCode": "关闭与会方麦克风",
"operationObject": "a5db36ce0a5b11eab313a52e57f34bda",
"operateResult": "成功"
},
{
"operateTime": 1574119944636,
"operateSource": "Portal",
"operator": "Conference Operator",
"operateCode": "点名与会方",
"operationObject": "a5db36ce0a5b11eab313a52e57f34bda",
"operateResult": "成功"
},
{
"operateTime": 1574119944857,
"operateSource": "MCU",
"operator": "MCU",
"operateCode": "停止声控",
"operateResult": "成功"
},
{
"operateTime": 1574119945099,
"operateSource": "MCU",
"operator": "MCU",
"operateCode": "打开与会方麦克风",
"operationObject": "a5db36ce0a5b11eab313a52e57f34bda",
"operateResult": "成功"
},
{
"operateTime": 1574119945861,
"operateSource": "Portal",
"operator": "Conference Operator",
"operateCode": "广播与会方",
"operationObject": "a5db36ce0a5b11eab313a52e57f34bda",
"operateResult": "成功"
},
{
"operateTime": 1574119947619,
"operateSource": "Portal",
"operator": "Conference Operator",
"operateCode": "挂断与会方",
"operationObject": "a5db36ce0a5b11eab313a52e57f34bda",
"operateResult": "成功"
},
{
"operateTime": 1574119947859,
"operateSource": "MCU",
"operator": "MCU",
"operateCode": "取消广播与会方",
"operateResult": "成功"
},
{
"operateTime": 1574119948460,
"operateSource": "Portal",
"operator": "Conference Operator",
"operateCode": "删除与会方",
"operationObject": "**********905",
"operateResult": "成功"
},
{
"operateTime": 1574119949328,
"operateSource": "Portal",
"operator": "Conference Operator",
"operateCode": "释放主持人",
"operationObject": "9bd1c8b20a5b11eab31381603f51d3ae",
"operateResult": "成功"
},
{
"operateTime": 1574119950672,
"operateSource": "Portal",
"operator": "Conference Operator",
"operateCode": "关闭与会方麦克风",
"operationObject": "9bd1c8b20a5b11eab31381603f51d3ae",
"operateResult": "成功"
},
{
"operateTime": 1574119951805,
"operateSource": "Portal",
"operator": "Conference Operator",
"operateCode": "取消全场静音",
"operateResult": "成功"
},
{
"operateTime": 1574119952067,
"operateSource": "MCU",
"operator": "MCU",
"operateCode": "打开与会方麦克风",
"operationObject": "9bd1c8b20a5b11eab31381603f51d3ae",
"operateResult": "成功"
},
{
"operateTime": 1574119952954,
"operateSource": "Portal",
"operator": "Conference Operator",
"operateCode": "申请发言",
"operationObject": "9bd1c8b20a5b11eab31381603f51d3ae",
"operateResult": "成功"
}
],
"offset": 0,
"limit": 20,
"count": 23
}
```
## 错误码<a name="section424714614336"></a>
如果遇到"MMC"或者"USG"开头的错误码,请参考接口文档中错误码表
## CURL命令示例<a name="section4952152111818"></a>
```
curl -k -i -X GET -H 'X-Access-Token:stbX5ElstO5QwOwPB9KGQWUZ1DHoFrTsQjjC' 'https://apigw.125339.com.cn/v1/mmc/management/conferences/history/confCtlRecord?confUUID=9a0fa6d10a5b11eaae5e191763c22c0e'
```
FILE:.clawhub/config.json
{
"name": "mobile-meeting",
"version": "1.0.0",
"description": "移动会议API集成",
"author": "mobilemeeting",
"license": "MIT",
"includes": [
"SKILL.md",
"references/**",
"examples/**",
"scripts/**"
],
"excludes": [
"node_modules/**",
".git/**",
"*.log",
"*.tmp"
]
}