Skip to main content

Asterisk PBX


  • TransitBridge is only available on the same host as TetraPack Core, so the target of this document is a server administrator. Other Asterisk systems can be connected to transit Asterisk system via IAX2, SIP, etc.

  • TransitBridge (as well as DetroitBridge) is plug-and-play, no extra configuration required.

  • TransitBridge channel driver uses only default dialplan context. Please use GotoIf or Lua.

  • Some TETRA Systems (at least CTS) don't support external numbers (PSTN on PABX) for messaging.

  • Some TETRA Systems (at least CTS) don't support PABX calls (PSTN or ISSI only).


  • - TETRA codec definitions and translations, uses our own library
  • - TransitBridge channel driver

Environment variables



systemname = <numeric ID of local system>


Outbound calls

Dial(Transit/<Core ID>/<ISSI>[/<options>])

Where options are:

  • s - Use simplex call with PTT control (RADIO_KEY/RADIO_UNKEY, see app_rpt)
  • t - Use PSTN call (source ISSI 16777184, CALERID(num) is passed as an external number)
  • b - Use PBX call (source ISSI 16777186, CALERID(num) is passed as an external number)
  • n<ISSI> - Use specified source ISSI and pass CALLERID(num) as an external number
  • c<0-3> - Use service number 0-3 (at this moment only 0 / ACELP is supported)
  • p<0-15> - Set call priority

By-default duplex individual call with ACELP (0) and normal priority (0) will be created.



Inbound calls

Channel variables:

  • TRANSIT_TYPE=ISSI - Extension ID contains destination ISSI
  • TRANSIT_TYPE=Number - Extension ID contains destination external number
  • TRANSIT_FLOW=PTT - Simplex call
  • TRANSIT_ISSI=<ISSI> - Destination ISSI
    (only when TRANSIT_TYPE=Number, should contain 16777184 for PTSN call or 16777186 for PBX call)
  • TRANSIT_PRIORITY=<0-15> - Call priority

Outbound messages

MessageSend(Transit:<Link ID>[/<Destination ISSI>][,<Source ISSI>[ <External Number>]])

Please keep your eyes on formatting. There no spaces in <to> section, no space after comma in <from> section and only single space between source ISSI and external number.

Channel variables:

  • MESSAGE(to)=<ISSI>
  • MESSAGE(from)=<ISSI>
  • MESSAGE(body)=<Text>
  • MESSAGE_SEND_STATUS - Will be set to SUCCESS, when the message accepted by the basestation (TNSDS-REPORT result=0), timeout is 500 milliseconds.

    Asterisk API said, it corresponds to message enqueuing, not delivery, but we have a bit more. :)

Inbound messages

Channel variables:

  • MESSAGE(to)=<ISSI/External Number>
  • MESSAGE(from)=<ISSI>
  • MESSAGE(body)=<Text>
  • MESSAGE_DATA(TRANSIT_TYPE)=ISSI - Extension ID and MESSAGE(to) contain destination ISSI
  • MESSAGE_DATA(TRANSIT_TYPE)=Number - Extension ID and MESSAGE(to) contain destination external number
    (only when MESSAGE_DATA(TRANSIT_TYPE)=Number, should contain 16777184 for PTSN call or 16777186 for PBX)

TransitBridge sends delivery report when terminal requested that. Delivery status depends on the status of dialplan proceeding.

Technical Information

Channel ID format

Specific Hangup-Cause codes

Transit <TETRA disconnect-cause code>

Get TETRA disconnect-cause codes at Table 14.55 in ETSI EN 300 392-2 V3.8.1. Read more about Hangup Cause here.

Dialplan example

exten => 9XXXXXXX,1,Dial(Transit/2505/${EXTEN:1}/t)
same  => n,NoOp(Disconnect Cause: ${HANGUPCAUSE(${HANGUPCAUSE_KEYS()},tech)})
same  => n,HangUp()
exten => 16777184,1,NoOp(Incoming message)
same  => n,NoOp(From: ${MESSAGE(from)})
same  => n,NoOp(To: ${MESSAGE(to)})
same  => n,NoOp(Body: ${MESSAGE(body)})
same  => n,MessageSend(Transit:2505/${MESSAGE(from)},16777184 911)
same  => n,NoOp(Message send status: ${MESSAGE_SEND_STATUS})