Make
This follows the three moves in How every recipe works.
Scenario 1: send new leads
Section titled “Scenario 1: send new leads”Start with your CRM’s “Watch new contacts” module, then add HTTP > Make a request:
| Setting | Value |
|---|---|
| URL | https://v2-api.callview.ai/api/v1/external/leads |
| Method | POST |
| Headers | Authorization = Bearer cs_live_..., Idempotency-Key = make- plus the contact’s ID |
| Body type | Raw, with content type JSON (application/json) |
| Request content | The JSON from How every recipe works, with your fields mapped in |
| Parse response | Yes |
Add an error handler for the HTTP module. A 409 (already sent) or 422 (on the Do Not Call list, say) is an answer: ignore it. A 429 or 5xx can be retried: use Make’s Break directive so it tries again later.
Scenario 2: write outcomes back
Section titled “Scenario 2: write outcomes back”- Start with Webhooks > Custom webhook, and copy the address it gives you.
- Point a CallView webhook endpoint at it, with
"events": ["call.completed", "lead.opted_out"]. Send a sample withPOST /webhook_endpoints/{id}/testso Make learns the fields. - Add a Router with one route for
type=call.completedand one forlead.opted_out. - On the
call.completedroute, use your CRM’s “Search contacts” bydata.object.lead.external_id, then “Update a contact” withdata.object.outcome,data.object.noteanddata.object.handled_by.name. - On the
lead.opted_outroute, mark the contact do-not-call.
To check the signature in Make, turn on “Get request headers” and “JSON pass-through” in the webhook’s advanced settings, so you have the raw body and the CallView-Signature header. Then compare v1 with sha256(t + "." + body; "hex"; your whsec_ secret) and stop the scenario when they differ, or when t is more than 5 minutes old. If that’s more than you want to build, keep the webhook address private.