Prerequisites
- A scheduling provider connected in Settings → Apps — Calendly, Cal.com, ChiliPiper, or HubSpot. See Scheduling & Booking with Agents for the four providers and their setup.
- At least one team phone number for outbound calls — see Phone Numbers.
- Your team’s API key, from Settings → General → Privacy & Security (see Workspace Settings).
- A way to make an HTTP request when a lead submits: your backend, your CRM’s workflow engine, or a form tool that can send a webhook.
Step 1: Build and publish the qualification voice agent
Go to Agents > Voice Agents, click + New Voice Agent, and pick the Telesales template — it’s built for outbound calls that qualify leads and close on the call. In the setup step:- Voice agent name — e.g. “Speed-to-lead callback — [Product]”.
- Custom requirement — describe your company, product, target customer, and the call goal (“qualify inbound demo requests and book a meeting with sales”).
- Contact fields the bot will know — check
{{fullName}}(and any other fields your form captures) so the agent can greet the lead by name instead of opening cold.
fullName first so the greeting works. When it behaves, publish it from the Versions tab. The full walkthrough of each of these steps is in Creating Your First Voice Agent.
Step 2: Attach the calendar tools
In the agent’s Advanced Settings, open the Tools section and add both calendar presets — an agent that can check availability but not book leaves the caller with a slot and no appointment:
In each tool’s dialog, pick your Calendar — the selector lists every installed calendar profile by alias, so choose the sales calendar, not a support one — and turn on Global Tool so booking works wherever the conversation happens to be. If the selector shows No calendar apps available, use its Install new app shortcut to connect a provider without abandoning the agent.
On the call, if the requested time is taken, the availability check returns near-slot suggestions the agent can offer instead (“2 PM is taken — I have 2:30 or 3:15”). A booking requires the caller’s name, email, booking time, and timezone — the agent collects whatever is missing before it books. Details and provider setup are in Scheduling & Booking with Agents; for a deeper treatment of the two tools and their prompt wiring, see Build a Voice Agent That Books Appointments Mid-Call.
Step 3: Create the campaign
Go to Campaigns, click New Campaign, and fill in:
Click Create, then Start Editing to open the working draft (see Creating a Campaign for the draft/publish mechanics).
On the Setup tab, under Campaign Agents, click + Add Agent, attach your voice agent, and set its Role:
Engagement Flow
Add four states with + Add State:Instructions
Paste and adjust:Exit Conditions
Paste and adjust:Step 4: Wire the trigger from your form or CRM
This is the “speed” in speed-to-lead: the moment a lead submits, your system makes one API call, and the lead is enrolled — the campaign’s first decision is the callback. Use thecontact-enrollments endpoint, which creates the contact and enrolls it in one call (documented in Creating a Campaign):
phoneNumberandteamIdare required. Send the lead’s phone from your form’s phone field.campaignId— this campaign’s ID. (It’s technically optional on the endpoint — omitting it just creates/updates the contact without enrolling — but for speed-to-lead you always include it.)nameandemail— from your form.nameandemailcome from your form — the contact’s name is what fills the{{fullName}}placeholder your agent’s greeting uses.- Returns
200with acontactId.
POST /api/campaigns/enrollments instead, with contactId, teamId, and campaignId. It returns 200 with an enrollmentId, or 409 if the contact is already enrolled, which is exactly what you want when someone submits your form twice. (The 409 applies to the enrollments endpoint; the main contact-enrollments call updates the existing contact instead.)
Fire the request from wherever the submission lands first: your backend’s form handler, your CRM’s “new lead” workflow, or your form tool’s webhook action. Every second between submit and enrollment is a second added to the callback.
Step 5: Protect the experience
Four guardrails to set before real leads flow in:- Do Not Call list — you don’t need an opt-out rule in your form handler. Every outbound call is checked against the team’s Do Not Call List before it’s placed; a matching call step is simply skipped, and post-call analysis adds numbers automatically when a lead says “don’t call me again” on a call.
- Call Window — the Instructions’ calling hours are a request to the AI; the Enable Call Window setting in Workspace Settings is a hard stop that automatically fails any outbound call outside the allowed hours. Turn it on where calling-hours regulations apply, and keep its hours aligned with what you wrote in the Instructions — a mismatch looks like a campaign that mysteriously stopped dialing.
- Caller ID rotation — a single number making all your speed-to-lead calls is exactly what gets spam-labeled, and a “Spam Likely” caller ID defeats the entire recipe. Create a number pool on the Number Pools tab of Phone Numbers and attach it in the voice agent’s phone number configuration, so each call picks a caller ID from the pool.
- Voicemail — voicemail detection is off by default, which means a missed callback is a silent hangup. Enable it in the agent’s Advanced Settings → Voicemail (see Voice Agent Settings) and write a Voicemail Message using contact placeholders, e.g. “Hi
{{firstName}}, this is [Alex] from [Acme] — you asked about [a demo] on our site. I’ll try you again shortly.” A personalized message measurably improves callback rates versus silent hangups.
Step 6: Test by enrolling yourself
Before pointing your form at the endpoint, run the Step 4 curl by hand with your own phone number, name, and email. Then:- Time the gap between the request and your phone ringing — this is your speed-to-lead number.
- Answer, let the agent qualify you, and book a test meeting. Confirm the invitation arrives from your scheduling provider and the appointment shows on your contact record in Revve.
- Open the campaign’s Enrollments tab and click your row to see the engagement timeline — the enrollment, the call, and the state the AI moved you to.
- Run the curl again with the same contact via
POST /api/campaigns/enrollmentsand confirm the409— your double-submit protection.
Test scenarios
Run these before wiring up the real form:
Fix issues at the right layer: wrong timing or attempt count → sharpen the campaign Instructions; wrong conversation (weak qualifying, pushy tone) → sharpen the voice agent’s System Prompt; booking failures → check the calendar tool’s Calendar selection and your provider’s event-type settings.
Variations
- SMS fallback for unanswered calls: attach a published SMS Chat Agent as a second Campaign Agent, turn on Enable Multi Channels, and add an Instructions line telling the AI to text the lead when calls go unanswered. The full voice-then-SMS mechanism is the subject of Build a Payment Reminder Campaign — same pattern, different script.
- Automatic reminders after the booking: teams can configure a default “after appointment booked” campaign — every contact your agent books is auto-enrolled into it, so no-shows drop without anyone sending manual reminders. See Scheduling & Booking with Agents.
- Trigger from inside Revve instead of your form: if the lead event already happens inside Revve, an automation rule with the Enroll in Campaign action can enroll contacts without any external API call — see Creating Automation Rules.
- Nurture the unreached: set the campaign’s Next Campaign so leads who exit after [5] failed attempts flow into a slower nurture campaign instead of going cold.
What’s Next
- Creating a Campaign — the full campaign reference: publishing, the enrollment API, managing in-flight enrollments, and monitoring.
- Voice Agent Settings — tune turn-taking, voicemail, and retry behavior once real calls surface rough edges.