Auto-call hot HubSpot leads with a LiveKit voice agent

By General Input

The moment a HubSpot contact turns into a sales qualified lead, dial them with your LiveKit voice agent and log the recap to HubSpot and Slack.

Integrations

  • HubSpot
  • LiveKit
  • Slack Bot

Type

Agentic Task

Categories

  • Sales

Build me an agent workflow that fires from an incoming HubSpot webhook whenever a contact's lifecycle stage flips to sales qualified lead (treat the stage value sales_qualified_lead, or the equivalent hot-lead property change we configure, as the trigger signal). On every trigger, immediately place an AI voice callback via LiveKit so the prospect gets a human-quality outreach within a minute or two of raising their hand.

Trigger: HubSpot webhook. The payload will identify a contact id (and may include the property change). HubSpot is on the accepted webhook-source list.

Step 1. Look the contact up in HubSpot using Get Contact by id, requesting at minimum firstname, lastname, phone, company, lifecyclestage, hs_lead_status, and the most recent form submission fields we can pull. Keep that record in scope for the rest of the run.

Step 2. Guardrails before dialing. (a) If the contact has no phone number, do not call. Instead, send a Slack message to the sales channel that says "No phone on record for {name} at {company}, contact link attached" with a link back to the HubSpot record, and stop. (b) Compare the current time against a configurable calling hours window, defaulting to 9am to 6pm local to the contact's timezone (fall back to the workflow owner's timezone if the contact's is unknown). If we are outside the window, do not call. Instead post a Slack message that the lead came in outside calling hours and stop; do not queue for later unless the user asks for that behavior.

Step 3. In LiveKit, spin up the call. First, Create Room with a unique room name (something like sql-callback-{hubspotContactId}-{timestamp}) and metadata that carries the HubSpot contact id, the contact's name, and the lead source so our voice agent worker can read context off the room. Then Create Agent Dispatch against that room to attach our named LiveKit voice agent worker (the agent name is a configurable input). Then Create SIP Participant on our configured outbound trunk to dial the contact's phone number and drop them into that same room; use a participant identity derived from the HubSpot contact id and pass through the contact's display name.

Security nuance to bake into the LiveKit token minting: grants must include roomAdmin for the room-service calls and sip.admin for the SIP dispatch call, tokens must be short-lived (10 minute exp is fine), and we should mint a fresh token per operation rather than reusing a long-lived one. Do not put the API secret anywhere except the signing step.

Step 4. After the call ends, produce a short call summary. Pull the transcript LiveKit produced for the room (via the voice agent worker or whatever LiveKit surface we agreed on), then have the agent draft a 3 to 6 sentence recap covering: who answered, whether they qualified as a real opportunity, next step requested, and any objections. Keep it factual, do not embellish.

Step 5. Fan out the outcome. Call HubSpot Create Note with the recap text and associate it with the contact id from step 1 so it lands on the contact timeline. Then send a Slack message via the sales channel with: contact name and company, whether the call connected, the one-line outcome, and a link back to the HubSpot contact record. If the transcript is empty or the call did not connect, still write the note and Slack message, marked as "no answer" or "voicemail" so the team knows to try again.

Inputs the workflow should expose so I can tweak later: the sales Slack channel, the LiveKit agent name to dispatch, the LiveKit outbound trunk id, the calling hours window and timezone strategy, and the HubSpot lifecycle stage value(s) that count as a hot lead.

Verified operations to use: HubSpot Get Contact, HubSpot Create Note, LiveKit Create Room, LiveKit Create Agent Dispatch, LiveKit Create SIP Participant, Slack Bot Send a Message.

Related prompts

Explore more prompts
Call overdue Xero customers with an AI collections agentA brand asset library your marketing team actually searchesTurn Mailjet email clicks into ranked HubSpot follow-upsClean out the Looker dashboards and Looks nobody opensLiveKit live operations console for room moderationWake up dormant Keap leads with a researched reasoniMessage campaign console with pre-flight checks and delivery boardLiveChat coverage board for planning next week's shiftsPhone routing control panel for LiveKit voice agentsA searchable RFP answer library your bid team drafts from