← All work

CleanHaus

Rental cleaners update jobs by text or voice, under the same login rules

CleanHaus cleaners report from the property, on their phones, in many languages. We made its AI assistant reachable by text, picture message and a live voice call, each signed in to the same account and role as the app.

Real Estate & HospitalityTurnover operations SaaSAI added to a live product

A cleaning job in progress with its task checklist, beside the action items that cleaner reports feed.

The challenge

Cleaners report from the field, often by text and in different languages, and existing tools needed app installs and heavy onboarding. The assistant could not be reached by text or voice.

What we did

Text and picture messages that sign in by phone number, a live voice call for cleaners that never hands their login to the voice service, and replies in each user's language, all on the app's own accounts.

The outcome

Texts and photos run on a production short code, cleaner voice calls went to a client trial, and CleanHaus reported its app and AI agent live.

Status
App and AI agent live, texts on a production short code
Channels
App chat, SMS and MMS, Slack and voice calls
Voice
Cleaners only, role checked on every call
Languages
Replies in each user's language, chat translated

The starting point

CleanHaus connects property owners, cleaner managers and cleaners around every short-term rental turnover. Cleaners work at the property itself and report updates, issues, photos and supplies from their phones, often by text, in different languages and time zones.

What had to change

Existing tools needed app installs and heavy onboarding and did not handle several languages, which the client named as a cause of delays and missed tasks. The assistant could not be reached by text or voice.

What could not break

  • Every channel signs in to the same Cognito account the app uses
  • A cleaner acts only on their own jobs, by text, by voice or in the app
  • Text threads must know who is writing without the app
  • A user's login never passes through the voice service

The calls we made

We treated each channel as another door into the same assistant, signed in to the same account with the same role, and built the doors inside CleanHaus's own backend and apps.

  1. 01

    The phone number is the login

    Cleaners text from their own phones, so SMS signs them in by phone number against their existing Cognito account and keeps a thread per person; the client tested phone-only sign-in before it replaced the first one-time code flow.

    Ruled out

    Asking field staff to install and sign in to an app before they can report anything.

  2. 02

    Photos land on the job

    With MMS and a media webhook, a cleaner texts a photo and a few words about the house, and the assistant adds them to the right job as a note.

  3. 03

    The voice service never sees the login

    A new endpoint in CleanHaus's backend passes the caller's own login to the assistant, which checks the cleaner role, holds the login in a one-time record that expires in two minutes and returns a token for a single call room.

  4. 04

    Realtime models for voice

    Voice needed low latency, so calls run on OpenAI's realtime models through LiveKit, greet the cleaner by first name and reply briefly in the caller's language.

    Ruled out

    Separate speech-to-text and text-to-speech steps, the voice plan in the first scope.

  5. 05

    Every user's own language

    The assistant replies in each user's language and translates property chat, so a cleaner and a host can work the same turnover in different languages.

How the system fits together

texts andphotoschat or callphone numberstreamed chatstart a callcaller's ownloginsingle room tokenidentitysame assistantspeechrole's toolsCleanersText, call or usethe appTwilio SMS andMMSProduction shortcode, photosCleanHaus appsChat and the cleanercall buttonVoice sessionendpointNew Lambda in theclient's backendChannel routerThreads per user andchannelLiveKit call roomOne room per call,token onlyAmazon CognitoExisting accountsand rolesAssistant andvoice agentSame role rules inevery channelOpenAI realtimemodelgpt-realtime-minifor speechCleanHaus backendAPIsProfiles, jobs,notes, bookings
PeopleOutside serviceClient's existing systemBuilt by DaticsAI modelEvery channel ends at the same CleanHaus APIs and Cognito identity, and the voice service only ever gets a token for one call room, never the user's login.

What we built

SMS and MMS channel

Twilio text and picture messages with phone-based sign-in, a thread per person, a media webhook that turns photos into job notes and a production short code.

From the App Store listing: mobile turnover calendar showing every booking and cleaning across properties (sample data)
02

Cleaner voice calls

A call button for cleaners only, a realtime agent on LiveKit with gpt-realtime-mini that greets by first name and replies briefly in the caller's language, a live transcript with tool cards, and a call that stays up while the cleaner opens a job or the calendar.

03

Replies in each user's language

The assistant answers in the user's language on every channel and translates property chat for the people in it.

04

Slack with linked identity

The same assistant answers in Slack through Socket Mode, with each Slack identity linked to the user's account so role rules still apply.

How it works

Reach

A cleaner texts the assistant's short code, chats in the app or taps the call button, whichever is at hand.

Recognize

The assistant matches the phone number or login to the cleaner's account and checks their role.

Understand

It reads the text, photo or speech in the cleaner's language and finds the property and job they mean.

Update

It updates the job or adds the note through CleanHaus's own API and confirms in the same channel.

What changed

Text and picture messages run on a production short code under the same identity and role rules as the app, and cleaner voice calls went to a client trial. CleanHaus reported its app and AI agent live and credited our team.

“CleanHaus has been moving quickly to deploy our app and Broomy AI Agent with the key assistance of the Datics team. We couldn't have reached this point without your excellent bench of developers.”
Nat ParkerNat ParkerCEO and Co-FounderCleanHaus

Under the hood

Datics role
AI added to a live product
Messaging
Twilio SMS, MMS and a production short code, Stream Chat channels in the apps, and Slack through Socket Mode with identity linking.
Voice
LiveKit with gpt-realtime-mini for cleaner calls, after a first realtime session on the OpenAI Realtime API over WebRTC; calls end after ten minutes or a minute of silence.
Identity
Amazon Cognito for app, phone and voice sessions, phone-based sign-in for SMS, a one-time login record for each voice call and a fresh role check on every call.

AI and models

LangGraphOpenAI Realtime API

Cloud and infrastructure

AWS LambdaAmazon Cognito

Apps and APIs

PythonTwilio

Also in the stack

LiveKitSlack API

How it shipped

  1. SMS and in-app voice

    The first iterations added a Twilio SMS endpoint with Cognito sign-in and a realtime voice session on the OpenAI Realtime API over WebRTC.

  2. Photos, phone-only sign-in, production

    MMS with a media webhook, phone-only sign-in tested by the client, then a production short code with the open login APIs secured.

  3. Languages and Slack

    Replies in each user's language and property chat translation came first, then Slack through Socket Mode as the product went live.

  4. Cleaner voice calls

    Voice calls for cleaners moved to LiveKit with a session endpoint in the client's backend, a voice picker, a live transcript and a tuning panel for the client's trial.

Both sides of the client's stack

The voice session endpoint went into CleanHaus's own backend as a Lambda with tests, and the call panel into its own web app, so the channels run on the product the client already operates.

Client testing before production

The client tested phone-only sign-in before it reached production and trialed cleaner voice calls with a voice tuning panel.

Same accounts, every channel

Each channel was built against the backend and Cognito login the product already used, so no new account system ever reached the field.

What this unlocked

Next, each environment gets its own voice setup so calls can be tested before production, and voice reaches hosts as well as cleaners.

Have a product with the same kind of constraints?

Tell us what already exists and what you want it to do. We will tell you what it takes.

Book a 30-minute Product Review