Configuration
Integrations
Vaani Voice
Answers the call (Input layer), calls our tool endpoint mid-call, and posts call events.
Needs
VAANI_API_KEYVAANI_AGENT_IDVOICE_TOOL_SECRETVAANI_WEBHOOK_TOKEN
- Create the agent and paste the generated prompt (npm run vaani:tools prints the tool definitions).
- Add the six custom cURL tools pointing at /api/voice/tools/aangan-workflow-action with the X-Aangan-Tool-Key header.
- Settings -> Webhooks: add the webhook URL below (with ?token=).
- Settings -> Telephony: provision or connect a number and assign it to the agent for inbound calls.
Open point: Vaani's public docs do not specify the custom-tool placeholder syntax or signing for call webhooks. Both must be confirmed in the dashboard (see docs/vaani-integration.md).
Google Gemini
Post-call extraction, summaries and the transcript compliance audit. Never decides qualification.
Needs
GEMINI_API_KEYGEMINI_MODEL (optional)
- Create a key in Google AI Studio and use a paid-tier key for production volumes.
HubSpot
Contact + call note per enquiry, including declined calls.
Needs
HUBSPOT_ACCESS_TOKEN
- Create a Private App with scopes crm.objects.contacts.read/write and crm.schemas.contacts.read/write.
- Run npm run hubspot:setup once to create the aangan_* properties (existing ones are never duplicated).
Open point: Deal creation is optional and needs HUBSPOT_CREATE_DEALS plus the pipeline and stage IDs.
Calendar (Cal.com or Calendly)
Real availability lookup and booking through the provider's API; the provider emails the confirmation.
Needs
CALCOM_API_KEY (free) or CALENDLY_ACCESS_TOKEN (paid plan)CALENDAR_PROVIDER (optional)an event type per designer (Settings -> Team)
- Cal.com (free): create an API key under Settings -> Security, create an event type (turn OFF 'requires confirmation') and put its id in Settings -> Team as calcom:<id>.
- Calendly: needs a paid plan (Standard+); the booking endpoint returns 403 on Free. Paste each event type URI in Settings -> Team.
Open point: Cal.com's free plan has a single host, so every consultation lands on one shared calendar; the designer is named in our handoff email. Confirm that the provider's notification emails to the invitee (and host) are enabled.
Email (Resend)
Handoff and escalation emails to designers, front desk and senior people.
Needs
RESEND_API_KEYEMAIL_FROMFRONT_DESK_EMAILSENIOR_ESCALATION_EMAIL
- Verify a sending domain in Resend; the test sender can only reach the account owner.
- Set EMAIL_TEST_RECIPIENT during the pilot to redirect every message to one inbox.
Neon PostgreSQL
Persistent storage for calls, qualification evidence, bookings, jobs and costs.
Needs
DATABASE_URL (pooled connection string)
- Use the pooled connection string from the Neon console, not the management API key.
- Run npm run db:migrate before first start.
Endpoints to register
Public URLs only. Append the secret values yourself; they are not shown.
- Live tool endpoint (Vaani custom tools)
https://aangan-studio-lyart.vercel.app/api/voice/tools/aangan-workflow-actionVOICE_TOOL_SECRET set- Call-event webhook (Vaani Settings → Webhooks)
https://aangan-studio-lyart.vercel.app/api/voice/webhooks/vaani?token=…secret set- Job runner (cron)
https://aangan-studio-lyart.vercel.app/api/jobs/runCRON_SECRET set- Sessions
- SESSION_SECRET set
Connection checks
Makes one harmless authenticated call per live integration. Simulated integrations are reported as not live - never as healthy.
Background jobs: 0 pending, 0 retrying, 0 dead. Emails in the last 24 hours: 0 sent, 0 failed.
Business knowledge loaded
Read from content/knowledge on the server. pricing.md is used only for the approved deflection sentence; its price tables are never loaded into prompts, APIs or this page.
services.mdloadedqualified.mdloadedpricing.mdloaded- Approved pricing response matches pricing.mdverified
Recent integration failures
No failures recorded.