--- name: compliance-call-recorder-ai-auditor title: "Compliance Call Recorder + AI Auditor" description: "Compliance Call Recorder + AI Auditor — auto-record, batch-process with AI, flag violations, create tickets." language: python framework: flask telnyx_products: [Voice AI, AI Inference, Call Recording] channel: [voice] --- # Compliance Call Recorder + AI Auditor Compliance Call Recorder + AI Auditor — auto-record, batch-process with AI, flag violations, create tickets. ## Telnyx APIs Used - **AI Inference**: `POST /v2/ai/chat/completions` — [API reference](https://developers.telnyx.com/api/inference/chat-completions) - **Cloud Storage (S3-compatible)**: recordings are uploaded with the AWS S3 SDK (`boto3`) against the regional endpoint `https://{region}.telnyxcloudstorage.com`. Authentication is S3 SigV4 with your Telnyx API key supplied as **both** the access key and the secret key. See the [Cloud Storage quickstart](https://developers.telnyx.com/docs/cloud-storage/quick-start). ## Telnyx Webhook Events This app handles these webhook events ([Call Control docs](https://developers.telnyx.com/docs/api/v2/call-control)): - `call.answered` — Call connected — app begins interaction - `call.hangup` — Call ended — app cleans up session, triggers post-call processing - `call.initiated` — New inbound or outbound call detected - `call.recording.saved` — Call recording saved — URL available for download/processing - `call.transcription` — Real-time transcription chunk received ## Architecture ``` Inbound Phone Call │ ▼ ┌──────────────────┐ │ Answer + Greet │ ── TTS welcome message └────────┬─────────┘ │ ▼ ┌──────────────────┐ │ Gather Speech │ ── STT transcription └────────┬─────────┘ │ ▼ ┌──────────────────┐ │ AI Inference │ │ • Risk analysis │ │ • Classification / triage│ │ • Case / claim handling│ └────────┬─────────┘ │ ◄──── conversation loop │ ▼ Ticket / issue ``` ## Environment Variables Copy `.env.example` to `.env` and fill in: | Variable | Type | Example | Required | Description | Where to get it | |----------|------|---------|----------|-------------|-----------------| | `TELNYX_API_KEY` | `string` | `KEY0123456789ABCDEF` | **yes** | Telnyx API v2 key — also used as both the access key and secret key for the S3-compatible Cloud Storage API | [Portal](https://portal.telnyx.com/api-keys) | | `AI_MODEL` | `string` | `moonshotai/Kimi-K2.6` | no | Telnyx AI Inference model name | [Portal](https://developers.telnyx.com/docs/inference/models) | | `STORAGE_BUCKET` | `string` | `my-bucket` | no | Telnyx Cloud Storage bucket name (recordings are skipped if unset) | [Portal](https://portal.telnyx.com/storage) | | `TELNYX_STORAGE_REGION` | `string` | `us-central-1` | no | Cloud Storage region — selects the `https://{region}.telnyxcloudstorage.com` endpoint (`us-central-1`, `us-east-1`, `us-west-1`, `eu-central-1`); defaults to `us-central-1` | [Quickstart](https://developers.telnyx.com/docs/cloud-storage/quick-start) | | `TICKET_WEBHOOK_URL` | `string` | `https://your-server.example.com/webhook` | **yes** | Ticket webhook url | — | | `TELNYX_PUBLIC_KEY` | `string` | `your_telnyx_public_key_here` | no | Public key used to verify Telnyx webhook signatures | [Portal](https://portal.telnyx.com/api-keys) | | `PORT` | `integer` | `5000` | no | HTTP server port | — | ## Setup ```bash git clone https://github.com/team-telnyx/telnyx-code-examples.git cd telnyx-code-examples/compliance-call-recorder-ai-auditor-python cp .env.example .env # ← fill in your credentials pip install -r requirements.txt python app.py # starts on http://localhost:5000 ``` ### Webhook Configuration 1. Expose your local server: ```bash ngrok http 5000 ``` 2. Copy the HTTPS URL and configure in [Telnyx Portal](https://portal.telnyx.com): - **Call Control Application** → Webhook URL → `https://.ngrok.io/webhooks/voice` ## API Reference ### `GET /audit/results` Get audit results with compliance metrics. ```bash curl http://localhost:5000/audit/results ``` **Response:** ```json { "results": [ { "id": "eval-001", "score": 8.5, "feedback": "Strong opening, good discovery questions. Improve: handle pricing objection earlier.", "completed_at": "2026-07-15T14:45:00Z" } ] } ``` ### `GET /health` Returns health ```bash curl http://localhost:5000/health ``` **Response:** ```json { "status": "ok", "uptime_seconds": 3842, "active_sessions": 2, "version": "1.0.0" } ``` ## Webhook Endpoints ### `POST /webhooks/voice` Receives [Telnyx Call Control](https://developers.telnyx.com/docs/voice/call-control) webhook events. **Events handled:** `call.answered`, `call.hangup`, `call.initiated`, `call.recording.saved`, `call.transcription` **Example payload:** ```json { "data": { "event_type": "call.initiated", "id": "0ccc7b54-4df3-4bca-a65a-3da1ecc777f0", "occurred_at": "2026-07-15T14:30:00.000Z", "payload": { "call_control_id": "v3:uMi2qMWHT-mLFGkEm4t9tA", "connection_id": "1494404757140276705", "call_leg_id": "428c31b6-7af4-4bcb-b7f5-5013ef9657c1", "call_session_id": "428c31b6-abcd-1234-5678-5013ef9657c1", "client_state": null, "from": "+12125551234", "to": "+13105559876", "direction": "incoming", "state": "ringing" }, "record_type": "event" }, "meta": { "attempt": 1, "delivered_to": "https://your-server.example.com/webhooks/voice" } } ``` ## Troubleshooting | Issue | Cause | Fix | |-------|-------|-----| | `401 Unauthorized` | Invalid or missing API key | Verify `TELNYX_API_KEY` in `.env` matches your key in the [Portal](https://portal.telnyx.com/api-keys) | | Webhook not received | Local server not publicly reachable | Expose it with a tunnel (e.g. ngrok) and set the webhook URL in the [Telnyx Portal](https://portal.telnyx.com) | | `422 Unprocessable Entity` | Missing or malformed request fields | Check the request body against the API Reference above | ## Related Examples - [AI After Hours Emergency Triage (Python)](https://raw.githubusercontent.com/team-telnyx/telnyx-code-examples/main/ai-after-hours-emergency-triage-python/README.md) - [AI Assistant Knowledge Base (Python)](https://raw.githubusercontent.com/team-telnyx/telnyx-code-examples/main/ai-assistant-knowledge-base-python/README.md) - [AI Assistant Multi Tool (Python)](https://raw.githubusercontent.com/team-telnyx/telnyx-code-examples/main/ai-assistant-multi-tool-python/README.md) - [AI Assistant Phone Setup (Python)](https://raw.githubusercontent.com/team-telnyx/telnyx-code-examples/main/ai-assistant-phone-setup-python/README.md) - [AI Audiobook Narrator (Python)](https://raw.githubusercontent.com/team-telnyx/telnyx-code-examples/main/ai-audiobook-narrator-python/README.md) ## Resources - [Call Control Guide](https://developers.telnyx.com/docs/voice/call-control) - [AI Inference Guide](https://developers.telnyx.com/docs/inference) - [Cloud Storage Quickstart (S3-compatible)](https://developers.telnyx.com/docs/cloud-storage/quick-start) - [Telnyx Developer Docs](https://developers.telnyx.com) - [Telnyx Portal](https://portal.telnyx.com) ## Why Telnyx Telnyx is an **AI Communications Infrastructure** platform — voice, messaging, SIP, AI, and IoT on one private, global network.