Inspiration

TCPA, FDCPA, and CFPB Reg F violations carry statutory damages of $500 to $1,500 per call in the United States. When organizations deploy generative AI calling tools like CALL-E for outbound collections, sales outreach, appointment reminders, or healthcare follow-ups, they cannot rely solely on a well-crafted prompt. One call placed after 9:00 PM local time, one call without verifiable consent, or one dialed attempt past a daily threshold creates real, immediate legal liability.

Looking across the hackathon landscape, nearly every submission focuses on building the calling agent itself. None gate CALL-E behind a real, multi-jurisdiction compliance engine that protects callers from liability before the dialer ever connects, while meeting non-technical operators where they actually work: inside Google Sheets.

We built CallGuardian to serve as the missing guardrail layer for the AI telephony ecosystem: every call clears compliance first, every revocation is honored in real time, and every decision is sealed in a tamper-evident, hash-chained audit log.

What It Does

CallGuardian operates as an automated pre-flight, in-flight, and post-flight compliance firewall for CALL-E phone calls. It offers two surfaces powered by a single backend engine: a dark-themed Web Dashboard for compliance officers and an Apps Script Plugin for operations teams working in spreadsheets.

  1. Pre-Dial Compliance Gate:

    • Evaluates four non-negotiable checks before a call is ever placed:
      • Timezone-Aware Calling Windows: Recipient-local time checks (e.g., 08:00–21:00 local time under TCPA).
      • Prior Express Consent: Verifies valid consent on file with automated cooldown tracking for re-consent after revocation.
      • Do-Not-Call (DNC) / Suppression: Cross-checks against internal and regulatory suppression lists.
      • Daily Attempt Limits: Enforces strict per-day dial caps to prevent harassment violations.
    • Emits explicit, named failure codes (OUTSIDE_CALL_WINDOW, NO_CONSENT, SUPPRESSED, ATTEMPT_LIMIT_EXCEEDED) rather than opaque booleans.
  2. Pre-Script Disclosure Check:

    • Analyzes outbound calling scripts and system prompts for legally mandated disclosures (e.g., mini-Miranda for collections, caller identity, and recording disclaimers).
  3. Live In-Call Opt-Out Detection:

    • Post-call transcript evaluation parses callee statements in real time. If the recipient revokes consent (e.g., "stop calling me", "take me off your list", "never call again"), CallGuardian automatically flags the account as Suppressed across all future outreach.
  4. Tamper-Evident Hash-Chained Audit Ledger:

    • Every compliance check, dial attempt, and call outcome is written to an immutable append-only ledger where each block's SHA-256 hash seals its own content alongside the hash of the preceding entry.
    • A single-click Verify recomputes the entire cryptographic chain. If any entry is modified, deleted, or backdated after the fact, CallGuardian pinpoints the exact broken entry index.
  5. Dual Surfaces, One Shared Ledger:

    • Dashboard: Interactive overview with 8 pre-seeded realistic evaluator scenarios, live dial triggers, and an interactive tampering demonstration.
    • Google Sheets Add-on: A native CallGuardian menu in Google Sheets (Code.gs) that lets teams check row compliance, safely place calls for cleared rows, and verify audit integrity without leaving their spreadsheet.
  6. Pluggable Rule Packs:

    • Ships with 4 production rule packs (us-tcpa-collections, us-telemarketing-dnc, appointment-reminder, healthcare-outreach). Adding a new vertical or international jurisdiction requires defining a new declarative RulePack dataclass.

How We Built It

  • Backend & Core Engine: Python 3.12 and FastAPI running on uv. Engineered with clean separation across api/compliance.py (gate rules), api/audit.py (cryptographic ledger), api/accounts.py (storage), and api/rules.py (jurisdiction packs).
  • CALL-E Integration: Direct HTTP integration (api/calle_client.py) against CALL-E's production /v1/calls API, incorporating idempotency keys, task state polling, and transcript turn extraction. Also includes an offline DEMO_MODE=1 fixture engine for deterministic testing.
  • Google Sheets Plugin: Native Google Apps Script (plugins/google-sheets-callguardian/Code.gs) with minimal OAuth scopes (spreadsheets.currentonly and external fetch) that connects directly to the CallGuardian gate API.
  • Frontend & Visual Theme: Server-rendered Jinja2 templates styled with a custom "ledger" aesthetic (dark slate backgrounds, sharp corners, IBM Plex Mono typography for hashes and numbers, and emerald #059669 accents).
  • Deployment: Fully Dockerized container deployed continuously to Render (render.yaml).
  • Testing & Evals: 14/14 automated Pytest suite (offline, idempotent) accompanied by a 27/27 scenario compliance evaluation harness.

Challenges We Ran Into

  • Real CALL-E API Structure: The official API documentation differed in subtle ways from the live endpoint behavior (e.g., the API expects a task description rather than an isolated to phone field, and returns call_task.recipients[].attempts[].transcript_turns). We verified these behaviors against live calls to safe, non-routable fictional numbers (+1-555-0101) to align our client code with reality.
  • Precision Audit Verification: Rather than a simple boolean checksum, we designed the verification algorithm to recompute each block's hash sequentially against its predecessor and report the exact block index and timestamp where any discrepancy was introduced.
  • Spreadsheet Usability without External Bundlers: Developing Google Apps Script that operates reliably across arbitrary customer spreadsheets without requiring npm build steps or complex client-side dependencies.

Accomplishments That We're Proud Of

  • 14/14 passing automated tests with 100% offline determinism in demo mode.
  • 27/27 compliance evaluation test cases passing, covering complex edge cases (re-consenting after revocation, timezone edge boundaries, and disclosure matching).
  • Live CALL-E API connection confirmed with live call placement.
  • Surgical tamper detection that catches any database or file modification instantly and names the specific entry.
  • Real community contribution: Submitted pull request #437 to CALLE-AI/awesome-phone-call-agents, bringing Google Sheets native calling capability to the CALL-E ecosystem.

What We Learned

  • Telecom Regulatory Nuances: Deep-diving into 47 U.S.C. §227 (TCPA), 15 U.S.C. §1692c (FDCPA), 12 CFR Part 1006 (CFPB Reg F), and 16 CFR Part 310 (FTC TSR) clarified how critical pre-call automated barriers are for enterprise AI adoption.
  • Workflow Reality: Operations, collections, and outreach agents live in spreadsheets. If compliance software forces them into another unfamiliar CRM, they will bypass it; integrating the compliance gate into Google Sheets ensures 100% compliance adherence.

What's Next For CallGuardian

  • Sub-Second Audio Webhook Streaming: Streaming live audio during ongoing CALL-E calls to terminate calls the exact second an opt-out phrase is uttered, before the call concludes.
  • Native CRM Webhooks: Pre-built webhook connectors for Salesforce, HubSpot, and Zendesk Sell.
  • International Regulatory Packs: Pre-built compliance packs for UK Ofcom regulations, EU GDPR / ePrivacy Directive, and Australian ACMA calling standards.
  • Carrier STIR/SHAKEN Attestation Verification: Checking caller ID reputation and attestation level prior to outbound dispatch.

Built With

Share this project:

Updates

Submission history