(Asterisk Dialplan example)
Line 1: Line 1:
Since version BrandMeister Core 20211013-125527 has support of Asterisk's AudioSockets
+
Since version BrandMeister Core 20211013-125527 has support of Asterisk's AudioSockets.
 +
To use AudioSockets you have to configure each channel profile in Core's config. UUID is an optional parameter. When undefined, Core will generate new one on the start (each AudioSocket channel correspond to Core's connection context). Core allows only one connection per channel. New connection to the same channel will replace existing one.
 +
To secure the system, Core authorises each connection my IP and UUID. Address can be IP or domain name. Core updates it only on start. You can update it in runtime via D-BUS call ''invokeCommand()''. Also configuration of allowed DMR IDs and call type can be changed in runtime by call ''setSpecificValue()''. See information bellow.
  
 
You can generate static UUIDs here - https://www.uuidgenerator.net
 
You can generate static UUIDs here - https://www.uuidgenerator.net
Line 5: Line 7:
 
'''We strongly recommend you to use it on top of phone conference bridges with autodial to BrandMeister Core'''
 
'''We strongly recommend you to use it on top of phone conference bridges with autodial to BrandMeister Core'''
  
== Asterisk Dialplan example ==  
+
== Asterisk simple Dialplan example ==  
 
<pre>
 
<pre>
 
exten = 101,1,Verbose("Call to AudioSocket via Channel interface")
 
exten = 101,1,Verbose("Call to AudioSocket via Channel interface")

Revision as of 18:41, 13 October 2021

Since version BrandMeister Core 20211013-125527 has support of Asterisk's AudioSockets. To use AudioSockets you have to configure each channel profile in Core's config. UUID is an optional parameter. When undefined, Core will generate new one on the start (each AudioSocket channel correspond to Core's connection context). Core allows only one connection per channel. New connection to the same channel will replace existing one. To secure the system, Core authorises each connection my IP and UUID. Address can be IP or domain name. Core updates it only on start. You can update it in runtime via D-BUS call invokeCommand(). Also configuration of allowed DMR IDs and call type can be changed in runtime by call setSpecificValue(). See information bellow.

You can generate static UUIDs here - https://www.uuidgenerator.net

We strongly recommend you to use it on top of phone conference bridges with autodial to BrandMeister Core

Asterisk simple Dialplan example

exten = 101,1,Verbose("Call to AudioSocket via Channel interface")
same = n,Answer()
same = n,Dial(AudioSocket/server.example.com:9092/6c7a28ca-4d20-4db3-9a8a-497594de57a8)
same = n,Hangup()

BrandMeister Core configuration example

AudioSocket :
{
  port = 9092;  // TCP port
  channels =
  [
    "Socket20"
  ];
};

Socket20 :
{
  // AudioSocket ID
  number = 20;
  // AudioSocket UUID (optional)
  identifier = "6c7a28ca-4d20-4db3-9a8a-497594de57a8";
  // Codec type:
  // AMBEServer - to use with AMBEserver or dvemu (please check https://github.com/dl5di/OpenDV/tree/master/DummyRepeater)
  // USB Dongle - to use with DVSI USB-3000/USB-3003/USB-3012, NW ThumbDV/ThumbDV-3 or DV3K Dongle
  type = "AMBEServer";
  // Location of codec:
  // <domain name>[:<port>][,<interval>] - in case of AMBEServer (interval - address refresh interval in seconds, 10 minutes by default)
  // <path to TTY device>[;speed=230400] - in case of USB Dongle
  location = "localhost:2460";
  // Address of Asterisk server (used to authorise incoming connection)
  address = "localhost";
  // VAD parameters
  start = 47;    // Level percentage to start
  release = 10;  // Level percentage to continue
  // Outgoing session parameters (optional)
  mode = "Group";
  source = 1;
  destination = 9504;
};

API commands

invokeCommand(context, command)

  • set alias <talker alias>
  • set address <asterisk address, domain names accepted>

setSpecificValue(context, parameter, value) / getSpecificValue(context, parameter)

#define VALUE_SOCKET_OUTGOING_MODE       0 
#define VALUE_SOCKET_OUTGOING_SOURCE_ID  1
#define VALUE_SOCKET_OUTGOING_TARGET_ID  2
#define VALUE_SOCKET_INCOMING_MODE       3
#define VALUE_SOCKET_INCOMING_SOURCE_ID  4
#define VALUE_SOCKET_INCOMING_TARGET_ID  5
#define VALUE_SOCKET_HOOK_MODE           6
#define VALUE_SOCKET_CONNECTION_STATE    7

#define SOCKET_MODE_PRIVATE  0 
#define SOCKET_MODE_GROUP    1

#define SOCKET_HOOK_NONE       0
#define SOCKET_HOOK_CALL_BACK  1
#define SOCKET_HOOK_TARGET_ID  2

Since version BrandMeister Core 20211013-125527 has support of Asterisk's AudioSockets

You can generate static UUIDs here - https://www.uuidgenerator.net

We strongly recommend you to use it on top of phone conference bridges with autodial to BrandMeister Core

Asterisk Dialplan example[edit]

exten = 101,1,Verbose("Call to AudioSocket via Channel interface")
same = n,Answer()
same = n,Dial(AudioSocket/server.example.com:9092/6c7a28ca-4d20-4db3-9a8a-497594de57a8)
same = n,Hangup()

BrandMeister Core configuration example[edit]

AudioSocket :
{
  port = 9092;  // TCP port
  channels =
  [
    "Socket20"
  ];
};

Socket20 :
{
  // AudioSocket ID
  number = 20;
  // AudioSocket UUID (optional)
  identifier = "6c7a28ca-4d20-4db3-9a8a-497594de57a8";
  // Codec type:
  // AMBEServer - to use with AMBEserver or dvemu (please check https://github.com/dl5di/OpenDV/tree/master/DummyRepeater)
  // USB Dongle - to use with DVSI USB-3000/USB-3003/USB-3012, NW ThumbDV/ThumbDV-3 or DV3K Dongle
  type = "AMBEServer";
  // Location of codec:
  // <domain name>[:<port>][,<interval>] - in case of AMBEServer (interval - address refresh interval in seconds, 10 minutes by default)
  // <path to TTY device>[;speed=230400] - in case of USB Dongle
  location = "localhost:2460";
  // Address of Asterisk server (used to authorise incoming connection)
  address = "localhost";
  // VAD parameters
  start = 47;    // Level percentage to start
  release = 10;  // Level percentage to continue
  // Outgoing session parameters (optional)
  mode = "Group";
  source = 1;
  destination = 9504;
};

API commands[edit]

invokeCommand(context, command)[edit]

setSpecificValue(context, parameter, value) / getSpecificValue(context, parameter)[edit]

#define VALUE_SOCKET_OUTGOING_MODE       0 
#define VALUE_SOCKET_OUTGOING_SOURCE_ID  1
#define VALUE_SOCKET_OUTGOING_TARGET_ID  2
#define VALUE_SOCKET_INCOMING_MODE       3
#define VALUE_SOCKET_INCOMING_SOURCE_ID  4
#define VALUE_SOCKET_INCOMING_TARGET_ID  5
#define VALUE_SOCKET_HOOK_MODE           6
#define VALUE_SOCKET_CONNECTION_STATE    7

#define SOCKET_MODE_PRIVATE  0 
#define SOCKET_MODE_GROUP    1

#define SOCKET_HOOK_NONE       0
#define SOCKET_HOOK_CALL_BACK  1
#define SOCKET_HOOK_TARGET_ID  2