Zoom Meetings (Independent Publisher) (Student) (#1143)

* Adding Zoom Meetings to the independent-publisher-connectors folder

* Update readme.md

Added Readme.md File

* Update apiProperties.json

Added StackOwner

* Added Obtaining Credentials Section

* Added Response Schema

* Updated stackOwner

* Added Schema and Metadata 

Updated the entire File. Request schema for Create Meeting is done.

* Few Descriptions Updated 

participant_video pre_schedule

* Added Dynamic Request URL

* Added metadata 

Also Updated participant_video Description

* Added x-ms-summary

Also Removed Extra space in the URL

* Removed all title and Fixed enum

* Fixed Errors related to default respose

* Added x-ms-url-encoding

* Added consumes

* Added meeting:master

* Made Changes to Documentation 

Fixed Redirect URI Error

* Fixes Invalid Scope 

Scopes must be Match.
This commit is contained in:
Akuthota Deekshith 2021-12-21 06:26:25 +05:30 коммит произвёл GitHub
Родитель 1e435155b1
Коммит 25d7412570
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
3 изменённых файлов: 620 добавлений и 0 удалений

Просмотреть файл

@ -0,0 +1,539 @@
{
"swagger": "2.0",
"info": {
"title": "Zoom Meetings",
"description": "This Connector will help to automate Zoom Meeting Operations",
"version": "1.0",
"contact": {
"name": "Akuthota Deekshith",
"url": "https://www.linkedin.com/in/akuthota-deekshith/",
"email": "akuthotadeekshith28@gmail.com"
}
},
"host": "api.zoom.us",
"basePath": "/",
"schemes": [
"https"
],
"x-ms-connector-metadata": [
{
"propertyName": "Website",
"propertyValue": "https://zoom.us/"
},
{
"propertyName": "Privacy policy",
"propertyValue": "https://zoom.us/privacy"
},
{
"propertyName": "Categories",
"propertyValue": "Communication;Collaboration"
}
],
"consumes": [],
"produces": [],
"paths": {
"/v2/users/me/meetings": {
"get": {
"responses": {
"200": {
"description": "default",
"schema": {
"type": "object",
"properties": {
"page_size": {
"type": "integer",
"format": "int32",
"description": "The number of records returned with a single API"
},
"total_records": {
"type": "integer",
"format": "int32",
"description": "The Total number of all the records available across pages"
},
"next_page_token": {
"type": "string",
"description": "The next page token is used to paginate through large result sets"
},
"meetings": {
"type": "array",
"items": {
"type": "object",
"properties": {
"uuid": {
"type": "string",
"description": "uuid"
},
"id": {
"type": "integer",
"format": "int32",
"description": "id"
},
"host_id": {
"type": "string",
"description": "ID of the user who set as the host of the meeting"
},
"topic": {
"type": "string",
"description": "topic"
},
"type": {
"type": "integer",
"format": "int32",
"description": "type"
},
"start_time": {
"type": "string",
"description": "Meeting start time"
},
"duration": {
"type": "integer",
"format": "int32",
"description": "duration"
},
"timezone": {
"type": "string",
"description": "timezone"
},
"created_at": {
"type": "string",
"description": "Time of Creation"
},
"join_url": {
"type": "string",
"description": "URL using which participants can join a meeting"
}
}
},
"description": "meetings"
}
}
}
}
},
"summary": "Get Meetings",
"description": "Gives the Upcoming Meetings",
"operationId": "GetMeetings",
"parameters": []
},
"post": {
"consumes": ["application/json"],
"responses": {
"200": {
"description": "default",
"schema": {
"type": "object",
"properties": {
"page_size": {
"type": "integer",
"format": "int32",
"description": "The number of records returned with a single API"
},
"total_records": {
"type": "integer",
"format": "int32",
"description": "The Total number of all the records available across pages"
},
"next_page_token": {
"type": "string",
"description": "The next page token is used to paginate through large result sets"
},
"meetings": {
"type": "array",
"items": {
"type": "object",
"properties": {
"uuid": {
"type": "string",
"description": "uuid"
},
"id": {
"type": "integer",
"format": "int32",
"description": "id"
},
"host_id": {
"type": "string",
"description": "ID of the user who set as the host of the meeting"
},
"topic": {
"type": "string",
"description": "topic"
},
"start_time": {
"type": "string",
"description": "Meeting start time"
},
"duration": {
"type": "integer",
"format": "int32",
"description": "duration"
},
"timezone": {
"type": "string",
"description": "timezone"
},
"created_at": {
"type": "string",
"description": "Time of Creation"
},
"join_url": {
"type": "string",
"description": "URL using which participants can join a meeting"
}
}
},
"description": "meetings"
}
}
}
}
},
"summary": "Create Meeting",
"description": "For Creating Meetings",
"operationId": "CreateMeeting",
"parameters": [
{
"name": "body",
"in": "body",
"required": false,
"schema": {
"type": "object",
"properties": {
"topic": {
"type": "string",
"description": "topic"
},
"type": {
"type": "integer",
"format": "int32",
"description": "type"
},
"start_time": {
"type": "string",
"description": "The meeting's start time"
},
"duration": {
"type": "string",
"description": "duration"
},
"settings": {
"type": "object",
"properties": {
"host_video": {
"type": "boolean",
"description": "Whether to start meetings with the host video on",
"enum": [
true,
false
]
},
"participant_video": {
"type": "boolean",
"description": "Whether to start meetings with the participant video on",
"enum": [
true,
false
]
},
"join_before_host": {
"type": "boolean",
"description": "Whether participants can join the meeting before its host",
"enum": [
true,
false
]
},
"mute_upon_entry": {
"type": "string",
"description": "Whether to mute participants upon entry"
},
"watermark": {
"type": "string",
"description": "watermark"
},
"audio": {
"type": "string",
"description": "audio"
},
"auto_recording": {
"type": "string",
"description": "The automatic recording settings local cloud none"
}
},
"description": "settings"
}
}
}
}
]
}
},
"/v2/meetings/{meetingid}": {
"get": {
"responses": {
"200": {
"description": "default",
"schema": {
"type": "object",
"properties": {
"uuid": {
"type": "string",
"description": "Unique Meeting Id for each meeting instance will generate its own Meeting UUID."
},
"id": {
"type": "integer",
"format": "int32",
"description": "Meeting ID is also known as the meeting number in long format"
},
"host_id": {
"type": "string",
"description": "ID of the user who is set as host of meeting"
},
"host_email": {
"type": "string",
"description": "Email address of the meeting host"
},
"assistant_id": {
"type": "string",
"description": "Unique identifier of the scheduler who scheduled this meeting on behalf of the host"
},
"topic": {
"type": "string",
"description": "topic"
},
"type": {
"type": "integer",
"format": "int32",
"description": "type"
},
"status": {
"type": "string",
"description": "status"
},
"start_time": {
"type": "string",
"description": "Meeting start time in GMT/UTC"
},
"duration": {
"type": "integer",
"format": "int32",
"description": "duration"
},
"timezone": {
"type": "string",
"description": "timezone"
},
"agenda": {
"type": "string",
"description": "agenda"
},
"created_at": {
"type": "string",
"description": "Time of creation"
},
"start_url": {
"type": "string",
"description": "Using which a host or an alternative host can start the Meeting"
},
"join_url": {
"type": "string",
"description": "URL using which participants can join a meeting"
},
"password": {
"type": "string",
"description": "password"
},
"h323_password": {
"type": "string",
"description": "room system passcode"
},
"pstn_password": {
"type": "string",
"description": "pstn password"
},
"encrypted_password": {
"type": "string",
"description": "Encrypted passcode for third party endpoints (H323/SIP)"
},
"settings": {
"type": "object",
"properties": {
"host_video": {
"type": "boolean",
"description": "Start video when the host joins the meeting"
},
"participant_video": {
"type": "boolean",
"description": "Whether to start meetings with the participant video on"
},
"cn_meeting": {
"type": "boolean",
"description": "Host meeting in China"
},
"in_meeting": {
"type": "boolean",
"description": "Host meeting in India"
},
"join_before_host": {
"type": "boolean",
"description": "Allow participants to join the meeting before the host starts the meeting"
},
"jbh_time": {
"type": "integer",
"format": "int32",
"description": "Join Before Host with few options"
},
"mute_upon_entry": {
"type": "boolean",
"description": "Mute participants upon entry"
},
"watermark": {
"type": "boolean",
"description": "watermark"
},
"use_pmi": {
"type": "boolean",
"description": "Use a personal meeting ID. Only used for scheduled meetings and recurring meetings without fixed time"
},
"approval_type": {
"type": "integer",
"format": "int32",
"description": "Enable registration and set approval for the registration"
},
"audio": {
"type": "string",
"description": "audio"
},
"auto_recording": {
"type": "string",
"description": "local cloud none three possibilities"
},
"enforce_login": {
"type": "boolean",
"description": "Only signed in users can join this meeting"
},
"enforce_login_domains": {
"type": "string",
"description": "Only signed in users with specified domains can join meetings"
},
"alternative_hosts": {
"type": "string",
"description": "Alternative host's emails or IDs multiple values are separated by a semicolon"
},
"close_registration": {
"type": "boolean",
"description": "Close registration after event date"
},
"show_share_button": {
"type": "boolean",
"description": "Show social share buttons on the meeting registration page"
},
"allow_multiple_devices": {
"type": "boolean",
"description": "Allow attendees to join the meeting from multiple devices"
},
"registrants_confirmation_email": {
"type": "boolean",
"description": "Whether to send registrants an email confirmation"
},
"waiting_room": {
"type": "boolean",
"description": "Enable waiting room"
},
"request_permission_to_unmute_participants": {
"type": "boolean",
"description": "Permission for participants to request for unmute"
},
"registrants_email_notification": {
"type": "boolean",
"description": "Whether to send registrants email notifications about their registration approval cancellation or rejection"
},
"meeting_authentication": {
"type": "boolean",
"description": "Only authenticated users can join meetings"
},
"encryption_type": {
"type": "string",
"description": "Choose between enhanced encryption and end-to-end encryption"
},
"approved_or_denied_countries_or_regions": {
"type": "object",
"properties": {
"enable": {
"type": "boolean",
"description": "enable"
}
},
"description": "Approve or block users from specific regions or countries from joining this meeting"
},
"breakout_room": {
"type": "object",
"properties": {
"enable": {
"type": "boolean",
"description": "enable"
}
},
"description": "Breakout room"
},
"alternative_hosts_email_notification": {
"type": "boolean",
"description": "Flag to determine whether to send email notifications to alternative hosts"
},
"device_testing": {
"type": "boolean",
"description": "Device Testing"
}
},
"description": "settings"
},
"pre_schedule": {
"type": "boolean",
"description": "whether to create a prescheduled meeting"
}
}
}
}
},
"summary": "Meeting Details",
"description": "For Selected Meeting you will get the Details",
"operationId": "MeetingDetails",
"parameters": [
{
"name": "meetingid",
"in": "path",
"required": true,
"type": "string",
"x-ms-summary": "Zoom Meeting Id",
"x-ms-url-encoding":"single",
"description": "Meeting ID also known as the meeting number in long format"
}
]
}
}
},
"definitions": {},
"parameters": {},
"responses": {},
"securityDefinitions": {
"oauth2_auth": {
"type": "oauth2",
"flow": "accessCode",
"authorizationUrl": "https://zoom.us/oauth/authorize",
"tokenUrl": "https://zoom.us/oauth/token",
"scopes": {
"meeting:read:admin meeting:read": "meeting:read:admin meeting:read"
}
}
},
"security": [
{
"oauth2_auth": [
"meeting:read:admin meeting:read"
]
}
],
"tags": []
}

Просмотреть файл

@ -0,0 +1,37 @@
{
"properties": {
"connectionParameters": {
"token": {
"type": "oauthSetting",
"oAuthSettings": {
"identityProvider": "oauth2",
"clientId": "Zoom Client ID",
"scopes": [
"meeting:read:admin meeting:master"
],
"redirectMode": "Global",
"redirectUrl": "https://global.consent.azure-apim.net/redirect",
"properties": {
"IsFirstParty": "False",
"IsOnbehalfofLoginSupported": false
},
"customParameters": {
"authorizationUrl": {
"value": "https://zoom.us/oauth/authorize"
},
"tokenUrl": {
"value": "https://zoom.us/oauth/token"
},
"refreshUrl": {
"value": "https://zoom.us/oauth/token"
}
}
}
}
},
"iconBrandColor": "#da3b01",
"capabilities": [],
"publisher": "Akuthota Deekshith",
"stackOwner": "Zoom Video Communications, Inc."
}
}

Просмотреть файл

@ -0,0 +1,44 @@
# Zoom Connector
Zoom is widely used for Virtual Meetings. Using this Connector you can Create Meetings, Get Meetings and Fetch Meeting Details (Individually). In some scenarios we want to perform certain actions Ex: Add Meetings into Excel. For this process Zoom Meetings Connector will gets the work done.
## Prerequisites
You will need the following to proceed:
* A Microsoft Power Apps or Power Automate plan with custom connector feature
* A Zoom Account
## Supported Operations
Currently there are three actions:
* `Create Meeting` : This Action will help to create Meeting with few inputs required for the Meeting. You will get a Response which contains all the Meeting Details Ex: Meeting URL, Meeting ID
* `Get Meetings` : This Action will get the Meetings that you have in Zoom Platform. The Response you will get will contain all the Meeting details for every Meeting that you created.
* `Meeting Details` : This Action will help the get the details for a specific Meeting. The Response will contain all the Meeting details that you requested.
## The API Documentation
This is the official documentation for Zoom API: https://marketplace.zoom.us/docs/api-reference/introduction
## Building a Connector
<b>Creating App:</b>
* Go to Zoom Developer Portal https://marketplace.zoom.us/.
* Sign In with your Account.
* Then to Develop Tab and Build App.
* Choose App as OAuth to create.
* Enter Name and select Account-level app. Turn off the toggle of publishing your app.
<b>Getting Credentials:</b>
* In "My Dashboard" go to "Created Apps".
* Click on App Name.
* Copy Client ID and Client Secret and Add this in the Security tab of the Connector.
* In "Redirect URL for OAuth" https://us.flow.microsoft.com/en-us/.
* In "Add Allow List" insert https://us.flow.microsoft.com/en-us/ and https://global.consent.azure-apim.net/redirect.
* In Information Tab Add Contact Details, Short Description and Long Description.
* `Note` : Scopes in Marketplace and Security Tab must be Same.
* The App uses admin read and write. So you need the following scope to be included meeting:write:admin, meeting:read:admin, meeting:master.
* `Note` : There is small issue while creating a connection in https://us.flow.microsoft.com/en-us/.
* There is an Error Message "Invalid Scope".
* For fixing this Simply Sign Out(https://1drv.ms/u/s!An7eWraK_9KraqxPrDbgQUQf_hw?e=UhHW1B) Zoom Account and Sign In Again.
* That's it you are ready to go.
## Known Issues and Limitations
No issues and limitations are known at this time