Telephony
Iron runs its own telephony engine (apps/telephony) on Telnyx. It handles SMS send and
inbound, the voice / dialer pipeline, call recording → transcription → AI summary → call
intelligence, and DNC. It is served at your-domain.example and writes the shared crm schema
directly.
The three Telnyx seams
Section titled “The three Telnyx seams”- SMS — outbound
POST /sms/send(shared-secret auth, DNC + from-number checked); inbound via the messaging-profile webhook (a STOP reply lands the number in the DNC list). - Voice — the call-control webhook drives
call.initiated/answered/hangup/recording.savedthrough the voice pipeline. - Dialer — a browser WebRTC backend powers the in-CRM dialer. A mobile tap-to-call bridge
(
POST /calls/bridge) places a two-leg rep ↔ contact call for the mobile app.
The call pipeline
Section titled “The call pipeline”One call enriches one crm.activities row in place across its lifecycle: hangup → recording →
transcript (local Whisper) → AI summary → call-intel score → disposition. It also writes a
crm.calls row. Dialer calls render inline in the contact’s conversation thread with their
duration, disposition, and AI summary.
Voice agents
Section titled “Voice agents”An inbound voice receptionist (Retell-backed) is live. It speaks a shared voice + SMS tool contract (end call, escalate, transfer, take message, book / reschedule / cancel an appointment). Outbound voice (for appointment confirmations and reminders) is built but gated off by default.
Number provisioning
Section titled “Number provisioning”Provisioning a new client DID is a recipe: buy the number, register A2P (10DLC), attach the
messaging and voice profiles, record it in crm.numbers, wire it into the tenant, and set the
lead-alert config. A fresh DID can take minutes to hours before it can text real carriers (10DLC
propagation) but can text Telnyx numbers immediately.