【逗老师带你学IT】Zoom联动Google日历,实现Zoom Rooms高逼格会议体验

本文介绍下,如何通过API接口调用Google日历,进而实现在Zoom Rooms控制屏内自动添加会议日程,并实现会议开始前一键加入会议。
在这里插入图片描述

一、Zoom Room同步Google日历

当日历资源与 Zoom Room 集成后,会议室的电视显示器、控制器和安排显示器将显示为会议室安排的会议。您组织的成员可以在 Zoom Room 中邀请会议室加入会议。通过日历服务,可以将会议室作为日历资源进行分配。授权 Zoom 访问日历资源使用户能够一键启动和加入会议室中的会议。

1、创建一个新的Google Workspace账号

使用新的Google Workspace账号登录Google日历,并为每一个Zoom Room创建一个新的日历列表。
在这里插入图片描述
在这里插入图片描述

2、Zoom后台同步Google日历

  1. 登录 Zoom 门户网站。
    注意:账户必须具有 Zoom Room 权限。

  2. 在会议室管理下,选择日历集成

  3. 点击添加日历服务
    在这里插入图片描述

  4. 在 Google 日历部分点击添加。

  5. 为组织选择与共享日历服务相关联的电子邮件地址。如果未显示日历服务的专门用户,请点击使用其他账户,并添加该用户的凭证。
    在这里插入图片描述

  6. 在确认页面上点击允许,授予 Zoom 在专门用户的账户中管理日历的权限。
    在这里插入图片描述
    日历集成页面显示您添加的日历资源。
    在这里插入图片描述

二、如何创建可以直接加入的Zoom会议

此时,在Google日历界面,我们创建一个新的会议。
在这里插入图片描述
之后我们在Zoom Room的控制端,点击【会议列表】,即可看到以下会议信息:
在这里插入图片描述
但是此时我们发现,这个会议信息并没有直接可以加入的按钮。仅仅是单纯展示一个即将召开的会议信息。
这对于我们想优雅开会的目标,还是有一些差距的。
那么如何在Google日历里面创建一个可以直接加入的会议呢?
Zoom官方没有给出直接的回答,但是通过Zoom的Chrome插件创建了一个会议之后我们发现,其实很简单。
只需要在创建会议室,Location字段填写Zoom的入会链接URL即可,如下所示。
在这里插入图片描述

此时再次查看,Zoom Room控制客户端内多出了一个【开始】按钮,点击此按钮,Zoom Room会议设备可立即加入此会议。
在这里插入图片描述

三、优雅的通过API自动创建Google日历

上面的事情做完之后,我们现在可以在OA系统、ERP系统或者企业内部的其他会议管理系统内,通过API的方式自动生成Zoom会议和Google日历项。这样在预定会议室的时候,Zoom会议链接和Zoom Room会议设备都会同期准备好,优雅有格调的开始会议。
代码不长,也不传GitHub了,直接粘贴在这里了

1、模块代码

# coding=utf-8
#ZOOM相关API
import datetime
import re
import sys
import time
import requests
import warnings
import json
import os
from googleapiclient.discovery import build
from google.oauth2 import service_account
from save_log import save_log

warnings.filterwarnings("ignore")
requests.packages.urllib3.disable_warnings

Google_SCOPES = ['https://www.googleapis.com/auth/calendar']
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
Google_SERVICE_ACCOUNT_FILE = BASE_DIR+"\\account_manager_service_account_cc97*****741.json"
#授权空间(scope)和授权秘钥,关于授权和秘钥更多的信息,参考逗老师之前的文章:《Google Admin服务账号+API管理G suit内所有网域用户》
#https://blog.csdn.net/ytlzq0228/article/details/105682567

ZOOM_TOKEN="eyJhbGci***********lQ3-KBhfD0"
#ZOOM_TOKEN获取方式参见:https://marketplace.zoom.us/docs/guides/auth/jwt,看不懂的话,参见文章末尾*注1
MEETINGROOM_DICT={"SZ_8FG3":"c_afqto*********d4tpc@group.calendar.google.com"}
#给每个Zoom Room会议室建立一个日历列表,这里calender_ID的获取方式,参见文章末尾*注2




				
	class Meeting_API:
	
		def create_meeting(username,topic,start_time,duration,MeetingRoom_Name):
			try:
				save_log(username+topic+start_time+duration+MeetingRoom_Name)
				##type字段1为免费用户,2为授权用户
				start_time="%sT%s"%(start_time[:10],start_time[-8:])
				print(start_time)
				session = requests.session()
				postUrl = 'https://api.zoom.us/v2/users/%s/meetings'%username
				headers = {
					'authorization': 'Bearer %s'%ZOOM_TOKEN
				}
				request_json={
					"topic": topic,
					"type": 2,
					"start_time": start_time,
					"duration": duration,
					"schedule_for": username,
					"default_password": True,
					"settings": {
						"contact_email":username,
						"registrants_email_notification":True
						}
					}
				resp = session.post(postUrl,headers=headers,json=request_json)
				run_result=json.loads(resp.text)
				Google_API.add_calender(MeetingRoom_Name,topic,run_result['join_url'],start_time,duration)
				run_result['code']=resp.status_code
			except Exception as err:
				raise err
			else:
				save_log(run_result['code'])
				return run_result
	
class Google_API:
	def get_credentials():
		try:
			credentials = service_account.Credentials.from_service_account_file(Google_SERVICE_ACCOUNT_FILE, scopes=Google_SCOPES)
			#授权应用访问G suit控制台,获取授权信息
			credentials = credentials.with_subject('zoom_calendar_sync@cs.com')
			#委派管理员权限
		except Exception as err:
			raise err
		else:
			return credentials
	
	def add_calender(MeetingRoom_Name,topic,location,start_time,duration):
		try:

			if MeetingRoom_Name not in MEETINGROOM_DICT:
				save_log('Meeting Room Not Sync')
				return
			start_struct = datetime.datetime.strptime(start_time, "%Y-%m-%dT%H:%M:%S")
			end_time=datetime.datetime.strftime(start_struct+datetime.timedelta(minutes=int(duration)),"%Y-%m-%dT%H:%M:%S")
			credentials=Google_API.get_credentials()
			insert_data={
				"summary":topic,
				"location":location,
				"start": {
					"dateTime": str(start_time),
					"timeZone": 'Asia/Shanghai',
				},
				"end": {
					"dateTime": str(end_time),
					"timeZone": 'Asia/Shanghai',
				}
			}
			print(insert_data)
			service = build("calendar", "v3", credentials=credentials)
			results = service.events().insert(calendarId=MEETINGROOM_DICT[MeetingRoom_Name], body=insert_data).execute()
			
		except Exception as err:
			raise err
		else:
			save_log(results)
			return results


def main():
	
	try:
		run_result=ZOOM_API.Meeting_API.create_meeting("liziqi@csdn.com","逗老师预定的测试会议3","2021-12-06 22:00:00",60,'SZ_8FG3')
		print(run_result)
	except Exception as err:
		raise


if __name__ == '__main__':
	main()

*注1:获取Zoom JWT格式Token

访问以下链接
Zoom App Marketplace App Marketplace
点击右上角Develop->Build App。
点击JWT->Create,创建一个JWT应用。
在这里插入图片描述

在这里插入图片描述
填写基本信息
在这里插入图片描述
然后点击next,配置 App credentials。这里我们点击生成一个JWT Token,然后过期时间选择other,配置一个你觉得你在这个日期前指定已经跑路了的日子,避免未来给自己挖坑。
在这里插入图片描述
至此,我们已经得到了一个JWT TOKEN,可以用于Zoom API内的鉴权。
当然,JWT Token是一个安全系数并不怎么高的认证方式。更安全的建议使用OAuth2.0

*注2:获取Google日历ID

进入Google日历,点击某个日历列表右侧,选择Seetings and sharing
在这里插入图片描述
往下翻,即可看到此日历列表对应的Calendar ID
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逗老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值