Architecture & data flow
Helix spans two repos and several external services, which communicate with each other asynchronously via AWS SQS. Below are the two independent flows: getting a bot into a meeting and back with a transcript, and picking up calendar changes.
Meeting transcript flow
- The bot join is triggered either by a calendar sync noticing an upcoming meeting the user is set to auto-join, or by the Gmail-watch webhook noticing a newly-labelled meeting invite in the agent account's own inbox.
- The
helixrepo forwards the raw transcript for Hub to match, score, and store — see Meeting bots & thehelixrepo for why, and for the Meeting BaaS / Recall.ai distinction glossed over as "bot vendor" above. - The queue consumer is
api/modules/helixProcessing/index.js, aSqsConsumer(@5app/sns-sqs-big-payload) started inapi/app.jsand stopped inapi/server.json shutdown. It's a no-op entirely whenHELIX_ENABLED=false(api/config/helix.js). - Large payloads (long transcripts) are automatically offloaded to S3 by
@5app/sns-sqs-big-payloadon both ends — the Lambda publishes via the same library that Hub's consumer uses to unwrap them. - Full scoring detail: Scoring engine.
Calendar webhook flow
A second, independent pipeline keeps Hub's copy of each user's calendar in sync, which is what tells the bot vendor which meetings to auto-join in the first place:
There's a related but separate inbound path: Hub also watches the agent account's own Gmail inbox directly, independently of the helix repo, for newly-labelled meeting invites, using a Pub/Sub push webhook. See Meeting bots & the helix repo → Gmail watch.
Queues at a glance
| Queue (env var) | Producer | Consumer | Purpose |
|---|---|---|---|
HELIX_SQS_QUEUE_URL | helix repo (sendMeetingTranscriptToSQSQueue.ts) | hub api/modules/helixProcessing/index.js | Finished meeting transcript + metadata → triggers scoring |
CALENDAR_WEBHOOK_SQS_QUEUE_URL | helix repo (calendarWebhook.ts) | hub api/modules/helixProcessing/calendarEventsProcessing.js | Raw calendar push-notification events → triggers calendarSync |
Both queues are consumed in-process by the Hub api/ service, and both stay idle when HELIX_ENABLED=false.
Weekly roll-up
Independent of the per-meeting flow above, a scheduled/manually-triggered job averages the week's scores per user/skill and emails a summary — see Scoring engine → weekly roll-up.