Google Calendar
The Google Calendar integration lets Helios agents call the Google Calendar API to manage events, calendars, and sharing, and check availability. It runs agents automatically when events or sharing change on the calendars you choose, or when your calendar list or settings change.
What your agents can do
Agents use the Google Calendar API with the access granted by your connected account.
- Create events with guests and a Google Meet link
- List the agenda for a day or a week, across your calendars
- Find free time with the free/busy API
- Reschedule or cancel events, and notify guests
- Accept or decline invitations
- Create calendars, share a calendar, and change who can see or edit it
Agents can read your Google Calendar settings but can't change them, because the Calendar API has no method for that. The exception is your time zone. Changing your primary calendar's time zone changes it too. The connection only grants access to Google Calendar, so agents can't open the Google Drive files attached to an event.
Authentication
| Method | Type | Description |
|---|---|---|
| Helios Google Calendar App | OAuth 2.0 | Sign in with Google through the Helios app. Nothing to set up in Google |
| Your own Google Calendar OAuth app | OAuth 2.0 | An OAuth client that you create in your own Google Cloud project |
Both methods ask for these scopes, with offline access so that Google issues a refresh token:
| Scope | What it's for |
|---|---|
https://www.googleapis.com/auth/calendar | Everything in the Calendar API: events, calendars, sharing, your calendar list, settings and free/busy, and watching them for triggers |
https://www.googleapis.com/auth/userinfo.email, https://www.googleapis.com/auth/userinfo.profile | Showing which Google account is connected |
If Google's consent screen lets you leave out access to Google Calendar, allow it. Without it, agents can't call the Calendar API and triggers don't work.
Access tokens last an hour, and Helios renews them with the refresh token. See Integration authentication for how credentials are stored and injected.
Helios Google Calendar App
- In Helios, choose Helios Google Calendar App.
- Optional: to watch calendars other than your primary one for triggers, enter their IDs in Calendars. See Triggers.
- Save, then choose your Google account and approve access.
Helios asks Google for consent each time you connect. If you remove Helios's access in your Google Account, open the connection and click Re-connect.
Your own Google Calendar OAuth app
You need a Google Cloud project that you can edit. To keep sign-in inside a Google Workspace organization, the project must belong to that organization.
-
In the Google Cloud console, create a project or pick one. Under APIs & Services → Library, enable the Google Calendar API.
-
Open Google Auth Platform. If it isn't set up yet, click Get Started. On Branding, set the app name and the user support email.
-
On Audience, choose the user type:
- Internal limits sign-in to your Google Workspace organization.
- External allows any Google account. The app starts in Testing, so add your account under Test users with Add users.
-
On Data Access, click Add or Remove Scopes and add the scopes above. Google lists
calendaras a sensitive scope. -
On Clients, click Create client and choose Web application. Under Authorized redirect URIs, add this URL, then click Create:
https://api.heliosapp.com/integrations/google/oauth_callbackCopy the client secret now. Google shows it only when you create the client.
-
In Helios, choose Your own Google Calendar OAuth app. Enter the Client ID and Client Secret of the client you created. Optional: enter calendar IDs in Calendars.
-
Save, then approve access in Google.
Google expires the refresh token of an External app in Testing 7 days after you approve it. Helios then can't call Google Calendar, and triggers stop. To avoid this, click Publish app on the Audience page to move the app to In production. Until Google verifies the app, it may show an unverified app screen before the consent screen.
If you add a new client secret in Google, enter it in Helios through Manage before you disable the old one. After you change the app's scopes, click Re-connect on the connection and approve again.
Triggers
Google Calendar can start a Workflow when something changes. Helios sets up notifications with the Calendar API when you save the connection, so there is nothing to set up in Google.
Helios watches your primary calendar. To watch other calendars, set Calendars on the connection to their IDs, separated by commas. A calendar's ID is under Integrate calendar in its settings in Google Calendar. Helios skips a calendar the account can't see. Your calendar list and settings belong to the account, so they don't depend on Calendars.
| Event | Description | Filters |
|---|---|---|
event.created | An event was created on the calendar, or you were invited to a new event | calendar, title (pattern), organizer email (pattern), event type, my response |
event.updated | An event was changed, such as its time, its guests or your response | calendar, title (pattern), organizer email (pattern), event type, my response |
event.cancelled | An event was cancelled or deleted | calendar, title (pattern), organizer email (pattern), event type |
acl_rule.created | The calendar was shared with a person, a group, a domain or the public | calendar, shared with (pattern), access |
acl_rule.updated | The access of someone the calendar is shared with was changed | calendar, shared with (pattern), access |
acl_rule.deleted | The calendar stopped being shared with someone | calendar, shared with (pattern) |
calendar_list_entry.added | A calendar was added to your calendar list, such as when you create it or subscribe to it | calendar, calendar name (pattern), my access |
calendar_list_entry.updated | Your own settings for a calendar in your list were changed, such as its color, its display name, its reminders or whether it is hidden | calendar, calendar name (pattern), my access |
calendar_list_entry.removed | A calendar was removed from your calendar list, such as when you unsubscribe from it or it is deleted | calendar |
setting.updated | One of your Google Calendar settings was changed, such as your time zone | setting |
All filters are optional. Pattern filters are case-sensitive, so *Standup* doesn't match daily standup.
- Calendar is chosen from a list. For event and sharing events, the list has the watched calendars. For calendar list events, it has every calendar in your list.
- Title matches the event's title.
- Organizer email matches the organizer's email address.
- Event type is one of Event, Focus time, Out of office, Working location, Birthday or Event from Gmail. Use it to leave out focus time and working location entries.
- My response is your own answer to the invitation. Choose Not responded to catch new invitations you haven't answered.
- Shared with matches the email address of the person or group, or the domain, that the calendar is shared with, such as
*@example.com. Sharing with the public has no address, so it doesn't match when this filter is set. - Access is the access that the sharing gives, such as See all event details or Make changes and manage sharing.
- Calendar name matches the name you see for the calendar in your list, which is your own name for it if you set one.
- My access is your own access to the calendar.
- Setting is the setting that changed, such as Time zone or Start of the week.
How Helios reads the changes:
- An event counts as created when it was created after the last change Helios saw. An invitation to an event that someone created earlier arrives as
event.updated. - Google may send only the ID of a deleted event. The title, organizer and event type filters then can't match it. On calendars you own, Google keeps the details.
- A sharing rule or a calendar in your list counts as new when it wasn't there the last time Helios read the changes.
calendar_list_entry.updatedcovers your own settings for a calendar. Google doesn't report a change to the calendar itself, such as a new title set by its owner, or a change to who it's shared with, as a calendar list change.
If Google refuses to watch something, Helios watches the rest and shows the events it can't receive as unavailable in the trigger picker, with the reason. This happens when the connection doesn't have access to Google Calendar, or when you can't make changes to any watched calendar, which hides its sharing settings. Helios tries the sharing settings again later, so sharing events become available once you can make changes to a watched calendar.
An agent's own changes can start new runs. An agent that creates an event on a watched calendar starts another event.created run. Filter on the title or the calendar, or say in the prompt which events to ignore. See Guarding against events you don't want.
Check that it works
- The connection: after you approve access, the connection's status shows Connected. Error means Google rejected the token. See Common errors.
- A trigger:
- Add
event.createdto a workflow with no filters. - Create a test event on a watched calendar.
- Check that a run starts. Then open the connection in Helios and click Webhook events to see the event.
- Add
Common errors
| What you see | Cause | Fix |
|---|---|---|
Access token not found. Please complete the OAuth flow first. | The approval in Google wasn't finished | Open the connection and click Re-connect |
Google shows Error 400: redirect_uri_mismatch | The redirect URL isn't on the OAuth client | Add https://api.heliosapp.com/integrations/google/oauth_callback under Authorized redirect URIs |
Google shows Error 403: access_denied | The app is in Testing and the account isn't a test user | Add the account under Test users, or publish the app |
| Calls fail, and Test Connection shows Error, a week after connecting | The app is External and in Testing, so Google expired the refresh token | Publish the app, then click Re-connect |
An agent's call fails with Request had insufficient authentication scopes | Access to Google Calendar wasn't allowed on the consent screen, or your own app doesn't have the calendar scope | Add the scope on Data Access if it's missing, then click Re-connect and allow access to Google Calendar |
An agent's call fails with Google Calendar API has not been used in project … before or it is disabled | The Calendar API isn't enabled in your Google Cloud project | Enable the Google Calendar API in APIs & Services → Library |
This Google account has none of the calendars … | No calendar ID in Calendars belongs to a calendar the account can see | Copy the IDs from Integrate calendar in each calendar's settings, or leave Calendars empty |
| Sharing events show as unavailable | You can't make changes to any watched calendar, or the connection doesn't have access to Google Calendar | Watch a calendar you can make changes to, or click Re-connect and allow access |
| Calendar list or settings events show as unavailable | The connection doesn't have access to Google Calendar | Click Re-connect and allow access |
| No run starts after a change | The calendar isn't watched, the filters don't match, or the refresh token stopped working | Check Calendars, test with no filters, and click Re-connect if the status shows Error |
Last updated on
Gmail
The Gmail integration lets Helios agents search the Gmail API and call any endpoint to send email, read and organize messages, and manage labels and settings.
Google Docs
The Google Docs integration lets Helios agents search the Google Docs API and call any endpoint to create documents, edit content, and manage formatting.