Sandra
account_circle

Integrations

Channels

Sandra supports multiple messaging channels out of the box. Each channel is configured through environment variables on your deployment — no external service needs to provision anything for you.

WhatsApp

WhatsApp Business

Sandra receives and replies to WhatsApp messages via the Meta Cloud API. You’ll need a Meta Business account with a WhatsApp Business phone number.

1
In the Meta Developer Console, create an app with the WhatsApp product. Note your Phone Number ID and generate a permanent Access Token.
2
Set the webhook URL in Meta’s console to:https://<your-sandra-url>/api/webhooks/whatsapp
3
Add these environment variables to your Sandra deployment:
env
WHATSAPP_VERIFY_TOKEN=any-secret-you-choose
WHATSAPP_ACCESS_TOKEN=your-meta-access-token
WHATSAPP_PHONE_NUMBER_ID=your-phone-number-id

Sandra will automatically verify the webhook and start receiving messages. For multi-tenant setups, configure per-tenant WhatsApp credentials in the admin dashboard.

Instagram

Instagram DMs

Sandra receives and replies to Instagram Direct Messages via the Meta Messenger Platform API. Requires a Facebook Page linked to an Instagram Professional account.

1
In the Meta Developer Console, add the Instagram product to your app. Subscribe to the messages webhook field.
2
Set the webhook URL to:https://<your-sandra-url>/api/webhooks/instagram
3
Add these environment variables:
env
INSTAGRAM_VERIFY_TOKEN=any-secret-you-choose
INSTAGRAM_ACCESS_TOKEN=your-page-access-token
INSTAGRAM_PAGE_ID=your-instagram-page-id
Email

Email (Gmail / Google Workspace)

Sandra can monitor a Gmail inbox and reply to emails automatically. Uses either Gmail push notifications or periodic polling via a cron.

1
Create a Google Cloud project with the Gmail API enabled. Set up a service account (or OAuth credentials) with domain-wide delegation if using Google Workspace.
2
Add the Google credentials to your environment:
env
GOOGLE_SERVICE_ACCOUNT_EMAIL=sa@your-project.iam.gserviceaccount.com
GOOGLE_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----"
GOOGLE_DELEGATED_USER=inbox@yourdomain.com
3
Option A — Push: Set up a Gmail push subscription that sends to /api/webhooks/email.
4
Option B — Poll: Configure a cron job that hits /api/cron/email-poll every few minutes.
Voice

Voice (WebSocket)

Real-time voice conversations using a WebSocket connection. The voice bridge handles speech-to-text (Deepgram), agent processing, and text-to-speech (Google Cloud TTS) in a single streaming connection.

1
Deploy the voice-bridge/ service alongside your Sandra instance. It’s a standalone Node.js process.
2
Configure the voice bridge environment:
env
DEEPGRAM_API_KEY=your-deepgram-key
GOOGLE_TTS_API_KEY=your-google-tts-key   # or use the service account
SANDRA_API_URL=http://localhost:3000      # points at your Sandra instance
VOICE_PORT=8080
3
The built-in chat UI connects to the voice bridge automatically when the mic button is pressed. For custom UIs, open a WebSocket to ws://<voice-bridge-url>/voice.
Zoom

Zoom (Meetings)

Sandra can schedule and manage Zoom meetings on behalf of users. Requires a Zoom Server-to-Server OAuth app.

1
Create a Server-to-Server OAuth app in the Zoom Marketplace. Note the Account ID, Client ID, and Client Secret.
2
Add to your environment:
env
ZOOM_ACCOUNT_ID=your-zoom-account-id
ZOOM_CLIENT_ID=your-zoom-client-id
ZOOM_CLIENT_SECRET=your-zoom-client-secret

Multi-tenant channel isolation

In multi-tenant deployments, each tenant can have its own set of channel credentials. Configure per-tenant channels via the admin dashboard under Settings → Channels, or directly in the ProviderConfig table. Sandra routes inbound messages to the correct tenant based on the phone number, page ID, or email address that received the message.

Knowledge Base →

Index your content for RAG retrieval.

Multi-tenant →

Isolated tenants, tools, and branding.