An omnichannel service agent that knows what it may say
Challenge
An enterprise support team wanted one assistant across voice and chat that could act on customer accounts — read CRM records, open tickets, query SAP — while retrieving only the documents and data each caller was authorized to see.
Approach
We built the agent on LangGraph in Python and TypeScript, with retrieval gated by access-control lists so a query only ever surfaces what the user is cleared for. Streaming speech-to-text and text-to-speech carry the voice channel; typed tool contracts wrap the CRM and SAP ERP so the model calls real APIs with validated arguments rather than free text. The pipeline ships through CI/CD with linting, type checks, unit, integration, and end-to-end tests, plus security and dependency scans.
Architecture
Speech-to-text → LangGraph agent → ACL-filtered retrieval → typed tool calls (CRM, SAP) → grounded reply → text-to-speech
Python · TypeScript · LangGraph — Docker containers, GitHub Actions CI/CD with linting, type checks, unit/integration/E2E tests, security and dependency scans
Results
- Retrieval scoped to each caller's permissions — no leakage across access boundaries
- One agent serving both voice and chat over shared tools and retrieval
- Typed tool contracts into CRM and SAP ERP, validated in the pipeline