USE CASE · SALES / LEAD QUAL
Lead qualification.
Inbound lead fills out a form. Your agent fires a qualification call within 60 seconds. OpenPhn extracts BANT signals and scores. Your CRM gets a hot/warm/cold tag and a transcript link.
OUTCOME SCHEMA
What comes back.
Declare the shape up front. OpenPhn fills every field it can, leaves optional fields null when it can't, and flags low-confidence extractions.
- ◆Speed-to-lead under 60 seconds end-to-end
- ◆Structured disposition + transcript URL in the webhook
- ◆Never leaves a voicemail for leads marked Do-Not-Contact
OUTCOME SCHEMA
{
qualified: { type: "boolean" },
budget_usd: { type: "number", optional: true },
timeline: { type: "enum", values: ["immediate", "30d", "90d", "research"], optional: true },
decision_maker: { type: "boolean", optional: true },
pain_point: { type: "string", optional: true },
disposition: { type: "enum", values: ["hot", "warm", "cold", "disqualified"] },
}THE FULL CALL
From objective to outcome.
REQUEST
import { OpenPhn } from "openphn"
const client = new OpenPhn({ apiKey: process.env.OPENPHN_KEY! })
const call = await client.calls.create({
to: "+14155551234",
objective: "Qualify this inbound lead for our enterprise SaaS. Confirm budget, timeline, decision-maker status, and primary pain. Return disposition.",
outcomeSchema: {
qualified: { type: "boolean" },
budget_usd: { type: "number", optional: true },
timeline: { type: "enum", values: ["immediate", "30d", "90d", "research"], optional: true },
decision_maker: { type: "boolean", optional: true },
pain_point: { type: "string", optional: true },
disposition: { type: "enum", values: ["hot", "warm", "cold", "disqualified"] },
},
consentType: "existing_business_relationship",
})
// call.outcome: qualified, budget_usd, timeline, decision_maker, pain_point, dispositionWEBHOOK BODY · outcome
{
"qualified": true,
"budget_usd": 50000,
"timeline": "30d",
"decision_maker": true,
"pain_point": "Compliance review bottleneck",
"disposition": "hot"
}