Why CRM Integration Matters
Eliminate Manual Updates
Without integration, agents must manually update lead status, paste call notes, and attach recordings after each call — at scale, this is unsustainable and introduces data lag.
Real-Time Lead Status
With webhooks, your CRM reflects the call outcome seconds after the call ends — “interested” contacts move to Hot Lead instantly, so your sales team can act while intent is fresh.
Full Conversation Context
Push transcripts, QA scores, and NeuronLens summaries directly to the contact record so anyone on your team has the full picture without listening to a recording.
Closed-Loop Reporting
Combine VInfer disposition data with your CRM pipeline metrics to measure actual revenue impact of your outbound and inbound campaigns end to end.
Integration Methods
- Webhooks (Recommended)
- REST API Polling
- Native Connectors
VInfer sends an HTTP POST to your CRM endpoint immediately after each call event. This is the fastest integration method — your CRM is updated within seconds of a call completing, with no polling overhead.Best for: Real-time lead status updates, immediate follow-up workflows, and high-volume campaigns where polling delays are unacceptable.
Setting Up Webhook-Based CRM Sync
Your CRM (or a middleware tool like Zapier, Make, or a custom API server) must expose a public HTTPS endpoint that can receive POST requests from VInfer. This endpoint will receive a JSON payload for each call event.
/api/vinfer-events and ensure it’s accessible over HTTPS from the public internet.Your endpoint must return a
200 OK HTTP response within 10 seconds of receiving the request. VInfer will retry delivery up to 3 times with exponential backoff if it receives a non-2xx response or a timeout.call.completedcall.disposition_setcall.escalatedcall.transcription_readycampaign.completedSubscribe only to the events you actually need. Subscribing to all events on high-volume campaigns generates a large number of webhook deliveries — if your endpoint has processing overhead, narrow your subscription to the events that drive CRM actions.
Every webhook request VInfer sends includes an
X-VInfer-Signature header. Always verify this signature before processing the payload — it confirms the request genuinely came from VInfer and hasn’t been tampered with.VInfer generates the signature using HMAC-SHA256 of the raw request body, keyed with the
secret you provided during webhook registration.Always use a timing-safe comparison function (like
hmac.compare_digest in Python or crypto.timingSafeEqual in Node.js) when comparing signatures. Standard string equality is vulnerable to timing attacks.VInfer uses its own set of disposition values. You need to translate these to the corresponding field values in your CRM. Do this mapping in Settings → Integrations → CRM Mapping in the VInfer dashboard, or handle it in your webhook processing logic.
interestedcallback_requestednot_interestednot_reachabledisputepayment_promisedalready_paidIf you use the dashboard mapping tool, VInfer automatically translates dispositions before sending the webhook payload — your CRM receives the mapped values directly and requires no transformation logic.
Here is an example
call.completed event payload. Use this as a reference when building your webhook handler:{
"event": "call.completed",
"call_id": "call_abc123",
"campaign_id": "camp_xyz456",
"contact": {
"phone": "+919876543210",
"name": "Priya Sharma"
},
"disposition": "interested",
"duration_seconds": 145,
"language": "hi-IN",
"timestamp": "2024-01-15T10:35:22Z",
"transcript_url": "https://api.vinfer.ai/v1/transcription/job_def789/transcript",
"neuronlens": {
"sentiment": "positive",
"qa_score": 87,
"summary": "Customer confirmed interest in the top-up loan product. Requested a callback from the sales team before 3 PM today."
}
}
On call.completed
- Find the contact record by matching
contact.phone - Update Lead Status using the disposition mapping
- Log a call activity with
duration_seconds,language, andtimestamp - Attach the
transcript_urlto the contact record for one-click access - Store
call_idin a custom field for future API lookups - If
dispositioniscallback_requested, create a follow-up task with the requested callback time
On call.transcription_ready
Fetch the full transcript from
transcript_url using your API key and attach it as a note to the contact record. This fires a few minutes after call.completed since transcription processing takes additional time.REST API Polling
If webhooks aren’t an option, poll the VInfer API on a schedule to fetch completed calls:after parameter to fetch only calls completed since your last poll timestamp. Store the timestamp of the most recent call you processed and use it as after in your next poll to avoid re-processing records.
If you poll frequently (every 1–2 minutes) on high-volume campaigns, be mindful of API rate limits. Check your account’s rate limit headers (
X-RateLimit-Remaining) in the response and back off if you approach the limit.Storing the Call ID in Your CRM
With thecall_id, you can fetch any call’s full details at any time: