Property management routing squad

Route maintenance vs leasing with a router assistant and domain specialists

Overview

Replace visual flows with a Squad: a Router assistant classifies the inquiry and transfers to Maintenance or Leasing specialists. Use a dynamic transfer tool for human escalation.

Squad Capabilities:

  • Tenant verification and inquiry classification
  • Maintenance vs leasing specialist assistants
  • Human transfer with warm summary when needed

1. Define members

Example squad payload
1{
2 "members": [
3 { "assistant": { "name": "Router", "model": {"provider": "openai", "model": "gpt-4o", "messages": [{"role": "system", "content": "Classify tenant inquiries: emergency, maintenance, leasing, rent, general. Transfer accordingly."}] }, "toolIds": ["TENANT_LOOKUP_ID"], "firstMessage": "Thanks for calling. How can I help?", "firstMessageMode": "assistant-speaks-first" } },
4 { "assistant": { "name": "Maintenance", "model": {"provider": "openai", "model": "gpt-4o", "messages": [{"role": "system", "content": "Maintenance specialist. Collect details and prioritize emergencies."}] } } },
5 { "assistant": { "name": "Leasing", "model": {"provider": "openai", "model": "gpt-4o", "messages": [{"role": "system", "content": "Leasing specialist. Answer leasing and rent questions."}] } } }
6 ]
7}

2. Transfers and escalation

  • Router → Maintenance for emergency/maintenance
  • Router → Leasing for leasing/rent/general
  • Dynamic transfer tool for human dispatch

3. Implement

1import { VapiClient } from "@vapi-ai/server-sdk";
2const vapi = new VapiClient({ token: process.env.VAPI_API_KEY! });
3
4await vapi.calls.create({
5 transport: { type: "web" },
6 squad: {
7 members: [
8 { assistant: { name: "Router", model: { provider: "openai", model: "gpt-4o", messages: [{ role: "system", content: "Classify tenant inquiries: emergency, maintenance, leasing, rent, general. Transfer accordingly." }] }, firstMessage: "Thanks for calling. How can I help?", firstMessageMode: "assistant-speaks-first" } },
9 { assistant: { name: "Maintenance", model: { provider: "openai", model: "gpt-4o", messages: [{ role: "system", content: "Maintenance specialist. Collect details and prioritize emergencies." }] } } },
10 { assistant: { name: "Leasing", model: { provider: "openai", model: "gpt-4o", messages: [{ role: "system", content: "Leasing specialist. Answer leasing and rent questions." }] } } }
11 ],
12 },
13});

4. Test

Assign the Squad to a phone number and test each path.

Next steps