Coder Social home page Coder Social logo

laravel-zoom's Introduction

Laravel Zoom

Laravel Zoom API Client

Header Image

tests badge version badge downloads badge

Laravel Zoom API Package

Support us

We invest a lot in creating open source packages, and would be grateful for a sponsor if you make money from your product that uses them.

Our API mission!

Let's be honest, API's are all over the place and so inconsistent. We are therefore setting out to try to change this for all Laravel user's who need an API client and have developed an API Client Library, which our API's are built on top of, to give a common set of consistent functionality.

Updates & Issues

We only accept Issues through Github

We update security and bug fixes as soon as we can, other pull requests and enhancements will be as and when we can do them.

You can follow us on Twitter where we will post any major updates. MacsiDigital Twitter

Installation

You can install the package via composer:

composer require macsidigital/laravel-zoom

For versioning:-

  • 1.0 - deprecated - was a quick build for a client project, not recommended you use this version.

  • 2.0 - Laravel 5.5 - 5.8 - deprecated, no longer maintained

  • 3.0 - Laravel 6.0 - Maintained, feel free to create pull requests. This is open source which is a 2 way street.

  • 4.0 - Laravel 7.0 - 8.0 - Maintained, feel free to create pull requests. This is open source which is a 2 way street.

Configuration file

Publish the configuration file

php artisan vendor:publish --provider="MacsiDigital\Zoom\Providers\ZoomServiceProvider"

This will create a zoom.php config file within your config directory:-

return [
    'apiKey' => env('ZOOM_CLIENT_KEY'),
    'apiSecret' => env('ZOOM_CLIENT_SECRET'),
    'baseUrl' => 'https://api.zoom.us/v2/',
    'token_life' => 60 * 60 * 24 * 7, // In seconds, default 1 week
    'authentication_method' => 'jwt', // Only jwt compatible at present
    'max_api_calls_per_request' => '5' // how many times can we hit the api to return results for an all() request
];

You need to add ZOOM_CLIENT_KEY and ZOOM_CLIENT_SECRET into your .env file.

Also note the tokenLife, there were numerous users of the old API who said the token expired to quickly, so we have set for a longer lifeTime by default and more importantly made it customisable.

That should be it.

Usage

Everything has been set up to be similar to Laravel syntax. So hopefully using it will be similar to Eloquent, right down to relationships.

Unfortunately the Zoom API is not very uniform and is a bit all over the place. But we have hopefully made this uniform and logical. However you will still need to read the Zoom documentation to know what is and isn't possible.

At present we cover the following modules

  • Users
  • Roles
  • Meetings
  • Past Meetings
  • Webinars
  • Past Webinars
  • Recordings

Doesn't look like a lot but Meetings and Webinars are the 2 big modules and includes, polls, registration questions, registrants, panelists and various other relationships.

Also note that some of the functionality is only available to certain plan types. Check the Zoom documentation.

Connecting

To get an access point you can simply create a new instance and the resource.

    $user = Zoom::user();

Accessing models

There are 2 main ways to work with models, to call them directly from the access entry point via a facade, or to call them in the standard php 'new' method and pass in the access entry point

    $user = Zoom::user();

    //or
    
    $zoom = new \MacsiDigital\Zoom\Support\Entry;
    $user = new \MacsiDigital\Zoom\User($zoom);

Custom settings

If you would like to use different configuration values than those in your zoom.php config file, you can feed those as parameters to \MacsiDigital\Zoom\Support\Entry as shown below.

    $zoom = new \MacsiDigital\Zoom\Support\Entry($apiKey, $apiSecret, $tokenLife, $maxQueries, $baseUrl);

Working with models

As noted we are aiming for functionality similar to Laravel, so most things that you can do in Laravel you can do here, with exception to any database specific functionality, as we are not using databases.

    $user = Zoom::user()->create([...]);

    $user = Zoom::user()->find(...);

    $users = Zoom::user()->all();

    $meetings = Zoom::user()->find(...)->meetings;

    // Even this
    
    $user = Zoom::user()->find(...); 
    $meeting = Zoom::meeting()->make([...]);
    $user->meetings()->save($meeting);

Each model may also have some custom functions where Zoom has some unique functionality. We try to list all this below, under Resources.

    $user = Zoom::user()->create([...]);

    $user->updateProfilePicture($image); // Path to image

Common get functions

First

We utilise the first function to return the first record from the record set. This will return an instantiated model.

    $user = Zoom::user()->where('status', 'active')->first();

Find

We utilise the find function to return a record by searching for it by a unique attribute. This will return an instantiated model.

    $user = Zoom::user()->find('id');

    //or

    $user = Zoom::user()->find('[email protected]');

    // for most models this is only the id.  The past models utilise the uuid instead of the id.

All

The find all function returns a customised Laravel Collection, which we call a resultset.

  $users = Zoom::user()->all();

When calling the all function we will make up to 5 API calls to retrieve all the data, so 5 x 300 records (the max allowed), i.e. up to 1500 records per request. This can be amended in the config by updating 'max_api_calls_per_request'.

More info below in ResultSets.

Get

We utilise the get function when we want to retrieve filtered records. Note that Zoom doesn't offer much in the way of filters. So check the documentation.

    $users = Zoom::user()->where('status', 'active')->get();

    // We can also pass
    
    $users = Zoom::user()->where('status', '=', 'active')->get();

When using the get call we will automatically paginate results, which by default is 30 records. You can increase/decrease this by calling the paginate function.

    $users = Zoom::user()->where('status', 'active')->paginate(100)->get(); // will return 100 records

You can disable the pagination, so it behaves the same as the all() function

    $users = Zoom::user()->where('status', 'active')->setPaginate(false)->setPerPage(300)->get(); // will return 300 records * 5 request (or amount set in config) = 1500 records

resultSet

The all and get functions return a resultSet which is an enhanced Laravel Collection. Like collections, we can call the toArray and toJson functions, which places the data in a 'data' field and adds some meta information on total records and page information.

    // toArray()
    array:5 [
        "current_page" => 1
        "data" => array:5 [
            0 => array:11 [
              "uuid" => "...."
              "id" => ....
              "host_id" => "...."
              "topic" => "Team managers meeting"
              "type" => 2
              "start_time" => "2020-05-09T14:00:00+00:00"
              "duration" => 180
              "timezone" => "Europe/London"
              "created_at" => "2020-05-09T12:34:23+00:00"
              "join_url" => "https://zoom.us/j/...."
              "user_id" => "...."
            ]
            1 => array:11 [
              "uuid" => "...."
              "id" => ....
              "host_id" => "...."
              "topic" => "Onboarding meeting with Rosie Doe"
              "type" => 2
              "start_time" => "2020-05-10T13:30:00+00:00"
              "duration" => 180
              "timezone" => "Europe/London"
              "created_at" => "2020-05-10T13:19:41+00:00"
              "join_url" => "https://zoom.us/j/...."
              "user_id" => "...."
            ]
            2 => array:11 [
              "uuid" => "...."
              "id" => ....
              "host_id" => "...."
              "topic" => "Property tracking application meeting"
              "type" => 2
              "start_time" => "2020-05-14T15:30:00+00:00"
              "duration" => 60
              "timezone" => "Europe/London"
              "created_at" => "2020-05-14T08:45:32+00:00"
              "join_url" => "https://zoom.us/j/...."
              "user_id" => "...."
            ]
            3 => array:11 [
              "uuid" => "...."
              "id" => ....
              "host_id" => "...."
              "topic" => "Marketing meeting with John Doe"
              "type" => 2
              "start_time" => "2020-05-22T09:30:00+00:00"
              "duration" => 60
              "timezone" => "Europe/London"
              "created_at" => "2020-05-22T08:11:06+00:00"
              "join_url" => "https://zoom.us/j/...."
              "user_id" => "...."
            ]
            4 => array:11 [
              "uuid" => "...."
              "id" => ....
              "host_id" => "...."
              "topic" => "New Meeting Test"
              "type" => 2
              "start_time" => "2020-05-28T16:00:00+00:00"
              "duration" => 60
              "timezone" => "Europe/London"
              "created_at" => "2020-05-26T14:38:15+00:00"
              "join_url" => "https://zoom.us/j/...."
              "user_id" => "...."
            ]
        ]
        "last_page" => 1
        "per_page" => 1500
        "total" => 5
    ]

There are a few additional helper functions.

If our data set is larger than the returned records then we call the nextPage() function to return the next page of records.

    $meetings->nextPage();

We can then also navigate back a page by calling the previousPage() function. When doing this we will return cached results rather than querying the API.

    $meetings->previousPage();

There is also a function to accumulate more records, if you call the getNextRecords() function it will retrieve the next 1500 results and add them to the current records, so you can then run through 3000 records if required.

    $meetings->getNextRecords();

It is not advisable to mix the page navigation with the accumulating records function.

There are also a number of helper functions.

    $meetings->hasMorePages();
    $meetings->isFirstPage();
    $meetings->totalRecords();
    $meetings->currentPage();
    $meetings->lastPage();
    $meetings->nextPageNumber();
    $meetings->previousPageNumber();
    $meetings->firstPage(); // returns first page number which in this case will always be 1
    $meetings->perPage(); // returns how many results we return per page

As noted above we are using collections as the base for the record sets, so anything that is possible in collections is possible here. As Zoom's ability to filter is limited we can use the collections 'where' function for example.

Persisting Models

Again, the aim is to be similar to laravel, so you can utilise the save, create, update and make methods.

Save

To save a model we will use the save method, this will determine if the model is a new model or an existing and insert or update the model as needed.

    $user = Zoom::user()->find('id');

    $user->first_name = 'changed';

    $user->save();

Create

Currently, only the User model and Role model can be created directly, most other models need to be created as part of a relationship, see below for details.

To create a user.

  Zoom::user()->create([
        'first_name' => 'First Name',
        'last_name' => 'Last Name',
        'email' => '[email protected]',
        'password' => 'secret'
    ]); 
    // will return the created model so you can capture it if required.
    $user = Zoom::user()->create([
        'first_name' => 'First Name',
        'last_name' => 'Last Name',
        'email' => '[email protected]',
        'password' => 'secret'
    ]); 

Make

Make is similar to create except it will not persist the model to the API. This is handy for relationship models, more on this below.

    $meeting = Zoom::meeting()->make([...]); 

    Zoom::user()->find('id')->meetings()->save($meeting); 

Update

We can also mass update attributes.

    $user = Zoom::user()->find('id')->update(['field' => 'value', 'another_field' => 'value']);

Relationships

A major change to the newer versions of our API client is we use Relationships similar to Laravel. To retrieve all meetings associated to a user we would call like so.

    $meetings = Zoom::user()->find(...)->meetings;

In the Zoom API some relationships get returned direct with the parent model, some we have to make additional API calls for (this is worthwhile knowing for performance reasons and API rate limits).

Its also worth pointing out that we are returning the resultset by calling ->meetings. If we call the function ->meetings() we receive the relationship object which can be further queried.

    $meetings = Zoom::user()->find(...)->settings(); // Returns HasOne relationship model

    $meetings = Zoom::user()->find(...)->meetings(); // Returns HasMany relationship model

The later is handy when we need to filter results

    $meetings = Zoom::user()->find(...)->meetings()->where('type', 'scheduled')->get();

As noted above, Zoom has very limited queryable filters, so check with the Zoom documentation.

Save & Create

We can utilise the create and save functions on the relationship model to create models that require a relationship.

    // Save Method

    $meeting = Zoom::meeting()->make([...]); 
    Zoom::user()->find('id')->meetings()->save($meeting); 

    // Create Method

    Zoom::user()->find('id')->meetings()->create([...]);

We can also utilise the Make and Attach methods for creating and attaching models to a parent without persisting the model. This is handy for attaching sub models that need to save as part of the parent.

    // Create Method

    $meeting = Zoom::user()->find('id')->meetings()->make([...]); 

    $meeting->recurrence()->make([...]); // will attach to parent but not persist

    $meeting->save() // will save meeting and the attached recurrence model.

    // Attach Method

    $meeting = Zoom::meeting()->create([...]); 

    $recurrence = Zoom::meeting()->recurrence()->make([...]);
    $meeting->attach($recurrence);  // will attach to parent but not persist

    $meeting->save() // will save meeting and the attached recurrence model.

    // The later is very uncommon in Zoom and unlikely to be used due to the setup of relationships, but is an option.

Validation

Validation is built into the API where possible, and will throw an exception if there are validation errors. If our own validation fails and the Zoom request returns an error, then we will throw a HTTP exception.

If Validation in the API changes or something is not working, then the best is to amend the request object for the failing model and submit a pull request.

Resources

We give a brief overview of the common models, we have not included any validation requirements, you will need to check documentation for this.

Roles

    //To get a new instance
    
    Zoom::role();

    // available retrieve functions
     
    $role->find($id); // by id
    $role->all();
    $role->get();
    $role->first();

    // No available queries

    // Relationships
    $role->members // HasMany relationship, returns all users with role
    $role->privileges // hasOne relationship, list of all privileges

    // Special functions
     
    // Assign and remove role from users
    $role->giveRoleTo($user)
    $role->removeRoleFrom($user)

    // delete
    $role->delete(); // Delete (destroy) role.

Users

This is the main access for most models in Zoom.

    //To get a new instance
    
    Zoom::user();

    // available retrieve functions
     
    Zoom::user()->find('[email protected]'); // by id or email
    Zoom::user()->all();
    Zoom::user()->get();
    Zoom::user()->first();

    // Available queries
     
    Zoom::user()->where('type', 'active')->get(); // Allowed values active, inactive and pending
    Zoom::user()->where('role_id', *id*)->get(); // Allowed values are from the Roles model.

    // Relationships
    $user->setting // HasOne relationship
    $user->meetings // HasMany relationship
    $user->webinars // HasMany relationship
    $user->assistants // hasMany relationship
    $user->schedulers // hasMany relationship
    $user->permission // hasOne relationship
    $user->token // hasOne relationship
    $user->recordings // hasMany relationship

    // Special functions
     
    // To set license type
    $user->setBasic()
    $user->setLicensed()
    $user->setOnPrem()

    // Update functions
    $user->updateProfilePicture($image) // should pass the path to the image
    $user->updateStatus($status); // Allowed values active, deactivate
    $user->updatePassword($password); 
    $user->updateEmail($email);

    // disassociate & delete
    $user->disassociate(); // Disassociate from current account, user can still login to their own account.
    $user->delete(); // Delete (destroy) user.
User Settings
    //To get a new instance
    
    Zoom::setting();

    // can only be retrieved through a user
     
    $user->settings; 

    // To get sub relations then call the relationship of the setting
    
    $user->settings->scheduleMeeting;
    $user->settings->emailNotification;
    $user->settings->feature;
    $user->settings->inMeeting;
    $user->settings->integration;
    $user->settings->recording;
    $user->settings->telephony;
    $user->settings->tsp;

    // To update a setting
     
    $settings = $user->settings;
    $settings->scheduleMeeting->host_video = false;
    $settings->save();

    // Available queries
     
    $user()->settings()->where('login_type', '0')->get(); // Allowed values 0 => facebook, 1 => google, 99 => API, 100 => Zoom, 101 => SSO
    // Below not yet setup
    // $user()->settings()->where('option', 'meeting_authentication')->get(); // Allowed values meeting_authentication, recording_authentication.

Meetings

    //To get a new instance
    
    $meeting = Zoom::meeting();

    // To create we have to go through a user model
     
    $meeting = Zoom::user()->find(id)->meetings()->create([...]);

    $meeting = Zoom::meeting()->make([...]);
    $user = Zoom::user()->find(id)->meetings()->save($meeting);

    // To create a recurring meeting, this is just an example, you need to consult documentation to get the settings you require
    
    $meeting = Zoom::meeting()->make([
      'topic' => 'New meeting',
      'type' => 8,
      'start_time' => new Carbon('2020-08-12 10:00:00'), // best to use a Carbon instance here.
    ]);

    $meeting->recurrence()->make([
      'type' => 2,
      'repeat_interval' => 1,
      'weekly_days' => 2,
      'end_times' => 5
    ]);

    $meeting->settings()->make([
      'join_before_host' => true,
      'approval_type' => 1,
      'registration_type' => 2,
      'enforce_login' => false,
      'waiting_room' => false,
    ]);

    $user->meetings()->save($meeting);

    // To retrieve multiple records we need to go through the user model

    $user->meetings()->all();
    $user->meetings;  // same as above
    $user->meetings()->get();
    $user->meetings()->first();

    // available retrieve functions
     
    $meeting->find(id); // by id

    // We can update direct
    
    Zoom::meeting()->find(id)->update([...]);

    // or by using save function
    // 
    $meeting->save();

    // Available queries
     
    $user->meetings()->where('type', 'scheduled')->get(); // Allowed values scheduled, live and upcoming

    // Relationships
    $meeting->registrants // HasMany relationship
    $meeting->setting // HasOne relationship
    $meeting->invitation // HasOne relationship
    $meeting->occurrences // hasMany relationship
    $meeting->recurrence // hasOne relationship
    $meeting->polls // hasMany relationship
    $meeting->liveStream // hasOne relationship
    $meeting->registrationQuestions // hasMany relationship
    $meeting->trackingFields // hasMany relationship
    $meeting->recording // hasOne relationship

    // Once we have the meeting we can update registrants
     
    $registrant = Zoom::meeting()->registrants()->create([...]);

    // or
     
    $registrant = Zoom::meetingRegistrant()->make([...]);
    $meeting->registrants()->save($registrant);
    
    // To retrieve occurrences, Zoom requires both meeting and occurrence ID's, so we have to 
    // first retrieve the meeting
     
    $occurrence = Zoom::meeting()->find('...')->occurrences()->find('...');

    // You can then register people to that occurrence
     
    $registrant = Zoom::meetingRegistrant()->make([...]);
    
    $occurrence->registrants()->save($registrant);

    // Special functions
     
    // End Meeting
    $meeting->endMeeting();

    // delete
    $meeting->delete($scheduleForReminder); // Delete (destroy) meeting. ScheduleForReminder true by default

    //Delete Meeting Recording
    $meeting->recording->delete();  //Delete (destroy) the recording of the meeting.

Webinars

    //To get a new instance
    
    $webinar = Zoom::webinar();

    // To create we have to go through a user model
     
    $webinar = Zoom::user()->find(id)->webinars()->create([...]);

    $webinar = Zoom::webinar()->make([...]);
    $user = Zoom::user()->find(id)->webinars()->save($webinar);
    
    // To create a recurring meeting, this is just an example, you need to consult documentation to get the settings you require
    
    $webinar = Zoom::webinar()->make([
      'topic' => 'New webinar',
      'type' => 8,
      'start_time' => new Carbon('2020-08-12 10:00:00'), // best to use a Carbon instance here.
    ]);

    $webinar->recurrence()->make([
      'type' => 2,
      'repeat_interval' => 1,
      'weekly_days' => 2,
      'end_times' => 5
    ]);

    $webinar->settings()->make([
      'approval_type' => 1,
      'registration_type' => 2,
      'enforce_login' => false,
    ]);

    $user->webinars()->save($webinar);

    // To retrieve multiple records we need to go through the user model

    $user->webinars()->all();
    $user->webinars;  // same as above
    $user->webinars()->get();
    $user->webinars()->first();

    // available retrieve functions
     
    $webinar->find(id); // by id

    // We can update direct
    
    Zoom::webinar()->find(id)->update([...]);

    // or use the save function
    
    $webinar->save();

    // Relationships
    $webinar->registrants // HasMany relationship
    $webinar->panelists // HasMany relationship
    $webinar->setting // HasOne relationship
    $webinar->invitation // HasOne relationship
    $webinar->occurrences // hasMany relationship
    $webinar->recurrence // hasOne relationship
    $webinar->polls // hasMany relationship
    $webinar->registrationQuestions // hasMany relationship
    $webinar->trackingSources // hasMany relationship
    $webinar->trackingFields // hasMany relationship

    // To retrieve an occurrence, Zoom requires both webinar and occurnce ID's, so we have to 
    // first retrieve the webinar
     
    $occurrence = Zoom::webinar()->find('...')->occurrences()->find('...');

    // You can retrieve all occurrences
    
    $occurrence = Zoom::webinar()->find('...')->occurrences;

    // Once we have the webinar we can update registrants / panelists
     
    $registrant = Zoom::webinarRegistrant()->create([...]);

    $webinar->registrants()->save($registrant);

    $registrant = Zoom::panelist()->create([...]);

    $webinar->panelists()->save($panelist);

    // Special functions
     
    // End Webinar
    $webinar->endWebinar()

    // delete
    $webinar->delete(); // Delete (destroy) webinar.

Meeting/Webinar Occurrences

We are showing info for meeting, you will need to switch out meeting to webinar for webinars.

    // cant be instantiated or created directly, has to be created by setting up a recurrence
    // model on Meeting/Webinar Creation
    //
    // To retrieve occurrences we need to go through the meeting/webinar model, 
    // 
    // Only try to retrieve for a meeting/webinar that recurs, otherwise you will just get returned a
    // meeting/webinar model which will throw an error.

    $meeting->occurrences; // returns MeetingOccurrence model / WebinarOccurrences model

    // To get an occurrence

    $occurrence = $meeting->occurrences()->find(*id*); // Returns an Occurence model

    // Once we have the recurrence we can update registrants / panelists to that occurrence instance
     
    $registrant = Zoom::meetingRegistrant()->create([...]);

    $occurrence->registrants()->save($registrant);

    // Relationships
    $occurrence->registrants // HasMany relationship (meeting only)

    // An occurrence can also be updated directly
    $occurrence->save(); // update only, can't be created directly.
    
    // Single occurrences can also be deleted
    $occurrence->delete();

Meeting/Webinar Settings

We are showing info for meeting, you will need to switch out meeting to webinar for webinars.

    //To get a new instance
    
    $settings = Zoom::meetingSetting();

    // To create we have to go through a meeting model
     
    $setting = $meeting->settings()->create([...]);

    $settings = Zoom::meetingSetting()->make([...]);
    $meeting = $meeting->settings()->save($settings);

    // To retrieve settings we need to go through the meeting model

    $meeting->settings; // returns MeetingSetting model / WebinarSettings model

    // Relationships
    $setting->globalDialInNumbers // HasMany relationship (meeting only)
    $setting->globalDialInCountries // HasMany relationship

Past Meetings

Coming soon

Past Webinars

Coming soon

To Do's

  • Documentation Site
  • Documentation for other Meeting/Webinar relationships
  • Documentation for Past Meetings & Past Webinars
  • OAuth2 implementation
  • Tests

Changelog

Please see CHANGELOG for more information on what has changed recently.

Contributing

Please see CONTRIBUTING for details.

Security

If you discover any security-related issues, please email [email protected] instead of using the issue tracker.

Credits

License

The MIT License (MIT). Please see License File for more information.

laravel-zoom's People

Contributors

ahmetertem avatar arubacao avatar colinhall17 avatar cyrillkalita avatar demobiel avatar devmahmoudmustafa avatar devoidofgenius avatar dinver avatar drmmr763 avatar ecointest avatar gauravgusain98 avatar jamie4224 avatar laravel-shift avatar martynishin avatar oliver-holz avatar philharmonie avatar satoved avatar simonbuehler avatar tabunan avatar tpenaranda avatar valadanchik avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

laravel-zoom's Issues

Issue with Webinars

V3 of the API Webinars

Registrant returning bad Method call

BadMethodCallException :- Call to undefined method MacsiDigital\Zoom\Support\Entry::registrant()

Then for the panelists, it created successfully, but when I checked the webinar on zoom dashboard, the created panelist was not reflecting there

Meeting Create Existing User

When trying to create a meeting on an existing user, it loses the user ID

Code to set meeting:
$zoom_meet = $zoom->meeting;
$zoom_meet->setUserID($meeting_host->zoom_id);
$zoom_meeting = $zoom_meet->create($meeting_obj);

--- ALSO TRIED
Attaching from the zoom user it found:
$zoom->user->find($zoom_search)->first()
$zoom_meeting = $zoom_meet->meetings()->create($meeting_obj);

-- This is the response before send

Meeting {#485 โ–ผ
#methods: array:5 [โ–ถ]
#userID: null
+response: null
#attributes: array:16 [โ–ผ
"uuid" => ""
"id" => ""
"host_id" => ""
"created_at" => ""
"join_url" => ""
"topic" => "Test"
"type" => 2
"start_time" => "2019-07-28T13:00:00Z"
"duration" => 60
"timezone" => ""
"password" => ""
"agenda" => ""
"recurrence" => []
"occurrences" => []
"tracking_fields" => []
"settings" => []
]
#createAttributes: array:11 [โ–ถ]
#updateAttributes: array:11 [โ–ถ]
#relationships: array:3 [โ–ถ]
#query_string: ""
#client: PrivateApplication {#157 โ–ถ}

Status code 201

When I create a new user the api status code response is 201 instead 200.
In the model User line 91

Meeting Settings within createAttribute

The meeting settings are being replaced with blank values.

$data = [
"topic" =>"Test",
"type"=> 2,
"start_time" => "2019-07-28T13:00:00Z",
"duration"=>60,
"settings"=> [
"host_video"=> true,
"participant_video"=> true,
"join_before_host"=>true,
"approval_type"=> int(0)
];

array:7 [โ–ผ
"topic" => "Test"
"type" => 2
"start_time" => "2019-07-28T13:00:00Z"
"duration" => 60
"recurrence" => []
"tracking_fields" => []
"settings" => []
]

Documentation mismatch with Zoom documentation

From the readme, regarding the creation of meetings:

$meeting = $user->meetings()->create([
    	'type' => '2',
    	'start_time' => '2019-06-29T20:00:00Z'
]);

This code, when I was running in a command, will get a 405 from zoom server. I read through the Zoom docs, and without the trailing 'Z', it would go through without issue. Please update the doc at your leisure. Thanks for the great library.

400 status code in creating

$user = $zoom->user->create([
'name' => 'Test Name',
'first_name' => 'First Name',
'last_name' => 'Last Name',
'email' => '[email protected]',
'password' => 'secret',
'type' => 1
]);
$meeting = $user->meetings()->create([
'type' => '2',
'start_time' => '2019-06-29T20:00:00Z'
]);
$registrant = $meeting->registrants()->create([
'email' => '[email protected]',
'first_name' => 'Test',
'last_name' => 'Registrant'
]);

Removing a participant from a meeting in-progress

Hi, Thank you very much for the library saved a lot of time with the integration. Keep up the great work.

I am using the package just to create the meeting from the back-end and hardly there are requirements other than that.

Now my issue is, is there any ways to get a participant by providing the email address and the meeting number from a live meeting?

Please note, these participants will be joining using the WebSDK.

Thank you in-advance.

updatePassword not working

  • API Version: 4.0.10 (laravel-zoom version)
  • Laravel Version: 7.26.1
  • PHP Version: 7.3.18

Describe the bug
updatePassword is not working

To Reproduce
Steps to reproduce the behavior:

  1. $user = Zoom::user()->find(...);
  2. $user->updatePassword($password);
  3. See error count(): Parameter must be an array or an object that implements Countable

Expected behavior
Working updatePassword method

Additional context
Method flow in generell could not work

User all() giving collection of last object

When fetching all the users using all(). Collection from collect() giving last user only.

       $zoom = new \MacsiDigital\Zoom\Zoom;
	$users = $zoom->user->all();

For eg. If two users are present User A and User B. Than collection method is returing collection of two items but having same user i.e Last User B.

However using some trick, I am getting a correct result now.
Model.php

public function make($attributes)
    {
        $new_class = new $this;

        foreach ($attributes as $attribute => $value) {
            $new_class->$attribute = $value;
        }

        return $new_class;
    }

Is it correct ?

Meeting save response

Hi,

The meeting save response getContents returns null, where getBody returns the array. Do not know if this is a global amendment.

Craig

Invalid argument for foreach

The error only occurs when host_video and participant_video both set to false

Invalid argument supplied for foreach() {"exception":"[object] (ErrorException(code: 0): Invalid argument supplied for foreach() at /var
/www/www.tazman.co.il/vendor/macsidigital/laravel-zoom/src/Support/Model.php:252)
[stacktrace]
#0 /var/www/www.tazman.co.il/vendor/macsidigital/laravel-zoom/src/Support/Model.php(252): Illuminate\\Foundation\\Bootstrap\\HandleExceptions->handleError(2, 'Invalid argu
men...', '/var/www/www.ta...', 252, Array)
#1 /var/www/www.tazman.co.il/vendor/macsidigital/laravel-zoom/src/Support/Model.php(158): MacsiDigital\\Zoom\\Support\\Model->fill(false)
#2 /var/www/www.tazman.co.il/vendor/macsidigital/laravel-zoom/src/Support/Model.php(209): MacsiDigital\\Zoom\\Support\\Model->setAttribute('settings', Array)
#3 /var/www/www.tazman.co.il/vendor/macsidigital/laravel-zoom/src/Support/Model.php(253): MacsiDigital\\Zoom\\Support\\Model->__set('settings', Array)
#4 /var/www/www.tazman.co.il/vendor/macsidigital/laravel-zoom/src/Meeting.php(106): MacsiDigital\\Zoom\\Support\\Model->fill(Array)
#5 /var/www/www.tazman.co.il/vendor/macsidigital/laravel-zoom/src/Support/Model.php(244): MacsiDigital\\Zoom\\Meeting->make(Array)
#6 /var/www/www.tazman.co.il/app/Services/Zoom/ZoomMeetingsService.php(38): MacsiDigital\\Zoom\\Support\\Model->create(Array)
#7 /var/www/www.tazman.co.il/app/Services/Zoom/ZoomMeetingsService.php(55): App\\Services\\Zoom\\ZoomMeetingsService->create(Object(App\\Models\\CourseMeetingDescription),
 Object(App\\Models\\Zoom), Object(Illuminate\\Support\\Carbon))

Parameters for meeting creation

[
     "topic" => "test #2",
     "type" => 2,
     "start_time" => "2020-04-07T16:31:22",
     "timezone" => "Asia/Jerusalem",
     "password" => "12345678",
     "settings" => [
       "host_video" => false,
       "participant_video" => false,
       "join_before_host" => false,
       "mute_upon_entry" => false,
       "waiting_room" => false,
       "meeting_authentication" => false,
       "audio" => "voip",
       "auto_recording" => "none",
       "global_dial_in_countries" => [
         "IL",
         "Israel",
       ],
       "use_pmi" => false,
     ],
   ]

And how I used it

$zoomService = new Zoom();
$zoomUser = $zoomService->user->first();
$zoomMeeting = $zoomUser->meetings()->create($params);

Meeting delete error

Getting error when i want to delete a meeting:

$status=$zoom->meeting->find($meeting)->delete();

Undefined property: MacsiDigital\Zoom\Support\Request::$headers

File Request.php

public function delete($end_point)
{
        return $this->client->delete($end_point, [
            'headers' => $this->headers,
        ]);
}

I changed the code of two methods and its working fine now.
File Request.php

public function delete($end_point)
    {
        try {
            return $this->client->delete($end_point);
        } catch (Exception $e) {
            return $e->getResponse();
        }
    }

Model.php

public function delete($id = '')
    {
        if ($id == '') {
            $id = $this->id;
        }
        if (in_array('delete', $this->methods)) {
            $this->response = $this->client->delete($this->getEndpoint().'/'.$this->id);
            if ($this->response->getStatusCode() == '204') {
                return $this->response->getStatusCode();
            } else {
                throw new Exception($this->response->getStatusCode().' status code');
            }
        }
    }

Is it correct or any other code statement already present to delete a meeting instead of $status=$zoom->meeting->find($meeting)->delete();?

Webinar Settings doens't update

  • API Version: 4.1.2
  • Laravel Version: 8.20.1
  • PHP Version: 7.4

When i try to update the webinar settings it doesn't apply

Steps to reproduce the behavior:
1 - get any webinar with Zoom::user()->find(id)->webinars()->first();
2 - Use $webinar->settings = [
registrants_confirmation_email => false
] or $webinar->settings->registrants_confirmation_email = false
3 - Save the webinar

when i do $webinar->settings i should get registrants_confirmation_email is false but its always true

Thank you for this amazing package

Access token

Hi

I am using this first time and having all my client key and secret. But while getting these information zoom asking for auth Redirect URL for OAuth and Whitelist URL. I want to know which app type you are using for this Jwt?

This is the error i am getting "HTTP Request returned Status Code 401. Invalid access token. "

listing meetings related to a specific registrant

I am trying to list all meetings joined by a specific registrant using this script .

code:


$zoom = new \MacsiDigital\Zoom\Zoom;
$meetings = $zoom->user->find('[email protected]')->meetings()->all();

 $meetings_users = $zoom->user->all();


$meeting_of_user = array();
foreach($meetings as $meeting){

     die(var_dump($meeting->registrants()->get([
         'status' => 'approved',
         'page_size' => '30',
         'page_number' => '1'
     ])));

}

I can list all meetings found by that user but I need to list meetings joined by specefic registerant so I can show the meetings in the user profile.

This code returns 404 status code.

Disable waiting room

I have successfully created new meetings, but I can't disable waiting room.
This is my code.

$meeting = $user->meetings()->create([
                'topic' => $request["titulo"],
                'type' => '2',
                'password' => rand(100000,999999),
                'duration' => $request['duracion'],
                'start_time' => $fecha_inicio->toDateTimeLocalString(),
                'settings' => [
                    'host_video'=>false,
                    'join_before_host'=>true,
                    'waiting_room'=>false,
                    'approval_type'=>2,
                ]
            ]);

As you can see I have setted false to waiting_room parameter, but it is created as true.

Getting 'Class name must be a valid object or a string' on saving user settings

  • API Version: 4.1.1
  • Laravel Version: 8.12.3
  • PHP Version: 7.4

Hi, thanks for this awesome package!
I'm getting an error trying to save user settings, any help appreciated!

Here is what I'm doing:

    $settings = \MacsiDigital\Zoom\Facades\Zoom::user()->find('myemail@here')->settings;
    (dd here gets a settings object successfully)

    $settings->inMeeting->remote_control = false;
    $settings->inMeeting->feedback = false;
    $settings->inMeeting->file_transfer = false;

    $settings->emailNotification->jbh_reminder = false;
    $settings->emailNotification->cancel_meeting_reminder = false;
    $settings->emailNotification->alternative_host_reminder = false;
    $settings->emailNotification->schedule_for_reminder = false;

    $settings->recording->local_recording = false;
    $settings->recording->cloud_recording = false;
    $settings->recording->record_audio_file = false;

    (dd here I see the settings object with the relationships filled accordingly. )

    $settings->save();

On the save() laravel throws
Error Class name must be a valid object or a string

How to pass from and to parameters to get recordings?

Hello, I've been trying to get all the recordigns of a user without no success.

Playing with the Zoom Developer site, I've realized that if you do not provide a "from" date, the default value is current date.

I need to get the list of recordings in a period of time.

How can I pass a from date to the API query?

Thanks!

User Create returns 400 error status code

Hello,
thank you so much for creating a organised api for zoom. zoom's default api is very unorganised i think.
however, while trying to create a new user, i am getting 400 error status.
i tried the same code given in example.

$zoom = new \MacsiDigital\Zoom\Zoom;
    $user = $zoom->user->create([
        'name' => 'Ashraful Islam',
        'first_name' => 'Ashraful',
        'last_name' => 'Islam',
        'email' => '[email protected]',
        'password' => '123123',
        'type' => 1
    ]);

and exception throws 400 status code

so i checked zoom accounts jwp app logs. and in the log i can see the response details.
the response is below,

{
    endpoint: "https://api.zoom.us/v2/users",
    response_headers: [
        "Set-Cookie: zm_aid=""; Domain=.zoom.us; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; Secure; HttpOnly"
    ],
    date_time: "2020-04-09 17:25:06",
    method: "POST",
    request_body: "{"action":"create","user_info":["first_name","last_name","email","type","password"]}",
    response: {
        code: 300,
        message: "Request Body should be a valid JSON object."
    },
    request_headers: [
        "accept: application/json",
        "authorization: ******",
        "connection: close",
        "content-type: application/json",
        "user-agent: GuzzleHttp/6.5.1 curl/7.59.0 PHP/7.2.8"
    ],
    request_params: [
    ],
    http_status: "400"
} 

they say the request body is not valid json string. another main concern i see is, the request body does not contain any of my data !! it only contains the parameter names. and not the value.
so is there any problem in the data preparation method ? or we should pass the data in defferent format ?

incorrect method signature

when initializing the addSettings function of the Webinar class, the method signature is MeetingSetting where the WebinarSetting was.

file: src / Webinar.php -
public function addSettings (MeetingSetting $ settings) -> public function addSettings (WebinarSetting $ settings)

your project helped me, thanks.

Occurrence Save() after is not persisting

  • API Version: 4.0.8
  • Laravel Version: 7.19.0
  • PHP Version: 7.2.5

Describe the bug
Occurrence Save() after $occurrence->start_time = x not persisting on Zoom

To Reproduce
Steps to reproduce the behavior:

  1. Fetch Meeting
  2. Fetch Occurrances
  3. $occurrence->start_time = $event->event_date->toIso8601ZuluString();
    $occurrence->save();

Expected behavior
Occurrence Date persist on Zoom

meeting update error

I have the follow errors when I try to update a meeting
image

image

the last image is when I try to change the end_times or the end_date_time for my meeting

Thank you for your help!

Error updating a meeting

Hi @colinhall17

Thanks for this great package. I have encountered a small bug while attempting to update meetings. I have a proposed fix for this as well, outlined below. Thanks!

  • API Version: not sure which API version you mean? Running macsidigital/laravel-zoom v.4.0.9 and macsidigital/laravel-api-client v3.1.2 which seem to be the latest versions of each
  • Laravel Version: v7.22.4
  • PHP Version: 7.4.6

Describe the bug

When updating a Zoom meeting, I get the following error:

Error : Call to undefined method MacsiDigital\Zoom\TrackingField::setPassOnAttributes()

With the following backtrace (I think phpunit cuts off the full backtrace in my setup)

.../vendor/macsidigital/laravel-api-client/src/Support/Relations/HasMany.php:163
.../vendor/macsidigital/laravel-api-client/src/Support/Relations/HasMany.php:146
.../vendor/macsidigital/laravel-api-client/src/Support/PersistResource.php:81
.../vendor/macsidigital/laravel-api-client/src/Support/PersistResource.php:24
.../vendor/macsidigital/laravel-api-client/src/Traits/InteractsWithAPI.php:389
.../vendor/macsidigital/laravel-api-client/src/Traits/InteractsWithAPI.php:341
.../vendor/macsidigital/laravel-api-client/src/Traits/InteractsWithAPI.php:273

To Reproduce
Here's a barebones test that reproduces the issue:

/** @test */
public function it_can_update_a_meeting()
{
    Carbon::setTestNow('August 3 5:00 pm');
    $zoom = app('zoom');

    $user = $zoom->user->find('[email protected]');

    $meeting = $user->meetings()->create([
        'type' => 2,
        'topic' => 'Testing',
        'agenda' => 'Testing',
        'start_time' => now()->toDateTimeLocalString(),
        'timezone' => 'America/Montreal',
        'duration' => 30,
        'password' => Str::random(10),
    ]);

    $meeting->update([
        'topic' => 'Testing --updated',
        'agenda' => 'Testing --updated',
        'start_time' => now()->addMinutes(30)->toDateTimeLocalString(),
        'timezone' => 'America/Montreal',
        'duration' => 45,
    ]);
}

Expected behavior
The meeting should update. But it doesn't, due to the fatal error that occurs.

Additional context
I believe the fix is to change src/TrackingField.php to extend MacsiDigital\API\Support\ApiResource instead of MacsiDigital\API\Support\Resource. When I did that, I was able to fix my code. I am hoping validate the idea with you as I'm not as familiar with the package's code. I submitted a PR in #53 for you to test it out and review

HTTP Request returned Status Code 401. Invalid access token

Hello friends,

I'm just trying to implement a simply meeting interfaz. When I try to get a meeting, I use

dd( \Zoom::meeting()->find('12345678901') ); // 11 digit meeting ID

And get this error

MacsiDigital\API\Exceptions\HttpException HTTP Request returned Status Code 401. Invalid access token.

Storing the Meeting Response

Hey I can't seem to figure out how to store the response from a meeting being created.

Starting with:

$meeting = $user->meetings()->create([...]);

I store the main items I need like the join_url and start_url but I cannot get the whole response back and keep a copy of it. I have tried different castings as well on the Text column which none worked.

I essentially get this back in the text column:

{"client":{},"exists":true,"wasRecentlyCreated":true,"passOnKeys":[]}

but when I use:

logger($meeting);

I get a really nice print out of everything that came back over the wire and/or same as when viewing the response in the browser using a JSON plugin.

What's the best way to get this into the DB column? Thanks in advance

Recurring Weekly Meetings, weekly_days are supposed to be string, not integer.

Following Zoom Meetings documentation, if you're scheduling a meeting with recurrence type 2 (weekly), the parameter weekly_days should be string to support multiple days as comma separated value (i.e. 2,3,5,7), but if we set it so we get an error saying that it must be integer.

For instance, below:

<?php
$z = Zoom::user()->find('[email protected]');
$zoomMeeting = $z->meetings()->make([
    'topic' => 'Recurring meeting weekly on tuesday,thursday and saturday',
    'type' => 8, // Recurring with specific time
    'start_time' => '2020-09-04T15:45:00',
    'duration' => 15,
    'timezone' => 'America/Vancouver',
]);
$zoomMeeting->recurrence()->make([
    'type' => 2, // Weekly
    'repeat_interval' => 1, // Every 1 week
    'weekly_days' => '3,5,7', // Tuesday, Thursday, Saturday
    'end_date_time' => '2020-09-11T16:00:00',
]);
$zoomMeeting->save();

The bug is not version specific but I'm using the latest Laravel 7.x with PHP 7.4.

Unable to install on Laravel 8.x

Your requirements could not be resolved to an installable set of packages.

Problem 1
- Installation request for macsidigital/laravel-zoom ^4.1 -> satisfiable by macsidigital/laravel-zoom[4.1.0].
- Conclusion: remove laravel/framework v8.0.0
- Conclusion: don't install laravel/framework v8.0.0
- macsidigital/laravel-zoom 4.1.0 requires illuminate/support ^7.0|^8,0 -> satisfiable by illuminate/support[7.x-dev, v7.0.0, v7.0.1, v7.0.2, v7.0.3, v7.0.4, v7.0.5, v7.0.6, v7.0.7, v7.0.8, v7.1.0, v7.1.1, v7.1.2, v7.1.3, v7.10.0, v7.10.1, v7.10.2, v7.10.3, v7.11.0, v7.12.0, v7.13.0, v7.14.0, v7.14.1, v7.15.0, v7.16.0, v7.16.1, v7.17.0, v7.17.1, v7.17.2, v7.18.0, v7.19.0, v7.19.1, v7.2.0, v7.2.1, v7.2.2, v7.20.0, v7.21.0, v7.22.0, v7.22.1, v7.22.2, v7.22.3, v7.22.4, v7.23.0, v7.23.1, v7.23.2, v7.24.0, v7.25.0, v7.26.0, v7.26.1, v7.27.0, v7.28.0, v7.28.1, v7.3.0, v7.4.0, v7.5.0, v7.5.1, v7.5.2, v7.6.0, v7.6.1, v7.6.2, v7.7.0, v7.7.1, v7.8.0, v7.8.1, v7.9.0, v7.9.1, v7.9.2].
- don't install illuminate/support 7.x-dev|don't install laravel/framework v8.0.0
- don't install illuminate/support v7.0.0|don't install laravel/framework v8.0.0
- don't install illuminate/support v7.0.1|don't install laravel/framework v8.0.0
- don't install illuminate/support v7.0.2|don't install laravel/framework v8.0.0

Past Meetings

Hi, when will be past meetings going to come in package

Thanks,

This package does not support Laravel < 5.8.*

While installing this package via composer , the package gives incompatibility error. Precise error message is given below.

  • don't install illuminate/support v7.3.0|don't install laravel/framework v5.7.21
  • Installation request for laravel/framework (locked at v5.7.21, required as 5.7.*)

Thanks,
Faisal Khan

Create Registrant

  • API Version: 4.0
  • Laravel Version: 8.0
  • PHP Version: 7

We have this in the documentation

$registrant = Zoom::registrant()->make([...]);

Can't find this anywhere in the code and can't make a registrant. I
was wondering if the documentation was from a previous version
and there was a new way to create a registrant.

Thanks.

Error Code 124 > invalid access token

I'm trying to get list of users for test api.
I'm getting 401 status code.
After im add dd($this->response->getBody()); to find function in model.php
after i'm gettin following response from zoom.
array:2 [โ–ผ
"code" => 124
"message" => "Invalid access token."
]

I'm using laravel 7.0 on digital ocean ubuntu droplet.
what could be the problem?
Thanks

Auto recording Cloud

Good evening, sir,

First of all I would like to congratulate you for your package which is great!

I just have a little problem with the auto-recording cloud.

Here's what I did and yet when I launch the meeting, the recording doesn't start automatically.
Did I make a mistake?

Thank you in advance

$meeting = Zoom::meeting()->make([
    'topic' => 'REUNION',
    'type' => 2,
    'password' => 'PASSWORD',
    'start_time' => $request->start
]);

$meeting->settings()->make([
    'host_video' => true,
    'participant_video' => true,
    'join_before_host' => true,
    'mute_upon_entry' => true,
    'approval_type' => 2,
    'registration_type' => 1,
    'enforce_login' => false,
    'waiting_room' => false,
    'auto_recording' => 'cloud',
]);

$meeting = $user->meetings()->save($meeting);

I have a problem when I publish my web in the hosting

Hello! I have been using this library to connect the zoom api with my laravel project, everything works fine in my local environment, but when I upload my project to production hosting, the library throws the following error:

Declaration of MacsiDigital\API\Support\Entry::setRequest($request) must be compatible with MacsiDigital\API\Contracts\Entry::setRequest(MacsiDigital\API\Contracts\Client $request)

I will appreciate your valuable help.

StoreWebinar Request

There is a grammar error in StoreWebinar Request.

"settings" => StoreWebianrSetting::class,

Fix => "settings" => StoreWebinarSetting::class

Thank you

How can i update the webinar settings?

Please help me I can't figure it out how I can update the webinar settings.
Below is the functions i call for update .... it only update the webinar not webinar setting things like video Host/Panelists ON/OFF is not updated.

$webinar = \Zoom::webinar()->find($webinarId);
$webinar->fill($webinarData)->save();
$webinar->settings()->fill($settings);

FatalThrowableError (E_RECOVERABLE_ERROR)

I have the following error:
Argument 1 passed to MacsiDigital\API\Support\Relations\HasMany::save() must be an instance of MacsiDigital\API\Support\Relations\object, instance of MacsiDigital\Zoom\Meeting given.

When I try to save a new meeting from my hosting, in local environment that go with no problems.

error when list all meeting

Got this error when I list all meeting

Argument 1 passed to MacsiDigital\Zoom\Support\Response::__construct() must be an instance of GuzzleHttp\Psr7\Response, null given, called in 'zoomtest\vendor\macsidigital\laravel-zoom\src\Interfaces\Base.php on line 15
$zoom = new \MacsiDigital\Zoom\Zoom;
$meetings = $zoom->user->find('[email protected]')->meetings()->all();

Approve registrant

When sending a:

$registrant = $meetingZoom->registrants()->create([
      'email' => $user->email,
      'first_name' => $user->name,
      'last_name' => $lastName ? $lastName : "Registrant"
]);
$registrant->approve(); 

I always recieve:
Exception: 403 status code in file /var/www/html/project/vendor/macsidigital/laravel-zoom/src/Registrant.php on line 169

approve() is the only method where I'm having troubles to make it work right.

Update Webinar Settings

  • API Version: 4.0
  • Laravel Version: 8.0
  • PHP Version: 7

I've tried many variations to update the settings for a webcast but always get
an error or the settings not updating.

MacsiDigital\Zoom\Webinar already has a set relationship from MacsiDigital\Zoom\WebinarSetting this is a One relationship and cna only have 1 set relation.

$webinar->find($id); $webinar->settings()->make([ 'approval_type' => 1, 'registration_type' => 2, 'enforce_login' => false, ]); $webinar->save();

"Class 'MacsiDigital\Zoom\Requests\StoreWebianrSetting' not found"

Hi,
I'm creating the webinar with settings when i save the webinar it throw above exception.
Please help me i'm using laravel-zoom 2.0 and here is my backend code with exception screenshot.
Thanks
Regards,
Salman Safdar
$settings = [
'approval_type' => 2,
'panelists_video'=> true,
'host_video'=>true,
'audio'=>'both',
'question_answer'=>true,
'practice_session'=>true,
'auto_recording'=>'none',
'meeting_authentication'=>true,
];

$webData = [
  'topic' => $data['topic'],
  'agenda' => $data['agenda'],
  'type' => 5,
  'start_time' => new Carbon('2020-08-12 10:00:00')
  'duration' => $duration,
  'timezone'=> $timezone,
  'password'=>$password,
  'settings'=>$settings,
    ];

$webinar = \Zoom::webinar()->make($webData);
$webinar->settings()->make($settings);
$webinar->save();

Screenshot_2020-06-24 Whoops There was an error

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.