> ## Documentation Index
> Fetch the complete documentation index at: https://docs.voxworks.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Example Pipelines

> Ready-to-use automation pipeline examples for common business scenarios: appointment reminders, lead qualification, payment follow-ups, customer surveys, real estate callbacks, and more.

These examples show complete automation pipelines for real business scenarios. Each one includes the trigger configuration, every step in order, and the exact field mappings you would use. Adapt them to your own Scripts, CRM fields, and business rules.

***

## Appointment Reminder with Confirmation

**Industry:** Healthcare, Professional Services, Automotive

**Scenario:** 24 hours before a scheduled appointment, call the patient or client to confirm. If they confirm, update the CRM. If they cancel or don't answer, alert the team.

**Trigger:** Inbound Webhook (fired by your scheduling system or a cron-based integration)

**Webhook payload:**

```json theme={null}
{
  "phone": "+61400222333",
  "first_name": "Sarah",
  "last_name": "Chen",
  "email": "sarah@example.com",
  "appointment_date": "2026-03-07",
  "appointment_time": "10:30 AM",
  "provider_name": "Dr. Williams",
  "crm_id": "apt-9921"
}
```

### Steps

**Step 1 — Transform**

| Source               | Target                 |
| -------------------- | ---------------------- |
| `trigger.phone`      | `contact.phone_number` |
| `trigger.first_name` | `contact.first_name`   |
| `trigger.last_name`  | `contact.last_name`    |
| `trigger.email`      | `contact.email`        |

**Step 2 — Upsert Contact**

* Match on: `phone_number`

**Step 3 — Upsert Object**

* Object type: `appointment`
* Match on: `appointment_id` = `trigger.crm_id`
* Link to contact: Yes

| Source                     | Target           |
| -------------------------- | ---------------- |
| `trigger.crm_id`           | `appointment_id` |
| `trigger.appointment_date` | `date`           |
| `trigger.appointment_time` | `time`           |
| `trigger.provider_name`    | `provider`       |

**Step 4 — Create Call**

* Script: Appointment Reminder Script
* Phone: `contact.phone_number`

*--- after call completes ---*

**Step 5 — Condition: Did the contact confirm?**

* Field: `call.structured_data.confirmed`
* Operator: `eq`
* Value: `true`

**On true:**

**Step 5a — Destination: Webhook** (update CRM status to "Confirmed")

* URL: `https://your-system.example.com/api/appointments/confirm`
* Method: `POST`
* Body:

```json theme={null}
{
  "appointment_id": "{{objects.appointment.appointment_id}}",
  "status": "confirmed"
}
```

**On false:**

**Step 5b — Destination: SMS to team**

* SMS type: `team`
* Template:

```text theme={null}
Appointment not confirmed: {{contact.full_name}} for {{objects.appointment.date}} at {{objects.appointment.time}} with {{objects.appointment.provider}}. Call status: {{call.status}}.
```

***

## Lead Qualification from Web Form

**Industry:** SaaS, Financial Services, Education

**Scenario:** A prospect fills out a form on your website. Voxworks calls them within minutes to qualify the lead, then routes qualified leads to your sales team and updates your CRM.

**Trigger:** Inbound Webhook (fired by your form builder — Typeform, HubSpot Forms, or a custom form)

**Webhook payload:**

```json theme={null}
{
  "phone": "+61400555666",
  "first_name": "Marcus",
  "last_name": "Rivera",
  "email": "marcus@company.com",
  "company": "Acme Corp",
  "interest": "Enterprise plan",
  "source": "pricing_page",
  "hubspot_contact_id": "hs-12345"
}
```

### Steps

**Step 1 — Transform**

| Source               | Target                 |
| -------------------- | ---------------------- |
| `trigger.phone`      | `contact.phone_number` |
| `trigger.first_name` | `contact.first_name`   |
| `trigger.last_name`  | `contact.last_name`    |
| `trigger.email`      | `contact.email`        |

**Step 2 — Upsert Contact**

* Match on: `email`

**Step 3 — Upsert Object**

* Object type: `hubspot_contact`
* Match on: `contact_id` = `trigger.hubspot_contact_id`
* Link to contact: Yes

| Source                       | Target        |
| ---------------------------- | ------------- |
| `trigger.hubspot_contact_id` | `contact_id`  |
| `trigger.company`            | `company`     |
| `trigger.interest`           | `interest`    |
| `trigger.source`             | `lead_source` |

**Step 4 — Create Call**

* Script: Lead Qualification Script
* Phone: `contact.phone_number`

*--- after call completes ---*

**Step 5 — Transform: Map call results**

| Source                                | Target              |
| ------------------------------------- | ------------------- |
| `call.call_summary`                   | `notes`             |
| `call.structured_data.qualified`      | `is_qualified`      |
| `call.structured_data.budget_range`   | `budget`            |
| `call.structured_data.timeline`       | `timeline`          |
| `call.structured_data.decision_maker` | `is_decision_maker` |
| `objects.hubspot_contact.contact_id`  | `contact_id`        |

**Step 6 — Destination: Webhook** (update CRM with qualification data)

* URL: `https://your-api.example.com/leads/qualify`
* Method: `POST`
* Body:

```json theme={null}
{
  "contact_id": "{{mapped.contact_id}}",
  "qualified": "{{mapped.is_qualified}}",
  "budget": "{{mapped.budget}}",
  "timeline": "{{mapped.timeline}}",
  "decision_maker": "{{mapped.is_decision_maker}}",
  "summary": "{{mapped.notes}}"
}
```

**Step 7 — Condition: Is the lead qualified?**

* Field: `call.structured_data.qualified`
* Operator: `eq`
* Value: `true`

**On true:**

**Step 7a — Destination: Email to team**

* To: `team`
* Members: Sales team members
* Subject: `Qualified lead: {{contact.full_name}} at {{objects.hubspot_contact.company}}`
* Body:

```text theme={null}
New qualified lead from {{objects.hubspot_contact.lead_source}}.

Contact: {{contact.full_name}} ({{contact.email}})
Company: {{objects.hubspot_contact.company}}
Budget: {{call.structured_data.budget_range}}
Timeline: {{call.structured_data.timeline}}

Call summary:
{{call.call_summary}}
```

**On false:**

**Step 7b — Destination: Email to contact**

* Subject: `Thanks for your interest, {{contact.first_name}}`
* Body:

```text theme={null}
Hi {{contact.first_name}},

Thanks for chatting with us. Based on our conversation, it sounds like the timing might not be right just yet.

We'll keep you updated on new features and pricing options. In the meantime, feel free to reach out if anything changes.

Best regards,
The Sales Team
```

***

## Payment Reminder with Escalation

**Industry:** Financial Services, Utilities, Insurance

**Scenario:** Call customers with overdue payments. If they commit to paying, log it. If they don't answer or refuse, escalate to a collections team member.

**Trigger:** Inbound Webhook (fired by your billing system for each overdue account)

**Webhook payload:**

```json theme={null}
{
  "phone": "+61400777888",
  "first_name": "David",
  "last_name": "Park",
  "account_number": "ACC-20456",
  "amount_due": "245.00",
  "due_date": "2026-02-28",
  "days_overdue": 6
}
```

### Steps

**Step 1 — Transform**

| Source               | Target                 |
| -------------------- | ---------------------- |
| `trigger.phone`      | `contact.phone_number` |
| `trigger.first_name` | `contact.first_name`   |
| `trigger.last_name`  | `contact.last_name`    |

**Step 2 — Upsert Contact**

* Match on: `phone_number`

**Step 3 — Create Call**

* Script: Payment Reminder Script
* Phone: `contact.phone_number`

*--- after call completes ---*

**Step 4 — Destination: Webhook** (log call result to billing system)

* URL: `https://billing.example.com/api/collection-calls`
* Method: `POST`
* Body:

```json theme={null}
{
  "account_number": "{{trigger.account_number}}",
  "call_status": "{{call.status}}",
  "end_reason": "{{call.end_reason}}",
  "payment_promised": "{{call.structured_data.payment_committed}}",
  "promised_date": "{{call.structured_data.payment_date}}",
  "summary": "{{call.call_summary}}"
}
```

**Step 5 — Condition: Did the customer commit to paying?**

* Field: `call.structured_data.payment_committed`
* Operator: `eq`
* Value: `true`

**On true:**

**Step 5a — Destination: SMS to contact**

* Template:

```text theme={null}
Hi {{contact.first_name}}, thanks for confirming your payment of ${{trigger.amount_due}} for account {{trigger.account_number}}. If you need help, reply to this message.
```

**On false:**

**Step 5b — Destination: Email to team**

* To: `team`
* Members: Collections team
* Subject: `Escalation: {{contact.full_name}} - ${{trigger.amount_due}} overdue`
* Body:

```text theme={null}
Payment reminder call to {{contact.full_name}} did not result in a commitment.

Account: {{trigger.account_number}}
Amount: ${{trigger.amount_due}}
Days overdue: {{trigger.days_overdue}}
Call status: {{call.status}}

Summary:
{{call.call_summary}}
```

***

## Post-Inspection Callback (Real Estate)

**Industry:** Real Estate

**Scenario:** After a property inspection, call the attendee to gauge their interest, collect feedback, and update the CRM with their response. Alert the agent if the buyer is highly interested.

**Trigger:** Inbound Webhook (fired when an inspection is marked complete in your property management system)

**Webhook payload:**

```json theme={null}
{
  "phone": "+61400111999",
  "first_name": "Emma",
  "last_name": "Taylor",
  "email": "emma.taylor@email.com",
  "property_address": "42 Harbour St, Sydney NSW 2000",
  "inspection_date": "2026-03-06",
  "listing_agent": "James Morton",
  "listing_id": "PRP-8834",
  "crm_id": "monday-55023",
  "board_id": "1234567890"
}
```

### Steps

**Step 1 — Transform**

| Source               | Target                 |
| -------------------- | ---------------------- |
| `trigger.phone`      | `contact.phone_number` |
| `trigger.first_name` | `contact.first_name`   |
| `trigger.last_name`  | `contact.last_name`    |
| `trigger.email`      | `contact.email`        |

**Step 2 — Upsert Contact**

* Match on: `phone_number`

**Step 3 — Upsert Object**

* Object type: `monday_item`
* Match on: `CRM_ID` = `trigger.crm_id`
* Link to contact: Yes

| Source                     | Target             |
| -------------------------- | ------------------ |
| `trigger.crm_id`           | `CRM_ID`           |
| `trigger.board_id`         | `board_id`         |
| `trigger.listing_id`       | `listing_id`       |
| `trigger.property_address` | `property_address` |

**Step 4 — Create Call**

* Script: Post-Inspection Callback Script
* Phone: `contact.phone_number`

*--- after call completes ---*

**Step 5 — Transform: Map results to CRM fields**

| Source                                | Target        |
| ------------------------------------- | ------------- |
| `call.call_summary`                   | `long_text_7` |
| `call.structured_data.interest_level` | `status_1`    |
| `call.structured_data.price_feedback` | `long_text_9` |
| `call.structured_data.next_steps`     | `status_3`    |
| `call.status`                         | `status_5`    |
| `objects.monday_item.CRM_ID`          | `item_id`     |
| `objects.monday_item.board_id`        | `board_id`    |

**Step 6 — Destination: Integration Sync**

* Integration: Monday.com

**Step 7 — Condition: High interest?**

* Field: `call.structured_data.interest_level`
* Operator: `eq`
* Value: `high`

**On true:**

**Step 7a — Destination: SMS to team**

* SMS type: `team`
* Template:

```text theme={null}
Hot lead: {{contact.full_name}} is highly interested in {{objects.monday_item.property_address}}. Next steps: {{call.structured_data.next_steps}}. Call summary: {{call.call_summary}}
```

**Step 7b — Destination: Email to contact**

* Subject: `Thanks for inspecting {{objects.monday_item.property_address}}, {{contact.first_name}}`
* Body:

```text theme={null}
Hi {{contact.first_name}},

Thanks for attending the inspection at {{objects.monday_item.property_address}} on {{trigger.inspection_date}}.

Your listing agent {{trigger.listing_agent}} will be in touch shortly to discuss next steps.

If you have any questions in the meantime, feel free to reply to this email.

Kind regards,
The Team
```

***

## Customer Satisfaction Survey

**Industry:** Any (Retail, Hospitality, SaaS, Healthcare)

**Scenario:** After a support interaction or service delivery, call the customer to collect a satisfaction rating and feedback. Push the results to your analytics system and flag negative experiences.

**Trigger:** Call Completed

* Script filter: Customer Satisfaction Survey Script
* Status filter: `completed`

### Steps

**Step 1 — Destination: Webhook** (send structured survey results to analytics)

* URL: `https://analytics.example.com/api/survey-results`
* Method: `POST`
* Body:

```json theme={null}
{
  "contact_phone": "{{contact.phone_number}}",
  "contact_name": "{{contact.full_name}}",
  "satisfaction_rating": "{{call.structured_data.rating}}",
  "nps_score": "{{call.structured_data.nps_score}}",
  "feedback": "{{call.structured_data.feedback}}",
  "would_recommend": "{{call.structured_data.would_recommend}}",
  "improvement_suggestions": "{{call.structured_data.improvements}}",
  "call_duration": "{{call.duration}}",
  "call_id": "{{call.id}}"
}
```

**Step 2 — Condition: Negative experience?**

* Field: `call.structured_data.rating`
* Operator: `lte`
* Value: `2`

**On true:**

**Step 2a — Destination: Email to team**

* To: `team`
* Members: Customer success team
* Subject: `Low satisfaction: {{contact.full_name}} rated {{call.structured_data.rating}}/5`
* Body:

```text theme={null}
{{contact.full_name}} ({{contact.phone_number}}) gave a satisfaction rating of {{call.structured_data.rating}}/5.

Feedback: {{call.structured_data.feedback}}

Improvement suggestions: {{call.structured_data.improvements}}

Full call summary:
{{call.call_summary}}
```

**Step 2b — Destination: SMS to contact**

* Template:

```text theme={null}
Hi {{contact.first_name}}, thank you for your feedback. We're sorry to hear about your experience. A member of our team will reach out to you shortly to make things right.
```

**On false:**

**Step 2c — Destination: Email to contact**

* Subject: `Thanks for your feedback, {{contact.first_name}}`
* Body:

```text theme={null}
Hi {{contact.first_name}},

Thank you for taking the time to share your feedback. We're glad to hear about your experience!

Your input helps us continue improving our service. If you ever need anything, don't hesitate to reach out.

Best regards,
The Team
```

***

## Enrollment Follow-Up (Education)

**Industry:** Education, Training Providers

**Scenario:** When a prospective student submits an enquiry, call them to discuss programs, answer questions, and guide them toward enrollment. Sync the outcome to your student management system.

**Trigger:** Inbound Webhook (fired by your enquiry form or student management system)

**Webhook payload:**

```json theme={null}
{
  "phone": "+61400333444",
  "first_name": "Liam",
  "last_name": "Johnson",
  "email": "liam.j@email.com",
  "program_interest": "Graduate Diploma in Data Science",
  "start_date": "July 2026",
  "enquiry_source": "website",
  "student_id": "STU-20789"
}
```

### Steps

**Step 1 — Transform**

| Source               | Target                 |
| -------------------- | ---------------------- |
| `trigger.phone`      | `contact.phone_number` |
| `trigger.first_name` | `contact.first_name`   |
| `trigger.last_name`  | `contact.last_name`    |
| `trigger.email`      | `contact.email`        |

**Step 2 — Upsert Contact**

* Match on: `email`

**Step 3 — Create Call**

* Script: Enrollment Enquiry Script
* Phone: `contact.phone_number`

*--- after call completes ---*

**Step 4 — Destination: Webhook** (update student management system)

* URL: `https://sms.example.edu/api/enquiries/update`
* Method: `POST`
* Body:

```json theme={null}
{
  "student_id": "{{trigger.student_id}}",
  "call_status": "{{call.status}}",
  "end_reason": "{{call.end_reason}}",
  "interest_level": "{{call.structured_data.interest_level}}",
  "preferred_program": "{{call.structured_data.confirmed_program}}",
  "preferred_start": "{{call.structured_data.preferred_intake}}",
  "questions_asked": "{{call.structured_data.questions}}",
  "next_action": "{{call.structured_data.next_steps}}",
  "summary": "{{call.call_summary}}"
}
```

**Step 5 — Condition: Ready to enroll?**

* Field: `call.structured_data.ready_to_enroll`
* Operator: `eq`
* Value: `true`

**On true:**

**Step 5a — Destination: Email to contact**

* Subject: `Your enrollment next steps — {{call.structured_data.confirmed_program}}`
* Body:

```text theme={null}
Hi {{contact.first_name}},

Great speaking with you! As discussed, here are your next steps to enroll in {{call.structured_data.confirmed_program}} for the {{call.structured_data.preferred_intake}} intake:

1. Complete the online application at [your enrollment link]
2. Submit your supporting documents
3. Our admissions team will confirm your place within 5 business days

If you have any questions, reply to this email or call us directly.

Best regards,
Student Services
```

**Step 5b — Destination: Email to team**

* To: `team`
* Members: Admissions team
* Subject: `Enrollment intent: {{contact.full_name}} — {{call.structured_data.confirmed_program}}`
* Body:

```text theme={null}
{{contact.full_name}} ({{contact.email}}) is ready to enroll.

Program: {{call.structured_data.confirmed_program}}
Preferred intake: {{call.structured_data.preferred_intake}}

Call summary:
{{call.call_summary}}
```

***

## Outage Notification with Callback (Utilities)

**Industry:** Utilities, Energy, Telecommunications

**Scenario:** When a service outage is reported, call affected customers to notify them, collect any additional information, and send a confirmation SMS.

**Trigger:** Inbound Webhook (fired by your outage management system for each affected customer)

**Webhook payload:**

```json theme={null}
{
  "phone": "+61400888999",
  "first_name": "Rachel",
  "last_name": "Kim",
  "account_number": "UTL-33201",
  "outage_area": "Northern suburbs",
  "estimated_restoration": "2026-03-06 6:00 PM",
  "outage_type": "power"
}
```

### Steps

**Step 1 — Transform**

| Source               | Target                 |
| -------------------- | ---------------------- |
| `trigger.phone`      | `contact.phone_number` |
| `trigger.first_name` | `contact.first_name`   |
| `trigger.last_name`  | `contact.last_name`    |

**Step 2 — Upsert Contact**

* Match on: `phone_number`

**Step 3 — Create Call**

* Script: Outage Notification Script
* Phone: `contact.phone_number`

*--- after call completes ---*

**Step 4 — Destination: SMS to contact**

* Template:

```text theme={null}
Hi {{contact.first_name}}, as discussed, there is a {{trigger.outage_type}} outage in the {{trigger.outage_area}} area. Estimated restoration: {{trigger.estimated_restoration}}. Account: {{trigger.account_number}}. For updates, visit our website or call our hotline.
```

**Step 5 — Condition: Customer reported an issue?**

* Field: `call.structured_data.reported_issue`
* Operator: `exists`

**On true:**

**Step 5a — Destination: Webhook** (log customer-reported issue)

* URL: `https://ops.example.com/api/outage-reports`
* Method: `POST`
* Body:

```json theme={null}
{
  "account_number": "{{trigger.account_number}}",
  "outage_area": "{{trigger.outage_area}}",
  "customer_report": "{{call.structured_data.reported_issue}}",
  "severity": "{{call.structured_data.severity}}",
  "contact_phone": "{{contact.phone_number}}",
  "call_summary": "{{call.call_summary}}"
}
```

***

## Tips for Adapting These Examples

* **Replace field names** with your actual CRM column IDs, API endpoints, and Schema fields.
* **Adjust the Script** referenced in Create Call steps to match your own Scripts.
* **Start with fewer steps.** Get the basic trigger-to-call flow working first, then add post-call destinations and conditions.
* **Use Test Webhook** to send a sample payload and verify field mappings before enabling the automation.
* **Check structured data field names** in your Script's data collection settings — these determine what's available under `call.structured_data.*`.
