---
tags: ZoomAPI, 會議室借用
---
# Zoom API
[Zoom APIs](https://marketplace.zoom.us/docs/api-reference/introduction)
## Using JWT
> Register a JWT app in the Zoom App Marketplace. Use the token generated from the JWT app and start making API requests to the Zoom APIs.
## API requests
All API requests must be made over HTTPS.
The https://api.zoom.us/v2/ URL is the request base URL. The complete URL varies depending on the accessed resource.
## Using Postman to Test Zoom APIs
1. Authorization > Configure New Token
| 欄位名稱 | 內容值 | 說明 |
| -------- | -------- | -------- |
| Token Name | TLC-booking | 和 Oauth APP 名稱一樣 |
| Callback URL | 勾Authorize using browser | 預設URL要貼去Oauth APP 的 redirect url、whitelist url `https://oauth.pstmn.io/v1/callback` |
| Auth URL | `https://zoom.us/oauth/authorize`| |
| Access Token URL | `https://zoom.us/oauth/token` | |
| Client ID | Client ID | 和 Oauth APP Client ID一樣 |
| Client Secret | Client Secret | 和 Oauth APP Client Secret一樣 |
2. 點 Get New Access Token,會開出Zoom的授權畫面
3. 授權後會跳回Postman(記得網頁要開啟允許彈出視窗)
4. 選擇Use Token,token會回填Access Token
5. 可以向API請求資料了唷
## Using Python 3rd party package: zoomus
[zoomus GitHub Source](https://github.com/prschmid/zoomus)
Official sample:
```python
import json
from zoomus import ZoomClient
client = ZoomClient('API_KEY', 'API_SECRET')
user_list_response = client.user.list()
user_list = json.loads(user_list_response.content)
for user in user_list['users']:
user_id = user['id']
print(json.loads(client.meeting.list(user_id=user_id).content))
```
## API
### List Meeting
> GET meetings/{meetingId}
#### Query Parameters
- type (string)
scheduled
live
upcoming
- page_size (integer)
- next_page_token (string)
- page_number (page_number)
#### 說明
1. 使用 type=upcoming 取得現在時間之後的會議,會取得所有時間確定的會議,包含週期性會議(前提是週期會議有確切時間)。
2. 沒有辦法用時間篩選
#### zoomus
```python
client.meeting.list(user_id=xxx, type='upcoming')
```
如果需要時間篩選,大概只能先讀出來然後用filter篩
```python
# 以下篩 20201/12/20 - 2021/12/25
def get_timebounded_mt(mt):
start = mt['start_time']
st = dt.strptime(start, '%Y-%m-%dT%H:%M:%SZ')
bounded_s = dt(2021,12,20,0,0,0)
bounded_e = dt(2021,12,25,0,0,0)
if st > bounded_s and st < bounded_e:
return mt
filtered = filter(get_timebounded_mt, meeting_list)
```
### Get Meeting
> GET user/{userId}/meetings/
#### Query Parameters
- occurrence_id(string)
- show_previous_occurrences(boolean)
#### 說明
.
#### zoomus
```python
client.meeting.get(id=xxx)
```
### Create Meeting
> POST /users/{userId}/meetings
```json
//example
{
"topic": "topic",
"type": 8,
/* 1.instant meeting;
2.scheduled meeting;
3.recurring meeting without fixed time;
4.recurring meeting with fixed time.*/
"start_time": "2021-12-17T18:00:00",
/*會是18:00(timezone一定要設定,預設Zoom帳號時區),如果是2021-12-17T18:00:00Z,則是隔天02:00*/
"duration": 60,
"schedule_for": "zoom5@tiongliong.com",
"timezone": "Asia/Taipei",
"recurrence": {
"type": 2,
/*1. Daily;
2.Weekly;
3.Monthly*/
"repeat_interval": "2",
"weekly_days": "6",
/*1.Sun;
2.Mon;
3.Tue;
4.Wed;
5.Thu;
6.Fri;
7.Sat*/
"end_date_time": "2021-12-31"
// monthly_week: -1.last week;1.first week;2.second week;3.third week;4.4th week
// monthly_week_day: same as weekly_days
}
}
```
#### zoomus
```python
import datetime
payload = {
"topic": "Meeting from Cmder",
"start_time": datetime.datetime(2021,12,24,8,0,0), # 實際上是16:00,要記得自己減8
"duration": 60,
"agenda": "It's a meeting from cmder, for testing",
"timezone": "Asial/Taipei",
}
new_meeting = client.meeting.create(id=xxx, **payload)
join_url = json.loads(new_meeting.content).get('join_url')
print(join_url)
>> https://zoom.us/j/96332327403?pwd=QXJZN09rak5PYWRFQlI4b3V1Wk92QT09
```
### Update Meeting
> PATCH meetings/{meetingId}
```json
//example
{
"topic": "測試TOPIC",
"start_time": "2021-12-17T18:00:00",
"duration": 60
}
```
#### zoomus
```python
import datetime
payload = {
"topic": "Meeting from Cmder",
"agenda": "It's a meeting from cmder, for testing",
}
updated_meeting = client.meeting.update(id=xxx, **payload)
agenda = json.loads(updated_meeting.content).get('agenda')
print(agenda)
>> It's a meeting from cmder, for testing
```
### Delete Meeting
> DELETE meetings/{meetingId}
#### zoomus
```python
client.meeting.delete(id=96721165058)
```
### Get Meeting Invitation
> GET /meetings/{meetingId}/invitation
#### zoomus
沒有這種東西
要自己用上面的meeting資料湊
**週期性會議的邀請**
> Pei Ying Chang 邀請您參加排程的 Zoom 會議。
>
>主題:資訊週會
>時間:2021年12月27日 15:30 台北
> 每星期的星期一,共 到 2022年1月31日結束,共 6 次會議
> 2021年12月27日 15:30
> 2022年1月3日 15:30
> 2022年1月10日 15:30
> 2022年1月17日 15:30
> 2022年1月24日 15:30
> 2022年1月31日 15:30
>請下載下列 iCalendar(.ics)檔案並匯入到您的日曆系統。
>按週:https://zoom.us/meeting/tJEocuqvrDwsHNUESzIT2c2S0CJpT4JiYaHb/ics?icsToken=98tyKuCtqz4pHdaSth-GRowMGY_4b-3zpmZdgo1ouSz_KhQBYVHFZsFoIoYrOtHp
>
>加入 Zoom 會議
>https://zoom.us/j/95553727661?pwd=TGxTNUhHVUpTNTFaZVZqcmhla1VSdz09
>
>會議 ID:955 5372 7661
>密碼:A7mQr0
**單次會議的邀請**
>Pei Ying Chang 邀請您參加排程的 Zoom 會議。
>
>主題:怕以求
>時間:2021年12月28日 14:00 台北
>
>加入 Zoom 會議
>https://zoom.us/j/93589020490?pwd=c2RhbnhoR0VxNGM3ZkpNdTlhbllVdz09
>
>會議 ID:935 8902 0490
>密碼:b3ZzxL
### Create Meeting Invitation
> POST /meetings/{meetingId}/invite_links
#### zoomus
沒有這種東西
#### Request Body
- ttl(intger)
- attendees(array)
- name(string)
```json
//example
{
"ttl": 3600,//default: 7200
"attendees": [
{
"name": "Mike Brown"
}
]
}
```
## 可設定的週期
- 每 X 天
- 每 X 周 星期 O
- 每 X 個月 第 O 日
- 每 X 個月 第 X 周 星期 O