Mit Asterisk und Django zur eigenen Telefonanlage€¦ · Django Postgres SQL SIP Asterisk...

48
https://www.pengutronix.de Mit Asterisk und Django zur eigenen Telefonanlage Asterisk benutzen ohne Asterisk zu lernen Chris Fiege - c.fi[email protected] Florian Scherf - [email protected]

Transcript of Mit Asterisk und Django zur eigenen Telefonanlage€¦ · Django Postgres SQL SIP Asterisk...

Page 1: Mit Asterisk und Django zur eigenen Telefonanlage€¦ · Django Postgres SQL SIP Asterisk spoolfile cli HTTP. 48/48 Asterisk Manager HTTPS Nginx WSGI Aiohttp WSGI Django Postgres

https://www.pengutronix.de

Mit Asterisk und Django zur eigenen Telefonanlage

Asterisk benutzen ohne Asterisk zu lernen

Chris Fiege - [email protected] Scherf - [email protected]

Page 2: Mit Asterisk und Django zur eigenen Telefonanlage€¦ · Django Postgres SQL SIP Asterisk spoolfile cli HTTP. 48/48 Asterisk Manager HTTPS Nginx WSGI Aiohttp WSGI Django Postgres

2/48

Das sind wir:

Chris Fiege Elektronikentwicklung „Spezialmesstechnik“ Freifunk

Florian Scherf Webdeveloper Python

Page 3: Mit Asterisk und Django zur eigenen Telefonanlage€¦ · Django Postgres SQL SIP Asterisk spoolfile cli HTTP. 48/48 Asterisk Manager HTTPS Nginx WSGI Aiohttp WSGI Django Postgres

3/48

Pengutronix

Page 4: Mit Asterisk und Django zur eigenen Telefonanlage€¦ · Django Postgres SQL SIP Asterisk spoolfile cli HTTP. 48/48 Asterisk Manager HTTPS Nginx WSGI Aiohttp WSGI Django Postgres

4/48

Was bisher geschah...

Page 5: Mit Asterisk und Django zur eigenen Telefonanlage€¦ · Django Postgres SQL SIP Asterisk spoolfile cli HTTP. 48/48 Asterisk Manager HTTPS Nginx WSGI Aiohttp WSGI Django Postgres

5/48

Was bisher geschah...

Page 6: Mit Asterisk und Django zur eigenen Telefonanlage€¦ · Django Postgres SQL SIP Asterisk spoolfile cli HTTP. 48/48 Asterisk Manager HTTPS Nginx WSGI Aiohttp WSGI Django Postgres

6/48

Was bisher geschah...

Page 7: Mit Asterisk und Django zur eigenen Telefonanlage€¦ · Django Postgres SQL SIP Asterisk spoolfile cli HTTP. 48/48 Asterisk Manager HTTPS Nginx WSGI Aiohttp WSGI Django Postgres

7/48

Was bisher geschah...

Page 8: Mit Asterisk und Django zur eigenen Telefonanlage€¦ · Django Postgres SQL SIP Asterisk spoolfile cli HTTP. 48/48 Asterisk Manager HTTPS Nginx WSGI Aiohttp WSGI Django Postgres

8/48

Was bisher geschah...

Page 9: Mit Asterisk und Django zur eigenen Telefonanlage€¦ · Django Postgres SQL SIP Asterisk spoolfile cli HTTP. 48/48 Asterisk Manager HTTPS Nginx WSGI Aiohttp WSGI Django Postgres

9/48

Was bisher geschah...

Page 10: Mit Asterisk und Django zur eigenen Telefonanlage€¦ · Django Postgres SQL SIP Asterisk spoolfile cli HTTP. 48/48 Asterisk Manager HTTPS Nginx WSGI Aiohttp WSGI Django Postgres

10/48

Was bisher geschah...

Page 11: Mit Asterisk und Django zur eigenen Telefonanlage€¦ · Django Postgres SQL SIP Asterisk spoolfile cli HTTP. 48/48 Asterisk Manager HTTPS Nginx WSGI Aiohttp WSGI Django Postgres

11/48

Was bisher geschah...

Page 12: Mit Asterisk und Django zur eigenen Telefonanlage€¦ · Django Postgres SQL SIP Asterisk spoolfile cli HTTP. 48/48 Asterisk Manager HTTPS Nginx WSGI Aiohttp WSGI Django Postgres

12/48

Was bisher geschah...

Page 13: Mit Asterisk und Django zur eigenen Telefonanlage€¦ · Django Postgres SQL SIP Asterisk spoolfile cli HTTP. 48/48 Asterisk Manager HTTPS Nginx WSGI Aiohttp WSGI Django Postgres

13/48

Anforderungen

30+ Mitarbeiter

Page 14: Mit Asterisk und Django zur eigenen Telefonanlage€¦ · Django Postgres SQL SIP Asterisk spoolfile cli HTTP. 48/48 Asterisk Manager HTTPS Nginx WSGI Aiohttp WSGI Django Postgres

14/48

Anforderungen

30+ Mitarbeiter DECT an mehreren Standorten Kollegen im Homeoffice

Page 15: Mit Asterisk und Django zur eigenen Telefonanlage€¦ · Django Postgres SQL SIP Asterisk spoolfile cli HTTP. 48/48 Asterisk Manager HTTPS Nginx WSGI Aiohttp WSGI Django Postgres

15/48

Anforderungen

30+ Mitarbeiter DECT an mehreren Standorten Kollegen im Homeoffice Selbst gehostet

Page 16: Mit Asterisk und Django zur eigenen Telefonanlage€¦ · Django Postgres SQL SIP Asterisk spoolfile cli HTTP. 48/48 Asterisk Manager HTTPS Nginx WSGI Aiohttp WSGI Django Postgres

16/48

Anforderungen

30+ Mitarbeiter DECT an mehreren Standorten Kollegen im Homeoffice Selbst gehostet Zugriff auf Sourcen Dienstleisterunabhängig

Page 17: Mit Asterisk und Django zur eigenen Telefonanlage€¦ · Django Postgres SQL SIP Asterisk spoolfile cli HTTP. 48/48 Asterisk Manager HTTPS Nginx WSGI Aiohttp WSGI Django Postgres

17/48

Idefisk

Asterisk Webserver

Page 18: Mit Asterisk und Django zur eigenen Telefonanlage€¦ · Django Postgres SQL SIP Asterisk spoolfile cli HTTP. 48/48 Asterisk Manager HTTPS Nginx WSGI Aiohttp WSGI Django Postgres

18

Page 19: Mit Asterisk und Django zur eigenen Telefonanlage€¦ · Django Postgres SQL SIP Asterisk spoolfile cli HTTP. 48/48 Asterisk Manager HTTPS Nginx WSGI Aiohttp WSGI Django Postgres

19/48

Asterisk

Volljährig: Entwicklung 1999 begonnen

Page 20: Mit Asterisk und Django zur eigenen Telefonanlage€¦ · Django Postgres SQL SIP Asterisk spoolfile cli HTTP. 48/48 Asterisk Manager HTTPS Nginx WSGI Aiohttp WSGI Django Postgres

20/48

Asterisk

Volljährig: Entwicklung 1999 begonnen Technologien:

SIP, ISDN, Analog, WebRTC, Bluetooth, …

Page 21: Mit Asterisk und Django zur eigenen Telefonanlage€¦ · Django Postgres SQL SIP Asterisk spoolfile cli HTTP. 48/48 Asterisk Manager HTTPS Nginx WSGI Aiohttp WSGI Django Postgres

21/48

Asterisk

Volljährig: Entwicklung 1999 begonnen Technologien:

SIP, ISDN, Analog, WebRTC, Bluetooth, … Mehrere Generationen Interfaces:

Spool Files, AGI, AMI, ARI, ODBC, LUA, ...

Page 22: Mit Asterisk und Django zur eigenen Telefonanlage€¦ · Django Postgres SQL SIP Asterisk spoolfile cli HTTP. 48/48 Asterisk Manager HTTPS Nginx WSGI Aiohttp WSGI Django Postgres

22

Page 23: Mit Asterisk und Django zur eigenen Telefonanlage€¦ · Django Postgres SQL SIP Asterisk spoolfile cli HTTP. 48/48 Asterisk Manager HTTPS Nginx WSGI Aiohttp WSGI Django Postgres

23CC0: MOTOI Kenkichi @ de.wikipedia.org

Page 24: Mit Asterisk und Django zur eigenen Telefonanlage€¦ · Django Postgres SQL SIP Asterisk spoolfile cli HTTP. 48/48 Asterisk Manager HTTPS Nginx WSGI Aiohttp WSGI Django Postgres

24/48

System

SIP-Upstream Asterisk SIP-Phone

SIP-Phone

SIP-Phone

Webserver Browser

SIP-Upstream

Page 25: Mit Asterisk und Django zur eigenen Telefonanlage€¦ · Django Postgres SQL SIP Asterisk spoolfile cli HTTP. 48/48 Asterisk Manager HTTPS Nginx WSGI Aiohttp WSGI Django Postgres

25/48

System: Zentrale Komponenten

SIP-Upstream Asterisk SIP-Phone

SIP-Phone

SIP-Phone

Webserver Browser

SIP-Upstream

Page 26: Mit Asterisk und Django zur eigenen Telefonanlage€¦ · Django Postgres SQL SIP Asterisk spoolfile cli HTTP. 48/48 Asterisk Manager HTTPS Nginx WSGI Aiohttp WSGI Django Postgres

26/48

System: SIP

SIP-Upstream Asterisk SIP-Phone

SIP-Phone

SIP-Phone

Webserver Browser

SIP-Upstream

Page 27: Mit Asterisk und Django zur eigenen Telefonanlage€¦ · Django Postgres SQL SIP Asterisk spoolfile cli HTTP. 48/48 Asterisk Manager HTTPS Nginx WSGI Aiohttp WSGI Django Postgres

27/48

System: Konfiguration

SIP-Upstream Asterisk SIP-Phone

SIP-Phone

SIP-Phone

Webserver Browser

SIP-Upstream

Page 28: Mit Asterisk und Django zur eigenen Telefonanlage€¦ · Django Postgres SQL SIP Asterisk spoolfile cli HTTP. 48/48 Asterisk Manager HTTPS Nginx WSGI Aiohttp WSGI Django Postgres

28/48

System: Asterisk

SIP-Upstream Asterisk SIP-Phone

SIP-Phone

SIP-Phone

Webserver Browser

SIP-Upstream

Page 29: Mit Asterisk und Django zur eigenen Telefonanlage€¦ · Django Postgres SQL SIP Asterisk spoolfile cli HTTP. 48/48 Asterisk Manager HTTPS Nginx WSGI Aiohttp WSGI Django Postgres

29/48

/etc/asterisk/sip.conf

[friends](!)type=friendcontext=from-intallow=g722

Page 30: Mit Asterisk und Django zur eigenen Telefonanlage€¦ · Django Postgres SQL SIP Asterisk spoolfile cli HTTP. 48/48 Asterisk Manager HTTPS Nginx WSGI Aiohttp WSGI Django Postgres

30/48

/etc/asterisk/sip.conf

[friends](!)type=friendcontext=from-intallow=g722

[10](friends)secret=asdf123

[11](friends)secret=qwert987

[12](friends)secret=1qayxsw2

Page 31: Mit Asterisk und Django zur eigenen Telefonanlage€¦ · Django Postgres SQL SIP Asterisk spoolfile cli HTTP. 48/48 Asterisk Manager HTTPS Nginx WSGI Aiohttp WSGI Django Postgres

31/48

/etc/asterisk/sip.conf

Page 32: Mit Asterisk und Django zur eigenen Telefonanlage€¦ · Django Postgres SQL SIP Asterisk spoolfile cli HTTP. 48/48 Asterisk Manager HTTPS Nginx WSGI Aiohttp WSGI Django Postgres

32/48

/etc/asterisk/extensions.conf

[from-int]exten = _1X, Dial(SIP/${EXTEN})

Page 33: Mit Asterisk und Django zur eigenen Telefonanlage€¦ · Django Postgres SQL SIP Asterisk spoolfile cli HTTP. 48/48 Asterisk Manager HTTPS Nginx WSGI Aiohttp WSGI Django Postgres

33/48

Asterisk: Komplexität auslagern

SIP-Upstream Asterisk SIP-Phone

SIP-Phone

SIP-Phone

Webserver Browser

SIP-Upstream

Page 34: Mit Asterisk und Django zur eigenen Telefonanlage€¦ · Django Postgres SQL SIP Asterisk spoolfile cli HTTP. 48/48 Asterisk Manager HTTPS Nginx WSGI Aiohttp WSGI Django Postgres

34/48

/etc/asterisk/extensions.conf

[from-int]exten = _1X, Set(RET=${ SHELL(curl http://localhost/route? from=${CALLERID(num)}\& to=${EXTEN} )})

Page 35: Mit Asterisk und Django zur eigenen Telefonanlage€¦ · Django Postgres SQL SIP Asterisk spoolfile cli HTTP. 48/48 Asterisk Manager HTTPS Nginx WSGI Aiohttp WSGI Django Postgres

35/48

http://localhost/route

Anfrage:http://localhost/route?from=<from>&to=<to>

Page 36: Mit Asterisk und Django zur eigenen Telefonanlage€¦ · Django Postgres SQL SIP Asterisk spoolfile cli HTTP. 48/48 Asterisk Manager HTTPS Nginx WSGI Aiohttp WSGI Django Postgres

36/48

http://localhost/route

Anfrage:http://localhost/route?from=<from>&to=<to>

http://localhost/route?from=10&to=11

Page 37: Mit Asterisk und Django zur eigenen Telefonanlage€¦ · Django Postgres SQL SIP Asterisk spoolfile cli HTTP. 48/48 Asterisk Manager HTTPS Nginx WSGI Aiohttp WSGI Django Postgres

37/48

http://localhost/route

Anfrage:http://localhost/route?from=<from>&to=<to>

http://localhost/route?from=10&to=11

Antwort:<rc>`<target>

Page 38: Mit Asterisk und Django zur eigenen Telefonanlage€¦ · Django Postgres SQL SIP Asterisk spoolfile cli HTTP. 48/48 Asterisk Manager HTTPS Nginx WSGI Aiohttp WSGI Django Postgres

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

Page 39: Mit Asterisk und Django zur eigenen Telefonanlage€¦ · Django Postgres SQL SIP Asterisk spoolfile cli HTTP. 48/48 Asterisk Manager HTTPS Nginx WSGI Aiohttp WSGI Django Postgres

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)})

Page 40: Mit Asterisk und Django zur eigenen Telefonanlage€¦ · Django Postgres SQL SIP Asterisk spoolfile cli HTTP. 48/48 Asterisk Manager HTTPS Nginx WSGI Aiohttp WSGI Django Postgres

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})

Page 41: Mit Asterisk und Django zur eigenen Telefonanlage€¦ · Django Postgres SQL SIP Asterisk spoolfile cli HTTP. 48/48 Asterisk Manager HTTPS Nginx WSGI Aiohttp WSGI Django Postgres

41/48

Missing

Ausgehene Telefonate

Page 42: Mit Asterisk und Django zur eigenen Telefonanlage€¦ · Django Postgres SQL SIP Asterisk spoolfile cli HTTP. 48/48 Asterisk Manager HTTPS Nginx WSGI Aiohttp WSGI Django Postgres

42/48

Missing

Ausgehene Telefonate Telefonate über SIP-Trunk

Page 43: Mit Asterisk und Django zur eigenen Telefonanlage€¦ · Django Postgres SQL SIP Asterisk spoolfile cli HTTP. 48/48 Asterisk Manager HTTPS Nginx WSGI Aiohttp WSGI Django Postgres

43/48

Missing

Ausgehene Telefonate Telefonate über SIP-Trunk Fehlerbehandlung

Page 44: Mit Asterisk und Django zur eigenen Telefonanlage€¦ · Django Postgres SQL SIP Asterisk spoolfile cli HTTP. 48/48 Asterisk Manager HTTPS Nginx WSGI Aiohttp WSGI Django Postgres

44/48

System: Konfiguration

SIP-Upstream Asterisk SIP-Phone

SIP-Phone

SIP-Phone

Webserver Browser

SIP-Upstream

Page 45: Mit Asterisk und Django zur eigenen Telefonanlage€¦ · Django Postgres SQL SIP Asterisk spoolfile cli HTTP. 48/48 Asterisk Manager HTTPS Nginx WSGI Aiohttp WSGI Django Postgres

45/48

Asterisk ManagerHTTPS

Nginx

WSGI

Aiohttp

WSGI

Django

Postgres

SQL

SIP

Asterisk

spoolfile HTTPcli

Page 46: Mit Asterisk und Django zur eigenen Telefonanlage€¦ · Django Postgres SQL SIP Asterisk spoolfile cli HTTP. 48/48 Asterisk Manager HTTPS Nginx WSGI Aiohttp WSGI Django Postgres

46/48

Asterisk ManagerHTTPS

Nginx

WSGI

Aiohttp

WSGI

Django

Postgres

SQL

SIP

Asterisk

spoolfile HTTPcli

Page 47: Mit Asterisk und Django zur eigenen Telefonanlage€¦ · Django Postgres SQL SIP Asterisk spoolfile cli HTTP. 48/48 Asterisk Manager HTTPS Nginx WSGI Aiohttp WSGI Django Postgres

47/48

Asterisk ManagerHTTPS

Nginx

WSGI

Aiohttp

WSGI

Django

Postgres

SQL

SIP

Asterisk

spoolfile HTTPcli

Page 48: Mit Asterisk und Django zur eigenen Telefonanlage€¦ · Django Postgres SQL SIP Asterisk spoolfile cli HTTP. 48/48 Asterisk Manager HTTPS Nginx WSGI Aiohttp WSGI Django Postgres

48/48

Asterisk ManagerHTTPS

Nginx

WSGI

Aiohttp

WSGI

Django

Postgres

SQL

SIP

Asterisk

spoolfile HTTPcli