| name | build-conversational-workflow | |
|---|---|---|
| title | Build a Conversational Workflow | |
| description | Build a Telnyx Conversational Workflow for inbound auto insurance claim intake with structured branches, backend tools, and priority follow-up. | |
| language | nodejs | |
| framework | express | |
| telnyx_products | ||
| channel | ||
Build a Telnyx Conversational Workflow for inbound auto insurance first notice of loss intake. The workflow asks structured questions, branches for urgent cases, calls backend tools, and returns a claim or fallback reference to the caller.
This example is configured in the Telnyx Portal as a Conversational Workflow. The local Express app exposes webhook tool endpoints that Telnyx calls from workflow tool nodes:
Create Claim Intake Tool:POST /tools/create-claim-intake
Log Fallback Tool:POST /tools/log-claim-intake-fallback
Flag Priority Follow-Up Tool:POST /tools/flag-priority-follow-up
Inbound PSTN call
β
βΌ
ββββββββββββββββββββββββββββββ
β Telnyx Conversational β
β Workflow β
βββββββββββββββ¬βββββββββββββββ
β nodes + branches
βΌ
ββββββββββββββββββββββββββββββ
β Auto claim intake flow β
β safety, caller, loss fields β
βββββββββββββββ¬βββββββββββββββ
β workflow tool calls
βΌ
ββββββββββββββββββββββββββββββ
β Express tool server β
β /tools/create-claim-intake β
βββββββββββββββ¬βββββββββββββββ
β JSON result
βΌ
claim reference or fallback reference
- Caller reaches the Telnyx phone number assigned to the workflow.
- The workflow confirms this is a new auto claim.
- The workflow checks for injury, danger, or unsafe vehicle status.
- The workflow collects caller, policy, vehicle, and incident details.
- The workflow calls
create_claim_intake
when required fields are present. - The workflow calls
log_claim_intake_fallback
when the intake cannot be completed. - The workflow calls
flag_priority_follow_up
whenpriority_flag
is true.
Telnyx is an AI Communications Infrastructure platform that puts voice, AI, SIP, messaging, and programmable communications on one private, global network. Conversational Workflows let you build structured voice experiences with visible branches and tool calls, so operational processes like insurance claim intake are easier to audit than a single large prompt.
Insurance first notice of loss is a useful workflow pattern because it has realistic business constraints:
- the caller may be stressed
- the workflow must collect specific fields
- urgent cases need early branching
- backend records should only be created after required information is present
- the voice experience must not promise coverage, payment, repairs, liability, legal advice, or medical advice
The same structure can be reused for scheduling, support triage, lead qualification, patient intake, and service dispatch.
Copy .env.example
to .env
and fill in:
| Variable | Type | Example | Required | Description | Where to get it |
|---|---|---|---|---|---|
TELNYX_API_KEY |
|||||
string |
|||||
KEY_your_telnyx_api_key_here |
|||||
| no | Telnyx API key for Portal/API automation; the local mock tool server does not call Telnyx directly | ||||
CLAIM_TOOL_SECRET
string
dev-secret
yesx-tool-secret
header from Telnyx workflow toolsPORT
number
8787
git clone https://github.com/team-telnyx/telnyx-code-examples.git
cd telnyx-code-examples/build-conversational-workflow-nodejs
cp .env.example .env # fill in CLAIM_TOOL_SECRET
npm install
npm test
node server.js # starts on http://localhost:8787
Expose your local server:
ngrok http 8787
In the
Telnyx Portal, create a Conversational Workflow namedauto claim intake conversational workflow
. - Build the nodes and branches from
GUIDE.md. - Configure tool nodes with your ngrok base URL:
POST https://<id>.ngrok.io/tools/create-claim-intake
POST https://<id>.ngrok.io/tools/log-claim-intake-fallback
POST https://<id>.ngrok.io/tools/flag-priority-follow-up
Add the shared header to each tool:
x-tool-secret: dev-secret
Assign an inbound Telnyx phone number to the workflow and call it.
Creates a mock claim intake when the workflow has collected required fields.
curl -X POST http://localhost:8787/tools/create-claim-intake \
-H "content-type: application/json" \
-H "x-tool-secret: dev-secret" \
-d '{
"caller_name": "jane sample",
"caller_phone": "+15551234567",
"loss_type": "auto",
"loss_date": "2026-06-15",
"loss_location": "mission street and 5th street, san francisco",
"loss_description": "rear-ended while stopped",
"priority_flag": false,
"consent_to_continue": true
}'
Response:
{
"success": true,
"claim_intake_id": "aci_123",
"priority_flag": false,
"next_step": "claims team follow-up"
}
Records a fallback when the caller is misdirected, information is incomplete, or the primary tool cannot be used.
Creates a mock priority follow-up task for urgent cases.
Health check endpoint for monitoring.
curl http://localhost:8787/health
Response:
{
"status": "ok",
"service": "claim_intake_tools"
}
| Issue | Cause | Fix |
|---|---|---|
401 {"success":false,"error":"unauthorized"} |
||
x-tool-secret is missing or does not match CLAIM_TOOL_SECRET . |
||
Add the same x-tool-secret header to each Telnyx workflow tool node and restart the server after editing .env . |
||
422 {"error":"missing_required_fields"} |
||
| The workflow called a tool before required fields were collected. | Check workflow.json and only call create_claim_intake after the minimum field check. |
|
| Tool call never reaches the server | Local server is not publicly reachable. | Run ngrok http 8787 and use the HTTPS URL in each workflow tool node. |
| Caller receives an unsupported promise | Workflow instructions or node copy are too broad. | Keep the workflow focused on intake and avoid coverage, payment, liability, repair, legal, or medical decisions. |
| Workflow graph breaks during editing | A node points to a missing node or tool. | Run npm test to validate workflow.json . |
AI Insurance Claims Intake Voice (Python)- voice agent for insurance claim intakeBuild a Voice AI Agent (Node.js)- answer calls and generate replies with Telnyx InferenceRoute Phone Calls to AI Agent (Node.js)- route inbound calls to an AI agentAI Assistant Multi Tool (Python)- tool-calling pattern for AI assistants