Skip to main content
Featured projects

Independent product · Full-stack & AI engineering

AI Appointment & CRM Automation

Telegram booking across text, voice, and guided controls—with identity, availability, and CRM writes enforced by application code.

Role
Independent full-stack AI engineer
Stage
Early production

The challenge

The problem and my role

Appointment requests arrived through free-form text, voice notes, and guided choices, but staff still had to interpret the request, identify the patient, check live availability, get confirmation, and record the visit.

I built the application-owned workflow around Telegram, LangGraph, and EspoCRM so the model could interpret and route requests while identity, availability, and CRM writes stayed under deterministic controls.

Product walkthrough

Booking an appointment

Text, voice, and guided controls enter the same CRM-backed booking path. The application presents current choices, keeps the operation specific, and requires confirmation before a write.

Guided selection uses application-generated choices from current CRM availability.
Voice enters the same validated booking workflow and receives a text response.

Implementation evidence

What was delivered

The public TypeScript implementation exposes the routing, Telegram controls, identity-scoped CRM tools, approval interrupts, checkpoint persistence, and failure handling.

  • Controlled workflow

    Text, voice, and guided controls converge on one application-owned booking path.

  • CRM safeguards

    Identity-scoped reads, live availability, and operation-specific tools keep CRM state authoritative.

  • Explicit writes

    Booking, rescheduling, and cancellation pause for confirmation before changing CRM state.

Design principles

Key engineering decisions

The model handles ambiguity and routing; ordinary application code owns correctness-critical behavior.

  1. Keep EspoCRM authoritative

    The assistant reads live contacts, services, availability, and appointments instead of replacing the CRM.

  2. Put guarantees in application code

    Identity, valid slots, deterministic controls, and operation boundaries do not depend on model behavior.

  3. Require approval for writes

    Each booking, reschedule, or cancellation is tied to a specific pending operation before the write proceeds.

Selected outcomes

Controlled tool use, live CRM availability, identity-scoped operations, and explicit approval gates in an inspectable TypeScript implementation.

Resources

  • LangGraph
  • Telegram
  • EspoCRM
  • Docker
  • TypeScript

Need an AI workflow connected to real operations?

I help teams build AI-native products, connect agents to real business workflows, and ship reliable full-stack systems.