====== Voice support ======
The NetModule Router Series NB2000 and NB3000 support voice and audio communication with two extension:
- **Voice-License ("V")** GSM-Voice to VoIP/SIP to make or receive PSTN voice call over the mobile network.
- **Audio ("A")** stereo line-in/out to VoIP/SIP to connect audio signals directly to the device. Typical microphone and loudspeaker via external amplifier.
- **Push-to-Talk ("Ap")** mono line in/out to connect audio signals directly to the device, 1/1 digital in/out e.g. for call & ring signaling
===== Basic concept =====
An endpoint is a SIP/VoIP device like
* Internal GSM-Voice
* Internal Audio-Interface
* External SIP-Phone, PBX, door station etc.
To establish a call two steps are needed:
- Signalling = establish a call
- Call-Routing = making the connection
Simple behaviour can be configured by the Web-GUI.
For more complex applications the SDK can be used.
{{:app-notes:voice1.jpg?600|}}
===== Voice gateway configuration via Web GUI=====
Using the router with a SIP phone client.
==== Administration ====
{{:app-notes:voice1.png?600|}}
==== Endpoints ====
{{:app-notes:voice2.png?600|}
^ Parameter ^ Voice Gateway Endpoint Types ^
| Voice-Over-Mobile | Endpoint for GSM/UMTS/LTE calls (can be used for calls to mobile or landline phones)|
| SIP (registrar)| SIP endpoint which can be a client registered to our registrar |
| SIP (direct)| Endpoint for calls directly routed to a SIP agent without registration |
| SIP (user-agent) | Endpoint acting as SIP user agent towards a remote registrar |
==== Endpoint types ====
{{:app-notes:voice3.jpg?600|}}
==== Routing ====
{{:app-notes:voice4.png?600|}}
==== Routing modes ====
{{:app-notes:voice5.png?600|}}
===== SDK scripts =====
Endpoints are represented as structs
struct(3): {
.id = int: 54321
.desc = string[5]: "vom://Vom1"
.state = string[4]: "busy"
.volume = = int: 7
};
Descriptors
* Sip1 First SIP subscriber
* Vom1 First Voice-Over-Mobile
* Aud1 First Audio device
* sip:⁄⁄user@192 .168.1.254:5060 SIP address
States
* busy endpoint is already holding a call
* available endpoint is ready to take a call
Calls are represented as structures which may look like:
struct(5): {
.id = int: 12345
.state = string[7]: "dialing"
.calling = string[24]: "sip://user@192 .168.1.254:5060"
.called = string[22]: "vom://+123456789 @Vom1"
};
The following states are possible:
* routing call is in routing state
* dialing call is in dialing state
* alerting call is in alerting state
* active call is active
* hungup call had hung up
Voice functions:
* array nb_voice_endpoint_list (void) / struct nb_voice_endpoint_get (endpoint)
* Unordered List Itemarray nb_voice_call_list (void) / struct nb_voice_call_get (call)
* int nb_voice_call_dial (call)
* int nb_voice_call_accept (call)
* int nb_voice_call_route (call, endpoint)
* int nb_voice_call_hangup (call)
* int nb_voice_call_volume (endpoint, int level)
==== How to make a call ====
=== Start Call ===
* Unordered List Itemnb_voice_call_dial(call) or wait for call
=== Event magement ===
* Unordered List ItemOutgoing – do nothing
* Incomming - nb_voice_call_route(call, target endpoint)
* Dispatched: alerting -> nb_voice_call_accept(call)
=== End Call ===
* nb_voice_call_hangup(call)
[[sdk:scripts:voice-dispatcher-audio|Sample SDK Script voice call dispatching]]
----
[[configuration:configuration|Example: Voice Gateway Configuration File]]