VLAS Voice Intake AI Line

VLAS Voice Intake AI Line

A voice-first AI intake system for Virginia Legal Aid Society that conducts phone-based eligibility screening and full intake interviews, runs automatic conflict checks via LegalServer API, and surfaces completed intake summaries for paralegal review: aimed at replacing a two-hour average queue time with immediate AI-answered calls across a statewide toll-free line handling 18,000 calls per year.

Project Description

Organization: Virginia Legal Aid Society (VLAS)

Developer: Lemma Legal Consulting (Quinten Steenhuis)

Status: Pilot (pre-launch; awaiting final Dialpad integration and internal testing)

Jurisdiction: Virginia region, VLAS' service area

What Problem It Solves

Virginia Legal Aid Society operates a toll-free intake line. Roughly 18,000 calls per year come through it. The average queue time has been about two hours. The intake process is entirely manual and phone-based: an intake worker prescreens, a paralegal conducts a detailed interview, and someone enters everything into LegalServer by hand.

The voice intake pilot aims to have an AI agent answer the phone immediately, conduct the verbal intake, record answers directly into LegalServer via API, and surface a summarized intake for a paralegal to review, accept, or revise. The AI is an assistant, not a decision-maker. Staff retain authority over every case.

How It Works

The system is built on Pipecat, an open-source framework for building voice AI agents. The production telephony path uses Daily PSTN dial-in for real-time voice sessions. Dialpad is the telecom vendor VLAS selected for voice-AI integration. The LLM runs through Azure OpenAI, and speech-to-text uses Azure Speech Services.

The call flow follows a structured screening sequence documented in the repo:

Phone number and name collection come first. The system then checks service area eligibility. If the caller is outside the VLAS service area, they receive a redirect or referral. If eligible, the system asks about case type. Ineligible case types also route to referral.

For eligible callers, the system collects adverse party names and runs them through LegalServer's API for an automatic conflict check. Paralegals can re-run or confirm checks live if there's ambiguity. The system then gathers domestic violence screening information, household composition, and checks income eligibility against Federal Poverty Guidelines. If income is over the threshold, the system checks whether the caller receives benefits or has assets below the eligibility line. Callers who fail all three gates are redirected.

Eligible callers proceed through the collection of citizenship status, last four digits of SSN, date of birth, additional names, and full address, before entering the full intake interview.

The system supports bilingual calls (English and Spanish). When a caller selects Spanish, Azure STT switches to es-US for the remainder of the call.

The Tech Stack

Pipecat (open-source voice AI framework) handles the core agent pipeline: orchestrating speech-to-text, LLM conversation, and text-to-speech in a real-time voice loop. Daily provides the PSTN dial-in infrastructure and room management. Azure OpenAI powers the LLM (via Azure deployment). Azure Speech Services handles STT. Twilio is referenced as telephony infrastructure. Dialpad is the production telecom vendor for VLAS's phone system integration.

The codebase is Python (88.6%), with a TypeScript/JavaScript browser client for testing. Deployment uses Docker and Pipecat Cloud for production hosting. The repo includes a local websocket server for development testing and a browser client for debugging. Monitoring tools include Pipecat Tail (console monitor) and Pipecat Whisker (visual debugger).

Federal Poverty Scale data is stored as a static JSON file sourced from Suffolk LIT Lab's docassemble-PovertyScale project and requires manual annual updates.

LegalServer API integration pushes intake data directly into VLAS's case management system, including automatic conflict checks during the call.

Design Decisions Worth Noting

CMS migration to support integration. VLAS moved its case management platform to LegalServer specifically to support the voice-AI integration via API. This is a significant institutional investment that preceded the AI work.

Conflict checks automated but human-confirmed. Intake records run through LegalServer's API for automatic conflict detection during the call. Paralegals can re-run or confirm checks if there's ambiguity. The system does not make final conflict determinations.

AI as assistant, never decision-maker. AI-generated recommendations are reviewed by staff. Local managing attorneys retain authority to close intake for overloaded case types, providing manual control over any volume increase that automated intake might produce.

Operational trade-offs still being tested. The team is working through conversational pacing (how fast the AI responds), speakerphone audio degradation (callers on speaker produce lower-quality audio), and model selection balancing response speed against classification accuracy.

Voice technology evaluation. The team tested voice-generation technologies before settling on the current Azure Speech stack.

Customer satisfaction measurement planned. The program plans mailed surveys to assess the caller experience, acknowledging that their client population may not respond to digital-only feedback channels.

WebSocket endpoint security. The system uses a three-step authentication pipeline to prevent unauthorized access to the voice bot. First, incoming Twilio webhooks are validated using Twilio's RequestValidator and the organization's auth token. Second, the webhook response includes an HMAC-SHA256 authentication code (derived from the call identifier and a shared secret key) as a custom TwiML parameter. Third, when the WebSocket connection opens, the server regenerates the code and compares it using timing-safe comparison. Mismatches are rejected. This prevents attackers from bypassing Twilio and connecting directly to the bot backend, which would inflate costs and degrade service.

What's Not Yet Done

The pilot is not yet live to the public. The final step is completing Dialpad integration with VLAS's phone system and finishing internal tests. Spanish language support is built into the architecture (Azure STT language switching) but testing status is unclear from available documentation. The open issues list on GitHub (15 open issues) suggests active development.

Why It Matters for the Field

The Pipecat framework is worth noting for the field. It's an open-source voice AI pipeline that handles the orchestration problem (STT → LLM → TTS in real time) that every voice intake project must solve. Several other legal aid voice projects are building on custom Twilio integrations; Pipecat provides a more structured framework with built-in monitoring and debugging tools.

The LegalServer API conflict check during the call is a pattern other organizations should study. Most legal aid intake systems treat conflict checking as a human step that happens after the call. Running it automatically via API during the intake, with human confirmation for ambiguous matches, could significantly reduce the time between first contact and attorney review.

Link to Project

https://github.com/LemmaLegalConsulting/VLAS-Intake