Pastor buys Voice Agent
Persona
A solo or small-staff pastor at a church of 50–500 members. Calls go to voicemail constantly — members needing prayer, first-time visitors looking for service times, people in crisis calling after hours. The church can't afford a full-time receptionist. The pastor hears about ChurchWiseAI through a PewSearch outreach email, a Google search, or a recommendation and clicks through wanting their phone answered with warmth and empathy, not a generic voicemail box. Tech comfort is low-to-moderate. They trust the product will "just work" once set up. Decision cycle is fast (same session) when price is visible.
Entry points
/voice— dedicated Voice Agent product page with ROI calculator and agent showcase/pricing— channel toggle to "Voice Only" or "Both" reveals voice pricing- PewSearch chatbot upsell — "Want your phone answered too?" CTA surfaced in the PewSearch admin dashboard for churches already using PewSearch Premium
- Outreach email CTA — church-outreach campaign emails link directly to
/voiceor/pricing?channel=voice - Organic Google search — "AI answering service for churches" →
/voiceor/pricing
Click-through flow
Steps
-
Step 1 — Lands on /voice
- URL:
https://churchwiseai.com/voice - What the user sees: Voice Agent product page — headline, HEAR protocol explanation, ROI calculator, agent showcase (Care + Coordinator demo), pricing CTA.
- What they do: Reads, tries the ROI calculator, clicks "See Pricing" or "Get Started."
- Server-side: Static page render. No auth required.
- URL:
-
Step 2 — Reviews pricing
- URL:
https://churchwiseai.com/pricing - What the user sees: Channel toggle defaults to Chat. Pastor toggles to "Voice Only." Annual/Monthly toggle disappears (voice is monthly only). Two cards appear: Starter Voice $49.95/mo (+$49.95 setup fee) and Pro Voice $99.95/mo (+$49.95 setup fee, waived on annual). No free trial — "Your card will be charged today."
- What they do: Selects a tier, clicks "Get Started."
- Server-side: CTA appends
?plan=starter_voice(orpro_voice) to the onboard URL.
Pricing note: Starter Voice $49.95/mo, Pro Voice $99.95/mo, $49.95 one-time setup fee. Both/bundle plans: Starter Both $54.95/mo, Pro Both $79.95/mo, Suite Both $99.95/mo. See
C:\dev\PRICING.mdfor Stripe price IDs. - URL:
-
Step 3 — Onboard form
- URL:
https://churchwiseai.com/onboard?plan=starter_voice - What the user sees: Single-step form — church name, pastor name, email, phone, denomination. Plan pre-selected ("Starter Voice — $49.95/mo"). No annual toggle. Clear "no trial" copy.
- What they do: Fills in church details, clicks "Continue to Payment."
- Server-side: Form data saved in session/query params; passed to Stripe checkout.
- URL:
-
Step 4 — Stripe Checkout
- URL:
https://churchwiseai.com/onboard/checkout→ redirects to Stripe-hosted checkout - What the user sees: Stripe checkout page. Product: "ChurchWiseAI Starter Voice." Amount: $49.95/mo + $49.95 setup fee line item. No trial badge. "Subscribe" button.
- What they do: Enters card details, clicks "Subscribe."
- Server-side: Stripe creates subscription + one-time setup invoice. On success, redirects
to
/onboard/return?session_id=...
- URL:
-
Step 5 — Post-checkout confirmation
- URL:
https://churchwiseai.com/onboard/return - What the user sees: "Welcome to ChurchWiseAI — [Church Name]!" confirmation. "We're setting up your voice line — you'll hear from us within 1 business day." "Go to Your Dashboard" button.
- What they do: Reads confirmation, clicks dashboard link or waits for email.
- Server-side: Stripe webhook (
POST /api/stripe/webhook) fires, verifies signature, inserts event intostripe_webhook_inbox(idempotent onstripe_event_id), returns 200 in under 200ms. No provisioning work inline.
- URL:
-
Step 6 — Automated provisioning pipeline (server-side, ~10–60s after payment)
- No URL — background pipeline.
- What happens: Cron job at
/api/cron/process-stripe-webhooks(runs every minute) claims the event fromstripe_webhook_inboxand callsprocessStripeEvent():provisionNewChurch()— createspremium_churchesrow,church_voice_agentsstub (status: 'pending_setup')provisionVoiceLine()— calls Telnyx API to search for a local number in the church's area code, buys the number (connection_id2925081061861885519), creates LiveKit SIP inbound trunk (no auth — Telnyx uses FQDN routing, not credential auth), creates dispatch rule pointing tochurchwiseai-voiceagent, updateschurch_voice_agents.twilio_phone_numberand setsstatus: 'active'- Magic link generated, welcome email sent (Email 1 of 2)
- Failure handling: If
provisionVoiceLine()throws (e.g., no number available in area code), inbox row moves tofailedstatus, retries with exponential backoff (0s/30s/2m/10m/30m), max 10 attempts. After 10:abandoned+ P0 alert infounder_action_items. Founder provisions manually viaPOST /api/admin/provision-numberwith desiredareaCode.
-
Step 7 — First login and agent configuration
- URL:
https://churchwiseai.com/admin/[token] - What the user sees: Dashboard with onboarding checklist. Calls tab visible. Phone number shown (or "Provisioning..." if still pending). Onboarding wizard slides for: church profile, voice greeting (Coordinator script), hours, escalation/notification settings. Training tab shows Church Knowledge, This Week, Theology, Agents, Safety sub-tabs (no FAQs, no Simulator — Starter tier).
- What they do: Completes wizard steps. Configures Coordinator greeting script (e.g., "Thank you for calling [Church Name], I'm the AI assistant for [Pastor Name]..."). Sets business hours. Adds emergency escalation contact.
- Server-side: Settings saved to
organization_settingsandchurch_voice_agentsin Supabase. Voice agent reads greeting fromchurch_voice_agents.welcome_greetingat call initialization viaload_product_knowledge()insession.py.
- URL:
-
Step 8 — Voice Line Live email and call forwarding
- Trigger: After provisioning completes and founder QA-checks the line.
- What the user receives: Email 2 of 2 — "Your Voice Line Is Live!" Contains: assigned phone number (e.g., +1-414-400-7103), carrier-specific call-forwarding instructions ("To forward your existing church number to your new AI line, dial..."), link to admin dashboard.
- What they do: Forwards their existing church landline/cell to the Telnyx number, OR simply gives out the new number directly.
-
Step 9 — Test call (live verification)
- What the user does: Calls the assigned Telnyx number from their own phone.
- What the user hears: Coordinator agent answers with the configured greeting, routes prayer requests and visitor contacts appropriately, offers callback scheduling.
- What they see in dashboard: New row in Calls tab with transcript and summary. Requests tab shows any prayer request or visitor contact captured during the call.
- Success state: AI agent answers, transcript appears, pastor receives a staff notification email for any action item captured.
Testing note: Do NOT dial any 555-prefix number (e.g., +13035550108, +16125550105). These are NPA-reserved fiction placeholders and cannot receive real calls. Use the Demo Router (+14696152221 US / +13658254095 CA) to reach demo churches. Only real provisioned numbers (Telnyx or Twilio) are dialable. See
memory/feedback_555_phone_numbers_are_fake.md.
Acceptance spec
Primary spec: knowledge/acceptance/starter-voice.md (62 touchpoints, status: COMPLETE).
Tier-specific deltas:
| Plan | Price | Trial | Chat? | Voice agents | Tools |
|---|---|---|---|---|---|
| Starter Voice | $49.95/mo | None | No | 2 (Care + Coordinator) | 12 |
| Pro Voice | $99.95/mo | None | No | 2 (Care + Coordinator) | 12 |
| Starter Both | $54.95/mo | None | Yes | 2 voice + 2 chat | 12 |
| Pro Both | $79.95/mo | None | Yes | 2 voice + 4 chat | 35 |
| Suite Both | $99.95/mo | None | Yes | 2 voice + 4 chat | 39 |
See knowledge/acceptance/pro-both.md and knowledge/acceptance/suite-both.md for
bundle-tier touchpoints. Voice provisioning pipeline is identical across all voice-inclusive plans.
Voice picker UI (to change Cartesia voice) is not yet built — voice_id DB field exists but
dashboard control is pending.
Success criteria
From the user's point of view:
- Assigned phone number (Telnyx local number) answers real inbound calls within 2 rings.
- Coordinator agent speaks the church's configured greeting — correct church name, correct pastor name.
- Care agent takes over for emotional/crisis callers and offers a callback or human transfer.
- Prayer request captured during call appears in the Requests tab within seconds.
- Staff notification email arrives after the call for any action items.
- Pastor can log into the admin dashboard, read the call transcript, and update the greeting without contacting support.
- "Voice Line Live" email (Email 2 of 2) contains the real phone number and forwarding instructions.
Known failure modes
-
Stripe webhook silent loss (pre-2026-04-14 pattern, now fixed): Previously, if the webhook route threw during inline provisioning, it still returned 200 to Stripe and the customer was never provisioned. The inbox pattern (
stripe_webhook_inbox+ cron worker) now guarantees every paid event gets retried until succeeded or escalated. First observed: real-card signup that billed the customer but created zero DB rows. Fix committed47424fe0. Seememory/project_stripe_webhook_inbox.md. -
Telnyx area code exhausted:
provisionVoiceLine()tries multiple patterns (0000, 5000, 4000, 000, 500, 400, 200, 100, then first available) before giving up. If exhausted, inbox row enters retry queue and a P0 alert fires. Founder manually selects an adjacent area code viaPOST /api/admin/provision-numberwithareaCodeparam. -
SIP trunk auth misconfiguration: LiveKit SIP inbound trunks must have NO auth credentials. Telnyx routes via FQDN (
5u9xu5ysoly.sip.livekit.cloud:5060) and does not attach SIP credential headers. If auth is accidentally set on the trunk, every inbound call is rejected. Verify withC:\dev\lk.exe sip inbound list --project cwa-voice— Authentication column must be blank. Seeknowledge/runbooks/voice-provisioning.mdfor the clear-auth curl pattern. -
555-prefix demo numbers undiallable: Demo seeder rows sometimes use +1-NPA-555-XXXX placeholders. These cannot receive real PSTN calls. Always query
church_voice_agents.twilio_phone_numberand check pattern^\+1\d{3}555\d{4}$before directing anyone to dial. Route fictional demos via the Demo Router (+14696152221). Seememory/feedback_555_phone_numbers_are_fake.md. -
Cartesia TTS vendor risk: Cartesia had a 5-day outage (SDK 0.2.4 + wrapper crash) that would have silenced all voice agents. The voice agent uses Cartesia Sonic via the LiveKit plugin. If TTS goes silent, callers hear nothing. Monitor Cartesia status page at launch. See
memory/project_cartesia_vendor_risk.md. -
Welcome email provisioning gap (inner try/catch issue): If the welcome email step inside
provisionNewChurch()fails all 3 retries, the inbox row is markedsucceededbut the customer never receives their magic link. Monitorprovisioning_summaryfield onstripe_webhook_inboxrows for partial failures. Fix tracked in webhook inbox follow-up PR. -
Wrong church greeting plays:
session.py:resolve_route()maps phone number → church UUID viaPHONE_REGISTRYdict first, then DB fallback. If a new number is provisioned but the agent is not redeployed and the number is not inPHONE_REGISTRY, the DB fallback handles it automatically. If the greeting is wrong, checkchurch_voice_agents.welcome_greetingandPHONE_REGISTRYmapping invoice-agent-livekit/session.py.