<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Abdul Muqeet</title>
    <description>The latest articles on DEV Community by Abdul Muqeet (@muqeetwebdev).</description>
    <link>https://dev.to/muqeetwebdev</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1097834%2F4922000c-ddcc-4b9b-9d3f-b213e446a69e.png</url>
      <title>DEV Community: Abdul Muqeet</title>
      <link>https://dev.to/muqeetwebdev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/muqeetwebdev"/>
    <language>en</language>
    <item>
      <title>Video SDK for Web JQuery - Meet Hour</title>
      <dc:creator>Abdul Muqeet</dc:creator>
      <pubDate>Thu, 08 Jun 2023 15:15:01 +0000</pubDate>
      <link>https://dev.to/muqeetwebdev/video-sdk-for-web-jquery-meet-hour-5bh5</link>
      <guid>https://dev.to/muqeetwebdev/video-sdk-for-web-jquery-meet-hour-5bh5</guid>
      <description>&lt;h1&gt;
  
  
  MeetHour - JQuery Example
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;SDK Example Link - &lt;a href="https://github.com/v-empower/MeetHour-Web-MobileSDKs"&gt;https://github.com/v-empower/MeetHour-Web-MobileSDKs&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;API Documentation Link - &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/"&gt;https://docs.v-empower.com/docs/MeetHour-API/&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Steps to Use Meet Hour Web Jquery Example
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Go to meethour.io and signup for Developer or Higher plan. Currently we offer 28 days free trial.&lt;/li&gt;
&lt;li&gt;Go to the dashboard and then click on developers menu.&lt;/li&gt;
&lt;li&gt;Copy your Client ID, Client Secret and Api Key. After copying, paste each copied text to the respective constant in the source code js/constants.js&lt;/li&gt;
&lt;li&gt;On Home page Click on Get Access Token&lt;/li&gt;
&lt;li&gt;Then Try Schedule a Meeting &amp;amp; Join Meeting.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Run Program
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Go to Browser and open index.html

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wxhyXr4o--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b4p9apda6l80hhdt7uc7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wxhyXr4o--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b4p9apda6l80hhdt7uc7.png" alt="Image description" width="800" height="355"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Library Import
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   &amp;lt;script src="https://api.meethour.io/libs/v2.4.6/external_api.min.js?apiKey=${API_KEY}"&amp;gt;&amp;lt;script&amp;gt;
   &amp;lt;script src="https://api.meethour.io/libs/v2.4.6/meethour-apis.min.js?apiKey=${API_KEY}"&amp;gt;&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  API End Points Supported
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;To Get Access Token Endpoint : =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/a44a7d7669f91-user-login-get-access-token"&gt;https://docs.v-empower.com/docs/MeetHour-API/a44a7d7669f91-user-login-get-access-token&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;       ApiServices.login({
               grant_type, client_id, client_secret, username, password
           });
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;=&amp;gt; You have to pass respective values in the argument section. Hence, to get desired response.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;To schedule a meeting: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/2de4b757a6312-meeting-schedule-meeting"&gt;https://docs.v-empower.com/docs/MeetHour-API/2de4b757a6312-meeting-schedule-meeting&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;       ApiServices.scheduleMeeting(token: string, body: ScheduleMeetingType)

           type ScheduleMeetingType {
                   agenda?: string;
                   attend?:
                       | Array&amp;lt;number&amp;gt;
                       | Array&amp;lt;UserObjectType&amp;gt;
                       | Array&amp;lt;UserObjectType | number&amp;gt;;
                   default_recording_storage?: string;
                   duration_hr?: number;
                   duration_min?: number;
                   enable_pre_registration?: number;
                   endBy?: string;
                   end_date_time?: string;
                   end_times?: number;
                   groups?: Array&amp;lt;number | string&amp;gt;;
                   hostusers?:
                       | Array&amp;lt;number&amp;gt;
                       | Array&amp;lt;UserObjectType&amp;gt;
                       | Array&amp;lt;UserObjectType | number&amp;gt;;
                   instructions?: string;
                   is_recurring?: number;
                   is_show_portal?: number;
                   meeting_agenda?: string;
                   meeting_date: string;
                   meeting_meridiem: string;
                   meeting_name: string;
                   meeting_time: string;
                   meeting_topic?: string;
                   monthlyBy?: string;
                   monthlyByDay?: string;
                   monthlyByWeekday?: string;
                   monthlyByWeekdayIndex?: string;
                   options?: Array&amp;lt;string&amp;gt;;
                   passcode: string;
                   recurring_type?: string;
                   repeat_interval?: number;
                   send_calendar_invite?: number;
                   timezone: string;
                   weeklyWeekDays?: number;
               };


       type UserObjectType {
               email?: string;
               first_name?: string;
               last_name?: string;
           }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;To Generate JWT Token Endpoint =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/b7e3d0ab3906f-generate-jwt"&gt;https://docs.v-empower.com/docs/MeetHour-API/b7e3d0ab3906f-generate-jwt&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;       ApiServices.generateJwt(token: string, body: GenerateJwtType)

      type GenerateJwtType {
               config?: {
               disableDeepLinking?: string;
               dropboxappKey?: string;
               dropboxredirectURI?: string;
               enableClosePage?: string;
               enableWelcomePage?: string;
               fileRecordingsEnabled?: boolean;
               liveStreamingEnabled?: boolean;
               p2penabled?: boolean;
               requireDisplayName?: string;
               resolution?: number;
               startAudioMuted?: number;
               videoheightideal?: number;
               videoheightmax?: number;
               videoheightmin?: number;
               videowidthideal?: number;
               videowidthmax?: number;
               videowidthmin?: number;
               };
               contact_id?: number;
               meeting_id: string;
               ui_config?: {
               ANDROID_APP_PACKAGE?: string;
               APP_NAME?: string;
               APP_SCHEME?: string;
               BRAND_WATERMARK_BACKGROUND?: string;
               DEFAULT_LOGO_URL?: string;
               ENABLE_MOBILE_BROWSER?: string;
               HIDE_DEEP_LINKING_LOGO?: string;
               MEET_HOUR_WATERMARK_LINK?: string;
               MOBILE_APP_PROMO?: string;
               MOBILE_DOWNLOAD_LINK_ANDROID?: string;
               MOBILE_DOWNLOAD_LINK_IOS?: string;
               NATIVE_APP_NAME?: string;
               PROVIDER_NAME?: string;
               SHOW_MEET_HOUR_WATERMARK?: string;
               disablePrejoinFooter?: string;
               disablePrejoinHeader?: string;
               toolbar_buttons?: Array&amp;lt;string&amp;gt;;
               };
           };
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;To fetch User Details: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/ff9d0e37d9191-user-details"&gt;https://docs.v-empower.com/docs/MeetHour-API/ff9d0e37d9191-user-details&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;       ApiServices.userDetails(token: string)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;To fetch access Token using Refresh Token: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/d851be1af9804-get-access-token-using-refresh-token"&gt;https://docs.v-empower.com/docs/MeetHour-API/d851be1af9804-get-access-token-using-refresh-token&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;       ApiServices.getRefreshToken(token: string, body: RefreshTokenType)

       type RefreshTokenType {
               client_id: string;
               client_secret: string;
               grant_type: string;
               refresh_token: string;
       }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;To add a contact in Meet Hour database: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/bd1e416413e8c-add-contact"&gt;https://docs.v-empower.com/docs/MeetHour-API/bd1e416413e8c-add-contact&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;       ApiServices.addContact(token: string, body: AddContactType)

       type AddContactType {
               country_code?: string;
               email: string;
               firstname: string;
               image?: string;
               is_show_portal?: boolean;
               lastname?: string;
               phone?: string;
           }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;To get Timezones of various countries: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/c688c29bce9b9-timezone-list"&gt;https://docs.v-empower.com/docs/MeetHour-API/c688c29bce9b9-timezone-list&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;       ApiServices.timezone(token: string)

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;To get list of all the contacts in your Meet Hour account: =&amp;gt; &lt;a href="https://api.meethour.io/api/%7Bversion%7D/customer/contacts"&gt;https://api.meethour.io/api/{version}/customer/contacts&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;       ApiServices.contactsList(token: string, body: ContactsType)

       type ContactsType {
               exclude_hosts: number;
               limit: number;
               page: number;
           }

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;To make changes in the existing contact details: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/28cae9187d215-edit-contact"&gt;https://docs.v-empower.com/docs/MeetHour-API/28cae9187d215-edit-contact&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    ApiServices.editContact(token: string, body: EditContactType)

    type EditContactType {
            contact_id: number;
            country_code: string;
            email: string;
            firstname: string;
            image: string;
            is_show_portal: boolean;
            lastname: string;
            phone: string;
        }

    ```





&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;To get Upcoming Meetings: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/31df88388416d-upcoming-meetings"&gt;https://docs.v-empower.com/docs/MeetHour-API/31df88388416d-upcoming-meetings&lt;/a&gt;&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

    ApiServices.upcomingMeetings(token: string, body: {
        limit: number;
        page: number;
    })


&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To archive a meeting: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/1dd64523cc6bf-archive-meeting"&gt;https://docs.v-empower.com/docs/MeetHour-API/1dd64523cc6bf-archive-meeting&lt;/a&gt;&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

    ApiServices.archiveMeeting(
            token: string,
            body: {
                id?: number;
        })


&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To get the details of a missed meeting: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/92998e2dda102-missed-meetings"&gt;https://docs.v-empower.com/docs/MeetHour-API/92998e2dda102-missed-meetings&lt;/a&gt;&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

    ApiServices.missedMeetings(
        token: string,
        body: {
            limit: number;
            page: number;
        })


&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To get completed meetings: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/aa9ef6a678250-completed-meetings"&gt;https://docs.v-empower.com/docs/MeetHour-API/aa9ef6a678250-completed-meetings&lt;/a&gt;&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

    ApiServices.completedMeetings(
        token: string,
        body: {
        limit: number;
        page: number;
        })


&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To edit an existing meeting: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/5dedde36380b4-meeting-edit-meeting"&gt;https://docs.v-empower.com/docs/MeetHour-API/5dedde36380b4-meeting-edit-meeting&lt;/a&gt;&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

    ApiServices.editMeeting(token: string, body: EditMeetingType)

    type EditMeeting {
        agenda?: string;
        attend?:
            | Array&amp;lt;number&amp;gt;
            | Array&amp;lt;UserObjectType&amp;gt;
            | Array&amp;lt;number &amp;amp; UserObjectType&amp;gt;;
        duration_hr?: number;
        duration_min?: number;
        enable_pre_registration?: number;
        endBy?: string;
        end_date_time?: string;
        groups?: Array&amp;lt;number&amp;gt;;
        hostusers?:
            | Array&amp;lt;number&amp;gt;
            | Array&amp;lt;UserObjectType&amp;gt;
            | Array&amp;lt;number &amp;amp; UserObjectType&amp;gt;;
        instructions?: string;
        is_recurring?: number;
        is_show_portal?: number;
        meeting_agenda?: string;
        meeting_date?: string;
        meeting_id: string;
        meeting_meridiem?: string;
        meeting_name?: string;
        meeting_time?: string;
        meeting_topic?: string;
        old_attend?:
            | Array&amp;lt;number&amp;gt;
            | Array&amp;lt;UserObjectType&amp;gt;
            | Array&amp;lt;number &amp;amp; UserObjectType&amp;gt;;
        options?: Array&amp;lt;string&amp;gt;;
        passcode?: string;
        recurring_type?: string;
        repeat_interval?: number;
        timezone?: string;
    }

    type UserObjectType {
        email?: string;
        first_name?: string;
        last_name?: string;
    }


&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To view a meeting: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/7e9a0a1e0da7f-meeting-view-meeting"&gt;https://docs.v-empower.com/docs/MeetHour-API/7e9a0a1e0da7f-meeting-view-meeting&lt;/a&gt;&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

    ApiServices.viewMeeting(
        token: string,
        body: { meeting_id: string }
        )


&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To get all the recordings list: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/ce7c4fd8cae7e-recording-list"&gt;https://docs.v-empower.com/docs/MeetHour-API/ce7c4fd8cae7e-recording-list&lt;/a&gt;&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

    ApiServices.recordingsList(token: string, body: RecordingsList)

    type RecordingsList {
        filter_by: string;
        limit: number;
        page: number;
    }


&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Join Conference API
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;api = new MeetHourExternalAPI(domain, options)&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;domain&lt;/strong&gt;: domain used to build the conference URL, 'meethour.io' for
example.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;options&lt;/strong&gt;: object with properties - the optional arguments:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;roomName&lt;/strong&gt;: (required) name of the room to join.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;apiKey&lt;/strong&gt;: (required). You will get API key from your Developer Page - &lt;a href="https://portal.meethour.io/customer/developers"&gt;https://portal.meethour.io/customer/developers&lt;/a&gt;. Make sure you are on our Developer or higher plan. - &lt;a href="https://meethour.io/#pricing"&gt;https://meethour.io/#pricing&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;jwt&lt;/strong&gt;: (required - If you to start meeting or join or moderator) - &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/b3A6MzcwODk5MTQ-generate-jwt"&gt;https://docs.v-empower.com/docs/MeetHour-API/b3A6MzcwODk5MTQ-generate-jwt&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;pcode&lt;/strong&gt;: (optional) Pass encrypted Meeting Password dynamically. Get this from API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;width&lt;/strong&gt;: (optional) width for the iframe which will be created. If a number is specified it's treated as pixel units. If a string is specified the format is number followed by 'px', 'em', 'pt' or '%'.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;height&lt;/strong&gt;: (optional) height for the iframe which will be created. If a number is specified it's treated as pixel units. If a string is specified the format is number followed by 'px', 'em', 'pt' or '%'.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;parentNode&lt;/strong&gt;: (optional) HTML DOM Element where the iframe will be added as a child.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;noSSL&lt;/strong&gt;: (optional, defaults to true) Boolean indicating if the server should be contacted using HTTP or HTTPS.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;onload&lt;/strong&gt;: (optional) handler for the iframe onload event.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;invitees&lt;/strong&gt;: (optional) Array of objects containing information about new participants that will be invited in the call.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;devices&lt;/strong&gt;: (optional) A map containing information about the initial devices that will be used in the call.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;userInfo&lt;/strong&gt;: (optional) JS object containing information about the participant opening the meeting, such as &lt;code&gt;email&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
javascript
const domain = 'meethour.io';
const options = {
    roomName: 'TestRoom',
    width: 700,
    height: 700,
    parentNode: document.querySelector('#meet')
};
const api = new MeetHourExternalAPI(domain, options);


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;You can set the initial media devices for the call:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
javascript
const domain = 'meethour.io';
const options = {
    ...
    devices: {
        audioInput: '&amp;lt;deviceLabel&amp;gt;',
        audioOutput: '&amp;lt;deviceLabel&amp;gt;',
        videoInput: '&amp;lt;deviceLabel&amp;gt;'
    },
    ...
};
const api = new MeetHourExternalAPI(domain, options);


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;You can overwrite options set in [config.js] and [interface_config.js].&lt;br&gt;
For example, to enable the filmstrip-only interface mode, you can use:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
javascript
const options = {
    ...
    interfaceConfigOverwrite: { filmStripOnly: true },
    ...
};
const api = new MeetHourExternalAPI(domain, options);


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;You can also pass a jwt token to Meet Hour:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
javascript
const options = {
    ...
    jwt: '&amp;lt;jwt_token&amp;gt;',
    noSsl: false,
    ...
};
const api = new MeetHourExternalAPI(domain, options);


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;You can set the userInfo(email, display name) for the call:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
javascript
var domain = "meethour.io";
var options = {
    ...
    userInfo: {
        email: 'email@meethourexamplemail.com',
        displayName: 'John Doe'
    }
}
var api = new MeetHourExternalAPI(domain, options);


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Controlling the embedded Meet Hour Conference
&lt;/h3&gt;

&lt;p&gt;Device management &lt;code&gt;MeetHourExternalAPI&lt;/code&gt; methods:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;getAvailableDevices&lt;/strong&gt; - Retrieve a list of available devices.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
javascript
api.getAvailableDevices().then(devices =&amp;gt; {
    devices = {
        audioInput: [{
            deviceId: 'ID'
            groupId: 'grpID'
            kind: 'audioinput'
            label: 'label'
        },....],
        audioOutput: [{
            deviceId: 'ID'
            groupId: 'grpID'
            kind: 'audioOutput'
            label: 'label'
        },....],
        videoInput: [{
            deviceId: 'ID'
            groupId: 'grpID'
            kind: 'videoInput'
            label: 'label'
        },....]
    }
    ...
});


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;getCurrentDevices&lt;/strong&gt; - Retrieve a list with the devices that are currently selected.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
javascript
api.getCurrentDevices().then(devices =&amp;gt; {
    devices = {
        audioInput: {
            deviceId: 'ID'
            groupId: 'grpID'
            kind: 'videoInput'
            label: 'label'
        },
        audioOutput: {
            deviceId: 'ID'
            groupId: 'grpID'
            kind: 'videoInput'
            label: 'label'
        },
        videoInput: {
            deviceId: 'ID'
            groupId: 'grpID'
            kind: 'videoInput'
            label: 'label'
        }
    }
    ...
});


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;isDeviceChangeAvailable&lt;/strong&gt; - Resolves with true if the device change is available and with false if not.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
javascript
// The accepted deviceType values are - 'output', 'input' or undefined.
api.isDeviceChangeAvailable(deviceType).then(isDeviceChangeAvailable =&amp;gt; {
    ...
});


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;isDeviceListAvailable&lt;/strong&gt; - Resolves with true if the device list is available and with false if not.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
javascript
api.isDeviceListAvailable().then(isDeviceListAvailable =&amp;gt; {
    ...
});


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;isMultipleAudioInputSupported&lt;/strong&gt; - Resolves with true if multiple audio input is supported and with false if not.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
javascript
api.isMultipleAudioInputSupported().then(isMultipleAudioInputSupported =&amp;gt; {
    ...
});


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;setAudioInputDevice&lt;/strong&gt; - Sets the audio input device to the one with the label or id that is passed.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
javascript
api.setAudioInputDevice(deviceLabel, deviceId);


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;setAudioOutputDevice&lt;/strong&gt; - Sets the audio output device to the one with the label or id that is passed.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
javascript
api.setAudioOutputDevice(deviceLabel, deviceId);


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;setVideoInputDevice&lt;/strong&gt; - Sets the video input device to the one with the label or id that is passed.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
javascript
api.setVideoInputDevice(deviceLabel, deviceId);


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;You can control the embedded Meet Hour conference using the &lt;code&gt;MeetHourExternalAPI&lt;/code&gt; object by using &lt;code&gt;executeCommand&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
javascript
api.executeCommand(command, ...arguments);


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;The &lt;code&gt;command&lt;/code&gt; parameter is String object with the name of the command. The following commands are currently supported:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;displayName&lt;/strong&gt; - Sets the display name of the local participant. This command requires one argument - the new display name to be set.
```

javascript
api.executeCommand('displayName', 'New Nickname');
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
* **password** - Sets the password for the room. This command requires one argument - the password name to be set.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;&lt;br&gt;
javascript&lt;br&gt;
api.executeCommand('password', 'The Password');&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
* **sendTones** - Play touch tones.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
javascript&lt;br&gt;
api.executeCommand('sendTones', {&lt;br&gt;
    tones: string, // The dial pad touch tones to play. For example, '12345#'.&lt;br&gt;
    duration: number, // Optional. The number of milliseconds each tone should play. The default is 200.&lt;br&gt;
    pause: number // Optional. The number of milliseconds between each tone. The default is 200.&lt;br&gt;
});&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
* **subject** - Sets the subject of the conference. This command requires one argument - the new subject to be set.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
javascript&lt;br&gt;
api.executeCommand('subject', 'New Conference Subject');&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
* **toggleAudio** - Mutes / unmutes the audio for the local participant. No arguments are required.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
javascript&lt;br&gt;
api.executeCommand('toggleAudio');&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
* **toggleVideo** - Mutes / unmutes the video for the local participant. No arguments are required.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
javascript&lt;br&gt;
api.executeCommand('toggleVideo');&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
* **toggleFilmStrip** - Hides / shows the filmstrip. No arguments are required.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
javascript&lt;br&gt;
api.executeCommand('toggleFilmStrip');&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
* **toggleChat** - Hides / shows the chat. No arguments are required.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
javascript&lt;br&gt;
api.executeCommand('toggleChat');&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
* **toggleShareScreen** - Starts / stops screen sharing. No arguments are required.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
javascript&lt;br&gt;
api.executeCommand('toggleShareScreen');&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
* **toggleTileView** - Enter / exit tile view layout mode. No arguments are required.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
javascript&lt;br&gt;
api.executeCommand('toggleTileView');&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
* **hangup** - Hangups the call. No arguments are required.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
javascript&lt;br&gt;
api.executeCommand('hangup');&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
* **email** - Changes the local email address. This command requires one argument - the new email address to be set.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
javascript&lt;br&gt;
api.executeCommand('email', '&lt;a href="mailto:example@example.com"&gt;example@example.com&lt;/a&gt;');&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
* **avatarUrl** - Changes the local avatar URL. This command requires one argument - the new avatar URL to be set.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
javascript&lt;br&gt;
api.executeCommand('avatarUrl', '&lt;a href="https://avatars0.githubusercontent.com/u/3671647'"&gt;https://avatars0.githubusercontent.com/u/3671647'&lt;/a&gt;);&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
* **sendEndpointTextMessage** - Sends a text message to another participant through the datachannels.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
javascript&lt;br&gt;
api.executeCommand('receiverParticipantId', 'text');&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;* **setVideoQuality** - Sets the send and receive video resolution. This command requires one argument - the resolution height to be set.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
javascript&lt;br&gt;
api.executeCommand('setVideoQuality', 720);&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
You can also execute multiple commands using the `executeCommands` method:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
javascript&lt;br&gt;
api.executeCommands(commands);&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;The `commands` parameter is an object with the names of the commands as keys and the arguments for the commands as values:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
javascript&lt;br&gt;
api.executeCommands({&lt;br&gt;
    displayName: [ 'nickname' ],&lt;br&gt;
    toggleAudio: []&lt;br&gt;
});&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
You can add event listeners to the embedded Meet Hour using the `addEventListener` method.
**NOTE: This method still exists but it is deprecated. MeetHourExternalAPI class extends [EventEmitter]. Use [EventEmitter] methods (`addListener` or `on`).**
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
javascript&lt;br&gt;
api.addEventListener(event, listener);&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
The `event` parameter is a String object with the name of the event.
The `listener` parameter is a Function object with one argument that will be notified when the event occurs with data related to the event.

The following events are currently supported:
* **cameraError** - event notifications about meethour-Meet having failed to access the camera. The listener will receive an object with the following structure:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
javascript&lt;br&gt;
{&lt;br&gt;
    type: string, // A constant representing the overall type of the error.&lt;br&gt;
    message: string // Additional information about the error.&lt;br&gt;
}&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
* **avatarChanged** - event notifications about avatar
changes. The listener will receive an object with the following structure:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
javascript&lt;br&gt;
{&lt;br&gt;
    id: string, // the id of the participant that changed his avatar.&lt;br&gt;
    avatarURL: string // the new avatar URL.&lt;br&gt;
}&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
* **audioAvailabilityChanged** - event notifications about audio availability status changes. The listener will receive an object with the following structure:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
javascript&lt;br&gt;
{&lt;br&gt;
    available: boolean // new available status - boolean&lt;br&gt;
}&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
* **audioMuteStatusChanged** - event notifications about audio mute status changes. The listener will receive an object with the following structure:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
javascript&lt;br&gt;
{&lt;br&gt;
    muted: boolean // new muted status - boolean&lt;br&gt;
}&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
* **endpointTextMessageReceived** - event notifications about a text message received through datachannels.
The listener will receive an object with the following structure:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
javascript&lt;br&gt;
{&lt;br&gt;
    senderInfo: {&lt;br&gt;
        jid: string, // the jid of the sender&lt;br&gt;
        id: string // the participant id of the sender&lt;br&gt;
    },&lt;br&gt;
    eventData: {&lt;br&gt;
        name: string // the name of the datachannel event: &lt;code&gt;endpoint-text-message&lt;/code&gt;&lt;br&gt;
        text: string // the received text from the sender&lt;br&gt;
    }&lt;br&gt;
}&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
* **micError** - event notifications about meethour-Meet having failed to access the mic. The listener will receive an object with the following structure:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
javascript&lt;br&gt;
{&lt;br&gt;
    type: string, // A constant representing the overall type of the error.&lt;br&gt;
    message: string // Additional information about the error.&lt;br&gt;
}&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
* **screenSharingStatusChanged** - receives event notifications about turning on/off the local user screen sharing. The listener will receive object with the following structure:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
javascript&lt;br&gt;
{&lt;br&gt;
    on: boolean, //whether screen sharing is on&lt;br&gt;
    details: {&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    // From where the screen sharing is capturing, if known. Values which are
    // passed include 'window', 'screen', 'proxy', 'device'. The value undefined
    // will be passed if the source type is unknown or screen share is off.
    sourceType: string|undefined
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;}&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
* **dominantSpeakerChanged** - receives event notifications about change in the dominant speaker. The listener will receive object with the following structure:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
javascript&lt;br&gt;
{&lt;br&gt;
    id: string //participantId of the new dominant speaker&lt;br&gt;
}&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
* **tileViewChanged** - event notifications about tile view layout mode being entered or exited. The listener will receive object with the following structure:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
javascript&lt;br&gt;
{&lt;br&gt;
    enabled: boolean, // whether tile view is not displayed or not&lt;br&gt;
}&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
* **incomingMessage** - Event notifications about incoming
messages. The listener will receive an object with the following structure:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
javascript&lt;br&gt;
{&lt;br&gt;
    from: string, // The id of the user that sent the message&lt;br&gt;
    nick: string, // the nickname of the user that sent the message&lt;br&gt;
    message: string // the text of the message&lt;br&gt;
}&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
* **outgoingMessage** - Event notifications about outgoing
messages. The listener will receive an object with the following structure:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
javascript&lt;br&gt;
{&lt;br&gt;
    message: string // the text of the message&lt;br&gt;
}&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
* **displayNameChange** - event notifications about display name
changes. The listener will receive an object with the following structure:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
javascript&lt;br&gt;
{&lt;br&gt;
    id: string, // the id of the participant that changed his display name&lt;br&gt;
    displayname: string // the new display name&lt;br&gt;
}&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
* **deviceListChanged** - event notifications about device list changes. The listener will receive an object with the following structure:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
javascript&lt;br&gt;
{&lt;br&gt;
    devices: Object // the new list of available devices.&lt;br&gt;
}&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;NOTE: The devices object has the same format as the getAvailableDevices result format.

* **emailChange** - event notifications about email
changes. The listener will receive an object with the following structure:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
javascript&lt;br&gt;
{&lt;br&gt;
    id: string, // the id of the participant that changed his email&lt;br&gt;
    email: string // the new email&lt;br&gt;
}&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;* **feedbackSubmitted** - event notifications about conference feedback submission
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
javascript&lt;br&gt;
{&lt;br&gt;
    error: string // The error which occurred during submission, if any.&lt;br&gt;
}&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
* **filmstripDisplayChanged** - event notifications about the visibility of the filmstrip being updated.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
javascript&lt;br&gt;
{&lt;br&gt;
    visible: boolean // Whether or not the filmstrip is displayed or hidden.&lt;br&gt;
}&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
* **participantJoined** - event notifications about new participants who join the room. The listener will receive an object with the following structure:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
javascript&lt;br&gt;
{&lt;br&gt;
    id: string, // the id of the participant&lt;br&gt;
    displayName: string // the display name of the participant&lt;br&gt;
}&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
* **participantKickedOut** - event notifications about a participants being removed from the room. The listener will receive an object with the following structure:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
javascript&lt;br&gt;
{&lt;br&gt;
    kicked: {&lt;br&gt;
        id: string, // the id of the participant removed from the room&lt;br&gt;
        local: boolean // whether or not the participant is the local particiapnt&lt;br&gt;
    },&lt;br&gt;
    kicker: {&lt;br&gt;
        id: string // the id of the participant who kicked out the other participant&lt;br&gt;
    }&lt;br&gt;
}&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
* **participantLeft** - event notifications about participants that leave the room. The listener will receive an object with the following structure:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
javascript&lt;br&gt;
{&lt;br&gt;
    id: string // the id of the participant&lt;br&gt;
}&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
* **participantRoleChanged** - event notification fired when the role of the local user has changed (none, moderator, participant). The listener will receive an object with the following structure:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
javascript&lt;br&gt;
{&lt;br&gt;
    id: string // the id of the participant&lt;br&gt;
    role: string // the new role of the participant&lt;br&gt;
}&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
* **passwordRequired** - event notifications fired when failing to join a room because it has a password.



* **videoConferenceJoined** - event notifications fired when the local user has joined the video conference. The listener will receive an object with the following structure:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
javascript&lt;br&gt;
{&lt;br&gt;
    roomName: string, // the room name of the conference&lt;br&gt;
    id: string, // the id of the local participant&lt;br&gt;
    displayName: string, // the display name of the local participant&lt;br&gt;
    avatarURL: string // the avatar URL of the local participant&lt;br&gt;
}&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
* **videoConferenceLeft** - event notifications fired when the local user has left the video conference. The listener will receive an object with the following structure:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
javascript&lt;br&gt;
{&lt;br&gt;
    roomName: string // the room name of the conference&lt;br&gt;
}&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
* **videoAvailabilityChanged** - event notifications about video availability status changes. The listener will receive an object with the following structure:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
javascript&lt;br&gt;
{&lt;br&gt;
    available: boolean // new available status - boolean&lt;br&gt;
}&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
* **videoMuteStatusChanged** - event notifications about video mute status changes. The listener will receive an object with the following structure:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
javascript&lt;br&gt;
{&lt;br&gt;
    muted: boolean // new muted status - boolean&lt;br&gt;
}&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
* **readyToClose** - event notification fired when Meet Hour is ready to be closed (hangup operations are completed).

* **subjectChange** - event notifications about subject of conference changes.
The listener will receive an object with the following structure:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
javascript&lt;br&gt;
{&lt;br&gt;
    subject: string // the new subject&lt;br&gt;
}&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
* **suspendDetected** - event notifications about detecting suspend event in host computer.

You can also add multiple event listeners by using `addEventListeners`.
This method requires one argument of type Object. The object argument must
have the names of the events as keys and the listeners of the events as values.
**NOTE: This method still exists but it is deprecated. MeetHourExternalAPI class extends [EventEmitter]. Use [EventEmitter] methods.**

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
javascript&lt;br&gt;
function incomingMessageListener(object)&lt;br&gt;
{&lt;br&gt;
// ...&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;function outgoingMessageListener(object)&lt;br&gt;
{&lt;br&gt;
// ...&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;api.addEventListeners({&lt;br&gt;
    incomingMessage: incomingMessageListener,&lt;br&gt;
    outgoingMessage: outgoingMessageListener&lt;br&gt;
});&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
If you want to remove a listener you can use `removeEventListener` method with argument the name of the event.
**NOTE: This method still exists but it is deprecated. MeetHourExternalAPI class extends [EventEmitter]. Use [EventEmitter] methods( `removeListener`).**
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
javascript&lt;br&gt;
api.removeEventListener('incomingMessage');&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
If you want to remove more than one event you can use `removeEventListeners` method with an Array with the names of the events as an argument.
**NOTE: This method still exists but it is deprecated. MeetHourExternalAPI class extends [EventEmitter]. Use [EventEmitter] methods.**
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
javascript&lt;br&gt;
api.removeEventListeners([ 'incomingMessage', 'outgoingMessageListener' ]);&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
You can get the number of participants in the conference with the following API function:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
javascript&lt;br&gt;
const numberOfParticipants = api.getNumberOfParticipants();&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
You can get the avatar URL of a participant in the conference with the following API function:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
javascript&lt;br&gt;
const avatarURL = api.getAvatarURL(participantId);&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
You can get the display name of a participant in the conference with the following API function:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
javascript&lt;br&gt;
const displayName = api.getDisplayName(participantId);&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
You can get the email of a participant in the conference with the following API function:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
javascript&lt;br&gt;
const email = api.getEmail(participantId);&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
You can get the iframe HTML element where Meet Hour is loaded with the following API function:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
javascript&lt;br&gt;
const iframe = api.getIFrame();&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
You can check whether the audio is muted with the following API function:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
javascript&lt;br&gt;
api.isAudioMuted().then(muted =&amp;gt; {&lt;br&gt;
    ...&lt;br&gt;
});&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
You can check whether the video is muted with the following API function:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
javascript&lt;br&gt;
api.isVideoMuted().then(muted =&amp;gt; {&lt;br&gt;
    ...&lt;br&gt;
});&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
You can check whether the audio is available with the following API function:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
javascript&lt;br&gt;
api.isAudioAvailable().then(available =&amp;gt; {&lt;br&gt;
    ...&lt;br&gt;
});&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
You can check whether the video is available with the following API function:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
javascript&lt;br&gt;
api.isVideoAvailable().then(available =&amp;gt; {&lt;br&gt;
    ...&lt;br&gt;
});&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
You can invite new participants to the call with the following API function:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
javascript&lt;br&gt;
api.invite([ {...}, {...}, {...} ]).then(() =&amp;gt; {&lt;br&gt;
    // success&lt;br&gt;
}).catch(() =&amp;gt; {&lt;br&gt;
    // failure&lt;br&gt;
});&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;**NOTE: The format of the invitees in the array depends on the invite service used for the deployment.**

You can remove the embedded Meet Hour Conference with the following API function:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
javascript&lt;br&gt;
api.dispose();&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
    </item>
    <item>
      <title>Video SDK for Web - Generic Javascript | Meet Hour</title>
      <dc:creator>Abdul Muqeet</dc:creator>
      <pubDate>Thu, 08 Jun 2023 15:13:16 +0000</pubDate>
      <link>https://dev.to/muqeetwebdev/video-sdk-for-web-generic-javascript-meet-hour-cmo</link>
      <guid>https://dev.to/muqeetwebdev/video-sdk-for-web-generic-javascript-meet-hour-cmo</guid>
      <description>&lt;h1&gt;
  
  
  [MeetHour - Generic Javascript SDK]
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;SDK Example Link - &lt;a href="https://github.com/v-empower/MeetHour-Web-MobileSDKs"&gt;https://github.com/v-empower/MeetHour-Web-MobileSDKs&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;API Documentation Link - &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/"&gt;https://docs.v-empower.com/docs/MeetHour-API/&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  Steps to Integrate:
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;Signup for Meet Hour (&lt;a href="https://meethour.io"&gt;https://meethour.io&lt;/a&gt;) and signup for Developer or Higher plan. Currently we offer 28 days free trial.&lt;/li&gt;
&lt;li&gt;Once you signup for developer plan, and go to our Dashboard - (&lt;a href="https://portal.meethour.io"&gt;https://portal.meethour.io&lt;/a&gt;) and tap on "Developers" menu.&lt;/li&gt;
&lt;li&gt;Now copy and Client ID &amp;amp; Client Secret and keep it handy with you.&lt;/li&gt;
&lt;li&gt;Go to our API documentation and hit Login API to get oAuth Access Token - (&lt;a href="https://bit.ly/3E2hKU7"&gt;https://bit.ly/3E2hKU7&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Once you get an access token, you can access any our API. Now you first thing you have to do is create a contact in our system as soon as user signup in your platform using this API (&lt;a href="https://bit.ly/3flms7q"&gt;https://bit.ly/3flms7q&lt;/a&gt;). This will give you unique contact_id of that user. You require this id when you schedule a meeting below.&lt;/li&gt;
&lt;li&gt;Later go to Schedule Meeting API -&amp;gt; Pass all the parameters needed to generate a new meetings - (&lt;a href="https://bit.ly/3h0qpis"&gt;https://bit.ly/3h0qpis&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Once the meeting is genereate, in order to join a meeting you require to Generate JWT Token using this API (&lt;a href="https://bit.ly/3sJaojD"&gt;https://bit.ly/3sJaojD&lt;/a&gt;) and pass it to the conference URL via MT Parameter - &lt;a href="https://meethour.io?mt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiIsImFjY2Vzc190b2tlbiI6ImV5SjBlWEFpT2lKS1YxUWlMQ0poYkdjaU9pSlNVekkxTmlKOS5leUpoZFdRaU9pSTVNemxrWmpVeE5pMDJNekEzTFRRNVkyUXRPVGMxTXkwek1XRTNNemRrT1RGaE1HWWlMQ0pxZEdraU9pSmtNMlUyT"&gt;https://meethour.io?mt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiIsImFjY2Vzc190b2tlbiI6ImV5SjBlWEFpT2lKS1YxUWlMQ0poYkdjaU9pSlNVekkxTmlKOS5leUpoZFdRaU9pSTVNemxrWmpVeE5pMDJNekEzTFRRNVkyUXRPVGMxTXkwek1XRTNNemRrT1RGaE1HWWlMQ0pxZEdraU9pSmtNMlUyT&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  MeetHour Embed Meeting
&lt;/h3&gt;

&lt;p&gt;All the Conference UI is managed from this page - &lt;a href="https://portal.meethour.io/customer/ui_settings"&gt;https://portal.meethour.io/customer/ui_settings&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can also try Embed Meeting via below code. Change the Meeting URL in below &lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;html&amp;gt;
    &amp;lt;head&amp;gt;
        &amp;lt;meta name="viewport" content="width=device-width, initial-scale=1.0,user-scalable=0"&amp;gt;
    &amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;iframe allow="camera; microphone; display-capture; autoplay; clipboard-write" src="https://meethour.io/TestRoom#interfaceConfig.applyMeetingSettings=true&amp;amp;interfaceConfig.disablePrejoinHeader=true&amp;amp;interfaceConfig.ENABLE_DESKTOP_DEEPLINK=false&amp;amp;interfaceConfig.disablePrejoinFooter=true&amp;amp;interfaceConfig.SHOW_MEET_HOUR_WATERMARK=false&amp;amp;interfaceConfig.HIDE_DEEP_LINKING_LOGO=true&amp;amp;interfaceConfig.MOBILE_APP_PROMO=false&amp;amp;interfaceConfig.ENABLE_MOBILE_BROWSER=true&amp;amp;appData.localStorageContent=null" name="mhConferenceFrame0" id="mhConferenceFrame0" allowfullscreen="true" style="height: 100%; width: 600px; border: 0px;"&amp;gt;&amp;lt;/iframe&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--j1ghA61x--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9ut0484dy59to6esmqx4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--j1ghA61x--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9ut0484dy59to6esmqx4.png" alt="Image description" width="800" height="430"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Meet Hour External Javascript API - SDK (Checkout Example.html)
&lt;/h4&gt;

&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;

&lt;p&gt;To add Meet Hour programmatically, please use our Javascript API library:&lt;/p&gt;

&lt;h2&gt;
  
  
  API Documentation - &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/"&gt;https://docs.v-empower.com/docs/MeetHour-API/&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Web Javascript SDK
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;        &amp;lt;script src="https://api.meethour.io/libs/v2.4.5/external_api.min.js?apiKey=f6282h82729080282928298"&amp;gt;&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;code&gt;api = new MeetHourExternalAPI(domain, options)&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Config &amp;amp; User Interface Settings Parameters - Parameters - &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/281f2d9a6c539-generate-jwt"&gt;https://docs.v-empower.com/docs/MeetHour-API/281f2d9a6c539-generate-jwt&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The next step for embedding Meet Hour is to create the Meet Hour API object.&lt;br&gt;
Its constructor gets a number of options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;domain&lt;/strong&gt;: domain used to build the conference URL, 'meethour.io' for
example.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;options&lt;/strong&gt;: object with properties - the optional arguments:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;roomName&lt;/strong&gt;: (required) name of the room to join.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;apiKey&lt;/strong&gt;: (required). You will get API key from your Developer Page - &lt;a href="https://portal.meethour.io/customer/developers"&gt;https://portal.meethour.io/customer/developers&lt;/a&gt;. Make sure you are on our Developer or higher plan. - &lt;a href="https://meethour.io/#pricing"&gt;https://meethour.io/#pricing&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;jwt&lt;/strong&gt;: (required - If you to start meeting or join or moderator) - &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/b3A6MzcwODk5MTQ-generate-jwt"&gt;https://docs.v-empower.com/docs/MeetHour-API/b3A6MzcwODk5MTQ-generate-jwt&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;pcode&lt;/strong&gt;: (optional) Pass encrypted Meeting Password dynamically. Get this from API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;width&lt;/strong&gt;: (optional) width for the iframe which will be created. If a number is specified it's treated as pixel units. If a string is specified the format is number followed by 'px', 'em', 'pt' or '%'.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;height&lt;/strong&gt;: (optional) height for the iframe which will be created. If a number is specified it's treated as pixel units. If a string is specified the format is number followed by 'px', 'em', 'pt' or '%'.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;parentNode&lt;/strong&gt;: (optional) HTML DOM Element where the iframe will be added as a child.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;noSSL&lt;/strong&gt;: (optional, defaults to true) Boolean indicating if the server should be contacted using HTTP or HTTPS.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;onload&lt;/strong&gt;: (optional) handler for the iframe onload event.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;invitees&lt;/strong&gt;: (optional) Array of objects containing information about new participants that will be invited in the call.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;devices&lt;/strong&gt;: (optional) A map containing information about the initial devices that will be used in the call.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;userInfo&lt;/strong&gt;: (optional) JS object containing information about the participant opening the meeting, such as &lt;code&gt;email&lt;/code&gt;.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;```Javascript Standard Example&lt;/p&gt;





&lt;p&gt;&amp;lt;br&amp;gt;
        var domain = &amp;amp;quot;meethour.io&amp;amp;quot;;&amp;lt;br&amp;gt;
        var options = {&amp;lt;br&amp;gt;
            roomName: &amp;amp;quot;TestRoom&amp;amp;quot;, //Change to your Meeting ID&amp;lt;br&amp;gt;
            parentNode: document.querySelector(&amp;amp;quot;#conference&amp;amp;quot;),&amp;lt;br&amp;gt;
            jwt: &amp;amp;quot;&amp;amp;quot;,&amp;lt;br&amp;gt;
            apiKey: &amp;amp;quot;&amp;amp;quot;,&amp;lt;br&amp;gt;
            pcode: &amp;amp;quot;5b40602cfea7708895781a8cad71be5b&amp;amp;quot;,&amp;lt;br&amp;gt;
            configOverwrite: {&amp;lt;br&amp;gt;
                prejoinPageEnabled: true, // make this false to skip the prejoin page &amp;lt;br&amp;gt;
                disableInviteFunctions: true,&amp;lt;br&amp;gt;
            },&amp;lt;br&amp;gt;
            interfaceConfigOverwrite: {&amp;lt;br&amp;gt;
                applyMeetingSettings: true, // This is managed from this page - &amp;lt;a href="https://portal.meethour.io/customer/ui_settings"&amp;gt;https://portal.meethour.io/customer/ui_settings&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;
                disablePrejoinHeader: true,&amp;lt;br&amp;gt;
                disablePrejoinFooter: true,&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;
                SHOW_MEET_HOUR_WATERMARK: false,&amp;lt;br&amp;gt;
                ENABLE_DESKTOP_DEEPLINK: false,&amp;lt;br&amp;gt;
                HIDE_DEEP_LINKING_LOGO: true,&amp;lt;br&amp;gt;
                MOBILE_APP_PROMO: false,&amp;lt;br&amp;gt;
                ENABLE_MOBILE_BROWSER: true&amp;lt;br&amp;gt;
            },&amp;lt;/p&amp;gt;
&amp;lt;div class="highlight"&amp;gt;&amp;lt;pre class="highlight plaintext"&amp;gt;&amp;lt;code&amp;gt;    };
    // Initialization of MeetHour External API
    var api = new MeetHourExternalAPI(domain, options);
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;p&amp;gt;&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;



Example:



```javascript
const domain = 'meethour.io';
const options = {
    roomName: 'MeetHourExternalAPI',
    width: 700,
    height: 700,
    parentNode: document.querySelector('#meet')
};
const api = new MeetHourExternalAPI(domain, options);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;You can set the initial media devices for the call:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;domain&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;meethour.io&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;options&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="p"&gt;...&lt;/span&gt;
    &lt;span class="na"&gt;devices&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;audioInput&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;&amp;lt;deviceLabel&amp;gt;&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;audioOutput&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;&amp;lt;deviceLabel&amp;gt;&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;videoInput&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;&amp;lt;deviceLabel&amp;gt;&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;api&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;MeetHourExternalAPI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;domain&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;options&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can overwrite options set in [config.js] and [interface_config.js].&lt;br&gt;
For example, to enable the filmstrip-only interface mode, you can use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;options&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="p"&gt;...&lt;/span&gt;
    &lt;span class="na"&gt;interfaceConfigOverwrite&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;filmStripOnly&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;api&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;MeetHourExternalAPI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;domain&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;options&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can also pass a jwt token to Meet Hour:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;options&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="p"&gt;...&lt;/span&gt;
    &lt;span class="na"&gt;jwt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;&amp;lt;jwt_token&amp;gt;&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;noSsl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;api&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;MeetHourExternalAPI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;domain&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;options&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can set the userInfo(email, display name) for the call:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;domain&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;meethour.io&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;options&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="p"&gt;...&lt;/span&gt;
    &lt;span class="na"&gt;userInfo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;email@meethourexamplemail.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;displayName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;John Doe&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;api&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;MeetHourExternalAPI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;domain&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;options&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Controlling the embedded Meet Hour Conference
&lt;/h3&gt;

&lt;p&gt;Device management &lt;code&gt;MeetHourExternalAPI&lt;/code&gt; methods:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;getAvailableDevices&lt;/strong&gt; - Retrieve a list of available devices.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getAvailableDevices&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;devices&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;devices&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;audioInput&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt;
            &lt;span class="na"&gt;deviceId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ID&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
            &lt;span class="na"&gt;groupId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;grpID&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
            &lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;audioinput&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
            &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;label&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
        &lt;span class="p"&gt;},....],&lt;/span&gt;
        &lt;span class="na"&gt;audioOutput&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt;
            &lt;span class="na"&gt;deviceId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ID&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
            &lt;span class="na"&gt;groupId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;grpID&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
            &lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;audioOutput&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
            &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;label&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
        &lt;span class="p"&gt;},....],&lt;/span&gt;
        &lt;span class="na"&gt;videoInput&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt;
            &lt;span class="na"&gt;deviceId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ID&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
            &lt;span class="na"&gt;groupId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;grpID&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
            &lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;videoInput&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
            &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;label&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
        &lt;span class="p"&gt;},....]&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;getCurrentDevices&lt;/strong&gt; - Retrieve a list with the devices that are currently selected.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getCurrentDevices&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;devices&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;devices&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;audioInput&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="na"&gt;deviceId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ID&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
            &lt;span class="na"&gt;groupId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;grpID&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
            &lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;videoInput&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
            &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;label&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="na"&gt;audioOutput&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="na"&gt;deviceId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ID&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
            &lt;span class="na"&gt;groupId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;grpID&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
            &lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;videoInput&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
            &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;label&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="na"&gt;videoInput&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="na"&gt;deviceId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ID&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
            &lt;span class="na"&gt;groupId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;grpID&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
            &lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;videoInput&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
            &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;label&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;isDeviceChangeAvailable&lt;/strong&gt; - Resolves with true if the device change is available and with false if not.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// The accepted deviceType values are - 'output', 'input' or undefined.&lt;/span&gt;
&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;isDeviceChangeAvailable&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;deviceType&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;isDeviceChangeAvailable&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;isDeviceListAvailable&lt;/strong&gt; - Resolves with true if the device list is available and with false if not.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;isDeviceListAvailable&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;isDeviceListAvailable&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;isMultipleAudioInputSupported&lt;/strong&gt; - Resolves with true if multiple audio input is supported and with false if not.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;isMultipleAudioInputSupported&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;isMultipleAudioInputSupported&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;setAudioInputDevice&lt;/strong&gt; - Sets the audio input device to the one with the label or id that is passed.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setAudioInputDevice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;deviceLabel&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;deviceId&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;setAudioOutputDevice&lt;/strong&gt; - Sets the audio output device to the one with the label or id that is passed.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setAudioOutputDevice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;deviceLabel&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;deviceId&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;setVideoInputDevice&lt;/strong&gt; - Sets the video input device to the one with the label or id that is passed.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setVideoInputDevice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;deviceLabel&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;deviceId&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can control the embedded Meet Hour conference using the &lt;code&gt;MeetHourExternalAPI&lt;/code&gt; object by using &lt;code&gt;executeCommand&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;executeCommand&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;command&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;arguments&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;command&lt;/code&gt; parameter is String object with the name of the command. The following commands are currently supported:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;displayName&lt;/strong&gt; - Sets the display name of the local participant. This command requires one argument - the new display name to be set.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;executeCommand&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;displayName&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;New Nickname&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;password&lt;/strong&gt; - Sets the password for the room. This command requires one argument - the password name to be set.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;executeCommand&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;password&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;The Password&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;sendTones&lt;/strong&gt; - Play touch tones.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;executeCommand&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;sendTones&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;tones&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// The dial pad touch tones to play. For example, '12345#'.&lt;/span&gt;
    &lt;span class="na"&gt;duration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Optional. The number of milliseconds each tone should play. The default is 200.&lt;/span&gt;
    &lt;span class="na"&gt;pause&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;number&lt;/span&gt; &lt;span class="c1"&gt;// Optional. The number of milliseconds between each tone. The default is 200.&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;subject&lt;/strong&gt; - Sets the subject of the conference. This command requires one argument - the new subject to be set.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;executeCommand&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;subject&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;New Conference Subject&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;toggleAudio&lt;/strong&gt; - Mutes / unmutes the audio for the local participant. No arguments are required.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;executeCommand&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;toggleAudio&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;toggleVideo&lt;/strong&gt; - Mutes / unmutes the video for the local participant. No arguments are required.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;executeCommand&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;toggleVideo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;toggleFilmStrip&lt;/strong&gt; - Hides / shows the filmstrip. No arguments are required.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;executeCommand&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;toggleFilmStrip&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;toggleChat&lt;/strong&gt; - Hides / shows the chat. No arguments are required.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;executeCommand&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;toggleChat&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;toggleShareScreen&lt;/strong&gt; - Starts / stops screen sharing. No arguments are required.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;executeCommand&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;toggleShareScreen&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;toggleTileView&lt;/strong&gt; - Enter / exit tile view layout mode. No arguments are required.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;executeCommand&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;toggleTileView&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;hangup&lt;/strong&gt; - Hangups the call. No arguments are required.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;executeCommand&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;hangup&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;email&lt;/strong&gt; - Changes the local email address. This command requires one argument - the new email address to be set.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;executeCommand&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;email&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;example@example.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;avatarUrl&lt;/strong&gt; - Changes the local avatar URL. This command requires one argument - the new avatar URL to be set.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;executeCommand&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;avatarUrl&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://avatars0.githubusercontent.com/u/3671647&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;sendEndpointTextMessage&lt;/strong&gt; - Sends a text message to another participant through the datachannels.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;executeCommand&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;receiverParticipantId&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;text&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;setVideoQuality&lt;/strong&gt; - Sets the send and receive video resolution. This command requires one argument - the resolution height to be set.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;executeCommand&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;setVideoQuality&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;720&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can also execute multiple commands using the &lt;code&gt;executeCommands&lt;/code&gt; method:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;executeCommands&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;commands&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;commands&lt;/code&gt; parameter is an object with the names of the commands as keys and the arguments for the commands as values:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;executeCommands&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;displayName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;nickname&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="na"&gt;toggleAudio&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can add event listeners to the embedded Meet Hour using the &lt;code&gt;addEventListener&lt;/code&gt; method.&lt;br&gt;
&lt;strong&gt;NOTE: This method still exists but it is deprecated. MeetHourExternalAPI class extends [EventEmitter]. Use [EventEmitter] methods (&lt;code&gt;addListener&lt;/code&gt; or &lt;code&gt;on&lt;/code&gt;).&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;listener&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;event&lt;/code&gt; parameter is a String object with the name of the event.&lt;br&gt;
The &lt;code&gt;listener&lt;/code&gt; parameter is a Function object with one argument that will be notified when the event occurs with data related to the event.&lt;/p&gt;

&lt;p&gt;The following events are currently supported:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;cameraError&lt;/strong&gt; - event notifications about meethour-Meet having failed to access the camera. The listener will receive an object with the following structure:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// A constant representing the overall type of the error.&lt;/span&gt;
    &lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="c1"&gt;// Additional information about the error.&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;avatarChanged&lt;/strong&gt; - event notifications about avatar
changes. The listener will receive an object with the following structure:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// the id of the participant that changed his avatar.&lt;/span&gt;
    &lt;span class="nx"&gt;avatarURL&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="c1"&gt;// the new avatar URL.&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;audioAvailabilityChanged&lt;/strong&gt; - event notifications about audio availability status changes. The listener will receive an object with the following structure:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;available&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;boolean&lt;/span&gt; &lt;span class="c1"&gt;// new available status - boolean&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;audioMuteStatusChanged&lt;/strong&gt; - event notifications about audio mute status changes. The listener will receive an object with the following structure:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;muted&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;boolean&lt;/span&gt; &lt;span class="c1"&gt;// new muted status - boolean&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;endpointTextMessageReceived&lt;/strong&gt; - event notifications about a text message received through datachannels.
The listener will receive an object with the following structure:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;senderInfo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;jid&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// the jid of the sender&lt;/span&gt;
        &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="c1"&gt;// the participant id of the sender&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="nx"&gt;eventData&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nl"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="c1"&gt;// the name of the datachannel event: `endpoint-text-message`&lt;/span&gt;
        &lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="c1"&gt;// the received text from the sender&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;micError&lt;/strong&gt; - event notifications about meethour-Meet having failed to access the mic. The listener will receive an object with the following structure:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// A constant representing the overall type of the error.&lt;/span&gt;
    &lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="c1"&gt;// Additional information about the error.&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;screenSharingStatusChanged&lt;/strong&gt; - receives event notifications about turning on/off the local user screen sharing. The listener will receive object with the following structure:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;on&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;boolean&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;//whether screen sharing is on&lt;/span&gt;
    &lt;span class="nx"&gt;details&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

        &lt;span class="c1"&gt;// From where the screen sharing is capturing, if known. Values which are&lt;/span&gt;
        &lt;span class="c1"&gt;// passed include 'window', 'screen', 'proxy', 'device'. The value undefined&lt;/span&gt;
        &lt;span class="c1"&gt;// will be passed if the source type is unknown or screen share is off.&lt;/span&gt;
        &lt;span class="nl"&gt;sourceType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="kc"&gt;undefined&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;dominantSpeakerChanged&lt;/strong&gt; - receives event notifications about change in the dominant speaker. The listener will receive object with the following structure:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="c1"&gt;//participantId of the new dominant speaker&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;tileViewChanged&lt;/strong&gt; - event notifications about tile view layout mode being entered or exited. The listener will receive object with the following structure:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;boolean&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// whether tile view is not displayed or not&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;incomingMessage&lt;/strong&gt; - Event notifications about incoming
messages. The listener will receive an object with the following structure:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;from&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// The id of the user that sent the message&lt;/span&gt;
    &lt;span class="nx"&gt;nick&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// the nickname of the user that sent the message&lt;/span&gt;
    &lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="c1"&gt;// the text of the message&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;outgoingMessage&lt;/strong&gt; - Event notifications about outgoing
messages. The listener will receive an object with the following structure:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="c1"&gt;// the text of the message&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;displayNameChange&lt;/strong&gt; - event notifications about display name
changes. The listener will receive an object with the following structure:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// the id of the participant that changed his display name&lt;/span&gt;
    &lt;span class="nx"&gt;displayname&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="c1"&gt;// the new display name&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;deviceListChanged&lt;/strong&gt; - event notifications about device list changes. The listener will receive an object with the following structure:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;devices&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Object&lt;/span&gt; &lt;span class="c1"&gt;// the new list of available devices.&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;NOTE: The devices object has the same format as the getAvailableDevices result format.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;emailChange&lt;/strong&gt; - event notifications about email
changes. The listener will receive an object with the following structure:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// the id of the participant that changed his email&lt;/span&gt;
    &lt;span class="nx"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="c1"&gt;// the new email&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;feedbackSubmitted&lt;/strong&gt; - event notifications about conference feedback submission
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;error&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="c1"&gt;// The error which occurred during submission, if any.&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;filmstripDisplayChanged&lt;/strong&gt; - event notifications about the visibility of the filmstrip being updated.
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;visible&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;boolean&lt;/span&gt; &lt;span class="c1"&gt;// Whether or not the filmstrip is displayed or hidden.&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;participantJoined&lt;/strong&gt; - event notifications about new participants who join the room. The listener will receive an object with the following structure:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// the id of the participant&lt;/span&gt;
    &lt;span class="nx"&gt;displayName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="c1"&gt;// the display name of the participant&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;participantKickedOut&lt;/strong&gt; - event notifications about a participants being removed from the room. The listener will receive an object with the following structure:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;kicked&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// the id of the participant removed from the room&lt;/span&gt;
        &lt;span class="na"&gt;local&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;boolean&lt;/span&gt; &lt;span class="c1"&gt;// whether or not the participant is the local particiapnt&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="nx"&gt;kicker&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nl"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="c1"&gt;// the id of the participant who kicked out the other participant&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;participantLeft&lt;/strong&gt; - event notifications about participants that leave the room. The listener will receive an object with the following structure:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="c1"&gt;// the id of the participant&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;participantRoleChanged&lt;/strong&gt; - event notification fired when the role of the local user has changed (none, moderator, participant). The listener will receive an object with the following structure:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="c1"&gt;// the id of the participant&lt;/span&gt;
    &lt;span class="nx"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="c1"&gt;// the new role of the participant&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;passwordRequired&lt;/strong&gt; - event notifications fired when failing to join a room because it has a password.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;videoConferenceJoined&lt;/strong&gt; - event notifications fired when the local user has joined the video conference. The listener will receive an object with the following structure:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;roomName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// the room name of the conference&lt;/span&gt;
    &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// the id of the local participant&lt;/span&gt;
    &lt;span class="nx"&gt;displayName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// the display name of the local participant&lt;/span&gt;
    &lt;span class="nx"&gt;avatarURL&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="c1"&gt;// the avatar URL of the local participant&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;videoConferenceLeft&lt;/strong&gt; - event notifications fired when the local user has left the video conference. The listener will receive an object with the following structure:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;roomName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="c1"&gt;// the room name of the conference&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;videoAvailabilityChanged&lt;/strong&gt; - event notifications about video availability status changes. The listener will receive an object with the following structure:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;available&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;boolean&lt;/span&gt; &lt;span class="c1"&gt;// new available status - boolean&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;videoMuteStatusChanged&lt;/strong&gt; - event notifications about video mute status changes. The listener will receive an object with the following structure:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;muted&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;boolean&lt;/span&gt; &lt;span class="c1"&gt;// new muted status - boolean&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;readyToClose&lt;/strong&gt; - event notification fired when Meet Hour is ready to be closed (hangup operations are completed).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;subjectChange&lt;/strong&gt; - event notifications about subject of conference changes.&lt;br&gt;
The listener will receive an object with the following structure:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;subject&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="c1"&gt;// the new subject&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;suspendDetected&lt;/strong&gt; - event notifications about detecting suspend event in host computer.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can also add multiple event listeners by using &lt;code&gt;addEventListeners&lt;/code&gt;.&lt;br&gt;
This method requires one argument of type Object. The object argument must&lt;br&gt;
have the names of the events as keys and the listeners of the events as values.&lt;br&gt;
&lt;strong&gt;NOTE: This method still exists but it is deprecated. MeetHourExternalAPI class extends [EventEmitter]. Use [EventEmitter] methods.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;incomingMessageListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;object&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;outgoingMessageListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;object&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addEventListeners&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;incomingMessage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;incomingMessageListener&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;outgoingMessage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;outgoingMessageListener&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you want to remove a listener you can use &lt;code&gt;removeEventListener&lt;/code&gt; method with argument the name of the event.&lt;br&gt;
&lt;strong&gt;NOTE: This method still exists but it is deprecated. MeetHourExternalAPI class extends [EventEmitter]. Use [EventEmitter] methods( &lt;code&gt;removeListener&lt;/code&gt;).&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;removeEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;incomingMessage&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you want to remove more than one event you can use &lt;code&gt;removeEventListeners&lt;/code&gt; method with an Array with the names of the events as an argument.&lt;br&gt;
&lt;strong&gt;NOTE: This method still exists but it is deprecated. MeetHourExternalAPI class extends [EventEmitter]. Use [EventEmitter] methods.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;removeEventListeners&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;incomingMessage&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;outgoingMessageListener&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;]);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can get the number of participants in the conference with the following API function:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;numberOfParticipants&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getNumberOfParticipants&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can get the avatar URL of a participant in the conference with the following API function:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;avatarURL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getAvatarURL&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;participantId&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can get the display name of a participant in the conference with the following API function:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;displayName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getDisplayName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;participantId&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can get the email of a participant in the conference with the following API function:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;email&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getEmail&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;participantId&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can get the iframe HTML element where Meet Hour is loaded with the following API function:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;iframe&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getIFrame&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can check whether the audio is muted with the following API function:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;isAudioMuted&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;muted&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can check whether the video is muted with the following API function:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;isVideoMuted&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;muted&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can check whether the audio is available with the following API function:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;isAudioAvailable&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;available&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can check whether the video is available with the following API function:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;isVideoAvailable&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;available&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can invite new participants to the call with the following API function:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;invite&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt; &lt;span class="p"&gt;{...},&lt;/span&gt; &lt;span class="p"&gt;{...},&lt;/span&gt; &lt;span class="p"&gt;{...}&lt;/span&gt; &lt;span class="p"&gt;]).&lt;/span&gt;&lt;span class="nx"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// success&lt;/span&gt;
&lt;span class="p"&gt;}).&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// failure&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;NOTE: The format of the invitees in the array depends on the invite service used for the deployment.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can remove the embedded Meet Hour Conference with the following API function:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dispose&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
    </item>
    <item>
      <title>Video SDK for Web Laravel - Meet Hour</title>
      <dc:creator>Abdul Muqeet</dc:creator>
      <pubDate>Thu, 08 Jun 2023 15:09:44 +0000</pubDate>
      <link>https://dev.to/muqeetwebdev/video-sdk-for-web-laravel-meet-hour-m8b</link>
      <guid>https://dev.to/muqeetwebdev/video-sdk-for-web-laravel-meet-hour-m8b</guid>
      <description>&lt;h1&gt;
  
  
  MeetHour-Laravel-PHP-Example
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://meethour.io"&gt;Meet Hour - 100% free video conference solution&lt;/a&gt;&lt;br&gt;
Meet Hour is 100% free video conference solution with End to End Encrypted and many other features such as lobby mode, Donor box &amp;amp; Click&amp;amp;Pledge Connect for fundraising, Video call recording, Youtube Live Stream etc.&lt;/p&gt;
&lt;h1&gt;
  
  
  Features:
&lt;/h1&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;✅  Free Unlimited Time Group Video Conference
✅  Upto 100 Participants Group Meeting
✅  Free Video Conference Recording
✅  YouTube Live Stream
✅  Raise funds via Click&amp;amp;Pledge Connect &amp;amp; DonorBox
✅  Virtual Background
✅  Live Pad
✅  Screensharing on Desktop &amp;amp; Mobile and many other features.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h1&gt;
  
  
  Try out one free session -
&lt;/h1&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. Website - https://meethour.io
2. Android - https://bit.ly/2U239ll
3. iOS - https://apple.co/3k8Rpbn
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Composer package (Packagist) (Latest version - 1.0.1)
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://packagist.org/packages/meethour/php-sdk

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BpJ9leBS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2e04bb69b2k39618jg2z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BpJ9leBS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2e04bb69b2k39618jg2z.png" alt="Image description" width="800" height="355"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  MeetHour SDK Implementation - Steps
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;SDK Example Link - &lt;a href="https://github.com/v-empower/MeetHour-Web-MobileSDKs/tree/master/Web/PHP/CorePHP"&gt;https://github.com/v-empower/MeetHour-Web-MobileSDKs/tree/master/Web/PHP/CorePHP&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;API Documentation Link - &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/"&gt;https://docs.v-empower.com/docs/MeetHour-API/&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
  
  
  Install
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;composer require meethour/php-sdk  or composer install

                OR

"require": {
        "meethour/php-sdk": "1.0.1"  // Composer Require
    }

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Steps to run the Example
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;First create a database using phpmyadmin based on .env file.&lt;/li&gt;
&lt;li&gt;Go to meethour.io and signup for Developer or Higher plan. Currently we offer 28 days free trial.&lt;/li&gt;
&lt;li&gt;Go to the dashboard and then click on developers menu.&lt;/li&gt;
&lt;li&gt;Later go to .env and enter all the credentials of database and Meet Hour credentials as well.&lt;/li&gt;
&lt;li&gt;Now run two commands &lt;code&gt;php artisan migrate&lt;/code&gt; &amp;amp;&amp;amp; &lt;code&gt;php artisan serve&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;On Home page Click on Get Access Token&lt;/li&gt;
&lt;li&gt;Then Try Schedule a Meeting &amp;amp; Join Meeting.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;
  
  
  Usage
&lt;/h3&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; Provide your credentials in the constructor of Login object and hit the login api to get your access token. Which will further be used for making rest of the api calls.

 &amp;lt;?php

 use MeetHourApp\Services\MHApiService;
 use MeetHourApp\Types\Login;
 use MeetHourApp\Types\ScheduleMeeting;

 $meetHourApiService = new MHApiService();
 $login = new Login($client_id, $client_secret, $grant_type, $username, $password);
 $loginResponse = $meetHourApiService-&amp;gt;login($login);
 $scheduleBody = new ScheduleMeeting("Quick Meeting", "123456", date('h:i'), 'PM', date('d-m-Y'), 'Asia/Kolkata');  // You can give
 $response = $meetHourApiService-&amp;gt;scheduleMeeting($loginResponse-&amp;gt;access_token, $scheduleBody);
 var_dump($response);
 $test = new ViewMeeting($meeting_id);
 $response = $meetHourApiService-&amp;gt;timezone($loginResponse-&amp;gt;access_token);
 var_dump($response);

 ?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h4&gt;
  
  
  Meet Hour - Join Meeting
&lt;/h4&gt;

&lt;p&gt;We need to follow the Javascript SDK for Join Meetin Module - &lt;a href="https://github.com/v-empower/MeetHour-Web-MobileSDKs/tree/master/Web/Javascript/Generic-Javascript"&gt;https://github.com/v-empower/MeetHour-Web-MobileSDKs/tree/master/Web/Javascript/Generic-Javascript&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  API End Points Supported
&lt;/h3&gt;

&lt;p&gt;Important points:&lt;br&gt;
=&amp;gt; Instead of '{version}', you to pass our latest version whenever you call the given functions. Currently we are using v1.2 Same version applies to the below calls.&lt;br&gt;
=&amp;gt; In the token section, you need to pass the received access token which is received when login api is hit, for making further api calls.&lt;br&gt;
=&amp;gt; You can make API calls by passing required properties in the constructor. But, to meet special requirements you can set rest of the properties directly, according to your need. For more details go to &lt;a href="https://docs.v-empower.com/docs/MeetHour-API"&gt;https://docs.v-empower.com/docs/MeetHour-API&lt;/a&gt; then click on APIS section to get all the information related to each api call.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;To Get Access Token Endpoint : =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/a44a7d7669f91-user-login-get-access-token"&gt;https://docs.v-empower.com/docs/MeetHour-API/a44a7d7669f91-user-login-get-access-token&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    class Login {
        public ?string $client_id;
        public ?string $client_secret;
        public ?string $grant_type;
        public ?string $password;
        public ?string $username;
    }
    $body = new Login($client_id, $client_secret, $grant_type, $username, $password);
    MHApiServices.login($body);
&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;=&amp;gt; You have to pass respective values in the argument section. Hence, to get desired response.&lt;/p&gt;


&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;To schedule a meeting: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/2de4b757a6312-meeting-schedule-meeting"&gt;https://docs.v-empower.com/docs/MeetHour-API/2de4b757a6312-meeting-schedule-meeting&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    class ScheduleMeeting {
        public ?string $agenda;
        public ?array $attend;
        public string $default_recording_storage;
        public ?int $duration_hr;
        public ?int $duration_min;
        public ?int $enable_pre_registration;
        public ?string $endBy;
        public ?string $end_date_time;
        public ?int $end_times;
        public ?array $groups;
        public ?array $hostusers;
        public ?string $instructions;
        public ?int $is_recurring;
        public ?int $is_show_portal;
        public ?string $meeting_agenda;
        public string $meeting_date;
        public string $meeting_meridiem;
        public string $meeting_name;
        public string $meeting_time;
        public ?string $meeting_topic;
        public ?string $monthlyBy;
        public ?string $monthlyByDay;
        public ?string $monthlyByWeekday;
        public ?string $monthlyByWeekdayIndex;
        public ?array $options;
        public string $passcode;
        public ?string $recurring_type;
        public ?int $repeat_interval;
        public int $send_calendar_invite;
        public string $timezone;
        public ?int $weeklyWeekDays;
    }

    $body = new ScheduleMeeting($meeting_name, $passcode, $meeting_time, $meeting_meridiem, $meeting_date, $timezone);
    MHApiServices.scheduleMeeting($token, $body);

&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;To Generate JWT Token Endpoint =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/b7e3d0ab3906f-generate-jwt"&gt;https://docs.v-empower.com/docs/MeetHour-API/b7e3d0ab3906f-generate-jwt&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    class GenerateJwt {
        public string $meeting_id;
        public ?int $contact_id;
        public ?object $ui_config;
        public ?array $config;
    }

    $body = new GenerateJwt($meeting_id);
    MHApiServices.generateJwt($token, $body);
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;To fetch User Details: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/ff9d0e37d9191-user-details"&gt;https://docs.v-empower.com/docs/MeetHour-API/ff9d0e37d9191-user-details&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    MHApiServices.userDetails($token);
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;To fetch access Token using Refresh Token: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/d851be1af9804-get-access-token-using-refresh-token"&gt;https://docs.v-empower.com/docs/MeetHour-API/d851be1af9804-get-access-token-using-refresh-token&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    class RefreshToken {
        private string $client_id;
        private string $client_secret;
        private ?string $grant_type;
        private string $refresh_token;
    }

    $body = new RefreshToken($client_id, $client_secret, $refresh_token);
    MHApiServices.getRefreshToken($token, $body);
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;To add a contact in Meet Hour database: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/bd1e416413e8c-add-contact"&gt;https://docs.v-empower.com/docs/MeetHour-API/bd1e416413e8c-add-contact&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    class ContactsList {
        public ?int $limit;
        public ?int $page;
        public ?int $exclude_hosts;
    }

    $body = new ContactsList();
    MHApiServices.contactList($token, $body);
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;To get Timezones of various countries: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/c688c29bce9b9-timezone-list"&gt;https://docs.v-empower.com/docs/MeetHour-API/c688c29bce9b9-timezone-list&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    MHApiServices.timezone($token);
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;To get list of all the contacts in your Meet Hour account: =&amp;gt; &lt;a href="https://api.meethour.io/api/%7Bversion%7D/customer/contacts"&gt;https://api.meethour.io/api/{version}/customer/contacts&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    class ContactsList {
        public string $email;
        public string $firstname;
        public ?string $country_code;
        public ?string $image;
        public ?bool $is_show_portal;
        public ?string $lastname;
        public ?string $phone;
    }

    $body = new ContactsList($email, $first_name);
    MHApiServices.ContactsList($token, $body);

&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;To make changes in the existing contact details: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/28cae9187d215-edit-contact"&gt;https://docs.v-empower.com/docs/MeetHour-API/28cae9187d215-edit-contact&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight plaintext"&gt;&lt;code&gt; class EditContact {
     public string $email;
     public string $firstname;
     public ?string $country_code;
     public ?string $image;
     public ?bool $is_show_portal;
     public ?string $lastname;
     public ?string $phone;
 }

 $body = new EditContact($contact_id, $firstname, $email);
 MHApiServices.editContact($token, $body);

 ```

&lt;/code&gt;&lt;/pre&gt;


&lt;/li&gt;
&lt;/ol&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;````
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;To get Upcoming Meetings: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/31df88388416d-upcoming-meetings"&gt;https://docs.v-empower.com/docs/MeetHour-API/31df88388416d-upcoming-meetings&lt;/a&gt;&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

    class UpcomingMeetings {
        public ?int $limit;
        public ?int $page;
        public ?int $show_all;
    }

    $body = new UpcomingMeetings();
    MHApiServices.upcomingMeetings($token, $body);


&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To archive a meeting: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/1dd64523cc6bf-archive-meeting"&gt;https://docs.v-empower.com/docs/MeetHour-API/1dd64523cc6bf-archive-meeting&lt;/a&gt;&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

    class ArchiveMeeting {
        public string $id;
    }

    $body = new ArchiveMeeting($id);
    MHApiServices.archiveMeeting($token, $body);


&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To get the details of a missed meeting: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/92998e2dda102-missed-meetings"&gt;https://docs.v-empower.com/docs/MeetHour-API/92998e2dda102-missed-meetings&lt;/a&gt;&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

    class MissedMeetings {
        public ?int $limit;
        public ?int $page;
        public ?int $show_all;
    }

    $body = new MissedMeetings();
    MHApiServices.missedMeetings($token, $body);


&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To get completed meetings: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/aa9ef6a678250-completed-meetings"&gt;https://docs.v-empower.com/docs/MeetHour-API/aa9ef6a678250-completed-meetings&lt;/a&gt;&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

    class CompletedMeetings {
        public ?int $limit;
        public ?int $page;
        public ?int $show_all;
    }

    $body = new CompletedMeetings();
    MHApiServices.completedMeetings($token, $body);


&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To edit an existing meeting: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/5dedde36380b4-meeting-edit-meeting"&gt;https://docs.v-empower.com/docs/MeetHour-API/5dedde36380b4-meeting-edit-meeting&lt;/a&gt;&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

    class EditMeeting {
        public string $meeting_id;
        public ?string $meeting_name;
        public ?string $agenda;
        public ?string $passcode;
        public ?string $meeting_date;
        public ?string $meeting_time;
        public ?string $meeting_meridiem;
        public ?int $duration_hr;
        public ?int $duration_min;
        public ?string $timezone;
        public ?int $is_recurring;
        public ?string $recurring_type;
        public ?int $repeat_interval;
        public ?int $weeklyWeekDays;
        public ?string $monthlyBy;
        public ?string $monthlyByDay;
        public ?string $monthlyByWeekdayIndex;
        public ?string $monthlyByWeekday;
        public ?string $endBy;
        public ?string $end_date_time;
        public ?string $instructions;
        public ?int $is_show_portal;
        public ?int $enable_pre_registration;
        public ?string $meeting_topic;
        public ?string $meeting_agenda;
        public ?array $options;
        public ?array $old_attend;
        public ?array $attend;
        public ?array $groups;
        public ?array $hostusers;
        public ?string $default_recording_storage;
        public ?array $live_stream_settings;
    }

    $body = new EditMeeting($meeting_id);
    MHApiServices.editMeeting($token, $body);


&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To view a meeting: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/7e9a0a1e0da7f-meeting-view-meeting"&gt;https://docs.v-empower.com/docs/MeetHour-API/7e9a0a1e0da7f-meeting-view-meeting&lt;/a&gt;&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

    class ViewMeeting {
        public string $meeting_id;
    }

    $body = new ViewMeeting($meeting_id);
    MHApiServices.viewMeeting($token, $body);


&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To get all the recordings list: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/ce7c4fd8cae7e-recording-list"&gt;https://docs.v-empower.com/docs/MeetHour-API/ce7c4fd8cae7e-recording-list&lt;/a&gt;&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

    class RecordingsList {
        public ?string $filter_by;
        public ?int $limit;
        public ?int $page;
    }

    $body = new RecordingsList();
    MHApiServices.recordingsList($token, $body);
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
    </item>
    <item>
      <title>Video SDK for CorePHP - Meet Hour</title>
      <dc:creator>Abdul Muqeet</dc:creator>
      <pubDate>Thu, 08 Jun 2023 15:08:14 +0000</pubDate>
      <link>https://dev.to/muqeetwebdev/video-sdk-for-corephp-meet-hour-717</link>
      <guid>https://dev.to/muqeetwebdev/video-sdk-for-corephp-meet-hour-717</guid>
      <description>&lt;h1&gt;
  
  
  MeetHour-CorePHP-Example
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://meethour.io"&gt;Meet Hour - 100% free video conference solution&lt;/a&gt;&lt;br&gt;
Meet Hour is 100% free video conference solution with End to End Encrypted and many other features such as lobby mode, Donor box &amp;amp; Click&amp;amp;Pledge Connect for fundraising, Video call recording, Youtube Live Stream etc.&lt;/p&gt;

&lt;h1&gt;
  
  
  Features:
&lt;/h1&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;✅  Free Unlimited Time Group Video Conference
✅  Upto 100 Participants Group Meeting
✅  Free Video Conference Recording
✅  YouTube Live Stream
✅  Raise funds via Click&amp;amp;Pledge Connect &amp;amp; DonorBox
✅  Virtual Background
✅  Live Pad
✅  Screensharing on Desktop &amp;amp; Mobile and many other features.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h1&gt;
  
  
  Try out one free session -
&lt;/h1&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. Website - https://meethour.io
2. Android - https://bit.ly/2U239ll
3. iOS - https://apple.co/3k8Rpbn
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Composer package (Packagist) (Latest version - 1.0.1)
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://packagist.org/packages/meethour/php-sdk

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--osT9otxj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4b7q0v15thrv1rndjwuk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--osT9otxj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4b7q0v15thrv1rndjwuk.png" alt="Image description" width="800" height="355"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  MeetHour SDK Implementation - Steps
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;SDK Example Link - &lt;a href="https://github.com/v-empower/MeetHour-Web-MobileSDKs/tree/master/Web/PHP/CorePHP"&gt;https://github.com/v-empower/MeetHour-Web-MobileSDKs/tree/master/Web/PHP/CorePHP&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;API Documentation Link - &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/"&gt;https://docs.v-empower.com/docs/MeetHour-API/&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Install
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;composer require meethour/php-sdk

                OR

"require": {
        "meethour/php-sdk": "1.0.1"  // Composer Require
    }

require('./vendor/autoload.php');

require('./vendor/meethour/php-sdk/src/autoload.php');

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Steps to run the Example
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;First create a database in mysql -&amp;gt; meethour-php-example.sql&lt;/li&gt;
&lt;li&gt;Go to meethour.io and signup for Developer or Higher plan. Currently we offer 28 days free trial.&lt;/li&gt;
&lt;li&gt;Go to the dashboard and then click on developers menu.&lt;/li&gt;
&lt;li&gt;Later go to constants.php and enter all the credentials of database and Meet Hour credentials as well.&lt;/li&gt;
&lt;li&gt;On Home page Click on Get Access Token&lt;/li&gt;
&lt;li&gt;Then Try Schedule a Meeting &amp;amp; Join Meeting.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Usage
&lt;/h3&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; Provide your credentials in the constructor of Login object and hit the login api to get your access token. Which will further be used for making rest of the api calls.

 &amp;lt;?php

 require('./vendor/autoload.php');
 require('./vendor/meethour/php-sdk/src/autoload.php');

 use MeetHourApp\Services\MHApiService;
 use MeetHourApp\Types\Login;
 use MeetHourApp\Types\ScheduleMeeting;

 $meetHourApiService = new MHApiService();
 $login = new Login($client_id, $client_secret, $grant_type, $username, $password);
 $loginResponse = $meetHourApiService-&amp;gt;login($login);
 $scheduleBody = new ScheduleMeeting("Quick Meeting", "123456", date('h:i'), 'PM', date('d-m-Y'), 'Asia/Kolkata');  // You can give
 $response = $meetHourApiService-&amp;gt;scheduleMeeting($loginResponse-&amp;gt;access_token, $scheduleBody);
 var_dump($response);
 $test = new ViewMeeting($meeting_id);
 $response = $meetHourApiService-&amp;gt;timezone($loginResponse-&amp;gt;access_token);
 var_dump($response);

 ?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h4&gt;
  
  
  Meet Hour - Join Meeting
&lt;/h4&gt;

&lt;p&gt;We need to follow the Javascript SDK for Join Meetin Module - &lt;a href="https://github.com/v-empower/MeetHour-Web-MobileSDKs/tree/master/Web/Javascript/Generic-Javascript"&gt;https://github.com/v-empower/MeetHour-Web-MobileSDKs/tree/master/Web/Javascript/Generic-Javascript&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  API End Points Supported
&lt;/h3&gt;

&lt;p&gt;Important points:&lt;br&gt;
=&amp;gt; Instead of '{version}', you to pass our latest version whenever you call the given functions. Currently we are using v1.2 Same version applies to the below calls.&lt;br&gt;
=&amp;gt; In the token section, you need to pass the received access token which is received when login api is hit, for making further api calls.&lt;br&gt;
=&amp;gt; You can make API calls by passing required properties in the constructor. But, to meet special requirements you can set rest of the properties directly, according to your need. For more details go to &lt;a href="https://docs.v-empower.com/docs/MeetHour-API"&gt;https://docs.v-empower.com/docs/MeetHour-API&lt;/a&gt; then click on APIS section to get all the information related to each api call.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;To Get Access Token Endpoint : =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/a44a7d7669f91-user-login-get-access-token"&gt;https://docs.v-empower.com/docs/MeetHour-API/a44a7d7669f91-user-login-get-access-token&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;       class Login {
           public ?string $client_id;
           public ?string $client_secret;
           public ?string $grant_type;
           public ?string $password;
           public ?string $username;
       }
       $body = new Login($client_id, $client_secret, $grant_type, $username, $password);
       MHApiServices.login($body);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;=&amp;gt; You have to pass respective values in the argument section. Hence, to get desired response.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;To schedule a meeting: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/2de4b757a6312-meeting-schedule-meeting"&gt;https://docs.v-empower.com/docs/MeetHour-API/2de4b757a6312-meeting-schedule-meeting&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;       class ScheduleMeeting {
           public ?string $agenda;
           public ?array $attend;
           public string $default_recording_storage;
           public ?int $duration_hr;
           public ?int $duration_min;
           public ?int $enable_pre_registration;
           public ?string $endBy;
           public ?string $end_date_time;
           public ?int $end_times;
           public ?array $groups;
           public ?array $hostusers;
           public ?string $instructions;
           public ?int $is_recurring;
           public ?int $is_show_portal;
           public ?string $meeting_agenda;
           public string $meeting_date;
           public string $meeting_meridiem;
           public string $meeting_name;
           public string $meeting_time;
           public ?string $meeting_topic;
           public ?string $monthlyBy;
           public ?string $monthlyByDay;
           public ?string $monthlyByWeekday;
           public ?string $monthlyByWeekdayIndex;
           public ?array $options;
           public string $passcode;
           public ?string $recurring_type;
           public ?int $repeat_interval;
           public int $send_calendar_invite;
           public string $timezone;
           public ?int $weeklyWeekDays;
       }

       $body = new ScheduleMeeting($meeting_name, $passcode, $meeting_time, $meeting_meridiem, $meeting_date, $timezone);
       MHApiServices.scheduleMeeting($token, $body);

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;To Generate JWT Token Endpoint =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/b7e3d0ab3906f-generate-jwt"&gt;https://docs.v-empower.com/docs/MeetHour-API/b7e3d0ab3906f-generate-jwt&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;       class GenerateJwt {
           public string $meeting_id;
           public ?int $contact_id;
           public ?object $ui_config;
           public ?array $config;
       }

       $body = new GenerateJwt($meeting_id);
       MHApiServices.generateJwt($token, $body);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;To fetch User Details: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/ff9d0e37d9191-user-details"&gt;https://docs.v-empower.com/docs/MeetHour-API/ff9d0e37d9191-user-details&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;       MHApiServices.userDetails($token);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;To fetch access Token using Refresh Token: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/d851be1af9804-get-access-token-using-refresh-token"&gt;https://docs.v-empower.com/docs/MeetHour-API/d851be1af9804-get-access-token-using-refresh-token&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;       class RefreshToken {
           private string $client_id;
           private string $client_secret;
           private ?string $grant_type;
           private string $refresh_token;
       }

       $body = new RefreshToken($client_id, $client_secret, $refresh_token);
       MHApiServices.getRefreshToken($token, $body);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;To add a contact in Meet Hour database: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/bd1e416413e8c-add-contact"&gt;https://docs.v-empower.com/docs/MeetHour-API/bd1e416413e8c-add-contact&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;       class ContactsList {
           public ?int $limit;
           public ?int $page;
           public ?int $exclude_hosts;
       }

       $body = new ContactsList();
       MHApiServices.contactList($token, $body);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;To get Timezones of various countries: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/c688c29bce9b9-timezone-list"&gt;https://docs.v-empower.com/docs/MeetHour-API/c688c29bce9b9-timezone-list&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;       MHApiServices.timezone($token);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;To get list of all the contacts in your Meet Hour account: =&amp;gt; &lt;a href="https://api.meethour.io/api/%7Bversion%7D/customer/contacts"&gt;https://api.meethour.io/api/{version}/customer/contacts&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;       class ContactsList {
           public string $email;
           public string $firstname;
           public ?string $country_code;
           public ?string $image;
           public ?bool $is_show_portal;
           public ?string $lastname;
           public ?string $phone;
       }

       $body = new ContactsList($email, $first_name);
       MHApiServices.ContactsList($token, $body);

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;To make changes in the existing contact details: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/28cae9187d215-edit-contact"&gt;https://docs.v-empower.com/docs/MeetHour-API/28cae9187d215-edit-contact&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    class EditContact {
        public string $email;
        public string $firstname;
        public ?string $country_code;
        public ?string $image;
        public ?bool $is_show_portal;
        public ?string $lastname;
        public ?string $phone;
    }

    $body = new EditContact($contact_id, $firstname, $email);
    MHApiServices.editContact($token, $body);

    ```





&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;To get Upcoming Meetings: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/31df88388416d-upcoming-meetings"&gt;https://docs.v-empower.com/docs/MeetHour-API/31df88388416d-upcoming-meetings&lt;/a&gt;&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

    class UpcomingMeetings {
        public ?int $limit;
        public ?int $page;
        public ?int $show_all;
    }

    $body = new UpcomingMeetings();
    MHApiServices.upcomingMeetings($token, $body);


&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To archive a meeting: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/1dd64523cc6bf-archive-meeting"&gt;https://docs.v-empower.com/docs/MeetHour-API/1dd64523cc6bf-archive-meeting&lt;/a&gt;&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

    class ArchiveMeeting {
        public string $id;
    }

    $body = new ArchiveMeeting($id);
    MHApiServices.archiveMeeting($token, $body);


&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To get the details of a missed meeting: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/92998e2dda102-missed-meetings"&gt;https://docs.v-empower.com/docs/MeetHour-API/92998e2dda102-missed-meetings&lt;/a&gt;&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

    class MissedMeetings {
        public ?int $limit;
        public ?int $page;
        public ?int $show_all;
    }

    $body = new MissedMeetings();
    MHApiServices.missedMeetings($token, $body);


&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To get completed meetings: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/aa9ef6a678250-completed-meetings"&gt;https://docs.v-empower.com/docs/MeetHour-API/aa9ef6a678250-completed-meetings&lt;/a&gt;&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

    class CompletedMeetings {
        public ?int $limit;
        public ?int $page;
        public ?int $show_all;
    }

    $body = new CompletedMeetings();
    MHApiServices.completedMeetings($token, $body);


&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To edit an existing meeting: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/5dedde36380b4-meeting-edit-meeting"&gt;https://docs.v-empower.com/docs/MeetHour-API/5dedde36380b4-meeting-edit-meeting&lt;/a&gt;&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

    class EditMeeting {
        public string $meeting_id;
        public ?string $meeting_name;
        public ?string $agenda;
        public ?string $passcode;
        public ?string $meeting_date;
        public ?string $meeting_time;
        public ?string $meeting_meridiem;
        public ?int $duration_hr;
        public ?int $duration_min;
        public ?string $timezone;
        public ?int $is_recurring;
        public ?string $recurring_type;
        public ?int $repeat_interval;
        public ?int $weeklyWeekDays;
        public ?string $monthlyBy;
        public ?string $monthlyByDay;
        public ?string $monthlyByWeekdayIndex;
        public ?string $monthlyByWeekday;
        public ?string $endBy;
        public ?string $end_date_time;
        public ?string $instructions;
        public ?int $is_show_portal;
        public ?int $enable_pre_registration;
        public ?string $meeting_topic;
        public ?string $meeting_agenda;
        public ?array $options;
        public ?array $old_attend;
        public ?array $attend;
        public ?array $groups;
        public ?array $hostusers;
        public ?string $default_recording_storage;
        public ?array $live_stream_settings;
    }

    $body = new EditMeeting($meeting_id);
    MHApiServices.editMeeting($token, $body);


&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To view a meeting: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/7e9a0a1e0da7f-meeting-view-meeting"&gt;https://docs.v-empower.com/docs/MeetHour-API/7e9a0a1e0da7f-meeting-view-meeting&lt;/a&gt;&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

    class ViewMeeting {
        public string $meeting_id;
    }

    $body = new ViewMeeting($meeting_id);
    MHApiServices.viewMeeting($token, $body);


&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To get all the recordings list: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/ce7c4fd8cae7e-recording-list"&gt;https://docs.v-empower.com/docs/MeetHour-API/ce7c4fd8cae7e-recording-list&lt;/a&gt;&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

    class RecordingsList {
        public ?string $filter_by;
        public ?int $limit;
        public ?int $page;
    }

    $body = new RecordingsList();
    MHApiServices.recordingsList($token, $body);
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
    </item>
    <item>
      <title>Video SDK for IOS - Swift &amp; Objc - Meet Hour</title>
      <dc:creator>Abdul Muqeet</dc:creator>
      <pubDate>Thu, 08 Jun 2023 14:59:16 +0000</pubDate>
      <link>https://dev.to/muqeetwebdev/video-sdk-for-ios-swift-objc-3n5m</link>
      <guid>https://dev.to/muqeetwebdev/video-sdk-for-ios-swift-objc-3n5m</guid>
      <description>&lt;p&gt;Reference &amp;amp; for Files you can check this: &lt;a href="https://github.com/v-empower/MeetHour-Web-MobileSDKs/tree/master/Mobile/Native/ios"&gt;https://github.com/v-empower/MeetHour-Web-MobileSDKs/tree/master/Mobile/Native/ios&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Meet Hour iOS SDK releases
&lt;/h1&gt;

&lt;h1&gt;
  
  
  MeetHour SDK Implementation - Steps
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;SDK Example Link - &lt;a href="https://github.com/v-empower/MeetHour-Web-MobileSDKs"&gt;https://github.com/v-empower/MeetHour-Web-MobileSDKs&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;API Documentation Link - &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/"&gt;https://docs.v-empower.com/docs/MeetHour-API/&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  Steps to Integrate:
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;Signup for Meet Hour (&lt;a href="https://meethour.io"&gt;https://meethour.io&lt;/a&gt;) and signup for Developer or Higher plan. Currently we offer 28 days free trial.&lt;/li&gt;
&lt;li&gt;Once you signup for developer plan, and go to our Dashboard - (&lt;a href="https://portal.meethour.io"&gt;https://portal.meethour.io&lt;/a&gt;) and tap on "Developers" menu.&lt;/li&gt;
&lt;li&gt;Now copy and Client ID &amp;amp; Client Secret and keep it handy with you.&lt;/li&gt;
&lt;li&gt;Go to our API documentation and hit Login API to get oAuth Access Token - (&lt;a href="https://bit.ly/3E2hKU7"&gt;https://bit.ly/3E2hKU7&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Once you get an access token, you can access any our API. Now you first thing you have to do is create a contact in our system as soon as user signup in your platform using this API (&lt;a href="https://bit.ly/3LRehug"&gt;https://bit.ly/3LRehug&lt;/a&gt;). This will give you unique contact_id of that user. You require this id when you schedule a meeting below.&lt;/li&gt;
&lt;li&gt;Later go to Schedule Meeting API -&amp;gt; Pass all the parameters needed to generate a new meetings - (&lt;a href="https://bit.ly/3riFLkx"&gt;https://bit.ly/3riFLkx&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Once the meeting is genereate, in order to join a meeting you require to Generate JWT Token using this API (&lt;a href="https://bit.ly/3ur5pFR"&gt;https://bit.ly/3ur5pFR&lt;/a&gt;) and pass it to the conference URL via MT Parameter - &lt;a href="https://meethour.io?mt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiIsImFjY2Vzc190b2tlbiI6ImV5SjBlWEFpT2lKS1YxUWlMQ0poYkdjaU9pSlNVekkxTmlKOS5leUpoZFdRaU9pSTVNemxrWmpVeE5pMDJNekEzTFRRNVkyUXRPVGMxTXkwek1XRTNNemRrT1RGaE1HWWlMQ0pxZEdraU9pSmtNMlUyT"&gt;https://meethour.io?mt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiIsImFjY2Vzc190b2tlbiI6ImV5SjBlWEFpT2lKS1YxUWlMQ0poYkdjaU9pSlNVekkxTmlKOS5leUpoZFdRaU9pSTVNemxrWmpVeE5pMDJNekEzTFRRNVkyUXRPVGMxTXkwek1XRTNNemRrT1RGaE1HWWlMQ0pxZEdraU9pSmtNMlUyT&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;id: dev-guide-ios-sdk&lt;/p&gt;

&lt;h2&gt;
  
  
  title: "Meet Hour iOS SDK"
&lt;/h2&gt;

&lt;h2&gt;
  
  
  For iOS - Pod Update
&lt;/h2&gt;

&lt;p&gt;Always run below command if you want to get latest MeetHourSDK Pod file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pod update MeetHourSDK
pod update MeetHourSDK or pod install --repo-update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;For Apple M1 Silicon Chip
arch -x86_64 pod update MeetHourSDK or arch -x86_64 pod install --repo-update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Latest Verion - 4.1.4
&lt;/h2&gt;

&lt;p&gt;This repository contains the binaries for the &lt;strong&gt;&lt;a href=""&gt;Meet Hour&lt;/a&gt; iOS SDK&lt;/strong&gt;. Each&lt;br&gt;
release is tagged in this repository and is composed of 2 frameworks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MeetHourSDK.xcframework&lt;/li&gt;
&lt;li&gt;WebRTC.xcframework&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is &lt;strong&gt;strongly advised&lt;/strong&gt; to use the provided WebRTC framework and not&lt;br&gt;
replace it with any other build, since the provided one is known to work&lt;br&gt;
with the SDK.&lt;/p&gt;
&lt;h2&gt;
  
  
  Screenshot
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XGcTwSme--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6g6bs0dlkm7b7imklrqb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XGcTwSme--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6g6bs0dlkm7b7imklrqb.png" alt="Image description" width="800" height="1067"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Using the SDK
&lt;/h2&gt;

&lt;p&gt;The recommended way for using the SDK is by using &lt;a href="https://cocoapods.org/pods/MeetHourSDK"&gt;CocoaPods&lt;/a&gt;. In order to&lt;br&gt;
do so, add the &lt;code&gt;MeetHourSDK&lt;/code&gt; dependency to your existing &lt;code&gt;Podfile&lt;/code&gt; or create&lt;br&gt;
a new one following this example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;platform :ios, '12.1'

target 'MeetHourSDKTest' do
    pod 'MeetHourSDK', '~&amp;gt; 4.2.4'

    post_install do |installer|
        installer.pods_project.targets.each do |target|
            target.build_configurations.each do |config|
                config.build_settings['ENABLE_BITCODE'] = 'NO'
            end
        end
    end
end
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replace &lt;code&gt;MeetHourSDKTest&lt;/code&gt; with your project and target names.&lt;/p&gt;

&lt;p&gt;Bitcode is not supported, so turn it off for your project.&lt;/p&gt;

&lt;p&gt;The SDK uses Swift code, so make sure you select &lt;code&gt;Always Embed Swift Standard Libraries&lt;/code&gt;&lt;br&gt;
in your project.&lt;/p&gt;

&lt;p&gt;Since the SDK requests camera and microphone access, make sure to include the&lt;br&gt;
required entries for &lt;code&gt;NSCameraUsageDescription&lt;/code&gt; and &lt;code&gt;NSMicrophoneUsageDescription&lt;/code&gt;&lt;br&gt;
in your &lt;code&gt;Info.plist&lt;/code&gt; file.&lt;/p&gt;

&lt;p&gt;In order for app to properly work in the background, select the "audio" and "voip"&lt;br&gt;
background modes.&lt;/p&gt;

&lt;p&gt;Last, since the SDK shows and hides the status bar based on the conference state,&lt;br&gt;
you may want to set &lt;code&gt;UIViewControllerBasedStatusBarAppearance&lt;/code&gt; to &lt;code&gt;NO&lt;/code&gt; in your&lt;br&gt;
&lt;code&gt;Info.plist&lt;/code&gt; file.&lt;/p&gt;

&lt;h1&gt;
  
  
  POD INSTALL
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pod install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  API
&lt;/h2&gt;

&lt;p&gt;The API is documented &lt;a href="//API.md"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Issues
&lt;/h2&gt;

&lt;p&gt;Please report all issues related to this SDK to the &lt;a href=""&gt;Meet Hour&lt;/a&gt; repository.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Video SDK for Android Native - Java &amp; Kotlin</title>
      <dc:creator>Abdul Muqeet</dc:creator>
      <pubDate>Thu, 08 Jun 2023 14:57:57 +0000</pubDate>
      <link>https://dev.to/muqeetwebdev/video-sdk-for-android-native-java-kotlin-2opk</link>
      <guid>https://dev.to/muqeetwebdev/video-sdk-for-android-native-java-kotlin-2opk</guid>
      <description>&lt;p&gt;Reference you can check here: &lt;a href="https://github.com/v-empower/MeetHour-Web-MobileSDKs/tree/master/Mobile/Native/android"&gt;https://github.com/v-empower/MeetHour-Web-MobileSDKs/tree/master/Mobile/Native/android&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  MeetHour SDK Implementation - Steps
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;SDK Example Link - &lt;a href="https://github.com/v-empower/MeetHour-Web-MobileSDKs"&gt;https://github.com/v-empower/MeetHour-Web-MobileSDKs&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;API Documentation Link - &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/"&gt;https://docs.v-empower.com/docs/MeetHour-API/&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  Steps to Integrate:
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;Signup for Meet Hour (&lt;a href="https://meethour.io"&gt;https://meethour.io&lt;/a&gt;) and signup for Developer or Higher plan. Currently we offer 28 days free trial.&lt;/li&gt;
&lt;li&gt;Once you signup for developer plan, and go to our Dashboard - (&lt;a href="https://portal.meethour.io"&gt;https://portal.meethour.io&lt;/a&gt;) and tap on "Developers" menu.&lt;/li&gt;
&lt;li&gt;Now copy and Client ID &amp;amp; Client Secret and keep it handy with you.&lt;/li&gt;
&lt;li&gt;Go to our API documentation and hit Login API to get oAuth Access Token - (&lt;a href="https://bit.ly/3E2hKU7"&gt;https://bit.ly/3E2hKU7&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Once you get an access token, you can access any our API. Now you first thing you have to do is create a contact in our system as soon as user signup in your platform using this API (&lt;a href="https://bit.ly/3LRehug"&gt;https://bit.ly/3LRehug&lt;/a&gt;). This will give you unique contact_id of that user. You require this id when you schedule a meeting below.&lt;/li&gt;
&lt;li&gt;Later go to Schedule Meeting API -&amp;gt; Pass all the parameters needed to generate a new meetings - (&lt;a href="https://bit.ly/3riFLkx"&gt;https://bit.ly/3riFLkx&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Once the meeting is genereate, in order to join a meeting you require to Generate JWT Token using this API (&lt;a href="https://bit.ly/3ur5pFR"&gt;https://bit.ly/3ur5pFR&lt;/a&gt;) and pass it to the conference URL via MT Parameter - &lt;a href="https://meethour.io?mt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiIsImFjY2Vzc190b2tlbiI6ImV5SjBlWEFpT2lKS1YxUWlMQ0poYkdjaU9pSlNVekkxTmlKOS5leUpoZFdRaU9pSTVNemxrWmpVeE5pMDJNekEzTFRRNVkyUXRPVGMxTXkwek1XRTNNemRrT1RGaE1HWWlMQ0pxZEdraU9pSmtNMlUyT"&gt;https://meethour.io?mt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiIsImFjY2Vzc190b2tlbiI6ImV5SjBlWEFpT2lKS1YxUWlMQ0poYkdjaU9pSlNVekkxTmlKOS5leUpoZFdRaU9pSTVNemxrWmpVeE5pMDJNekEzTFRRNVkyUXRPVGMxTXkwek1XRTNNemRrT1RGaE1HWWlMQ0pxZEdraU9pSmtNMlUyT&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;id: dev-guide-android-sdk&lt;/p&gt;

&lt;h2&gt;
  
  
  title: "Meet Hour Android SDK"
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Latest Verion - 4.2.4
&lt;/h2&gt;

&lt;p&gt;The Meet Hour Android SDK provides the same user experience as the Meet Hour app,&lt;br&gt;
in a customizable way which you can embed in your apps.&lt;/p&gt;
&lt;h2&gt;
  
  
  Build your own, or use a pre-build SDK artifacts/binaries
&lt;/h2&gt;

&lt;p&gt;MeetHour conveniently provides a pre-build SDK artifacts/binaries in its Maven repository. When you do not require any&lt;br&gt;
modification to the SDK itself or any of its dependencies, it's suggested to use the pre-build SDK. This avoids the&lt;br&gt;
complexity of building and installing your own SDK artifacts/binaries.&lt;/p&gt;
&lt;h3&gt;
  
  
  Use pre-build SDK artifacts/binaries
&lt;/h3&gt;

&lt;p&gt;In your project, add the Maven repository&lt;br&gt;
&lt;code&gt;https://repo.meethour.io/maven/releases&lt;/code&gt; and the&lt;br&gt;
dependency &lt;code&gt;go.meethour.io.react:meet-hour-sdk:4.0.1&lt;/code&gt; into your &lt;code&gt;build.gradle&lt;/code&gt; files.&lt;/p&gt;

&lt;p&gt;The repository typically goes into the &lt;code&gt;build.gradle&lt;/code&gt; file in the root of your project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight gradle"&gt;&lt;code&gt;&lt;span class="k"&gt;allprojects&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;repositories&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;google&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;jcenter&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;maven&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="s2"&gt;"https://repo.meethour.io/maven/releases"&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dependency definitions belong in the individual module &lt;code&gt;build.gradle&lt;/code&gt; files:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight gradle"&gt;&lt;code&gt;&lt;span class="k"&gt;dependencies&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// (other dependencies)&lt;/span&gt;
    &lt;span class="n"&gt;implementation&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'go.meethour.io.react:meet-hour-sdk:4.2.4'&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="n"&gt;transitive&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
    </item>
    <item>
      <title>React Native Video SDK - Meet Hour</title>
      <dc:creator>Abdul Muqeet</dc:creator>
      <pubDate>Thu, 08 Jun 2023 14:41:47 +0000</pubDate>
      <link>https://dev.to/muqeetwebdev/react-native-video-sdk-meet-hour-3log</link>
      <guid>https://dev.to/muqeetwebdev/react-native-video-sdk-meet-hour-3log</guid>
      <description>&lt;p&gt;Reference: &lt;a href="https://github.com/v-empower/MeetHour-Web-MobileSDKs/tree/master/Mobile/ReactNative"&gt;https://github.com/v-empower/MeetHour-Web-MobileSDKs/tree/master/Mobile/ReactNative&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Meet Hour Example project for React Native with APIs&lt;/p&gt;

&lt;p&gt;&lt;a href="https://meethour.io"&gt;Meet Hour - 100% free video conference solution&lt;/a&gt;&lt;br&gt;
Meet Hour is 100% free video conference solution with End to End Encrypted and many other features such as lobby mode, Donor box &amp;amp; Click&amp;amp;Pledge Connect for fundraising, Video call recording, Youtube Live Stream etc.&lt;/p&gt;

&lt;h3&gt;
  
  
  NPM package (Latest version - 3.0.20)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://www.npmjs.com/package/react-native-meet-hour-sdk

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Example Project is here - &lt;a href="https://github.com/v-empower/MeetHour-Web-MobileSDKs/tree/master/Mobile/ReactNative"&gt;https://github.com/v-empower/MeetHour-Web-MobileSDKs/tree/master/Mobile/ReactNative&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Steps to Use Meet Hour React Native SDK Example
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Go to meethour.io and signup for Developer or Higher plan. Currently we offer 28 days free trial.&lt;/li&gt;
&lt;li&gt;Go to the dashboard and then click on developers menu.&lt;/li&gt;
&lt;li&gt;Copy your Client ID, Client Secret and Api Key. After copying, paste each copied text to the respective constant in the source code src/constants/index.js&lt;/li&gt;
&lt;li&gt;On Home page Click on Get Access Token&lt;/li&gt;
&lt;li&gt;Then Try Schedule a Meeting &amp;amp; Join Meeting.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Run Program
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd Mobile/ReactNative/MeetHourSDKTest

npm install

npm start

npm run android

npm run ios

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lv-Zz2EB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1pz0f0uutscrjatt2pby.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lv-Zz2EB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1pz0f0uutscrjatt2pby.png" alt="Image description" width="800" height="1682"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  API End Points Supported
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;To Get Access Token Endpoint : =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/a44a7d7669f91-user-login-get-access-token"&gt;https://docs.v-empower.com/docs/MeetHour-API/a44a7d7669f91-user-login-get-access-token&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;       ApiServices.login({
               grant_type, client_id, client_secret, username, password
           });
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;=&amp;gt; You have to pass respective values in the argument section. Hence, to get desired response.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;To schedule a meeting: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/2de4b757a6312-meeting-schedule-meeting"&gt;https://docs.v-empower.com/docs/MeetHour-API/2de4b757a6312-meeting-schedule-meeting&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;       ApiServices. scheduleMeeting(token: string, body: ScheduleMeetingType)

           type ScheduleMeetingType {
                   agenda?: string;
                   attend?:
                       | Array&amp;lt;number&amp;gt;
                       | Array&amp;lt;UserObjectType&amp;gt;
                       | Array&amp;lt;UserObjectType | number&amp;gt;;
                   default_recording_storage?: string;
                   duration_hr?: number;
                   duration_min?: number;
                   enable_pre_registration?: number;
                   endBy?: string;
                   end_date_time?: string;
                   end_times?: number;
                   groups?: Array&amp;lt;number | string&amp;gt;;
                   hostusers?:
                       | Array&amp;lt;number&amp;gt;
                       | Array&amp;lt;UserObjectType&amp;gt;
                       | Array&amp;lt;UserObjectType | number&amp;gt;;
                   instructions?: string;
                   is_recurring?: number;
                   is_show_portal?: number;
                   meeting_agenda?: string;
                   meeting_date: string;
                   meeting_meridiem: string;
                   meeting_name: string;
                   meeting_time: string;
                   meeting_topic?: string;
                   monthlyBy?: string;
                   monthlyByDay?: string;
                   monthlyByWeekday?: string;
                   monthlyByWeekdayIndex?: string;
                   options?: Array&amp;lt;string&amp;gt;;
                   passcode: string;
                   recurring_type?: string;
                   repeat_interval?: number;
                   send_calendar_invite?: number;
                   timezone: string;
                   weeklyWeekDays?: number;
               };


       type UserObjectType {
               email?: string;
               first_name?: string;
               last_name?: string;
           }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;To Generate JWT Token Endpoint =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/b7e3d0ab3906f-generate-jwt"&gt;https://docs.v-empower.com/docs/MeetHour-API/b7e3d0ab3906f-generate-jwt&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;       ApiServices.generateJwt(token: string, body: GenerateJwtType)

      type GenerateJwtType {
               config?: {
               disableDeepLinking?: string;
               dropboxappKey?: string;
               dropboxredirectURI?: string;
               enableClosePage?: string;
               enableWelcomePage?: string;
               fileRecordingsEnabled?: boolean;
               liveStreamingEnabled?: boolean;
               p2penabled?: boolean;
               requireDisplayName?: string;
               resolution?: number;
               startAudioMuted?: number;
               videoheightideal?: number;
               videoheightmax?: number;
               videoheightmin?: number;
               videowidthideal?: number;
               videowidthmax?: number;
               videowidthmin?: number;
               };
               contact_id?: number;
               meeting_id: string;
               ui_config?: {
               ANDROID_APP_PACKAGE?: string;
               APP_NAME?: string;
               APP_SCHEME?: string;
               BRAND_WATERMARK_BACKGROUND?: string;
               DEFAULT_LOGO_URL?: string;
               ENABLE_MOBILE_BROWSER?: string;
               HIDE_DEEP_LINKING_LOGO?: string;
               MEET_HOUR_WATERMARK_LINK?: string;
               MOBILE_APP_PROMO?: string;
               MOBILE_DOWNLOAD_LINK_ANDROID?: string;
               MOBILE_DOWNLOAD_LINK_IOS?: string;
               NATIVE_APP_NAME?: string;
               PROVIDER_NAME?: string;
               SHOW_MEET_HOUR_WATERMARK?: string;
               disablePrejoinFooter?: string;
               disablePrejoinHeader?: string;
               toolbar_buttons?: Array&amp;lt;string&amp;gt;;
               };
           };
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;To fetch User Details: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/ff9d0e37d9191-user-details"&gt;https://docs.v-empower.com/docs/MeetHour-API/ff9d0e37d9191-user-details&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;       ApiServices.userDetails(token: string)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;To fetch access Token using Refresh Token: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/d851be1af9804-get-access-token-using-refresh-token"&gt;https://docs.v-empower.com/docs/MeetHour-API/d851be1af9804-get-access-token-using-refresh-token&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;       ApiServices.getRefreshToken(token: string, body: RefreshTokenType)

       type RefreshTokenType {
               client_id: string;
               client_secret: string;
               grant_type: string;
               refresh_token: string;
       }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;To add a contact in Meet Hour database: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/bd1e416413e8c-add-contact"&gt;https://docs.v-empower.com/docs/MeetHour-API/bd1e416413e8c-add-contact&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;       ApiServices.addContact(token: string, body: AddContactType)

       type AddContactType {
               country_code?: string;
               email: string;
               firstname: string;
               image?: string;
               is_show_portal?: boolean;
               lastname?: string;
               phone?: string;
           }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;To get Timezones of various countries: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/c688c29bce9b9-timezone-list"&gt;https://docs.v-empower.com/docs/MeetHour-API/c688c29bce9b9-timezone-list&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;       ApiServices.timezone(token: string)

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;To get list of all the contacts in your Meet Hour account: =&amp;gt; &lt;a href="https://api.meethour.io/api/%7Bversion%7D/customer/contacts"&gt;https://api.meethour.io/api/{version}/customer/contacts&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;       ApiServices.contactsList(token: string, body: ContactsType)

       type ContactsType {
               exclude_hosts: number;
               limit: number;
               page: number;
           }

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;To make changes in the existing contact details: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/28cae9187d215-edit-contact"&gt;https://docs.v-empower.com/docs/MeetHour-API/28cae9187d215-edit-contact&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    ApiServices.editContact(token: string, body: EditContactType)

    type EditContactType {
            contact_id: number;
            country_code: string;
            email: string;
            firstname: string;
            image: string;
            is_show_portal: boolean;
            lastname: string;
            phone: string;
        }

    ```





&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;To get Upcoming Meetings: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/31df88388416d-upcoming-meetings"&gt;https://docs.v-empower.com/docs/MeetHour-API/31df88388416d-upcoming-meetings&lt;/a&gt;&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

    ApiServices.upcomingMeetings(token: string, body: {
        limit: number;
        page: number;
    })


&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To archive a meeting: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/1dd64523cc6bf-archive-meeting"&gt;https://docs.v-empower.com/docs/MeetHour-API/1dd64523cc6bf-archive-meeting&lt;/a&gt;&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

    ApiServices.archiveMeeting(
            token: string,
            body: {
                id?: number;
        })


&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To get the details of a missed meeting: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/92998e2dda102-missed-meetings"&gt;https://docs.v-empower.com/docs/MeetHour-API/92998e2dda102-missed-meetings&lt;/a&gt;&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

    ApiServices.missedMeetings(
        token: string,
        body: {
            limit: number;
            page: number;
        })


&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To get completed meetings: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/aa9ef6a678250-completed-meetings"&gt;https://docs.v-empower.com/docs/MeetHour-API/aa9ef6a678250-completed-meetings&lt;/a&gt;&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

    ApiServices.completedMeetings(
        token: string,
        body: {
        limit: number;
        page: number;
        })


&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To edit an existing meeting: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/5dedde36380b4-meeting-edit-meeting"&gt;https://docs.v-empower.com/docs/MeetHour-API/5dedde36380b4-meeting-edit-meeting&lt;/a&gt;&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

    ApiServices.editMeeting(token: string, body: EditMeetingType)

    type EditMeeting {
        agenda?: string;
        attend?:
            | Array&amp;lt;number&amp;gt;
            | Array&amp;lt;UserObjectType&amp;gt;
            | Array&amp;lt;number &amp;amp; UserObjectType&amp;gt;;
        duration_hr?: number;
        duration_min?: number;
        enable_pre_registration?: number;
        endBy?: string;
        end_date_time?: string;
        groups?: Array&amp;lt;number&amp;gt;;
        hostusers?:
            | Array&amp;lt;number&amp;gt;
            | Array&amp;lt;UserObjectType&amp;gt;
            | Array&amp;lt;number &amp;amp; UserObjectType&amp;gt;;
        instructions?: string;
        is_recurring?: number;
        is_show_portal?: number;
        meeting_agenda?: string;
        meeting_date?: string;
        meeting_id: string;
        meeting_meridiem?: string;
        meeting_name?: string;
        meeting_time?: string;
        meeting_topic?: string;
        old_attend?:
            | Array&amp;lt;number&amp;gt;
            | Array&amp;lt;UserObjectType&amp;gt;
            | Array&amp;lt;number &amp;amp; UserObjectType&amp;gt;;
        options?: Array&amp;lt;string&amp;gt;;
        passcode?: string;
        recurring_type?: string;
        repeat_interval?: number;
        timezone?: string;
    }

    type UserObjectType {
        email?: string;
        first_name?: string;
        last_name?: string;
    }


&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To view a meeting: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/7e9a0a1e0da7f-meeting-view-meeting"&gt;https://docs.v-empower.com/docs/MeetHour-API/7e9a0a1e0da7f-meeting-view-meeting&lt;/a&gt;&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

    ApiServices.viewMeeting(
        token: string,
        body: { meeting_id: string }
        )


&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To get all the recordings list: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/ce7c4fd8cae7e-recording-list"&gt;https://docs.v-empower.com/docs/MeetHour-API/ce7c4fd8cae7e-recording-list&lt;/a&gt;&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

    ApiServices.recordingsList(token: string, body: RecordingsList)

    type RecordingsList {
        filter_by: string;
        limit: number;
        page: number;
    }


&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Usage
&lt;/h2&gt;

&lt;p&gt;In this SDK, you can make APIs calls and allow join the conference in Native View or React Native View.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

import MeetHour, {MeetHourView, ApiServices} from 'react-native-meet-hour-sdk';
import React, {useState, useEffect} from 'react';
import {
  StyleSheet,
  View,
  Pressable,
  Text,
  Platform,
  Alert
} from 'react-native';

const loginBody = {
  client_id: '',
  client_secret: '',
  username: '',
  password: '',
};

const ScheduleBody = {
  meeting_name: 'Quick Meeting',
  agenda: '',
  passcode: '123456',
  meeting_date: '23-02-2025', // Make sure you give a future date for this parameter
  meeting_time: '11:30',
  meeting_meridiem: 'AM',
  timezone: 'Asia/Kolkata',
  instructions: 'Team call',
  is_show_portal: 0,
  options: ['ALLOW_GUEST', 'JOIN_ANYTIME'],
  // attend: [] // Pass the values as per documentation.
  // hostusers: []
};

let getJWTBody = {
  meeting_id: '',
};

const conferenceOptions = {
  room: '',
  token: '', // JWT Token
  pcode: '', //Dynamic Password of Conference. Will get from Schedule API &amp;amp; ViewMeeting APIs
  audioMuted: false,
  videoMuted: false,
  prejoinPageEnabled: true, // Make it false to Skip PrejoinPage
  disableInviteFunctions: true, // To disable invite functions in Mobile SDK.
};

function App() {
  const [showMeetHourView, setShowMeetHourView] = useState(false);

  useEffect(() =&amp;gt; {
    if (conferenceOptions.room !== '') {
      if (Platform.OS === 'android') {
        startMeetHourAsNativeController(); // Recommeneded to use for Android if you require Screen Sharing functionality.
      } else {
        setShowMeetHourView(true);
      }
    }
  }, [conferenceOptions.token]);

  const Apicalls = async () =&amp;gt; {
    try {
      let loginResponse = await ApiServices.login(loginBody);
      let scheduleResponse = await ApiServices.scheduleMeeting(
        loginResponse.access_token,
        ScheduleBody,
      );

      conferenceOptions.room = scheduleResponse.data?.meeting_id;

      getJWTBody.meeting_id = scheduleResponse.data?.meeting_id;

      conferenceOptions.pcode = scheduleResponse.data?.pcode;

      let generateJWTResponse = await ApiServices.generateJwt(
        loginResponse.access_token,
        getJWTBody,
      );

      conferenceOptions.token = generateJWTResponse.jwt;
    } catch (error) {
      console.log(error);
      Alert.alert("Credentials Error", "API calls failing. Please add Client ID and Client Secret"+error);
    }
  };

  Apicalls();

  const startMeetHourAsNativeController = async () =&amp;gt; {
    /* 
      Mode 1 - Use this mode for Android when you require screen sharing functionality.
    */

    await MeetHour.launchMeetHourView(conferenceOptions);

    /*
      Note:
        MeetHour.launchMeetHourView will return a promise, which is resolved once the conference is terminated and the MeetHourView is dismissed.
    */
  };

  /*
    The localParticipant leaves the current conference.
  */
  const hangUp = () =&amp;gt; {
    MeetHour.hangUp();
  };

  if (showMeetHourView) {
    /* Mode 2 - Starts MeetHour as a React Native View */

    return (
      &amp;lt;MeetHourView
        style={styles.mHView}
        options={conferenceOptions}
        onConferenceTerminated={(_) =&amp;gt; setShowMeetHourView(false)}
        onConferenceJoined={(e) =&amp;gt; console.log(e.nativeEvent)}
        onConferenceWillJoin={(e) =&amp;gt; console.log(e.nativeEvent)}
      /&amp;gt;
    );
  }

  return (
    &amp;lt;View style={styles.container}&amp;gt;
      &amp;lt;Pressable
        onPress={startMeetHourAsNativeController}
        style={({pressed}) =&amp;gt; [styles.pressable, {opacity: pressed ? 0.5 : 1}]}&amp;gt;
        &amp;lt;Text style={styles.pressableText}&amp;gt;
          Start MeetHour on top of RN Application
        &amp;lt;/Text&amp;gt;
      &amp;lt;/Pressable&amp;gt;
      &amp;lt;Pressable
        onPress={() =&amp;gt; setShowMeetHourView(true)}
        style={({pressed}) =&amp;gt; [styles.pressable, {opacity: pressed ? 0.5 : 1}]}&amp;gt;
        &amp;lt;Text style={styles.pressableText}&amp;gt;Start MeetHour as a React Native View&amp;lt;/Text&amp;gt;
      &amp;lt;/Pressable&amp;gt;
    &amp;lt;/View&amp;gt;
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    alignItems: 'center',
    justifyContent: 'center',
  },
  pressable: {
    width: '80%',
    borderRadius: 15,
    height: 50,
    marginVertical: 10,
    justifyContent: 'center',
    alignItems: 'center',
    backgroundColor: '#4f6790',
  },
  pressableText: {
    fontSize: 17,
    fontWeight: 'bold',
    textAlign: 'center',
    color: '#fff',
  },
  mHView: {
    flex: 1,
  },
});

export default App;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;See Options for further information.&lt;/p&gt;

&lt;h2&gt;
  
  
  iOS install
&lt;/h2&gt;

&lt;p&gt;1.) This library uses Swift code, so make sure that you have created the &lt;code&gt;Objective-C bridging header file&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;If not, open your project in Xcode and create an empty Swift file.&lt;/p&gt;

&lt;p&gt;Xcode will ask if you wish to create the bridging header file, please choose yes.&lt;/p&gt;

&lt;p&gt;For more information check &lt;a href="https://developer.apple.com/documentation/swift/imported_c_and_objective-c_apis/importing_objective-c_into_swift"&gt;Create Objective-C bridging header file&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;2.) Replace the following code in AppDelegate.m (ONLY required for mode 1. If you're using mode 2, skip this step):&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
objective-c
UIViewController *rootViewController = [UIViewController new];
rootViewController.view = rootView;
self.window.rootViewController = rootViewController;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;with this one&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
objective-c
UIViewController *rootViewController = [UIViewController new];
UINavigationController *navigationController = [[UINavigationController alloc]initWithRootViewController:rootViewController];
navigationController.navigationBarHidden = YES;
rootViewController.view = rootView;
self.window.rootViewController = navigationController;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;This will create a navigation controller to be able to navigate between the MeetHour component and your react native screens.&lt;/p&gt;

&lt;p&gt;3.) Add the following lines to your &lt;code&gt;Info.plist&lt;/code&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
xml
&amp;lt;key&amp;gt;NSCameraUsageDescription&amp;lt;/key&amp;gt;
&amp;lt;string&amp;gt;Camera Permission&amp;lt;/string&amp;gt;
&amp;lt;key&amp;gt;NSMicrophoneUsageDescription&amp;lt;/key&amp;gt;
&amp;lt;string&amp;gt;Microphone Permission&amp;lt;/string&amp;gt;
&amp;lt;key&amp;gt;NSCalendarUsageDescription&amp;lt;/key&amp;gt;
&amp;lt;string&amp;gt;Calendar Permission&amp;lt;/string&amp;gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;4.) Modify your platform version in Podfile and Xcode to have platform version &lt;code&gt;12.0&lt;/code&gt; or above.&lt;/p&gt;

&lt;p&gt;5.) In Xcode, under &lt;code&gt;Build settings&lt;/code&gt; set &lt;code&gt;Enable Bitcode&lt;/code&gt; to &lt;code&gt;No&lt;/code&gt; and &lt;code&gt;Always Embed Swift Standard Libraries&lt;/code&gt; to &lt;code&gt;Yes&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;6.) In Xcode, under &lt;code&gt;Signing &amp;amp; Capabilities&lt;/code&gt; add the capability &lt;code&gt;Background Modes&lt;/code&gt; and check &lt;code&gt;Voice over IP&lt;/code&gt;. Otherwise, it won't work well in background.&lt;/p&gt;

&lt;p&gt;7.) Clean your project and run &lt;code&gt;npx pod-install&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Android install
&lt;/h2&gt;

&lt;p&gt;1.) In &lt;code&gt;android/app/build.gradle&lt;/code&gt;, add/replace the following lines:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
groovy
project.ext.react = [
    entryFile: "index.js",
    bundleAssetName: "app.bundle",
    ...
]


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;2.) In &lt;code&gt;android/app/src/main/java/com/xxx/MainApplication.java&lt;/code&gt; add/replace the following methods:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
java
  import androidx.annotation.Nullable; // &amp;lt;--- Add this line if not already existing
  ...
    @Override
    protected String getJSMainModuleName() {
      return "index";
    }

    @Override
    protected @Nullable String getBundleAssetName() {
      return "app.bundle";
    }


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;3.) In &lt;code&gt;android/build.gradle&lt;/code&gt;, add the following code&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
groovy
allprojects {
    repositories {
        jcenter()
        maven {
            // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
            url "$rootDir/../node_modules/react-native/android"
        }
        maven {
            url "https://maven.google.com"
        }
        maven { // &amp;lt;---- Add this block
            url "https://repo.meethour.io/maven/releases/"
        }
    }
}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;4.) In the &lt;code&gt;&amp;lt;application&amp;gt;&lt;/code&gt; section of &lt;code&gt;android/app/src/main/AndroidManifest.xml&lt;/code&gt;, add (ONLY required for mode 1. If you're using mode 2, skip this step)&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
xml
&amp;lt;activity
    android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize|smallestScreenSize"
    android:launchMode="singleTask"
    android:resizeableActivity="true"
    android:supportsPictureInPicture="true"
    android:windowSoftInputMode="adjustResize"
    android:name="go.meethour.io.react.sdk.MeetHourActivityExtended"&amp;gt;
&amp;lt;/activity&amp;gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;5.) And set your minSdkVersion to be at least 24.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
groovy
buildscript {
    ext {
        buildToolsVersion = "33.0.1"
        minSdkVersion = 24 // &amp;lt;-- this line
        compileSdkVersion = 33
        targetSdkVersion = 33
        ndkVersion = "20.1.5948944"
    }
    ...
}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;6.) Remove allow back up from Androidmanifest.xml&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
xml
&amp;lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.sdktest"&amp;gt;

    &amp;lt;uses-permission android:name="android.permission.INTERNET" /&amp;gt;

    &amp;lt;application
      android:name=".MainApplication"
      android:label="@string/app_name"
      android:icon="@mipmap/ic_launcher"
      android:roundIcon="@mipmap/ic_launcher_round"
      android:allowBackup="false" &amp;lt;-- this line
      android:theme="@style/AppTheme"&amp;gt;
      &amp;lt;activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:configChanges="keyboard|keyboardHidden|orientation|screenSize|uiMode"
        android:launchMode="singleTask"
        android:windowSoftInputMode="adjustResize"&amp;gt;
        &amp;lt;intent-filter&amp;gt;
            &amp;lt;action android:name="android.intent.action.MAIN" /&amp;gt;
            &amp;lt;category android:name="android.intent.category.LAUNCHER" /&amp;gt;
        &amp;lt;/intent-filter&amp;gt;
      &amp;lt;/activity&amp;gt;
    &amp;lt;/application&amp;gt;
&amp;lt;/manifest&amp;gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  Options
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;key&lt;/th&gt;
&lt;th&gt;Data type&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;room&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;required&lt;/td&gt;
&lt;td&gt;Room name for Meet Hour&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;serverUrl&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;&lt;a href="https://meethour.io"&gt;https://meethour.io&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Valid server URL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;token&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;""&lt;/td&gt;
&lt;td&gt;JWT token&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;pcode&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;""&lt;/td&gt;
&lt;td&gt;Password of meeting to be passed dynamically&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;subject&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;""&lt;/td&gt;
&lt;td&gt;Conference subject (will change the global subject for all participants)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;audioOnly&lt;/td&gt;
&lt;td&gt;boolean&lt;/td&gt;
&lt;td&gt;false&lt;/td&gt;
&lt;td&gt;Controls whether the participant will join the conference in audio-only mode (no video is sent or recieved)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;audioMuted&lt;/td&gt;
&lt;td&gt;boolean&lt;/td&gt;
&lt;td&gt;false&lt;/td&gt;
&lt;td&gt;Controls whether the participant will join the conference with the microphone muted&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;videoMuted&lt;/td&gt;
&lt;td&gt;boolean&lt;/td&gt;
&lt;td&gt;false&lt;/td&gt;
&lt;td&gt;Controls whether the participant will join the conference with the camera muted&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;prejoinPageEnabled&lt;/td&gt;
&lt;td&gt;boolean&lt;/td&gt;
&lt;td&gt;true&lt;/td&gt;
&lt;td&gt;Make it true to Skip PrejoinPage&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;disableInviteFunctions&lt;/td&gt;
&lt;td&gt;boolean&lt;/td&gt;
&lt;td&gt;true&lt;/td&gt;
&lt;td&gt;To disable invite functions in Mobile SDK&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;userInfo&lt;/td&gt;
&lt;td&gt;object&lt;/td&gt;
&lt;td&gt;{}&lt;/td&gt;
&lt;td&gt;Object that contains information about the participant starting the meeting. See UserInfo
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;featureFlags&lt;/td&gt;
&lt;td&gt;object&lt;/td&gt;
&lt;td&gt;{}&lt;/td&gt;
&lt;td&gt;Object that contains information about which feature flags should be set. See below for more info.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h2&gt;
  
  
  Troubleshooting
&lt;/h2&gt;

&lt;p&gt;If your having problems with &lt;code&gt;duplicate_classes&lt;/code&gt; errors, try exclude them from the react-native-meet-hour-sdk project implementation with the following code:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
groovy
implementation(project(':react-native-meet-hour-sdk')) {

      // Un-comment below if using hermes
//    exclude group: 'com.facebook',module:'hermes'

      // Un-comment any packages below that you have added to your project to prevent `duplicate_classes` errors
//     exclude group: 'com.facebook.react',module:'react-native-locale-detector'
//     exclude group: 'com.facebook.react',module:'react-native-vector-icons'
//     exclude group: 'com.facebook.react',module:'react-native-async-storage'
//     exclude group: 'com.facebook.react',module:'react-native-community_netinfo'
//     exclude group: 'com.facebook.react',module:'react-native-svg'
//     exclude group: 'com.facebook.react', module:'react-native-gesture-handler'
//     exclude group: 'com.facebook.react',module:'react-native-fetch-blob'
//     exclude group: 'com.facebook.react',module:'react-native-webview'
//     exclude group: 'com.facebook.react',module:'react-native-linear-gradient'
//     exclude group: 'com.facebook.react',module:'react-native-sound'
//     exclude group: 'com.facebook.react',module:'react-native-add-calendar-event'
}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;If you are having problems -&amp;gt; Suggestion: add 'tools:replace="android:exported"' to  element at AndroidManifest.xml to override.&lt;/p&gt;

&lt;p&gt;Please add the below code in manifest.xml&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

    &amp;lt;provider
        android:name="com.reactnativecommunity.webview.RNCWebViewFileProvider"
        android:authorities="${applicationId}.fileprovider"
        android:enabled="false"
        android:exported="true"
        tools:replace="android:authorities,android:exported"&amp;gt;
    &amp;lt;/provider&amp;gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
    </item>
    <item>
      <title>Video Flutter SDK - Meet Hour</title>
      <dc:creator>Abdul Muqeet</dc:creator>
      <pubDate>Thu, 08 Jun 2023 13:47:57 +0000</pubDate>
      <link>https://dev.to/muqeetwebdev/video-flutter-sdk-meet-hour-3jh8</link>
      <guid>https://dev.to/muqeetwebdev/video-flutter-sdk-meet-hour-3jh8</guid>
      <description>&lt;p&gt;Meet Hour Plugin for Flutter. Supports Android and iOS platforms.&lt;/p&gt;

&lt;p&gt;"Meet Hour is 100% free video conference solution with End to End Encrypted and many other features such as lobby mode, Video call recording, Live Streaming, Whiteboard, Control Mute Audio &amp;amp; video of participants etc."&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;br&gt;
Example Project is here - https://github.com/v-empower/MeetHour-Web-MobileSDKs/tree/master/Mobile/Flutter/MeetHourSDKTest&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
Pub dev - &lt;a href="https://pub.dev/packages/meet_hour"&gt;https://pub.dev/packages/meet_hour&lt;/a&gt;&lt;br&gt;
&lt;code&gt;meet_hour: '&amp;gt;=5.0.17'&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  MeetHour SDK Implementation - Steps
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;SDK Examples Link - &lt;a href="https://github.com/v-empower/MeetHour-Web-MobileSDKs"&gt;https://github.com/v-empower/MeetHour-Web-MobileSDKs&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;API Documentation Link - &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/"&gt;https://docs.v-empower.com/docs/MeetHour-API/&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   LoginType LoginObject = LoginType(
     client_id: '',
     client_secret: '',
     grant_type: 'password',
     password: '',
     username: ''
     );

    Map&amp;lt;String, dynamic&amp;gt; response - await ApiServices.login(LoginObject);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Steps to Use Meet Hour React Flutter SDK Example
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Go to meethour.io and signup for Developer or Higher plan. Currently we offer 28 days free trial.&lt;/li&gt;
&lt;li&gt;Go to the dashboard and then click on developers menu.&lt;/li&gt;
&lt;li&gt;Copy your Client ID, Client Secret and Api Key. After copying, paste each copied text to the respective constant in the source code lib/constants/index.dart&lt;/li&gt;
&lt;li&gt;On Home page Click on Get Access Token&lt;/li&gt;
&lt;li&gt;Then Try Schedule a Meeting &amp;amp; Join Meeting.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;Table of Contents&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;API End Points Supported&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;To Get Access Token Endpoint : =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/a44a7d7669f91-user-login-get-access-token"&gt;https://docs.v-empower.com/docs/MeetHour-API/a44a7d7669f91-user-login-get-access-token&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   LoginType LoginObject = LoginType(
     client_id: '',
     client_secret: '',
     grant_type: 'password',
     password: '',
     username: ''
     );

    Map&amp;lt;String, dynamic&amp;gt; response - await ApiServices.login(LoginObject);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;=&amp;gt; You have to pass respective values in the argument section. Hence, to get desired response.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;To schedule a meeting: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/2de4b757a6312-meeting-schedule-meeting"&gt;https://docs.v-empower.com/docs/MeetHour-API/2de4b757a6312-meeting-schedule-meeting&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; ScheduleMeetingType ScheduleObject = ScheduleMeetingType(
   meetingName : 'Test',
   agenda: '',
   passcode: '',
   meetingDate: '',
   meetingTime: '',
   meetingMeridiem: '',
   durationhr: '',
   durationmin: '',
   timezone: '',
   isrecurring: '',
   recurringtype: '',
   repeat_interval: '',
   endBy: '',
   enddatetime: '',
   instructions: '',
   is_show_portal: '',
   enablepreregistration: '',
   meetingtopic: '',
   meetingagenda: '',
   options: '',
   attend: '',
   groups: '',
   hostusers: ''
 );

 Map&amp;lt;String, dynamic&amp;gt; response = await ApiServices.scheduleMeeting(token, ScheduleObject);

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;To Generate JWT Token Endpoint =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/b7e3d0ab3906f-generate-jwt"&gt;https://docs.v-empower.com/docs/MeetHour-API/b7e3d0ab3906f-generate-jwt&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   GenerateJwtType JWTObject = GenerateJwtType(
     config: '',
     contactid,
     meetingid,
     uiconfig

   Map&amp;lt;String, dynamic&amp;gt; response =  await ApiServices.generateJwt(token, JWTObject);

   );
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;To fetch User Details: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/ff9d0e37d9191-user-details"&gt;https://docs.v-empower.com/docs/MeetHour-API/ff9d0e37d9191-user-details&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    Map&amp;lt;String, dynamic&amp;gt; response =  await ApiServices.userDetails(token);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;To fetch access Token using Refresh Token: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/d851be1af9804-get-access-token-using-refresh-token"&gt;https://docs.v-empower.com/docs/MeetHour-API/d851be1af9804-get-access-token-using-refresh-token&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   RefreshTokenType RefreshTokenObject = RefreshTokenType(
            client_id: '';
            client_secret: '';
            grant_type: '';
            refresh_token: '';
   )
   Map&amp;lt;String, dynamic&amp;gt; response =  await ApiServices.getRefreshToken(token, RefreshTokenObject);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;To add a contact in Meet Hour database: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/bd1e416413e8c-add-contact"&gt;https://docs.v-empower.com/docs/MeetHour-API/bd1e416413e8c-add-contact&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    AddContactType AddContactObject = AddContactType(
         countrycode: '',
         email: '',
         firstname: '',
         image: '',
         is_show_portal: '',
         lastname: '',
         phone: ''
    );
   Map&amp;lt;String, dynamic&amp;gt; response =  await ApiServices.addContact(token AddContactObject);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;To get Timezones of various countries: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/c688c29bce9b9-timezone-list"&gt;https://docs.v-empower.com/docs/MeetHour-API/c688c29bce9b9-timezone-list&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    Map&amp;lt;String, dynamic&amp;gt; response =  await ApiServices.timezone(token)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;To get list of all the contacts in your Meet Hour account: =&amp;gt; &lt;a href="https://api.meethour.io/api/%7Bversion%7D/customer/contacts"&gt;https://api.meethour.io/api/{version}/customer/contacts&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   ContactsType AddContactObject = ContactsType(
     exclude_hosts: 1100,
     limit: 10,
     page: 1
   );

   Map&amp;lt;String, dynamic&amp;gt; response =  await ApiServices.contactsList(token, AddContactObject);

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;To make changes in the existing contact details: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/28cae9187d215-edit-contact"&gt;https://docs.v-empower.com/docs/MeetHour-API/28cae9187d215-edit-contact&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
 EditContactType EditContactObject =  EditContactType(
   contactid: 1150;
   countrycode: '',
   email: '',
   firstname: '',
   image: '',
   is_show_portal: '',
   lastname: '',
   phone: ''
 );

Map&amp;lt;String, dynamic&amp;gt; response = ApiServices.editContact(token, EditContactObject);

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;To get Upcoming Meetings: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/31df88388416d-upcoming-meetings"&gt;https://docs.v-empower.com/docs/MeetHour-API/31df88388416d-upcoming-meetings&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;UpcomingMeetingType UpcomingMeetingObject =  UpcomingMeetingType(
   page: 10,
   limit: 10,
   show_all: 1
 );

  Map&amp;lt;String, dynamic&amp;gt; response = ApiServices.upcomingMeetings(token, UpcomingMeetingObject
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;To archive a meeting: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/1dd64523cc6bf-archive-meeting"&gt;https://docs.v-empower.com/docs/MeetHour-API/1dd64523cc6bf-archive-meeting&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ArchiveMeetingType ArchiveMeetingObject =  ArchiveMeetingType(
   id: 10
 );

  Map&amp;lt;String, dynamic&amp;gt; response = ApiServices.archiveMeeting(token, ArchiveMeetingObject);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;To get the details of a missed meeting: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/92998e2dda102-missed-meetings"&gt;https://docs.v-empower.com/docs/MeetHour-API/92998e2dda102-missed-meetings&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;MissedMeetingType MissedMeetingObject =  MissedMeetingType(
   limit: 10,
   page: number,
   show_all: 1
 );

  Map&amp;lt;String, dynamic&amp;gt; response = ApiServices.missedMeetings(token, MissedMeetingObject);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;To get completed meetings: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/aa9ef6a678250-completed-meetings"&gt;https://docs.v-empower.com/docs/MeetHour-API/aa9ef6a678250-completed-meetings&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; CompletedMeetingType CompletedMeetingObject =  CompletedMeetingType(
   limit: 10,
   page: number,
   show_all: 1
 );

  Map&amp;lt;String, dynamic&amp;gt; response = ApiServices.completedMeetings(token, CompletedMeetingObject);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;To edit an existing meeting: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/5dedde36380b4-meeting-edit-meeting"&gt;https://docs.v-empower.com/docs/MeetHour-API/5dedde36380b4-meeting-edit-meeting&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
 EditMeetingType EdiMeetingObject = EditMeetingType(
   meeting_id: ''
   meetingName : 'Test',
   agenda: '',
   passcode: '',
   meetingDate: '',
   meetingTime: '',
   meetingMeridiem: '',
   durationhr: '',
   durationmin: '',
   timezone: '',
   isrecurring: '',
   recurringtype: '',
   repeat_interval: '',
   endBy: '',
   enddatetime: '',
   instructions: '',
   is_show_portal: '',
   enablepreregistration: '',
   meetingtopic: '',
   meetingagenda: '',
   old_attend: []
   options: '',
   attend: '',
   groups: '',
   hostusers: ''
 );
 Map&amp;lt;String, dynamic&amp;gt; response = await ApiServices.editMeeting(token, EdiMeetingObject);


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;To view a meeting: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/7e9a0a1e0da7f-meeting-view-meeting"&gt;https://docs.v-empower.com/docs/MeetHour-API/7e9a0a1e0da7f-meeting-view-meeting&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
 ViewMeetingType ViewMeetingObject =  ViewMeetingType(
   meeting_id: ''
 );

  Map&amp;lt;String, dynamic&amp;gt; response = ApiServices.viewMeeting(token, ViewMeetingObject);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;To get all the recordings list: =&amp;gt; &lt;a href="https://docs.v-empower.com/docs/MeetHour-API/ce7c4fd8cae7e-recording-list"&gt;https://docs.v-empower.com/docs/MeetHour-API/ce7c4fd8cae7e-recording-list&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; RecordingsListType RecordingMeetingObject =  RecordingsListType(
   filter_by: '';
   limit: '';
   page: '';
 );

  Map&amp;lt;String, dynamic&amp;gt; response = ApiServices.recordingsList(token, RecordingMeetingObject);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Configuration
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;IOS&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Note: Example compilable with XCode 12.2 &amp;amp; Flutter 1.22.4.
&lt;strong&gt;Podfile&lt;/strong&gt;
Ensure in your Podfile you have an entry like below declaring platform of 11.0 or above and disable BITCODE.
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;platform :ios, '12.1'

...

post_install do |installer|
  installer.pods_project.targets.each do |target|
  flutter_additional_ios_build_settings(target)
      target.build_configurations.each do |config|
        config.build_settings['ENABLE_BITCODE'] = 'NO'
        config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64"
         end
     end
   end
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Info.plist&lt;/strong&gt;&lt;br&gt;
Add NSCameraUsageDescription and NSMicrophoneUsageDescription to your Info.plist.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;key&amp;gt;NSCameraUsageDescription&amp;lt;/key&amp;gt;
&amp;lt;string&amp;gt;$(PRODUCT_NAME) MyApp needs access to your camera for meetings.&amp;lt;/string&amp;gt;
&amp;lt;key&amp;gt;NSMicrophoneUsageDescription&amp;lt;/key&amp;gt;
&amp;lt;string&amp;gt;$(PRODUCT_NAME) MyApp needs access to your microphone for meetings.&amp;lt;/string&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Android
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Gradle&lt;/strong&gt;&lt;br&gt;
Set dependencies of build tools gradle to minimum 3.6.3:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dependencies {
    classpath 'com.android.tools.build:gradle:7.1.0' &amp;lt;!-- Upgrade this --&amp;gt;
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Set distribution gradle wrapper to minimum 5.6.4.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip &amp;lt;!-- Upgrade this --&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;AndroidManifest.xml&lt;/strong&gt;&lt;br&gt;
Meet Hour's SDK AndroidManifest.xml will conflict with your project, namely the application:label field. To counter that, go into &lt;code&gt;android/app/src/main/AndroidManifest.xml&lt;/code&gt; and add the tools library and &lt;code&gt;tools:replace="android:label"&lt;/code&gt; to the application tag.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="yourpackage.com"
    xmlns:tools="http://schemas.android.com/tools"&amp;gt; &amp;lt;!-- Add this --&amp;gt;
    &amp;lt;application 
        tools:replace="android:label"  
        android:name="your.application.name"
        android:label="My Application"
        android:icon="@mipmap/ic_launcher"&amp;gt;
        ...
    &amp;lt;/application&amp;gt;
...
&amp;lt;/manifest&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Minimum SDK Version 23&lt;/strong&gt;&lt;br&gt;
Update your minimum sdk version to 23 in android/app/build.gradle&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;defaultConfig {
    applicationId "go.meethour.io.flutter.sdk_example"
    minSdkVersion 23 //Required for MeetHour
    targetSdkVersion 33
    versionCode flutterVersionCode.toInteger()
    versionName flutterVersionName
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Proguard&lt;/strong&gt;&lt;br&gt;
MeetHour's SDK enables proguard, but without a proguard-rules.pro file, your release apk build will be missing the Flutter Wrapper as well as react-native code. In your Flutter project's android/app/build.gradle file, add proguard support&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;buildTypes {
    release {
        // TODO: Add your own signing config for the release build.
        // Signing with the debug keys for now, so `flutter run --release` works.
        signingConfig signingConfigs.debug

        // Add below 3 lines for proguard
        minifyEnabled false
        useProguard true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then add a file in the same directory called proguard-rules.pro. See the example app's proguard-rules.pro file to know what to paste in.&lt;/p&gt;

&lt;p&gt;Note&lt;br&gt;
If you do not create the proguard-rules.pro file, then your app will crash when you try to join a meeting or the meeting screen tries to open but closes immediately. You will see one of the below errors in logcat.&lt;/p&gt;
&lt;h2&gt;
  
  
  Join A Meeting
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;_joinMeeting() async {
    try {
      FeatureFlag featureFlag = FeatureFlag();
      featureFlag.welcomePageEnabled = false;
      featureFlag.resolution = FeatureFlagVideoResolution.MD_RESOLUTION; // Limit video resolution to 360p

      var options = MeetHourMeetingOptions()
        ..room = "TestRoom" // Required, spaces will be trimmed
        ..serverURL = "https://meethour.io"
        ..subject = "Meeting with John"
        ..userDisplayName = "John Delise"
        ..token = "" // JWT Token for User authentication as Moderator.
        ..pcode = "" // To Pass meeting password dynamically.
        ..userEmail = "john@gmail.com"
        ..userAvatarURL = "https://someimageurl.com/image.jpg" // or .png
        ..audioOnly = true
        ..audioMuted = true
        ..videoMuted = true
        ..prejoinPageEnabled = true // Make it false to Skip PrejoinPage
        ..disableInviteFunctions = true // To disable invite functions in Mobile SDK.
        ..featureFlag = featureFlag;

      await MeetHour.joinMeeting(options);
    } catch (error) {
      debugPrint("error: $error");
    }
  }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  MeetHourMeetingOptions
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Required&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;room&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;Unique room name that will be appended to serverURL. Valid characters: alphanumeric, dashes, and underscores.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;subject&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;$room&lt;/td&gt;
&lt;td&gt;Meeting name displayed at the top of the meeting.  If null, defaults to room name where dashes and underscores are replaced with spaces and first characters are capitalized.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;userDisplayName&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;"Guest"&lt;/td&gt;
&lt;td&gt;User's display name.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;userEmail&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;none&lt;/td&gt;
&lt;td&gt;User's email address.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;audioOnly&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;false&lt;/td&gt;
&lt;td&gt;Start meeting without video. Can be turned on in meeting.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;audioMuted&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;false&lt;/td&gt;
&lt;td&gt;Start meeting with audio muted. Can be turned on in meeting.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;videoMuted&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;false&lt;/td&gt;
&lt;td&gt;Start meeting with video muted. Can be turned on in meeting.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;serverURL&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;meethour.io&lt;/td&gt;
&lt;td&gt;Specify your own hosted server. Must be a valid absolute URL of the format &lt;code&gt;&amp;lt;scheme&amp;gt;://&amp;lt;host&amp;gt;[/path]&lt;/code&gt;, i.e. &lt;a href="https://someHost.com"&gt;https://someHost.com&lt;/a&gt;. Defaults to Meet Hour's servers.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;userAvatarURL&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;none&lt;/td&gt;
&lt;td&gt;User's avatar URL.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;token&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;none&lt;/td&gt;
&lt;td&gt;JWT token used for authentication.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;pcode&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;none&lt;/td&gt;
&lt;td&gt;pcode used for passing meeting password dynamically.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;prejoinPageEnabled&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;false&lt;/td&gt;
&lt;td&gt;Make it false to Skip PrejoinPage.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;disableInviteFunctions&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;false&lt;/td&gt;
&lt;td&gt;To disable invite functions in Mobile SDK.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;featureFlag&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;see below&lt;/td&gt;
&lt;td&gt;Object of FeatureFlag class used to enable/disable features and set video resolution of Meet Hour SDK.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  FeatureFlag
&lt;/h3&gt;

&lt;p&gt;Feature flag allows you to limit video resolution and enable/disable few features of Meet Hour SDK mentioned in the list below.&lt;br&gt;&lt;br&gt;
If you don't provide any flag to MeetHourMeetingOptions, default values will be used.  &lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Flag&lt;/th&gt;
&lt;th&gt;Default (Android)&lt;/th&gt;
&lt;th&gt;Default (iOS)&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;addPeopleEnabled&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;true&lt;/td&gt;
&lt;td&gt;true&lt;/td&gt;
&lt;td&gt;Enable the blue button "Add people", show up when you are alone in a call. Required for flag &lt;code&gt;inviteEnabled&lt;/code&gt; to work.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;calendarEnabled&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;true&lt;/td&gt;
&lt;td&gt;auto&lt;/td&gt;
&lt;td&gt;Enable calendar integration.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;callIntegrationEnabled&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;true&lt;/td&gt;
&lt;td&gt;true&lt;/td&gt;
&lt;td&gt;Enable call integration (CallKit on iOS, ConnectionService on Android). &lt;strong&gt;SEE REMARK BELOW&lt;/strong&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;closeCaptionsEnabled&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;true&lt;/td&gt;
&lt;td&gt;true&lt;/td&gt;
&lt;td&gt;Enable close captions (subtitles) option in menu.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;conferenceTimerEnabled&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;true&lt;/td&gt;
&lt;td&gt;true&lt;/td&gt;
&lt;td&gt;Enable conference timer.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;chatEnabled&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;true&lt;/td&gt;
&lt;td&gt;true&lt;/td&gt;
&lt;td&gt;Enable chat (button and feature).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;inviteEnabled&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;true&lt;/td&gt;
&lt;td&gt;true&lt;/td&gt;
&lt;td&gt;Enable invite option in menu.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;iOSRecordingEnabled&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;false&lt;/td&gt;
&lt;td&gt;Enable recording in iOS.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;kickOutEnabled&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;true&lt;/td&gt;
&lt;td&gt;true&lt;/td&gt;
&lt;td&gt;Enable kick-out option in video thumb of participants.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;liveStreamingEnabled&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;auto&lt;/td&gt;
&lt;td&gt;auto&lt;/td&gt;
&lt;td&gt;Enable live-streaming option in menu.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;meetingNameEnabled&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;true&lt;/td&gt;
&lt;td&gt;true&lt;/td&gt;
&lt;td&gt;Display meeting name.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;meetingPasswordEnabled&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;true&lt;/td&gt;
&lt;td&gt;true&lt;/td&gt;
&lt;td&gt;Display meeting password option in menu (if a meeting has a password set, the dialog will still show up).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;pipEnabled&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;auto&lt;/td&gt;
&lt;td&gt;auto&lt;/td&gt;
&lt;td&gt;Enable Picture-in-Picture mode.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;raiseHandEnabled&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;true&lt;/td&gt;
&lt;td&gt;true&lt;/td&gt;
&lt;td&gt;Enable raise hand option in menu.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;recordingEnabled&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;auto&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;Enable recording option in menu.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;resoulution&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;Set local and (maximum) remote video resolution. Overrides server configuration. Accepted values are: LD_RESOLUTION for 180p, MD_RESOLUTION for 360p, SD_RESOLUTION for 480p(SD), HD_RESOLUTION for 720p(HD) .&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;serverURLChangeEnabled&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;true&lt;/td&gt;
&lt;td&gt;true&lt;/td&gt;
&lt;td&gt;Enable server URL change.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;tileViewEnabled&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;true&lt;/td&gt;
&lt;td&gt;true&lt;/td&gt;
&lt;td&gt;Enable tile view option in menu.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;toolboxAlwaysVisible&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;true&lt;/td&gt;
&lt;td&gt;true&lt;/td&gt;
&lt;td&gt;Toolbox (buttons and menus) always visible during call (if not, a single tap displays it).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;videoShareButtonEnabled&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;true&lt;/td&gt;
&lt;td&gt;true&lt;/td&gt;
&lt;td&gt;Enable video share button.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;welcomePageEnabled&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;false&lt;/td&gt;
&lt;td&gt;false&lt;/td&gt;
&lt;td&gt;Enable welcome page. "The welcome page lists recent meetings and calendar appointments and it's meant to be used by standalone applications."&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  MeetHourMeetingResponse
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;isSuccess&lt;/td&gt;
&lt;td&gt;bool&lt;/td&gt;
&lt;td&gt;Success indicator.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;message&lt;/td&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;td&gt;Success message or error as a String.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;error&lt;/td&gt;
&lt;td&gt;dynamic&lt;/td&gt;
&lt;td&gt;Optional, only exists if isSuccess is false. The error object.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Listening to Meeting Events
&lt;/h2&gt;

&lt;p&gt;Events supported&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Name&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;onConferenceWillJoin&lt;/td&gt;
&lt;td&gt;Meeting is loading.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;onConferenceJoined&lt;/td&gt;
&lt;td&gt;User has joined meeting.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;onConferenceTerminated&lt;/td&gt;
&lt;td&gt;User has exited the conference.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;onPictureInPictureWillEnter&lt;/td&gt;
&lt;td&gt;User entered PIP mode.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;onPictureInPictureTerminated&lt;/td&gt;
&lt;td&gt;User exited PIP mode.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;onError&lt;/td&gt;
&lt;td&gt;Error has occurred with listening to meeting events.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  Per Meeting Events
&lt;/h3&gt;

&lt;p&gt;To listen to meeting events per meeting, pass in a MeetHourMeetingListener&lt;br&gt;
in joinMeeting. The listener will automatically be removed when an&lt;br&gt;&lt;br&gt;
onConferenceTerminated event is fired.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;await MeetHour.joinMeeting(options,
  listener: MeetHourMeetingListener(onConferenceWillJoin: ({message}) {
    debugPrint("${options.room} will join with message: $message");
  }, onConferenceJoined: ({message}) {
    debugPrint("${options.room} joined with message: $message");
  }, onConferenceTerminated: ({message}) {
    debugPrint("${options.room} terminated with message: $message");
  }, onPictureInPictureWillEnter: ({message}) {
    debugPrint("${options.room} entered PIP mode with message: $message");
  }, onPictureInPictureTerminated: ({message}) {
    debugPrint("${options.room} exited PIP mode with message: $message");
  }));
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Global Meeting Events
&lt;/h3&gt;

&lt;p&gt;To listen to global meeting events, simply add a MeetHourListener with&lt;br&gt;&lt;br&gt;
&lt;code&gt;MeetHour.addListener(myListener)&lt;/code&gt;. You can remove listeners using&lt;br&gt;&lt;br&gt;
&lt;code&gt;MeetHour.removeListener(listener)&lt;/code&gt; or &lt;code&gt;MeetHour.removeAllListeners()&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="nd"&gt;@override&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;initState&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;super&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;initState&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;MeetHour&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;addListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;MeetHourMeetingListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nl"&gt;onConferenceWillJoin:&lt;/span&gt; &lt;span class="n"&gt;_onConferenceWillJoin&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nl"&gt;onConferenceJoined:&lt;/span&gt; &lt;span class="n"&gt;_onConferenceJoined&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nl"&gt;onConferenceTerminated:&lt;/span&gt; &lt;span class="n"&gt;_onConferenceTerminated&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nl"&gt;onPictureInPictureWillEnter:&lt;/span&gt; &lt;span class="n"&gt;_onPictureInPictureWillEnter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nl"&gt;onPictureInPictureTerminated:&lt;/span&gt; &lt;span class="n"&gt;_onPictureInPictureTerminated&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nl"&gt;onError:&lt;/span&gt; &lt;span class="n"&gt;_onError&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nd"&gt;@override&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;dispose&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;super&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;dispose&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;MeetHour&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;removeAllListeners&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;_onConferenceWillJoin&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;debugPrint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"_onConferenceWillJoin broadcasted"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;_onConferenceJoined&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;debugPrint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"_onConferenceJoined broadcasted"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;_onConferenceTerminated&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;debugPrint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"_onConferenceTerminated broadcasted"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;_onPictureInPictureWillEnter&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="n"&gt;debugPrint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"_onPictureInPictureWillEnter broadcasted with message: &lt;/span&gt;&lt;span class="si"&gt;$message&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;_onPictureInPictureTerminated&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="n"&gt;debugPrint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"_onPictureInPictureTerminated broadcasted with message: &lt;/span&gt;&lt;span class="si"&gt;$message&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;_onError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;debugPrint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"_onError broadcasted"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Closing a Meeting Programmatically
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="n"&gt;MeetHour&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;closeMeeting&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Contributing
&lt;/h2&gt;

&lt;p&gt;Send a pull request with as much information as possible clearly&lt;br&gt;
describing the issue or feature. Keep changes small and for one issue at&lt;br&gt;
a time.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
