Extensions, Lines & Ring Groups¶
Overview¶
All SIP extensions are managed via the Platform API and delivered dynamically to FreeSwitch viamod_xml_curl. There are no static file extensions.
Extensions¶
Current occupation¶
| Extension | Name | Domain: | Users | Type |
|---|---|---|---|---|
| 1000 | Staff | sip.xynap.tech | admin (1) | Standard |
| 1001 | Staff 2 | sip.xynap.tech | andre.willing (3) | Standard |
| 1010 | Line Extension 1 | sip.xynap.tech | — | Line |
| 1011 | Line Extension 2 | sip.xynap.tech | — | Line |
| 1012 | Line Extension 3 | sip.xynap.tech | — | Line |
| 1013 | Line Extension 4 | sip.xynap.tech | — | Line |
| 21–24 | Support/Sales | sip.xynap.tech | — | Short term |
| webrtc 1 | WebRTC Client 1 | sip.xynap.tech | — | WebRTC |
| webrtc 3 | WebRTC Client 3 | sip.xynap.tech | — | WebRTC |
Number plan¶
| Area | Use |
|---|---|
| 1000–1099 | Regular extensions (employees) |
| 1010-1019 | Line Extensions (multiple lines) |
| 21–29 | Short choices (Support, Sales etc.) |
| webrtc * | WebRTC-Only Clients |
| *99 | Test extension → LiveKit SIP Bridge |
API management¶
# Alle Extensions auflisten
GET /api/v1/sip/extensions
# Neue Extension anlegen
POST /api/v1/sip/extensions
{
"extension": "1002",
"name": "Neuer Mitarbeiter",
"domain": "sip.xynap.tech",
"user_id": 5,
"password": "auto-generated",
"enabled": true
}
# Extension-Config fuer SIP-Phone abrufen
GET /api/v1/sip/extensions/{id}/config
Password handling
Passwords are generated on the server side and Fernet-encrypted is stored in the database. The/configendpoint returns the password decrypted — this endpoint requires the corresponding RBAC permission.
Lines (multiple lines)¶
Lines allow to associate several phone numbers/trunks of an extension. A line linked:
- Extension(e.g. 1010)
- DID(incoming call number)
- Trunk(external provider)
# Lines verwalten
GET /api/v1/sip/lines
POST /api/v1/sip/lines
{
"extension_id": 3,
"did_id": 1,
"trunk_id": 2,
"priority": 1
}
Ring Groups¶
Ring Groups distribute incoming calls to multiple extensions simultaneously or successively.
# Ring Groups verwalten
GET /api/v1/sip/ring-groups
POST /api/v1/sip/ring-groups
{
"name": "Support Team",
"strategy": "simultaneous",
"ring_timeout": 30,
"extensions": [1000, 1001]
}
Strategien:
| Strategy | Description |
|---|---|
simultaneous |
All extensions ring simultaneously |
sequence |
Extensions ring in succession |
random |
Random selection |
Call Filters¶
Call filters allow black and whitelisting of phone numbers:
GET /api/v1/sip/call-filters
POST /api/v1/sip/call-filters
{
"name": "Spam-Block",
"type": "blacklist",
"pattern": "+49176*",
"action": "reject"
}
SIP-Phone Provisioning¶
Connection data¶
| Parameters | Value |
|---|---|
| SIP server | sip.xynap.tech |
| Port (UDP) | 5060 |
| Port (TLS) | 5061 |
| WSS (WebRTC) | wss://sip.xynap.tech:7443 |
| Domain: | sip.xynap.tech |
| Transport | UDP, TLS or WSS |
Hardware phones (e.g. Yealink, Snom)¶
Settings for a typical SIP phone:
Server: sip.xynap.tech
Port: 5060
Transport: UDP
Username: 1000
Password: (aus API /sip/extensions/{id}/config)
Domain: sip.xynap.tech
Outbound Proxy: (leer)
STUN: nicht noetig (host network)
NAT and STUN
Since FreeSwitch listens directly to the public IP withnetwork_mode: host, no STUN/TURN is required for the server side. Clients behind NAT may need STUN for their own RTP address detection.
Softphones (Linphone, Open-SIP etc.)¶
Same settings like Hardphones. Use Port 5061 for TLS connections and accept thesip.xynap.techcertificate.
WebRTC Softphone¶
The integrated WebRTC softphone in the xynap Platform usesJsSIPvia a WSS connection.
Technical details¶
| Parameters | Value |
|---|---|
| Library | JSIP |
| Protocol | WSS (WebSocket Secure) |
| URL | wss://sip.xynap.tech:7443 |
| Codecs | Opus (preferably), PCMA, PCMU |
| SRTP | Mandatory (WSS requires encrypted media) |
Acquaintances¶
JsSIP Race Conditions
JsSIP has known race conditions during connection setup. The WebRTC client must wait until the WebSocket connection is fully built up before a REGISTER is sent. The Platform-UI implements a connection-state handler with retry logic.
ICE Timeout
With slow connections, ICE-Gathering can take too long. The timeout is configured for 5 seconds. If the timeout regularly strikes, it can be adjusted in the FreeSwitch-Config.
DIDs (numbers)¶
DIDs (Direct Inward Dialing) assign incoming numbers to the correct routing.
# DIDs verwalten
GET /api/v1/sip/dids
POST /api/v1/sip/dids
{
"number": "+4934556643378",
"name": "IVR Hauptnummer",
"trunk_id": 1,
"destination_type": "ivr_menu",
"destination_id": 1
}
Routing objectives¶
| Type | Description |
|---|---|
extension |
Directly to the extension |
ring_group |
To a Ring Group |
ivr_menu |
To an IVR menu |
voicemail |
To a Voicemailbox |
external |
Forwarding to external number |