मकसद: Meta, Google Ads और आपकी website से आए consent वाले inbound leads को qualified sales conversations, tracked follow-ups और human handoffs में बदलना। ये एक engineering blueprint है; ये पूरी तरह autonomous selling का वादा नहीं, और automated telemarketing की legal approval भी नहीं।
आप क्या बनाएँगे
Meta Lead Ads / Google Ads Lead Forms / Website CRM → n8n intake → normalization, consent gate और deduplication → source of truth के तौर पर PostgreSQL/Supabase → Google Sheets reporting mirror → call queue → India का compliant voice/telephony route + Vapi/Retell conversational agent → signed post-call webhook → transcript और qualification → callback scheduling या sales handoff → dashboard.
- V1: एक source, एक offer, English/Hindi language, एक approved voice provider, 20-50 internal या consent वाले test leads.
- V2: multi-source attribution, lead scoring, retry scheduling, human assignment, booking, reporting.
- V3: CRM integrations, analytics, experiments और production call volume पर monitoring.
Architecture: कौन-सा tool क्या करता है
| Component | Recommended implementation | ज़िम्मेदारी |
|---|---|---|
| Workflow engine | n8n cloud या self-hosted | Events लेना, rules लगाना, APIs call करना, jobs schedule करना |
| AI coding helper | Claude Code (optional) | Mapping functions, webhook adapters, tests, deployment लिखना |
| Operational database | PostgreSQL / Supabase | Canonical leads, immutable call attempts, consent events |
| Business interface | Google Sheets | Simple live view और manual बदलाव; authoritative queue नहीं |
| Voice agent | Vapi या Retell AI | Speech, dialogue, transcription, extraction |
| Telephony | India-authorized provider/route | Legal commercial calling numbers, delivery और connectivity |
| Notifications | CRM/email/approved WhatsApp | Human follow-up और appointments |
Workflow engine
- Recommended implementation
- n8n cloud या self-hosted
- ज़िम्मेदारी
- Events लेना, rules लगाना, APIs call करना, jobs schedule करना
AI coding helper
- Recommended implementation
- Claude Code (optional)
- ज़िम्मेदारी
- Mapping functions, webhook adapters, tests, deployment लिखना
Operational database
- Recommended implementation
- PostgreSQL / Supabase
- ज़िम्मेदारी
- Canonical leads, immutable call attempts, consent events
Business interface
- Recommended implementation
- Google Sheets
- ज़िम्मेदारी
- Simple live view और manual बदलाव; authoritative queue नहीं
Voice agent
- Recommended implementation
- Vapi या Retell AI
- ज़िम्मेदारी
- Speech, dialogue, transcription, extraction
Telephony
- Recommended implementation
- India-authorized provider/route
- ज़िम्मेदारी
- Legal commercial calling numbers, delivery और connectivity
Notifications
- Recommended implementation
- CRM/email/approved WhatsApp
- ज़िम्मेदारी
- Human follow-up और appointments
Setup से पहले: prerequisites और compliance
- Google account, Google Sheet, n8n workspace, Meta Business permissions, lead forms वाला Google Ads account (जहाँ लागू हो), approved voice platform के API credentials, और business-approved telecom provider.
- Consent calling के मकसद के लिए specific हो, और उसमें timestamp, wording/version, form, advertiser, channel और proof दर्ज हो। Scraped phone numbers लेकर अपने आप dial मत कीजिए।
- India के लिए Principal Entity / DLT registration, registered commercial number series और provider route, preference/consent handling, अनुमति वाले calling windows, voice-recording notices और लागू DPDP obligations counsel और provider के साथ validate कीजिए।
- Privacy notice publish कीजिए; शुरुआत में ही बताइए कि ये AI assistant है और human से बात करने या opt-out का आसान रास्ता दीजिए। जहाँ लागू हो, बताइए कि call record हो रही है। Opt-out पर तुरंत रुकिए।
- Least-privilege API keys, encrypted secrets, private transcript storage, retention और deletion policies, role-based access, और webhook authentication.
पहले lead data model design कीजिए
Sheet tab: Leads (business-friendly mirror)
| Column | Example / मतलब |
|---|---|
| lead_id | Internal UUID; unique और immutable |
| source / source_lead_id | META / GOOGLE / WEB और provider ID |
| name / phone_e164 | Customer का display name; +91XXXXXXXXXX |
| campaign / adset / ad | UTM या ad platform metadata |
| created_at / consent_at | UTC ISO timestamps |
| consent_status / consent_proof | VERIFIED / MISSING / REVOKED; stored reference |
| lead_status | NEW / QUEUED / CALLING / CALLBACK / QUALIFIED / LOST / DNC |
| attempt_count / last_call_at | Counters, UTC |
| next_call_at / timezone | Scheduled time; Asia/Kolkata |
| qualification_score | 0-100; rubric और evidence के साथ |
| owner / next_action | Salesperson या automated follow-up |
| latest_summary / transcript_link | छोटा summary + secure access URL |
lead_id
- Example / मतलब
- Internal UUID; unique और immutable
source / source_lead_id
- Example / मतलब
- META / GOOGLE / WEB और provider ID
name / phone_e164
- Example / मतलब
- Customer का display name; +91XXXXXXXXXX
campaign / adset / ad
- Example / मतलब
- UTM या ad platform metadata
created_at / consent_at
- Example / मतलब
- UTC ISO timestamps
consent_status / consent_proof
- Example / मतलब
- VERIFIED / MISSING / REVOKED; stored reference
lead_status
- Example / मतलब
- NEW / QUEUED / CALLING / CALLBACK / QUALIFIED / LOST / DNC
attempt_count / last_call_at
- Example / मतलब
- Counters, UTC
next_call_at / timezone
- Example / मतलब
- Scheduled time; Asia/Kolkata
qualification_score
- Example / मतलब
- 0-100; rubric और evidence के साथ
owner / next_action
- Example / मतलब
- Salesperson या automated follow-up
latest_summary / transcript_link
- Example / मतलब
- छोटा summary + secure access URL
Database tables (recommended)
leads: lead_id PK, source, source_lead_id, normalized phone, campaigns, details, consent_state, lifecycle_state, due_at, assigned_to, version, created_at.consent_events: event_id, lead_id, channel, purpose, notice_version, proof_id, event_type, timestamp.call_attempts: attempt_id, lead_id, provider_call_id UNIQUE, started_at, ended_at, transport_disposition, dialog_outcome, duration, cost, transcript_ref, recording_ref, raw_payload_ref.followup_jobs: job_id, lead_id, due_at, reason, status, idempotency_key UNIQUE, cancellation_reason.audit_events: actor, event, old_state, new_state, idempotency key और timestamp.
(source, source_lead_id) से deduplicate कीजिए; चाहें तो normalized phone + advertiser से repeat enquiries correlate कीजिए। अलग-अलग consent purposes या businesses को एक मत कीजिए। एक ही lead को की गई सारी calls की पूरी history रखिए।
{
"lead_id":"uuid", "source":"GOOGLE",
"source_lead_id":"123456", "phone_e164":"+919876543210",
"name":"Asha", "purpose":"Demo request",
"consent_status":"VERIFIED", "consent_proof":"proof://...",
"lead_status":"NEW", "timezone":"Asia/Kolkata"
}Workflow A: Meta Ads से leads
- 1Meta Instant Form बनाकर publish कीजिए, जिसमें contact/AI-calling की साफ़, specific consent और privacy-policy URL हो। Meta के lead testing tools से test कीजिए।
- 2n8n में workflow “A: Meta Intake” बनाइए। Facebook Lead Ads Trigger जोड़िए, Meta credentials connect कीजिए और page/form व
New Leadevent चुनिए। - 3Credentials/node configuration के हिसाब से ज़रूरत हो तो लौटी हुई lead identity से पूरे form fields निकालिए।
- 4Set/Edit Fields: name, phone, source_lead_id, form ID, campaign identifiers, consent proof और created time को standard lead schema पर map कीजिए।
- 5Shared "Normalize → Validate → Deduplicate → Consent" sub-workflow से गुज़ारिए।
- 6Database में upsert कीजिए; mirror Sheet में lead_id से append/update कीजिए; queue में तभी डालिए जब अनुमति हो।
- 7Workflow activate कीजिए और production subscription, duplicate events, invalid numbers, missing consent और हटाई गई permissions test कीजिए।
Meta integration के details और permissions बदल सकते हैं; n8n Facebook Lead Ads Trigger का documentation इस्तेमाल कीजिए। Activate होने पर ये node अपना webhook verification खुद संभालता है; इस n8n trigger के लिए अलग से कोई मनमाना verify token मत बनाइए।
Workflow B: Google Ads से leads
- 1n8n में unique HTTPS path पर production Webhook node (POST) जोड़िए, जैसे
/webhook/google-leads. Production URL इस्तेमाल करने से पहले workflow activate कीजिए। - 2Google Ads lead form webhook configuration में production webhook URL और secret verification key डालिए।
- 3n8n में request key को credential/environment variable में रखे secret से exactly match कीजिए, और invalid submissions reject कीजिए। अगर documented हो तो IP/provider verification भी जोड़िए।
- 4
lead_id,campaign_id,form_idऔरuser_column_dataपढ़िए।column_id/string_valuepairs को normalized fields पर map कीजिए। - 5Google lead form lead_id से deduplicate कीजिए, consent wording/metadata सुरक्षित रखिए, फिर database और Sheets में लिखिए और eligible records queue में डालिए।
- 6Google का test-lead flow चलाइए; success responses और जानबूझकर reject किए गए invalid test requests, दोनों verify कीजिए।
Google का lead form webhook documentation lead_id को deduplication key बताता है और JSON format व secret key समझाता है। Google lead forms हर Google Ads conversion type से अलग हैं; हर Google Ads click lead-form webhook नहीं भेजता।
Workflow C: website forms और external CRM
- 1ऐसा backend endpoint बनाइए जो server-to-server lead submissions ले, arbitrary clients का बिना validate किया public JSON नहीं।
- 2Origin authentication, captcha/abuse controls, consent status, rate limits, phone और email format check कीजिए।
- 3Signed payload n8n webhook को भेजिए, UTMs और inquiry product map कीजिए, raw event reference store कीजिए और lead upsert कीजिए।
- 4CRM sources के लिए official trigger/webhook या scheduled API sync इस्तेमाल कीजिए, cursor store कीजिए और source API quotas का ध्यान रखिए।
Shared normalization और queue rules
- 1Phone को E.164 (+91…) में normalize कीजिए, whitespace हटाइए, expected fields check कीजिए, और test/spam/bot submissions reject कीजिए। ये मत मानिए कि हर 10-digit string valid Indian mobile है।
- 2Transaction में upsert कीजिए; idempotency key रखिए, जैसे
source:source_lead_id. - 3Consent proof, अनुमति वाले calling purpose, approved number/route, suppression list, time window और max attempts से gate कीजिए।
- 4Unique idempotency key के साथ एक PENDING queue job डालिए; processing lock या atomic claim रखिए ताकि एक साथ दो calls न हों।
- 5Outcome Sheets में लिखिए, पर Sheets की row edit से call तभी शुरू हो जब वो इन्हीं rules से पास हो।
Workflow D: call शुरू करना
- 1Company के verified knowledge base, boundaries, call script और structured-output schema के साथ Vapi या Retell assistant बनाइए।
- 2Approved caller number/telephony integration और Indian recipients के लिए outbound dialing की permission लीजिए।
- 3n8n में scheduled dispatcher बनाइए (जैसे हर कुछ मिनट में) जो due jobs atomically चुने; concurrent calls और API request rates सीमित रखिए।
- 4Transaction में lead state CALLING कीजिए; assistant_id, phone number और lead_id metadata के साथ provider को outbound-call POST भेजिए।
- 5Provider का call_id तुरंत save कीजिए; API fail हो तो attempt को API_ERROR mark कीजिए और infrastructure failures को exponential backoff से retry कीजिए, customer का no-answer मानकर नहीं।
- 6Transport progress के लिए provider status webhooks इस्तेमाल कीजिए, और webhook न पहुँचे तो बाद में reconciliation कीजिए।
POST https://api.vapi.ai/call
Authorization: Bearer <SERVER_SIDE_API_KEY>
Content-Type: application/json
{
"assistantId": "<YOUR_ASSISTANT_ID>",
"phoneNumberId": "<APPROVED_CALLER_NUMBER_ID>",
"customer": {"number": "+919876543210"},
"metadata": {"lead_id": "<UUID>", "attempt_id": "<UUID>"}
}Live deployment में sample identifiers copy मत कीजिए। Current API specification, webhook event payloads और supported India routing अपने provider से confirm कीजिए।
AI agent conversation design
Agent अपनी organization और AI पहचान बताए, व्यक्ति और request confirm करे, आगे बात करने की अनुमति माँगे, और enquiry qualify करने भर की जानकारी विनम्रता से ले। कभी human होने का दिखावा नहीं, price/availability गढ़ना नहीं, discounts का वादा नहीं, और calendar confirmation से पहले meeting booked मानना नहीं।
VOICE AGENT - SYSTEM PROMPT (starter)
You are an AI sales assistant for [BUSINESS].
Open: "Namaste, I am [AI NAME], an AI calling assistant from [BRAND].
You recently asked us about [OFFER]. Is this a convenient time?"
Speak naturally in Hindi or English, following the customer's preference.
If customer is busy, ask for a specific callback day/time and confirm timezone.
If interested, ask: use case, requirement, budget range, timeline, location, decision-maker, and next step; only ask applicable questions.
Read only verified product facts supplied by the approved knowledge base.
If customer asks for a human, hand off or log HUMAN_REQUESTED.
If customer refuses calls, say you will stop and set DO_NOT_CALL.
Never pressure, repeatedly object, or claim an appointment is booked without tool confirmation.
Before ending, summarize the agreed next step.Structured outcomes: सबसे ज़रूरी design element
एक ही overloaded status मत रखिए। दोनों save कीजिए: transport disposition (answered, no_answer, busy, voicemail, failed, unknown) और conversational outcome (interested, callback_requested, not_interested, do_not_call, wrong_number, human_requested, qualified, unqualified, ambiguous). No-answer provider termination/telephony metadata से तय कीजिए, transcript के hallucinated analysis से नहीं।
JSON Schema/structured extraction इस्तेमाल कीजिए और result validate कीजिए। Model output न हो या contradictory हो तो UNKNOWN store कीजिए। Post-call निकाले गए fields तब तक hypothesis हैं जब तक transcript का evidence न हो; appointment तभी confirmed है जब calendar/CRM confirm करे।
{
"dialog_outcome":"callback_requested",
"summary":"Asked for a call on Friday after 3pm",
"interest_level":"warm",
"budget_inr":null,
"timeline":"within_30_days",
"need":"Salon marketing leads",
"decision_maker":true,
"callback_requested_at":"2026-10-23T15:30:00+05:30",
"opt_out":false,
"handoff_required":false,
"evidence":"Customer said: please call Friday afternoon",
"confidence":"high"
}Workflow E: call ख़त्म → transcription → update
- 1Authenticated POST webhook endpoint के साथ "E: Call Outcome" workflow बनाइए। Provider का authentication/signature/credential documentation के मुताबिक़ validate कीजिए; कोई universal signature header मत मानिए।
- 2provider_call_id और attempt_id पहचानिए; accepted events तुरंत acknowledge कीजिए, फिर ज़रूरत हो तो asynchronously process कीजिए।
- 3Raw event reference store कीजिए; event ID या provider_call_id + event type/version से processing idempotent बनाइए।
- 4End-of-call report, transcript, duration, recording reference और structured outputs पढ़िए। Retell में call_ended और call_analyzed events अलग-अलग आ सकते हैं; analysis तैयार होने से पहले action लेने की बजाय reconcile कीजिए।
- 5Outcome JSON validate कीजिए और transport disposition से मिलाइए; voicemail को कभी qualified मत लिखिए।
- 6call_attempts record update कीजिए, lead status फिर से निकालिए, अनुमति हो तो callback queue कीजिए, assigned salesperson को बताइए, फिर Sheets में mirror कीजिए।
- 7Failure पर dead-letter event record कीजिए और operator को alert कीजिए; छूटे webhooks के लिए scheduled reconciliation provider से call details लाए।
Workflow F: callback और retry scheduler
नीचे की retry policy एक conservative business design का example है, legal calling limits का statement नहीं। Local provider/carrier rules और customer की बताई limits लागू कीजिए। Callback बनने के बाद पक्का कीजिए कि सिर्फ़ एक active due job हो, और opt-out आते ही उसे cancel कीजिए।
| Situation | Automated action | Safety guardrail |
|---|---|---|
| No answer | किसी दूसरे सही समय पर retry | Example policy: 2 extra attempts तक, अंतर रखकर; total पर cap |
| Busy | बाद में schedule | तुरंत दोबारा dial नहीं |
| "कल 4 बजे call करना" | Exact requested callback set | Date, timezone और calling window का सम्मान |
| "बाद में call करना" (समय नहीं) | Specific समय पूछिए; वरना human review | Appointment गढ़िए मत |
| Qualified / hot | Human assign करके notify | Summary के साथ handoff, बार-बार robocalls नहीं |
| Not interested / DNC | आगे की outreach suppress | उस purpose के लिए तुरंत permanent opt-out |
| Wrong number | Number suppress | कोई retry नहीं |
| Provider API error | Backoff के साथ operational retry | Customer contact attempt में नहीं गिना जाता |
No answer
- Automated action
- किसी दूसरे सही समय पर retry
- Safety guardrail
- Example policy: 2 extra attempts तक, अंतर रखकर; total पर cap
Busy
- Automated action
- बाद में schedule
- Safety guardrail
- तुरंत दोबारा dial नहीं
"कल 4 बजे call करना"
- Automated action
- Exact requested callback set
- Safety guardrail
- Date, timezone और calling window का सम्मान
"बाद में call करना" (समय नहीं)
- Automated action
- Specific समय पूछिए; वरना human review
- Safety guardrail
- Appointment गढ़िए मत
Qualified / hot
- Automated action
- Human assign करके notify
- Safety guardrail
- Summary के साथ handoff, बार-बार robocalls नहीं
Not interested / DNC
- Automated action
- आगे की outreach suppress
- Safety guardrail
- उस purpose के लिए तुरंत permanent opt-out
Wrong number
- Automated action
- Number suppress
- Safety guardrail
- कोई retry नहीं
Provider API error
- Automated action
- Backoff के साथ operational retry
- Safety guardrail
- Customer contact attempt में नहीं गिना जाता
Qualification scoring rubric (example, बदल सकते हैं)
| Criterion | Points |
|---|---|
| Need, offer से मेल खाती है | 0-25 |
| खरीदने का timeframe | 0-20 |
| Budget/financial fit | 0-20 |
| Decision role | 0-15 |
| Meeting या proposal लेने का इरादा | 0-20 |
Need, offer से मेल खाती है
- Points
- 0-25
खरीदने का timeframe
- Points
- 0-20
Budget/financial fit
- Points
- 0-20
Decision role
- Points
- 0-15
Meeting या proposal लेने का इरादा
- Points
- 0-20
Example routing: 70-100 HOT → priority queue में human sales; 40-69 WARM → माँगा गया callback या relevant nurture; 0-39 COLD → बिना legitimate, consent वाली वजह के बार-बार automated calls नहीं। हर attribute का supporting evidence रखिए; accent, gender, नाम या किसी और sensitive trait से budget का चुपचाप अंदाज़ा कभी मत लगाइए।
Sample live dashboard
Formulas/pivots बनाइए: source के हिसाब से leads, contact rate, meaningful conversations, qualification rate, booked-and-confirmed appointments, असली sales, cost per qualified lead, response time, opt-out percentage, provider failure percentage. Denominators ध्यान से तय कीजिए: “answered” का मतलब “human conversation” नहीं, और “appointment का ज़िक्र” का मतलब “appointment booked” नहीं।
| Lead | Source | Attempt | Disposition | Outcome | Next action |
|---|---|---|---|---|---|
| Asha | Meta | 1 | answered | callback_requested | Fri 3:30 PM |
| Rohan | 1 | no_answer | - | सीमित permitted retry | |
| Meera | Website | 1 | answered | qualified (82) | Human handoff |
| Kabir | Meta | 1 | answered | do_not_call | Suppressed |
| Priya | Website | 0 | - | नया consent वाला lead | Queue |
Asha
- Source
- Meta
- Attempt
- 1
- Disposition
- answered
- Outcome
- callback_requested
- Next action
- Fri 3:30 PM
Rohan
- Source
- Attempt
- 1
- Disposition
- no_answer
- Outcome
- -
- Next action
- सीमित permitted retry
Meera
- Source
- Website
- Attempt
- 1
- Disposition
- answered
- Outcome
- qualified (82)
- Next action
- Human handoff
Kabir
- Source
- Meta
- Attempt
- 1
- Disposition
- answered
- Outcome
- do_not_call
- Next action
- Suppressed
Priya
- Source
- Website
- Attempt
- 0
- Disposition
- -
- Outcome
- नया consent वाला lead
- Next action
- Queue
Google Sheets implementation detail
- 1Leads, Call_Attempts, Followups, Source_Performance और Config (कोई secrets नहीं) tabs वाली spreadsheet बनाइए।
- 2n8n Google Sheets OAuth credential जोड़िए; Leads के लिए append-only की जगह stable lead_id से Append or Update Row इस्तेमाल कीजिए।
- 3Attempts को Call_Attempts में attempt_id key वाली अलग rows में रखिए; transcripts/history को latest-only fields से कभी overwrite मत कीजिए।
- 4अगर agents rows edit करते हैं, तो protected columns, सीमित edit fields (owner, manual notes) और साफ़ sync conflict resolution तय कीजिए।
- 5Phone/consent/recordings secured system में रखिए; spreadsheet sharing सीमित रखिए और transcript को permission वाले URL से link कीजिए।
Claude Code: coding कहाँ मदद करती है
- user_column_data के लिए unit-tested Google payload mapping लिखना; unknown fields पर ingestion न टूटे।
- Maintained library से E.164 phone parsing, webhook verification, event idempotency और async queue adapters.
- जहाँ भरोसेमंद built-in node न हो, वहाँ custom n8n Code-node functions.
- Post-call structured outputs के लिए JSON Schema, और Hindi/English examples, अधूरी बातचीत व ambiguous dates के tests.
- Database migrations, minimal admin dashboard और monitoring checks.
- Production से पहले generated code, secrets, provider API permissions और tests review कीजिए; Claude Code human security review की जगह नहीं लेता।
Failure handling और test matrix
| Case | क्या होना चाहिए |
|---|---|
| Duplicate Meta/Google lead event | ठीक एक lead और एक pending initial call |
| Blank/invalid phone | बिना call reject; वजह record |
| Consent missing या revoked | कोई dialing नहीं |
| दो concurrent schedulers | एक atomic claim, एक dial |
| Voicemail / busy / no-answer / human answers | अलग-अलग status और actions |
| "Friday call करना" / "Friday 3 के बाद" / "अगले हफ़्ते" | Timezone-aware date resolution और confirmation |
| "मुझे दोबारा call मत करना" | तुरंत suppression, सारे pending jobs समेत |
| Retell post-call analysis देर से / Vapi output skipped | Reconcile होने तक UNKNOWN |
| Webhook repeats, provider timeouts, stale credentials, API quota ख़त्म | Idempotent processing और alert |
| Agent appointment गढ़ देता है | Scheduling backend confirm करे तब तक reject |
| Hindi/English switch, बीच में बोलना, background noise, नाराज़ customer, human transfer request | Test cases में शामिल |
Duplicate Meta/Google lead event
- क्या होना चाहिए
- ठीक एक lead और एक pending initial call
Blank/invalid phone
- क्या होना चाहिए
- बिना call reject; वजह record
Consent missing या revoked
- क्या होना चाहिए
- कोई dialing नहीं
दो concurrent schedulers
- क्या होना चाहिए
- एक atomic claim, एक dial
Voicemail / busy / no-answer / human answers
- क्या होना चाहिए
- अलग-अलग status और actions
"Friday call करना" / "Friday 3 के बाद" / "अगले हफ़्ते"
- क्या होना चाहिए
- Timezone-aware date resolution और confirmation
"मुझे दोबारा call मत करना"
- क्या होना चाहिए
- तुरंत suppression, सारे pending jobs समेत
Retell post-call analysis देर से / Vapi output skipped
- क्या होना चाहिए
- Reconcile होने तक UNKNOWN
Webhook repeats, provider timeouts, stale credentials, API quota ख़त्म
- क्या होना चाहिए
- Idempotent processing और alert
Agent appointment गढ़ देता है
- क्या होना चाहिए
- Scheduling backend confirm करे तब तक reject
Hindi/English switch, बीच में बोलना, background noise, नाराज़ customer, human transfer request
- क्या होना चाहिए
- Test cases में शामिल
Rollout plan
Timelines illustrative work packages हैं, deployment speed का वादा नहीं। Lead form/app permissions, telecom onboarding और DLT process में development से ज़्यादा समय लग सकता है।
| Stage | Deliverable | Exit condition |
|---|---|---|
| Day 1-2: foundation | Data model, consent gate, Google Sheet | Schema reviewed, manual test data काम करे |
| Day 3-4: intake | Meta और Google webhook workflows | Deduplication और test leads pass |
| Day 5-6: voice pilot | Voice platform, provider-approved route, call script | Staff-owned numbers + consent वाला pilot काम करे |
| Day 7-8: results | Post-call webhook, transcript, outcomes | Test examples पर सही review |
| Day 9: scheduler | Callbacks, attempts, suppression | Edge-case test matrix pass |
| Day 10+: pilot | छोटा audited batch, human oversight | Measured quality, legal/provider sign-off |
Day 1-2: foundation
- Deliverable
- Data model, consent gate, Google Sheet
- Exit condition
- Schema reviewed, manual test data काम करे
Day 3-4: intake
- Deliverable
- Meta और Google webhook workflows
- Exit condition
- Deduplication और test leads pass
Day 5-6: voice pilot
- Deliverable
- Voice platform, provider-approved route, call script
- Exit condition
- Staff-owned numbers + consent वाला pilot काम करे
Day 7-8: results
- Deliverable
- Post-call webhook, transcript, outcomes
- Exit condition
- Test examples पर सही review
Day 9: scheduler
- Deliverable
- Callbacks, attempts, suppression
- Exit condition
- Edge-case test matrix pass
Day 10+: pilot
- Deliverable
- छोटा audited batch, human oversight
- Exit condition
- Measured quality, legal/provider sign-off
Cost calculation: अपने provider की quotations इस्तेमाल कीजिए
Monthly cost = n8n hosting + database + voice/telephony setup + connected call minutes × (voice provider + model/ASR/TTS + carrier per-minute rates, bundled services दोबारा गिने बिना) + event/API usage + human review. Cost per successful meaningful conversation, cost per qualified lead, cost per confirmed meeting और आखिर में customer acquisition cost track कीजिए। “Cost per minute” provider, model, route, concurrency और recordings के हिसाब से काफ़ी बदलता है; numbers publish करने से पहले current Indian termination/numbering rates लीजिए।
Planning का illustrative example: 1,000 leads × 70% eligible × 1.5 औसत attempted calls = 1,050 call attempts. 35% असली conversations और हर एक 2.5 minute पर, लगभग 368 connected conversations करीब 920 connected minutes लेती हैं। ये modeling example है, forecast या price quotation नहीं।
Interactive monthly cost estimator
सिर्फ़ illustrative budget model. अपने provider के quotes डालिए; नीचे का कोई default असली market price नहीं है।
- Call attempts का अनुमान
- 1,500
- Call minutes का अनुमान
- 2,700
- Monthly खर्च का अनुमान
- ₹25,600
सिर्फ़ example. Invoices connected/attempted billing, carrier fees, model usage, STT/TTS, taxes, retries और provider plans पर निर्भर करते हैं। सारे assumptions लिखित quotes से बदलिए।
Copy-paste implementation templates
इन्हें शुरुआत के तौर पर इस्तेमाल कीजिए। Field names और payload shape अपने असली provider के current API responses से मिलाइए।
{
"lead_id": "uuid-generated-server-side",
"source": "meta | google_ads | website",
"source_lead_id": "provider-original-id",
"name": "Example Customer",
"phone_e164": "+919XXXXXXXXX",
"campaign_id": "campaign-id",
"product_interest": "Product A",
"consent": {
"status": "granted",
"purpose": "Follow up on requested product enquiry",
"recorded_at": "2026-10-20T10:00:00+05:30",
"notice_version": "v1",
"proof_reference": "form-submission-id"
},
"status": "NEW",
"attempt_count": 0,
"next_callback_at": null
}You are an AI calling assistant for [BUSINESS NAME]. You only call prospects with documented permission to be contacted about their enquiry.
OPENING: Clearly say your business name and that you are an AI assistant. Verify that you're speaking with the intended person and ask if now is a suitable time. Follow approved recording disclosure policy.
OBJECTIVE: Confirm what the person requested, understand their need, estimated budget, purchase timeline, and location, then offer a human follow-up or booking when relevant.
DO NOT: invent prices, guarantees or stock; request sensitive passwords/OTP/bank details; claim to be human; continue after an opt-out; pressure the customer.
IF BUSY: Ask for a convenient date/time with timezone; repeat it to confirm. If unspecified, mark CALLBACK_TIME_UNKNOWN and route for manual review.
IF NO INTEREST: Thank them and close. Do not reschedule.
IF DO NOT CALL: Confirm removal and immediately end.
IF QUALIFIED: Summarize need and offer handoff; only mark meeting confirmed after booking confirmation.
POST CALL: Produce structured JSON with transport_status, dialog_outcome, qualification, callback_at, notes, opt_out, confidence and evidence_quotes.{
"provider_call_id": "call_123",
"transport_status": "answered",
"dialog_outcome": "callback_requested",
"qualification": "warm",
"score": 55,
"callback_at": "2026-10-21T16:00:00+05:30",
"callback_time_confirmed": true,
"opt_out": false,
"language": "hi",
"summary": "Asked for a call tomorrow at 4pm",
"evidence_quotes": ["Please call me tomorrow at four"],
"needs_human_review": false
}FOR EACH due_job CLAIMED ATOMICALLY:
lead = fetch_lead(due_job.lead_id)
IF missing_permission OR suppressed OR opted_out: cancel_job(); CONTINUE
IF outside_allowed_window OR max_attempts_reached: defer_or_cancel(); CONTINUE
IF existing_active_call(lead): skip_duplicate(); CONTINUE
attempt = create_call_attempt(lead, state="INITIATING")
response = voice_provider.create_outbound_call(lead.phone, metadata={lead_id, attempt_id})
store_provider_call_id(attempt, response.id)
mark_call_in_progress(attempt)
ON authenticated_call_event(event):
deduplicate_event(event.id)
store_raw_event(event)
IF call_finished AND analysis_ready:
validate_structured_outcome()
update_attempt_and_lead_transactionally()
IF callback_requested AND time_confirmed AND still_consented: schedule_one_followup()
ELSE IF no_answer AND under_retry_cap: schedule_policy_retry()
ELSE IF qualified: assign_human()
ELSE: close_or_review()
update_google_sheets_mirror()Go-live checklist
हर stage पूरा होने पर tick कीजिए; progress सिर्फ़ इसी खुले browser tab में रहती है।
0 / 10 steps पूरे
Primary official sources और verification links
- n8n: Facebook Lead Ads trigger
- Google: Lead Form Webhooks overview
- Google: Lead Form Webhooks implementation
- Vapi: outbound calling
- Vapi: end-of-call webhook events
- Vapi: structured outputs
- Retell: post-call analysis
- TRAI: advice to senders
- TRAI: spam / consent guidance
- MeitY: DPDP Rules 2025
Verification: integration/API behaviour और regulations October 2026 में vendor/government sources से check किए गए। Pricing, API field names, telephony availability और लागू legal obligations production से पहले दोबारा validate कीजिए।
Educational technical blueprint. इस्तेमाल से पहले platform APIs और India की calling requirements verify कीजिए। Scraped या बिना माँगी robocalling नहीं।
