https://www.pengutronix.de
Mit Asterisk und Django zur eigenen Telefonanlage
Asterisk benutzen ohne Asterisk zu lernen
Chris Fiege - [email protected] Scherf - [email protected]
2/48
Das sind wir:
Chris Fiege Elektronikentwicklung „Spezialmesstechnik“ Freifunk
Florian Scherf Webdeveloper Python
3/48
Pengutronix
4/48
Was bisher geschah...
5/48
Was bisher geschah...
6/48
Was bisher geschah...
7/48
Was bisher geschah...
8/48
Was bisher geschah...
9/48
Was bisher geschah...
10/48
Was bisher geschah...
11/48
Was bisher geschah...
12/48
Was bisher geschah...
13/48
Anforderungen
30+ Mitarbeiter
14/48
Anforderungen
30+ Mitarbeiter DECT an mehreren Standorten Kollegen im Homeoffice
15/48
Anforderungen
30+ Mitarbeiter DECT an mehreren Standorten Kollegen im Homeoffice Selbst gehostet
16/48
Anforderungen
30+ Mitarbeiter DECT an mehreren Standorten Kollegen im Homeoffice Selbst gehostet Zugriff auf Sourcen Dienstleisterunabhängig
17/48
Idefisk
Asterisk Webserver
18
19/48
Asterisk
Volljährig: Entwicklung 1999 begonnen
20/48
Asterisk
Volljährig: Entwicklung 1999 begonnen Technologien:
SIP, ISDN, Analog, WebRTC, Bluetooth, …
21/48
Asterisk
Volljährig: Entwicklung 1999 begonnen Technologien:
SIP, ISDN, Analog, WebRTC, Bluetooth, … Mehrere Generationen Interfaces:
Spool Files, AGI, AMI, ARI, ODBC, LUA, ...
22
23CC0: MOTOI Kenkichi @ de.wikipedia.org
24/48
System
SIP-Upstream Asterisk SIP-Phone
SIP-Phone
SIP-Phone
Webserver Browser
SIP-Upstream
25/48
System: Zentrale Komponenten
SIP-Upstream Asterisk SIP-Phone
SIP-Phone
SIP-Phone
Webserver Browser
SIP-Upstream
26/48
System: SIP
SIP-Upstream Asterisk SIP-Phone
SIP-Phone
SIP-Phone
Webserver Browser
SIP-Upstream
27/48
System: Konfiguration
SIP-Upstream Asterisk SIP-Phone
SIP-Phone
SIP-Phone
Webserver Browser
SIP-Upstream
28/48
System: Asterisk
SIP-Upstream Asterisk SIP-Phone
SIP-Phone
SIP-Phone
Webserver Browser
SIP-Upstream
29/48
/etc/asterisk/sip.conf
[friends](!)type=friendcontext=from-intallow=g722
30/48
/etc/asterisk/sip.conf
[friends](!)type=friendcontext=from-intallow=g722
[10](friends)secret=asdf123
[11](friends)secret=qwert987
[12](friends)secret=1qayxsw2
31/48
/etc/asterisk/sip.conf
32/48
/etc/asterisk/extensions.conf
[from-int]exten = _1X, Dial(SIP/${EXTEN})
33/48
Asterisk: Komplexität auslagern
SIP-Upstream Asterisk SIP-Phone
SIP-Phone
SIP-Phone
Webserver Browser
SIP-Upstream
34/48
/etc/asterisk/extensions.conf
[from-int]exten = _1X, Set(RET=${ SHELL(curl http://localhost/route? from=${CALLERID(num)}\& to=${EXTEN} )})
35/48
http://localhost/route
Anfrage:http://localhost/route?from=<from>&to=<to>
36/48
http://localhost/route
Anfrage:http://localhost/route?from=<from>&to=<to>
http://localhost/route?from=10&to=11
37/48
http://localhost/route
Anfrage:http://localhost/route?from=<from>&to=<to>
http://localhost/route?from=10&to=11
Antwort:<rc>`<target>
38/48
http://localhost/route
Anfrage:http://localhost/route?from=<from>&to=<to>
http://localhost/route?from=10&to=11
Antwort:<rc>`<target>
0`SIP/11
39/48
/etc/asterisk/extensions.conf
[from-int]exten = _1X, Set(RET=${ SHELL(curl … }) same = n, Set(rRC=${CUT(RET,`, 1)}) same = n, Set(rTARGET=${CUT(RET,`, 2)})
40/48
/etc/asterisk/extensions.conf
[from-int]exten = _1X, Set(RET=${ SHELL(curl … }) same = n, Set(rRC=${CUT(RET,`, 1)}) same = n, Set(rTARGET=${CUT(RET,`, 2)}) same = n, Dial(${rTARGET})
41/48
Missing
Ausgehene Telefonate
42/48
Missing
Ausgehene Telefonate Telefonate über SIP-Trunk
43/48
Missing
Ausgehene Telefonate Telefonate über SIP-Trunk Fehlerbehandlung
44/48
System: Konfiguration
SIP-Upstream Asterisk SIP-Phone
SIP-Phone
SIP-Phone
Webserver Browser
SIP-Upstream
45/48
Asterisk ManagerHTTPS
Nginx
WSGI
Aiohttp
WSGI
Django
Postgres
SQL
SIP
Asterisk
spoolfile HTTPcli
46/48
Asterisk ManagerHTTPS
Nginx
WSGI
Aiohttp
WSGI
Django
Postgres
SQL
SIP
Asterisk
spoolfile HTTPcli
47/48
Asterisk ManagerHTTPS
Nginx
WSGI
Aiohttp
WSGI
Django
Postgres
SQL
SIP
Asterisk
spoolfile HTTPcli
48/48
Asterisk ManagerHTTPS
Nginx
WSGI
Aiohttp
WSGI
Django
Postgres
SQL
SIP
Asterisk
spoolfile HTTPcli