Skip to content

imakarov/mindmeetings

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GoodMeet - Google Calendar Add-on

0. Project Deployment and Changes

To deploy changes to the project, use the command:

clasp push

After making changes, you need to update the add-on version in the Google Apps Script Dashboard for the changes to become available to users.

1. Project Description

GoodMeet is a Google Calendar add-on that extends the standard event creation process by adding mandatory fields to structure meeting information:

  • Meeting Goal
  • Agenda
  • Expected Outcome

The add-on automatically saves this information in the event description, formats it using HTML tags, and provides convenient tools for working with meeting data.

2. Technology Stack and Components

  • Programming Languages: JavaScript (Google Apps Script)

  • Google APIs and Services:

    • Calendar API - working with calendar events
    • Card Service - building add-on interface
    • Properties Service - storing user data
    • Cache Service - caching for performance optimization
    • Gmail API - sending notifications to meeting participants
  • Development Tools:

    • Clasp - command line tool for Google Apps Script
    • Git - version control system

3. Architecture

The project is built on the event-driven architecture of Google Apps Script using Card Service to build the user interface.

Main Modules:

  1. Interface Module:

    • Creating cards and sections through Card Service
    • Handling user input
    • Form validation
  2. Logic Module:

    • Processing calendar events (creation, updates)
    • Data storage and retrieval
    • Meeting text formatting
  3. Localization System:

    • Centralized storage of all text strings
    • Easy switching between languages
  4. Integration Module:

    • Interaction with Google Calendar
    • Sending notifications to participants
    • Data caching system

Add-on Lifecycle:

  1. User opens an event in the calendar and launches the add-on
  2. Check for existing saved event
  3. Load existing data (if any)
  4. Display form for entering/editing information
  5. After saving, data is written to event description and cache
  6. Optionally send notifications to participants

4. Implementation Features and Logic

Data Storage:

Data is stored directly in the event description, surrounded by special markers (▫️▫️▫️), which allows:

  • Easy identification of the meeting information block
  • Preservation of other event description content
  • Information updates without data loss

Caching:

  • Two-level caching is used:
    • UserCache for quick access (5 minutes)
    • UserProperties for long-term storage

Template Processing:

  • Pre-configured templates for different types of meetings
  • Quick filling of all fields with one click

Intelligent Data Processing:

  • Hiding fields with empty values or "-" values
  • Different logic for new and existing events
  • Check for unsaved events

Notification System:

  • Automatic skip of notification request with small number of participants
  • Email notifications with formatted meeting information
  • Interface notifications about operation results

5. Change Testing Checklist

When making code changes, you need to check:

  • Basic Functionality:

    • Creating a new event and adding information through the add-on
    • Editing an existing event with data
    • Checking formatting in the event description
  • Template Functionality:

    • Selecting different templates and correct field filling
    • Form data reset (Reset Data button)
  • Notifications:

    • Checking notification sending request
    • Skipping request with small number of participants
    • Receiving email after information update
  • Copy to Meet:

    • "Copy for Meet Chat" button functionality
    • Correct formatting of copied text
  • Field Validation:

    • Handling empty required fields
    • Validation of special values (e.g., "-")
  • Compatibility:

    • Working in different browsers
    • Mobile version testing
    • Testing on different accounts
  • Localization:

    • Checking correctness of all text strings
    • New strings added to localization object

When problems are found, you need to:

  1. Record reproduction steps
  2. Check logs in Apps Script console
  3. Make appropriate fixes
  4. Re-test functionality

6. Common Issues Resolution

Permission Errors

Error when executing external requests

Problem: When launching the add-on, an error appears:

Exception: Specified permissions are not sufficient to call UrlFetchApp.fetch.
Required permissions: https://www.googleapis.com/auth/script.external_request

Solution:

  1. Add external request permission to the appsscript.json file:
"oauthScopes": [
  "https://www.googleapis.com/auth/script.external_request"
]
  1. Run clasp push to update settings
  2. Reinstall the add-on or update its version

Error when working with Gmail

Problem: Notifications are not sent through Gmail:

Exception: Gmail operation not allowed.

Solution:

  1. Check for permission in appsscript.json:
"oauthScopes": [
  "https://www.googleapis.com/auth/gmail.send"
]
  1. Update settings and reinstall the add-on

Caching Issues

Problem: Data changes are not displayed or displayed incorrectly.

Solution:

  1. Clear user cache by calling the clearUserCache() function
  2. Check the use of correct keys in caching
  3. Ensure that user properties (UserProperties) updates are performed correctly

Calendar Event Access Issues

Problem: The add-on cannot access calendar events.

Solution:

  1. Check for necessary permissions in appsscript.json:
"oauthScopes": [
  "https://www.googleapis.com/auth/calendar",
  "https://www.googleapis.com/auth/calendar.events",
  "https://www.googleapis.com/auth/calendar.addons.execute",
  "https://www.googleapis.com/auth/calendar.addons.current.event.read",
  "https://www.googleapis.com/auth/calendar.addons.current.event.write"
]
  1. Ensure that the add-on settings in the calendar section are properly configured:
"calendar": {
  "currentEventAccess": "READ_WRITE",
  ...
}

About

MindMeetings service

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published