Appearance
Google Calendar Integration
Iris integrates with Google Calendar to give you conversational control over your schedule. Ask about upcoming events, create meetings, reschedule appointments, and manage your calendar through natural conversation.
Features
- View Events: See upcoming events and ask about your schedule
- Create Events: Schedule meetings with natural language
- Update Events: Modify times, titles, locations, and descriptions
- Delete Events: Cancel events when plans change
- Multi-Calendar Support: Work with multiple calendars
Setup
1. Create Google Cloud Credentials
- Go to the Google Cloud Console
- Create a new project or select an existing one
- Enable the Google Calendar API
- Go to Credentials and create an OAuth 2.0 Client ID
- Set the application type to Web application
- Add your callback URL:
http://localhost:8000/settings/google/callback
2. Configure Environment
bash
GOOGLE_CLIENT_ID=your-client-id.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=your-client-secret3. Connect Your Account
- Open Iris and go to Settings
- Find the Google Calendar integration
- Click Connect and authorize access
- Select which calendars Iris should have access to
Context Injection
When connected, Iris automatically receives your upcoming events in every conversation:
You: "Can we meet tomorrow?"
Iris: "I see you have a dentist appointment at 10am and a team standup at 2pm tomorrow. Would 11:30am or 4pm work better?"
Available Tools
| Tool | Purpose |
|---|---|
list_calendar_events | Fetch upcoming events (1-30 days ahead) |
create_calendar_event | Create new events with title, time, location |
update_calendar_event | Modify existing events |
delete_calendar_event | Remove events |
Example Conversations
You: "What do I have this week?"
Iris: "Here's your week: Monday 10am Team standup, Tuesday 2pm Client call, Wednesday 9am Dentist..."
You: "Schedule a meeting with Sarah Tuesday at 3pm about the roadmap"
Iris: "Created: Project Roadmap Discussion with Sarah, Tuesday at 3:00 PM."
You: "Move my dentist appointment to Thursday"
Iris: "Done - moved from Wednesday 9am to Thursday 9am."
Configuration
| Setting | Default | Description |
|---|---|---|
calendar.cache_ttl | 15 | Cache duration (minutes) |
calendar.event_horizon | 7 | Days ahead to include in context |
Security Considerations
Token Storage
Google OAuth tokens are stored encrypted in the database (google_token and google_refresh_token fields on the User model). Laravel's encryption uses your APP_KEY, so keep that secure.
Permissions Scope
Iris requests the https://www.googleapis.com/auth/calendar scope, which provides full read/write access to calendars the user selects. Users choose which calendars to share during the connection flow.
Token Refresh
Access tokens expire after 1 hour. Iris automatically refreshes them using the refresh token before making API calls. If the refresh token becomes invalid (user revokes access, token expires after 6 months of inactivity), the user needs to reconnect.
Troubleshooting
Calendar not connected: Disconnect and reconnect in Settings, ensure all permissions are granted.
Events not showing: Check that the calendar is selected in Settings and events are within the 7-day horizon.
Can't create events: Verify you have write access to the target calendar.
"Token has been expired or revoked": The refresh token is invalid. Disconnect and reconnect in Settings.
Events appearing in wrong timezone: Iris uses ISO 8601 timestamps with timezone info. Check that your timezone is set correctly in Settings > Profile. The system default can also be configured in config/iris.php under temporal.timezone.