To deploy changes to the project, use the command:
clasp pushAfter making changes, you need to update the add-on version in the Google Apps Script Dashboard for the changes to become available to users.
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.
-
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
The project is built on the event-driven architecture of Google Apps Script using Card Service to build the user interface.
-
Interface Module:
- Creating cards and sections through Card Service
- Handling user input
- Form validation
-
Logic Module:
- Processing calendar events (creation, updates)
- Data storage and retrieval
- Meeting text formatting
-
Localization System:
- Centralized storage of all text strings
- Easy switching between languages
-
Integration Module:
- Interaction with Google Calendar
- Sending notifications to participants
- Data caching system
- User opens an event in the calendar and launches the add-on
- Check for existing saved event
- Load existing data (if any)
- Display form for entering/editing information
- After saving, data is written to event description and cache
- Optionally send notifications to participants
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
- Two-level caching is used:
- UserCache for quick access (5 minutes)
- UserProperties for long-term storage
- Pre-configured templates for different types of meetings
- Quick filling of all fields with one click
- Hiding fields with empty values or "-" values
- Different logic for new and existing events
- Check for unsaved events
- Automatic skip of notification request with small number of participants
- Email notifications with formatted meeting information
- Interface notifications about operation results
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:
- Record reproduction steps
- Check logs in Apps Script console
- Make appropriate fixes
- Re-test functionality
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:
- Add external request permission to the
appsscript.jsonfile:
"oauthScopes": [
"https://www.googleapis.com/auth/script.external_request"
]- Run
clasp pushto update settings - Reinstall the add-on or update its version
Problem: Notifications are not sent through Gmail:
Exception: Gmail operation not allowed.
Solution:
- Check for permission in
appsscript.json:
"oauthScopes": [
"https://www.googleapis.com/auth/gmail.send"
]- Update settings and reinstall the add-on
Problem: Data changes are not displayed or displayed incorrectly.
Solution:
- Clear user cache by calling the
clearUserCache()function - Check the use of correct keys in caching
- Ensure that user properties (
UserProperties) updates are performed correctly
Problem: The add-on cannot access calendar events.
Solution:
- 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"
]- Ensure that the add-on settings in the
calendarsection are properly configured:
"calendar": {
"currentEventAccess": "READ_WRITE",
...
}