Webhooks
Webhooks allow you to receive real-time notifications when events occur in Google Workspace services.
Overview
Gspace provides webhook support for:
- Calendar event changes
- Gmail message events
- Drive file changes
- Sheets updates
Setting Up Webhooks
1. Create a Webhook Handler
pythonfrom gspace.webhooks import WebhookHandler handler = WebhookHandler(secret="your_secret_key")
2. Register Event Handlers
python@handler.on_event("calendar.event.created") def handle_calendar_event(event): print(f"New calendar event: {event.data}") @handler.on_event("gmail.message.received") def handle_gmail_message(event): print(f"New email received: {event.data}")
3. Set Up Your Server Endpoint
pythonfrom flask import Flask, request app = Flask(__name__) @app.route('/webhook', methods=['POST']) def webhook(): signature = request.headers.get('X-Webhook-Signature') payload = request.get_data() # Verify and process webhook event = handler.verify_and_process(payload, signature) handler.dispatch(event) return {'status': 'ok'}, 200
Supported Events
Calendar Events
calendar.event.created- New event createdcalendar.event.updated- Event updatedcalendar.event.deleted- Event deleted
Gmail Events
gmail.message.received- New message receivedgmail.message.sent- Message sentgmail.label.added- Label added to message
Drive Events
drive.file.created- New file createddrive.file.updated- File updateddrive.file.deleted- File deleteddrive.file.shared- File sharing changed
Sheets Events
sheets.spreadsheet.updated- Spreadsheet updatedsheets.range.updated- Range of cells updated
Verifying Webhooks
Always verify webhook signatures to ensure requests are authentic:
pythondef verify_webhook(payload, signature, secret): expected_signature = hmac.new( secret.encode(), payload, hashlib.sha256 ).hexdigest() return hmac.compare_digest(signature, expected_signature)
Best Practices
- Verify signatures - Always verify webhook signatures
- Handle duplicates - Webhooks may be delivered multiple times
- Idempotency - Make handlers idempotent
- Error handling - Handle errors gracefully and log them
- Rate limiting - Implement rate limiting for webhook endpoints