Skip to content

FreeSWITCH

Describe FreeSWITCH’s role at the edge: bridging call legs, running AMD, recording, and playing prompts and voicemail.

FreeSWITCH is the edge B2BUA and media engine, driven by the call engine over ESL. It dials carriers for outbound calls, bridges legs (caller ↔ agent), runs answering-machine detection (mod_avmd), records calls (uuid_record), and plays prompts/voicemail from synced media. It listens on 5066; OpenSIPS authenticates first, so its external profile runs with auth-calls=false and only ever sees plain RTP (rtpengine terminates the browser-side SRTP/DTLS/ICE).

The dialplan disambiguates by feature code on CHANNEL_PARK:

Pattern Handler
*86<ext> queue entry
*87<ext> IVR entry
*88<group> ring group
*99<mailbox> voicemail record
<NNNN> bridge to a registered agent extension

The node agent renders per-carrier gateways and the outbound dialplan, and plays synced assets from the edge media root (which must match the control plane):

Terminal window
EDGE_MEDIA_ROOT=/var/lib/get2dial/media
ESL_PASSWORD=... # must match the call engine / node agent

On an answered outbound call FreeSWITCH runs AMD; a human (or AMD-timeout unknown) answer is bridged to the agent, while a detected machine triggers a voicemail drop from the audio library.

  • caller-id-in-from is set unconditionally so the campaign CLI reaches the carrier in the SIP From header — otherwise sofia falls back to the gateway auth username and the real caller ID only rides in Remote-Party-ID (which most carriers ignore).
  • Gateways are reloaded via ESL (reloadxml + sofia profile external rescan). A plain rescan picks up new gateways but may not refresh changed params on an existing one (recreate it).
  • The FreeSWITCH image is built from source (Signalwire moved the apt repos behind a paywall after 1.10.10).