U4 · Core

DockPlus Atendimento — multichannel customer service agent

A customer service agent for WhatsApp, Telegram and email. A LangGraph graph classifies intent and routes to the right node: RAG answers, scheduling, feedback or handoff to a human. There's also a version for US real estate agents.

private

Engineering decisions

  • LangGraph graph with state persisted in Postgres: audio is transcribed (Whisper), the orchestrator detects intent and language, and replies can go out as voice (ElevenLabs or fal.ai).
  • WhatsApp through Meta's official Cloud API, with HMAC-signed webhooks and the 24-hour window rule enforced: outside it, only approved templates go out.
  • Durable webhook intake: messages land in a Postgres queue under an advisory lock, and ambiguous outcomes are parked for review instead of retried, so a message is never sent twice.
  • One company per deployment, enforced at startup: the database and Redis are bound to the instance ID, and JWTs from another instance are rejected. A CI check proves two stacks can't see each other.
  • Next.js admin panel with deny-by-default RBAC (admin, operator, viewer), TOTP MFA and session revocation; the JWT lives in an httpOnly cookie behind a server-side proxy.
  • Real estate version: tools to search listings by lead preferences, send property photos over WhatsApp, and book visits with reminders.

Results

  • CI on every push: backend tests against a real pgvector Postgres, frontend build and tests, dependency audits (pip-audit, npm audit) and Docker image builds.

Stack

PythonFastAPILangGraphPostgreSQLpgvectorRedisNext.js 15OpenAIAnthropic ClaudeLangfuse

What it shows

Service businesses that get a lot of repetitive messages and want an agent to answer, book appointments, and hand off to a person only when needed.