Skip to main content

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 helix repo forwards the raw transcript for Hub to match, score, and store — see Meeting bots & the helix repo 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, a SqsConsumer (@5app/sns-sqs-big-payload) started in api/app.js and stopped in api/server.js on shutdown. It's a no-op entirely when HELIX_ENABLED=false (api/config/helix.js).
  • Large payloads (long transcripts) are automatically offloaded to S3 by @5app/sns-sqs-big-payload on 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)ProducerConsumerPurpose
HELIX_SQS_QUEUE_URLhelix repo (sendMeetingTranscriptToSQSQueue.ts)hub api/modules/helixProcessing/index.jsFinished meeting transcript + metadata → triggers scoring
CALENDAR_WEBHOOK_SQS_QUEUE_URLhelix repo (calendarWebhook.ts)hub api/modules/helixProcessing/calendarEventsProcessing.jsRaw 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.