demarcDocs

Telnyx setup#

demarc uses a Telnyx TeXML application for inbound calls, signed webhooks for call and message events, and a bidirectional media WebSocket for voice.

Before you start#

  • A deployed demarc runtime at a stable public HTTPS origin.
  • A Telnyx account, an owned voice-capable number and a TeXML application.
  • Completed live provider configuration for speech recognition and synthesis.
  • A healthy /api/ready response.

Connect the TeXML application#

  1. Set the application's voice URL to the deployed HTTPS origin plus /texml/incoming.

  2. Use POST for the voice method.

  3. Set the status callback to the same origin plus /texml/status.

  4. Use POST for the callback method.

  5. Assign the application to the intended Telnyx number.

  6. Configure the Telnyx public key and application, connection, messaging profile and phone-number identifiers in demarc.

Automated messaging must not be enabled for a local number until its 10DLC status is approved. Toll-free numbers likewise require verification.

Callbacks demarc generates#

The voice URL and the status callback are the only entry points you configure in Telnyx. When a phone-system feature is enabled, demarc returns TeXML that points Telnyx at further callbacks under /texml/ for the dial result, queue progress, voicemail capture and inbound call controls. Those URLs are generated per call, carry a signature bound to that call, and are also verified against the Telnyx signature. Do not create, rewrite or proxy them by hand.

Only the dial-result callback expires, five hours after it is issued. The queue, voicemail and inbound-control callbacks are bound to a per-call secret rather than to a deadline, so treat any copy of one as sensitive for as long as the call or message it names still exists.

Advanced inbound control, voicemail and queue handling also require the callback to match TELNYX_TEXML_ACCOUNT_SID and the configured TeXML application. A callback from another account or application is not treated as an advanced call: the number stays on the basic dial and media-stream path. Check these identifiers first when an enabled feature appears inert on a live number.

A repeated request for a call that has already progressed does not replay the original document, so a provider retry cannot queue or record the same caller twice.

Verify#

Call the number from a separate phone. Confirm that the greeting plays, speech is recognised, the caller can interrupt playback, and the completed call appears in the dashboard. Then inspect /api/ops/status and Telnyx delivery logs for webhook or media failures.

For messaging, send an inbound SMS and confirm the reply on the handset. A sent state in demarc means Telnyx accepted the outbound message; it is not a delivery receipt.

If it does not work#

Symptom Check Recovery
The number rings but nothing answers Telnyx delivery logs for a webhook that never arrived The callback URLs must be publicly reachable; a local instance is not
The greeting plays but speech is never recognised The media stream, not the webhook See The caller hears no response
Telnyx reports a call it cannot start Credentials and the TeXML application binding See Telnyx cannot start a call
Local checks pass and the live line still fails /api/ops/status against the Telnyx delivery log See Local checks pass but the live line does not
Inbound SMS never produces a reply Whether messaging is bound to the same application Voice and messaging are configured separately