# RoomCall > RoomCall is a Home Assistant custom integration (Marketplace, or HACS before HA 2026.11) that turns the speakers Home Assistant > already controls (Sonos, Google Cast/Nest, AirPlay, HEOS receivers, Android TV boxes) into an > intercom and announcement system, organised by Home Assistant areas. Domain: `roomcall`. One config entry. Everything is managed through standard Home Assistant APIs; no extra credentials. ## Do things - Start with `roomcall__catalog`: API version, operation schemas, response envelope and bootstrap recipe. - Setup before an entry exists: after Marketplace or HACS installation (restart if HA asks), start HA's RoomCall user config flow. Opening the flow registers tools/card resources; no entry or optional service is created yet. - `roomcall__setup` actions discover/plan/apply/test/confirm/verify/list/get/undo share the card's guided setup backend. Authenticated HA administrator required. Discovery includes settings_schema. Plans persist 24 hours, are owner-scoped and revision checked; interrupted apply/undo can resume. Undo requires confirm:true and current revision; new entries with added announcements are protected. - Choose a speech provider if ambiguous, or explicitly plan media_only:true. Never fabricate heard:true. - `roomcall__announcements`: schema/list/create/update/enable/disable/delete. Native HA subentries; revisions for changes, confirm:true for delete, bounded persistent create idempotency. - `roomcall__doctor`: diagnose setup failures, or action:plan_route for an identified physical alternate endpoint. Returns a draft; never silently changes policy/network/cloud/retention. - Speak or play audio now: action `roomcall.broadcast` with `areas`, `floors`, `labels`, `speakers`, `people`, `message` or `media_url`, `priority` (`normal`|`urgent`), `volume`. Returns `{ok, id, results[], skipped}`. - Assist / LLM agents: intent `RoomCallAnnounce` (slots `message`, `area`, `urgent`). - Current HA: explicit `roomcall__*` LLM tools. Older HA: select the RoomCall LLM API. - Discover first: `roomcall__discover`; preview explicit recipients with `roomcall__preview`. - Send: `roomcall__send` with targets + message/media_url; returns a job id. Retry the same payload with the same idempotency_key; check `roomcall__status` afterward. - Questions: `roomcall__ask` on compatible discovered satellites; actual transcribed responses. - Diagnose: `roomcall__diagnose`. Stable errors include dnd_blocked, quiet_hours_blocked, presence_unknown, forbidden, expired and idempotency_conflict. Never silently use urgent. - HTTP: authenticated POST `/api/roomcall/command` with `{operation,request}`. - HA action: `roomcall.communicate` with `{operation,request}` and return_response. - Success means playback request acceptance, not audible playback. Inspect separate audio_fetched_ms/playback_reported_ms evidence; human acknowledgment is explicit. - New send operations require areas/floors/labels/speakers/people or everywhere:true, directly or through a household profile. HA permissions and assistant exposure apply. Ordinary jobs/keys are bounded and in memory. - Durable text jobs: durable:true requires an explicit idempotency_key. Queued/unexpired work resumes with current policy after HA startup. Potentially dispatched work becomes interrupted; never automatically resend it. Retained owner/key/results: at most 128 jobs, up to 24 hours. - discover.profiles lists permitted household presets; preview/send accept profile:. Explicit targets replace all preset destinations. Voice/chime changes are per message. - discover.speech_profiles lists configured fast/balanced/quality voice labels. Send speech_profile: