What you need
- A running n8n (cloud or self-hosted).
-
A Vexa API key and a base URL (Authentication):
Self-hosting? n8n must be able to reach that host — see the self-host note.
- A model credential for the summarization step (the template uses GPT-4o) and a Slack credential.
X-API-Key header. Store the key as an n8n credential,
not inline in a node.
Don’t have a key yet? Hosted: sign in at vexa.ai/signin with a Google
account and copy your key from your account page — free credit, no card
required. Self-hosted: make all prints a key when the stack comes up.
The five steps
1
Trigger on the calendar event
The template starts from a Google Calendar trigger and pulls the Meet link off the event.
Users have reported the Google Calendar trigger firing only on the oldest matching event, which
stalls the workflow when several meetings queue up. If you hit that, filter the trigger more
narrowly (single calendar, near-term window) or drive the workflow from a Schedule trigger that
queries the calendar itself.You can also skip this step entirely — see Let Vexa do the
calendar part.
2
Send the bot
One Or name the parts explicitly:
POST. If you have the join URL, send it directly and let the API parse out the platform
and meeting id:native_meeting_id is the id inside the join URL (abc-defg-hij), not the whole URL. A URL
that isn’t a recognizable meeting link is refused with a 422. Zoom, Teams, and Jitsi work the
same way with a different platform — see Send a bot.On Meet and Teams the bot may sit in the lobby until a host admits it.3
Wait for the meeting to finish
Give the call time to happen. A Wait node set to the meeting’s scheduled duration is the
simplest approach; polling the transcript on an interval and continuing once segments stop
arriving is the more responsive one.
4
Fetch the transcript
5
Summarize and post
Flatten
segments[] into speaker: text lines, hand them to your model node, and post the
result with the Slack node. Nothing here is Vexa-specific — the transcript is ordinary JSON.Let Vexa do the calendar part
The calendar trigger is the most fragile node in the workflow, and you may not need it. Vexa can import your calendar itself and auto-join meetings at their start time — no trigger, noPOST /bots on your side. The workflow then reduces to wait → fetch transcript → summarize →
post.
See Sync your calendar and Plan a meeting. Sending
a bot to a link you already planned upgrades the same meeting record — it never creates a duplicate.
Self-hosted variant
Everything above works unchanged against a self-hosted deployment; onlyAPI_BASE differs. The
constraint is reachability:
- n8n and Vexa on the same host — point n8n at
http://localhost:18056. - n8n in Docker, Vexa on the host —
http://host.docker.internal:18056, or put both on one Docker network and use the gateway’s service name. - n8n cloud, Vexa self-hosted — the gateway must be reachable from the internet over HTTPS. Terminate TLS at a reverse proxy in front of it; don’t expose the gateway port directly.
Troubleshooting
More at Troubleshooting.