{"id":1497,"date":"2026-01-17T06:46:57","date_gmt":"2026-01-17T06:46:57","guid":{"rendered":"https:\/\/documentation.iqonic.design\/kivicare-wordpress\/?p=1497"},"modified":"2026-01-24T06:26:08","modified_gmt":"2026-01-24T06:26:08","slug":"google-meet-architecture","status":"publish","type":"post","link":"https:\/\/documentation.iqonic.design\/kivicare-wordpress\/kivicare-google-meet-telemed-woocommerce-addon\/documentation\/core-concepts-doc\/google-meet-architecture\/","title":{"rendered":"Google Meet Architecture"},"content":{"rendered":"<div class=\"nolwrap\">\n<p>The <strong>KiviCare Google Meet Addon<\/strong> is built on the modular, provider-based architecture of <strong>KiviCare Core<\/strong>, ensuring flexibility, scalability, and seamless integration with existing telemedicine workflows.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>System Overview<\/strong><\/h2>\n\n\n\n<p>The Google Meet integration is structured into <strong>three core architectural layers<\/strong>, each responsible for a specific part of the workflow.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h5 class=\"wp-block-heading\"><strong>1. Provider Layer<\/strong> (<code>app\/googlemeet\/<\/code>)<\/h5>\n\n\n\n<p>The <strong>Provider Layer<\/strong> manages all Google Meet\u2013specific logic.<br>The <code>KCGMGoogleMeet<\/code> class extends <code>KCAbstractTelemedProvider<\/code> from KiviCare Core and acts as the backbone of the integration.<\/p>\n\n\n\n<p><strong>Key responsibilities include:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Managing Google Calendar API endpoints.<\/li>\n\n\n\n<li>Formatting and validating request data according to Google REST API standards.<\/li>\n\n\n\n<li>Handling OAuth 2.0 token lifecycle management, including refresh and revocation.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h5 class=\"wp-block-heading\"><strong>2. Persistence Layer <\/strong>(<code>app\/models\/<\/code>)<\/h5>\n\n\n\n<p>The <strong>Persistence Layer<\/strong> manages data storage and relationships between KiviCare and Google Meet.<\/p>\n\n\n\n<p><strong>This layer handles:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Appointment Mapping Table:<\/strong> Stores Google Calendar Event IDs and Google Meet URLs against KiviCare Appointment IDs.<\/li>\n\n\n\n<li><strong>User Metadata:<\/strong> Saves individual doctor OAuth tokens and Google Meet configuration preferences.<\/li>\n<\/ul>\n\n\n\n<p>This ensures all meeting data remains securely linked to appointments and users.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h5 class=\"wp-block-heading\"><strong>3. Controller Layer<\/strong> (<code>app\/controllers\/api\/<\/code>)<\/h5>\n\n\n\n<p>The <strong>Controller Layer<\/strong> exposes REST API endpoints that are consumed by the React-based KiviCare frontend.<\/p>\n\n\n\n<p>The <code>KCGMGoogleMeetController<\/code> manages:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>GET \/callback<\/code> \u2013 Processes OAuth redirects from Google and securely stores access tokens.<\/li>\n\n\n\n<li><code>GET \/test-connection<\/code> \u2013 Verifies Google API credentials and connection status in real time.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Integration Flow (<\/strong>Interaction Diagram<strong>)<\/strong><\/h2>\n\n\n\n<p>The following diagram illustrates how appointments and Google Meet links are created and delivered:<\/p>\n\n\n    <div class=\"docsy-code-block with-line-numbers\" data-language=\"javascript\">\n                \n        <div class=\"code-header\">\n            <span class=\"code-language\">JAVASCRIPT<\/span>\n            <button class=\"code-copy-btn\" aria-label=\"Copy code\">\n                <i class=\"ph ph-copy\"><\/i>\n                <span class=\"copy-text\">Copy<\/span>\n                <span class=\"copied-text\">Copied!<\/span>\n            <\/button>\n        <\/div>\n        \n        <div class=\"code-wrapper\">\n            <pre class=\"language-javascript\"><code class=\"language-javascript\">sequenceDiagram\n    participant P as Patient\/Doctor\n    participant WP as WordPress (KiviCare)\n    participant G as Google Calendar API\n    \n    P-&gt;&gt;WP: Creates Appointment\n    WP-&gt;&gt;G: POST \/calendars\/primary\/events?conferenceDataVersion=1\n    G--&gt;&gt;WP: Returns Event JSON (Google Meet Link)\n    WP-&gt;&gt;WP: Save to kc_appointment_google_meet_mappings\n    WP--&gt;&gt;P: Displays &quot;Start \/ Join&quot; Button\n<\/code><\/pre>\n            \n                            <div class=\"line-numbers-wrapper\" aria-hidden=\"true\">\n                                            <span class=\"line-number\">1<\/span>\n                                            <span class=\"line-number\">2<\/span>\n                                            <span class=\"line-number\">3<\/span>\n                                            <span class=\"line-number\">4<\/span>\n                                            <span class=\"line-number\">5<\/span>\n                                            <span class=\"line-number\">6<\/span>\n                                            <span class=\"line-number\">7<\/span>\n                                            <span class=\"line-number\">8<\/span>\n                                            <span class=\"line-number\">9<\/span>\n                                            <span class=\"line-number\">10<\/span>\n                                            <span class=\"line-number\">11<\/span>\n                                    <\/div>\n                    <\/div>\n        \n            <\/div>\n    \n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Key File Structure Overview<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><code>app\/googlemeet\/KCGMGoogleMeet.php<\/code><\/strong><br>Core integration logic and Google API handling.<\/li>\n\n\n\n<li><strong><code>app\/database\/migrations\/<\/code><\/strong><br>Database schema definitions for storing Google Meet event mappings.<\/li>\n\n\n\n<li><strong><code>app\/controllers\/api\/KCGMGoogleMeetController.php<\/code><\/strong><br>Central API controller for frontend communication and OAuth handling.<\/li>\n<\/ul>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>The KiviCare Google Meet Addon is built on the modular, provider-based architecture of KiviCare Core, ensuring flexibility, scalability, and seamless integration with existing telemedicine workflows. System Overview The Google Meet integration is structured into three core architectural layers, each responsible for a specific part of the workflow. 1. Provider Layer (app\/googlemeet\/) The Provider Layer manages [&hellip;]<\/p>\n","protected":false},"author":12,"featured_media":0,"parent":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[43],"tags":[],"class_list":["post-1497","post","type-post","status-publish","format-standard","hentry","category-core-concepts-doc"],"featured_image_src":null,"author_info":{"display_name":"wordpressadminiq","author_link":"https:\/\/documentation.iqonic.design\/kivicare-wordpress\/author\/wordpressadminiq\/"},"_links":{"self":[{"href":"https:\/\/documentation.iqonic.design\/kivicare-wordpress\/wp-json\/wp\/v2\/posts\/1497","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/documentation.iqonic.design\/kivicare-wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/documentation.iqonic.design\/kivicare-wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/documentation.iqonic.design\/kivicare-wordpress\/wp-json\/wp\/v2\/users\/12"}],"replies":[{"embeddable":true,"href":"https:\/\/documentation.iqonic.design\/kivicare-wordpress\/wp-json\/wp\/v2\/comments?post=1497"}],"version-history":[{"count":5,"href":"https:\/\/documentation.iqonic.design\/kivicare-wordpress\/wp-json\/wp\/v2\/posts\/1497\/revisions"}],"predecessor-version":[{"id":1598,"href":"https:\/\/documentation.iqonic.design\/kivicare-wordpress\/wp-json\/wp\/v2\/posts\/1497\/revisions\/1598"}],"wp:attachment":[{"href":"https:\/\/documentation.iqonic.design\/kivicare-wordpress\/wp-json\/wp\/v2\/media?parent=1497"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/documentation.iqonic.design\/kivicare-wordpress\/wp-json\/wp\/v2\/categories?post=1497"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/documentation.iqonic.design\/kivicare-wordpress\/wp-json\/wp\/v2\/tags?post=1497"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}