Skill: thursda/mobile-meeting-api (version 1.0.1)

--- 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日

path: README.md
content: # 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

path: scripts/get_token.py
content: #!/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 [REDACTED_SECRET]'accessToken')}")
        print(f"Refresh [REDACTED_SECRET]'refreshToken')}")
        return data
    except requests.exceptions.RequestException as e:
        print(f"请求失败: {e}")
        sys.exit(1)

if __name__ == "__main__":
    get_token()

path: scripts/requirements.txt
content: requests>=2.28.0


path: scripts/cancel_meeting.py
content: #!/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)

path: scripts/search_meetings.py
content: #!/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)

path: scripts/create_meeting.py
content: #!/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)

path: scripts/app_auth.html
content: <!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>


path: references/StartMeeting.md
content: # 激活会议 - StartMeeting<a name="ZH-CN_TOPIC_0000001220016280"></a>

## 描述<a name="section698218449183"></a>

该接口用于通过会议ID和会议密码激活会议。所有的会控接口都需要在会议激活后才能调用，可以通过该接口先激活会议。

>![](public_sys-resources/icon-note.gif) **说明：** 
>来宾密码是否可以激活会议取决于会议创建时是否设置了“是否允许来宾启动会议”（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-[REDACTED_SECRET]
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-[REDACTED_SECRET]' -d '{"conferenceID": "986030665","password": "******"}' 'https://apigw.125339.com.cn/v1/mmc/management/conferences/start'
```



path: references/CreateAuthRandom.md
content: # 获取会议鉴权随机数 - 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-[REDACTED_SECRET]
X-[REDACTED_SECRET]
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-[REDACTED_SECRET]" -H "X-Access-[REDACTED_SECRET]"  https://apigw.125339.com.cn/v2/mms/ncms/conferences/auth/random?conf_id=914047175
```



path: references/CreateMeeting.md
content: # 创建会议 - 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-[REDACTED_SECRET]
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": "[REDACTED_SECRET]",
            "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-[REDACTED_SECRET]' -d '{"conferenceType": "0","subject": "user01 conference","mediaTypes": "HDVideo","attendees": [{"name": "user01","role": 1,"phone": "+8657*******"}]}' 'https://apigw.125339.com.cn/v1/mmc/management/conferences'
```



path: references/SearchRecordings.md
content: # 查询录制列表 - 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-[REDACTED_SECRET]
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&[REDACTED_SECRET]"
            ],
            "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-[REDACTED_SECRET]' 'https://api.meeting.125339.com/v1/mmc/management/record/files?startDate=1574092800000&endDate=1576771199999'
```



path: references/SearchMeetings.md
content: # 查询会议列表 - 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-[REDACTED_SECRET]
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-[REDACTED_SECRET]' https://apigw.125339.com.cn/v1/mmc/management/conferences
```



path: references/UpdateMeeting.md
content: # 编辑预约会议 - 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-[REDACTED_SECRET]
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": "[REDACTED_SECRET]",
            "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-[REDACTED_SECRET]' -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'
```



path: references/ShowHisMeetingDetail.md
content: # 查询历史会议详情 - 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-[REDACTED_SECRET]
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-[REDACTED_SECRET]' 'https://apigw.125339.com.cn/v1/mmc/management/conferences/history/confDetail?confUUID=9a0fa6d10a5b11eaae5e191763c22c0e'
```



path: references/DeleteRecordings.md
content: # 批量删除录制 - 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-[REDACTED_SECRET]
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-[REDACTED_SECRET]' https://apigw.125339.com.cn/v1/mmc/management/record/files?confUUIDs=51adf610220411eaaae03f22d33cc26b
```



path: references/ListOnlineConfAttendee.md
content: # 查询在线会议与会者信息 - 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-[REDACTED_SECRET]
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": [REDACTED_SECRET],
      "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-[REDACTED_SECRET]"  https://apigw.125339.com.cn/v1/mmc/management/conferences/online/conf-attendee?conf_id=964138987&search_key=wu
```



path: references/ShowRecordingFileDownloadUrls.md
content: # 查询录制文件下载链接 - ShowRecordingFileDownloadUrls<a name="ZH-CN_TOPIC_0000001107892998"></a>

## 描述<a name="section17948858131615"></a>

该接口用于查询指定会议录制文件下载链接。

>![](public_sys-resources/icon-note.gif) **说明：** 
>-   仅企业管理员权限的账号才能查询录制文件的下载链接


## 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-[REDACTED_SECRET]
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-[REDACTED_SECRET]' 'https://apigw.125339.com.cn/v1/mmc/management/record/downloadurls?confUUID=51adf610220411eaaae03f22d33cc26b'
```



path: references/CancelMeeting.md
content: # 取消预约会议 - 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-[REDACTED_SECRET]
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-[REDACTED_SECRET]' 'https://apigw.125339.com.cn/v1/mmc/management/conferences?conferenceID=914087436'
```



path: references/SearchHisMeetings.md
content: # 查询历史会议列表 - SearchHisMeetings<a name="ZH-CN_TOPIC_0212714401"></a>

## 描述<a name="section17948858131615"></a>

该接口用于查询已经结束的会议。管理员可以查询本企业内所有的历史会议，普通用户仅能查询自己创建或者被邀请的历史会议。不带查询参数时，默认查询权限范围内的历史会议。

>![](public_sys-resources/icon-note.gif) **说明：** 
>-   普通用户如果只是通过会议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-[REDACTED_SECRET]
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-[REDACTED_SECRET]' 'https://apigw.125339.com.cn/v1/mmc/management/conferences/history?startDate=1574092800000&endDate=1574179199999'
```



path: references/SearchAttendanceRecordsOfHisMeeting.md
content: # 查询历史会议的与会者记录 - 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-[REDACTED_SECRET]
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-[REDACTED_SECRET]' 'https://apigw.125339.com.cn/v1/mmc/management/conferences/history/confAttendeeRecord?confUUID=9a0fa6d10a5b11eaae5e191763c22c0e'
```



path: references/CreateAppIdToken.md
content: # 执行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

>![](public_sys-resources/icon-note.gif) **说明：** 
>-   当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": [REDACTED_SECRET],
    "userEmail": "******",
    "userId": "[REDACTED_SECRET]",
    "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":[REDACTED_SECRET],
    "tokenIp":"49.4.112.60",
    "validPeriod":56326,
    "expireTime":1627768613,
    "createTime":1627712287360,
    "user":{
        "realm":"huaweicloud.com",
        "userId":"53e2759d388e413abf6a56743a2694c5",
        "ucloginAccount":[REDACTED_SECRET],
        "serviceAccount":"sip:+[REDACTED_SECRET]",
        "numberHA1":"065eb94e5b090f70c77d4d1439f35b8e",
        "alias1":null,
        "companyId":"651543334",
        "spId":"8a8df0a174a1c6680174a26f578b0000",
        "companyDomain":null,
        "userType":2,
        "adminType":2,
        "name":"[REDACTED_SECRET]",
        "nameEn":"",
        "isBindPhone":null,
        "freeUser":false,
        "thirdAccount":"[REDACTED_SECRET]",
        "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":[REDACTED_SECRET],
    "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": [REDACTED_SECRET],"clientType": 72,"corpId": "807074304","expireTime": 1597824907000,"nonce": [REDACTED_SECRET],"userEmail": "******","userId": "alice@ent01","userName": "alice","userPhone": "173****9092"}' 'https://apigw.125339.com.cn/v2/usg/acs/auth/appauth'
```



path: references/ShowMeetingDetail.md
content: # 查询会议详情 - 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-[REDACTED_SECRET]
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-[REDACTED_SECRET]
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-[REDACTED_SECRET]' 'https://apigw.125339.com.cn/v1/mmc/management/conferences/confDetail?conferenceID=914083136'
```



path: references/InviteParticipant.md
content: # 邀请与会者 - 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
```



path: references/ShowRecordingDetail.md
content: # 查询录制详情 - 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-[REDACTED_SECRET]
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&[REDACTED_SECRET]"
    ],
    "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-[REDACTED_SECRET]' 'https://apigw.125339.com.cn/v1/mmc/management/conferences/record/files?confUUID=51adf610220411eaaae03f22d33cc26b'
```



path: references/SearchCtlRecordsOfHisMeeting.md
content: # 查询历史会议的会控记录 - 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-[REDACTED_SECRET]
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-[REDACTED_SECRET]' 'https://apigw.125339.com.cn/v1/mmc/management/conferences/history/confCtlRecord?confUUID=9a0fa6d10a5b11eaae5e191763c22c0e'
```



path: .clawhub/config.json
content: {
  "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"
  ]
}


Security scan verdicts — ClawScan: suspicious | static analysis: suspicious | VirusTotal: clean | SkillSpector: suspicious (CRITICAL)