Telefoon2.0: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
No edit summary |
||
Line 28: | Line 28: | ||
Debian 12 bak, draait Asterisk. eloy en flimpie hebben toegang. ssh'en naar poort 20422 | Debian 12 bak, draait Asterisk. eloy en flimpie hebben toegang. ssh'en naar poort 20422 | ||
== Configuratie == | |||
=== extensions.conf === | |||
<pre>[inbound] | |||
; the generic inbound call context. if specific treatment (like CID translation) is needed per trunk, create a separate context and let it call 'inbound' using Gosub | |||
exten => s,1,NoOp() | |||
exten => s,n,Log(NOTICE, Incoming call from ${CALLERID(all)}, cid num ${CALLERID(num)}, cdr ${CDR}, all cid ${CALLERID(all)}, dnid ${CALLERID(dnid)}, exten ${EXTEN}, to ${PJSIP_HEADER(read,To)}) | |||
exten => s,n,Answer() | |||
exten => s,n,AGI(revspace-state.sh) | |||
exten => s,n,Verbose(result is: ${open}) | |||
exten => s,n,GotoIf($["${open}" = "0"]?closed) ; jump to "sorry, nobody is available to take your call" if the space is closed | |||
exten => s,n,Ringing() | |||
exten => s,n,Dial(PJSIP/sip2sim,30) | |||
exten => s,n,Hangup() | |||
exten => s,n(closed),Playback(sorry) | |||
exten => s,n,Playback(nbdy-avail-to-take-call) | |||
exten => s,n,Hangup() | |||
[inbound_epvpn] | |||
; rewrite the CID, prefix it with 00491999 if it is from inside EPVPN, if it's from the EPVPN DID rewrite it to a proper public phone number | |||
rewrite CID before handling as normal inbound call | |||
exten => 7380,1,Set(OLDCID=${CALLERID(all)}) | |||
; if the caller number starts with 0000, it's from the DID, rerite the number | |||
; if it doesnt start with 0000, it's internal to EPVPN so only rewrite the number and keep the name (may be set by caller and is used by some phones) | |||
same = n,ExecIf($["${CALLERID(NUM):0:4}" != "0000"]?set(CALLERID(num)=00491999${CALLERID(num:1)})) | |||
same = n,ExecIf($["${CALLERID(NUM):0:4}" = "0000"]?set(CALLERID(all)=<00${CALLERID(num):4}>)) | |||
same = n,Log(NOTICE, Rewrote CID for EPVPN call from ${OLDCID} to <${CALLERID(all)}>) | |||
same = n,Gosub(inbound,s,1) | |||
same = n,Hangup() | |||
[inbound_pstn] | |||
; rewrite CID before handling as normal inbound call | |||
exten => s,1,Set(OLDCID=${CALLERID(all)}) | |||
exten => s,2,Set(OLDNUM=${CALLERID(num)}) | |||
; extremely bodgey, but the gist of this is that it will rewrite local numbers to +31 numbers, rewrite anonymous CIDs to +31979999999999 (a bogus number, I don't know how A&A expects anonymous numbers) | |||
exten => s,3,ExecIf($["${CALLERID(NUM):0:2}" != "00"]?ExecIf($["${CALLERID(NUM)}" != ""]?ExecIf($["${CALLERID(NUM)}" != "anonymous"]?set(CALLERID(num)=0031${CALLERID(num):1})))) | |||
exten => s,4,ExecIf($["${CALLERID(NUM)}" = "anonymous"]?set(CALLERID(all)=+3197999999999)) | |||
; another pain: numbers starting with + aren't handled properly | |||
exten => s,5,ExecIf($["${OLDNUM:0:1}" = "+"]?set(CALLERID(num)=00${OLDNUM:1}))) | |||
exten => s,6,Log(NOTICE, ${OLDNUM:0:1}) | |||
exten => s,7,Log(NOTICE, Rewrote CID for PSTN (CheapConnect) call from ${OLDCID} to <${CALLERID(all)}>) | |||
exten => s,8,Gosub(inbound,s,1) | |||
exten => s,9,Hangup() | |||
[phones] | |||
;toestellen | |||
exten => 0198123456,1,Answer(500) | |||
same = n,Playback(hello-world) | |||
same = n,Hangup() | |||
exten => _01999.,1,Log(NOTICE, Dialing out from ${CALLERID(all)} to ${EXTEN:5} through EPVPN) | |||
same = n,Set(CALLERID(all)=RevSpace<7380>) | |||
same = n,Dial(PJSIP/${EXTEN:5}@epvpn_endpoint, 45) | |||
;same = n,Goto(s-${DIALSTATUS},1) | |||
same = n,Log(NOTICE,${DIALSTATUS}) | |||
same = n,Hangup() | |||
exten => _+491999.,1,Log(NOTICE, Dialing out from ${CALLERID(all)} to ${EXTEN:7} through EPVPN) | |||
same = n,Set(CALLERID(all)=RevSpace<7380>) | |||
same = n,Dial(PJSIP/${EXTEN:7}@epvpn_endpoint, 45) | |||
;same = n,Goto(s-${DIALSTATUS},1) | |||
same = n,Log(NOTICE,${DIALSTATUS}) | |||
same = n,Hangup() | |||
exten => _+31[1-8].,1,Log(NOTICE, Dialing out to ${EXTEN} via public phone network) | |||
same = n,Dial(PJSIP/${EXTEN}@cheapconnect_endpoint, 45) | |||
same = n,HangUp() | |||
exten => _0[1-8].,1,Log(NOTICE, Dialing out to ${EXTEN} via public phone network) | |||
same = n,Dial(PJSIP/${EXTEN}@cheapconnect_endpoint, 45) | |||
same = n,HangUp() | |||
exten => _.,1,Log(NOTICE, Call to ${EXTEN} forbidden!) | |||
same = n,Answer() | |||
same = n,Playback(invalid) | |||
same = n,Hangup()</pre> | |||
=== pjsip.conf === | |||
<pre>[transport-udp-internet-v4] | |||
type=transport | |||
bind=49.13.171.67:45060 | |||
protocol=udp | |||
[transport-udp-internet-v6] | |||
type=transport | |||
bind=[2a01:4f8:1c1b:56aa::1]:45060 | |||
protocol=udp | |||
[sip2sim] | |||
type=endpoint | |||
transport=transport-udp-internet-v6 | |||
context=phones | |||
disallow=all | |||
allow=alaw | |||
aors=sip2sim | |||
auth=sip2sim | |||
direct_media=no | |||
[sip2sim] | |||
type=auth | |||
auth_type=userpass | |||
username=geheim | |||
password=geheim | |||
[sip2sim] | |||
type=identify | |||
endpoint=sip2sim | |||
match=81.187.30.111 | |||
match=81.187.30.113 | |||
match=2001:8b0:0:30:5060::1 | |||
match=2001:8b0:0:30:5060::3 | |||
match=81.187.30.112 | |||
match=81.187.30.114 | |||
match=2001:8b0:0:30:5060::2 | |||
match=2001:8b0:0:30:5060::4 | |||
[sip2sim] | |||
type=aor | |||
max_contacts=1 | |||
[epvpn] | |||
type = registration | |||
contact_user = 7380 | |||
transport = transport-udp-internet-v4 | |||
outbound_auth = epvpn_auth | |||
server_uri = sip:hg.eventphone.de:5060 | |||
client_uri = sip:7380@hg.eventphone.de:5060 | |||
[epvpn_auth] | |||
type = auth | |||
auth_type = userpass | |||
password = geheim | |||
username = 7380 | |||
[epvpn_endpoint] | |||
type = endpoint | |||
transport = transport-udp-internet-v4 | |||
aors = epvpn_aor | |||
context = inbound_epvpn | |||
disallow = all | |||
allow = alaw | |||
outbound_auth = epvpn_auth | |||
direct_media = no | |||
from_domain = hg.eventphone.de | |||
[epvpn_identify] | |||
type = identify | |||
endpoint = epvpn_endpoint | |||
match=hg.eventphone.de | |||
[epvpn_aor] | |||
type = aor | |||
contact = sip:hg.eventphone.de:5060 | |||
qualify_frequency = 30 | |||
[cheapconnect] | |||
type = registration | |||
transport = transport-udp-internet-v4 | |||
outbound_auth = cheapconnect_auth | |||
server_uri = sip:voip.cheapconnect.net:5060 | |||
client_uri = sip:31705690105@voip.cheapconnect.net:5060 | |||
[cheapconnect_auth] | |||
type = auth | |||
auth_type = userpass | |||
password = geheim | |||
username = 31705690105 | |||
[cheapconnect_endpoint] | |||
type = endpoint | |||
transport = transport-udp-internet-v4 | |||
aors = cheapconnect_aor | |||
context = inbound_pstn | |||
disallow = all | |||
allow = alaw | |||
outbound_auth = cheapconnect_auth | |||
direct_media = no | |||
from_domain = voip.cheapconnect.net | |||
[cheapconnect_identify] | |||
type = identify | |||
endpoint = cheapconnect_endpoint | |||
match = voip.cheapconnect.net | |||
[cheapconnect_aor] | |||
type = aor | |||
contact = sip:voip.cheapconnect.net:5060 | |||
qualify_frequency = 30</pre> | |||
=== /var/lib/asterisk/agi-bin/revspace-state.sh === | |||
<pre>#!/bin/bash | |||
STATE=`curl --silent https://revspace.nl/status/status.php | jq .open` | |||
if [ $? -eq 0 ]; then | |||
if [ "$STATE" = "true" ]; then | |||
echo 'SET VARIABLE open "1"' | |||
exit | |||
fi | |||
echo 'SET VARIABLE open "0"' | |||
exit | |||
fi | |||
# something went wrong when getting the spacestate, assume it is open (fail-safe) | |||
echo 'SET VARIABLE open "1"'</pre> |
Revision as of 17:30, 27 January 2024
Project Telefoon2.0 | |
---|---|
+31 70 569 0105 / EPVPN REV0 (7380) | |
Status | In progress |
Contact | flimpie / eloy |
Last Update | 2024-01-27 |
Om voor in de toekomst(tm) gepruts met analoge telefoons mogelijk te maken is er een Asterisk bak ingericht, met daar aan een 070-nummer, een EPVPN-nummer en en een SIP2SIM (die zit in slot 2 van de spacetelefoon op de bar)
Gebruik
Om van buiten naar de space (via de asterisk-bak) te bellen: bel REV0 via EPVPN, of +31 70 569 0105.
Om vanaf de space naar EPVPN te bellen: bel 01999 + nummer via de spacetelefoon, en kies sim-kaart 2 (Vodafone NL)
Dialplan (op volgorde)
- `01999.`: naar EPVPN
- `+491999.`: naar EPVPN
- `+31[1-8].`: naar CheapConnect (om 0900 uit te filteren)
- `0[1-8].`: naar CheapConnect (om 0900 uit te filteren)
- terugvallen naar een 'dit mag je niet bellen' recording
Bijbehorende infra
revphone.flimpie.net
Debian 12 bak, draait Asterisk. eloy en flimpie hebben toegang. ssh'en naar poort 20422
Configuratie
extensions.conf
[inbound] ; the generic inbound call context. if specific treatment (like CID translation) is needed per trunk, create a separate context and let it call 'inbound' using Gosub exten => s,1,NoOp() exten => s,n,Log(NOTICE, Incoming call from ${CALLERID(all)}, cid num ${CALLERID(num)}, cdr ${CDR}, all cid ${CALLERID(all)}, dnid ${CALLERID(dnid)}, exten ${EXTEN}, to ${PJSIP_HEADER(read,To)}) exten => s,n,Answer() exten => s,n,AGI(revspace-state.sh) exten => s,n,Verbose(result is: ${open}) exten => s,n,GotoIf($["${open}" = "0"]?closed) ; jump to "sorry, nobody is available to take your call" if the space is closed exten => s,n,Ringing() exten => s,n,Dial(PJSIP/sip2sim,30) exten => s,n,Hangup() exten => s,n(closed),Playback(sorry) exten => s,n,Playback(nbdy-avail-to-take-call) exten => s,n,Hangup() [inbound_epvpn] ; rewrite the CID, prefix it with 00491999 if it is from inside EPVPN, if it's from the EPVPN DID rewrite it to a proper public phone number rewrite CID before handling as normal inbound call exten => 7380,1,Set(OLDCID=${CALLERID(all)}) ; if the caller number starts with 0000, it's from the DID, rerite the number ; if it doesnt start with 0000, it's internal to EPVPN so only rewrite the number and keep the name (may be set by caller and is used by some phones) same = n,ExecIf($["${CALLERID(NUM):0:4}" != "0000"]?set(CALLERID(num)=00491999${CALLERID(num:1)})) same = n,ExecIf($["${CALLERID(NUM):0:4}" = "0000"]?set(CALLERID(all)=<00${CALLERID(num):4}>)) same = n,Log(NOTICE, Rewrote CID for EPVPN call from ${OLDCID} to <${CALLERID(all)}>) same = n,Gosub(inbound,s,1) same = n,Hangup() [inbound_pstn] ; rewrite CID before handling as normal inbound call exten => s,1,Set(OLDCID=${CALLERID(all)}) exten => s,2,Set(OLDNUM=${CALLERID(num)}) ; extremely bodgey, but the gist of this is that it will rewrite local numbers to +31 numbers, rewrite anonymous CIDs to +31979999999999 (a bogus number, I don't know how A&A expects anonymous numbers) exten => s,3,ExecIf($["${CALLERID(NUM):0:2}" != "00"]?ExecIf($["${CALLERID(NUM)}" != ""]?ExecIf($["${CALLERID(NUM)}" != "anonymous"]?set(CALLERID(num)=0031${CALLERID(num):1})))) exten => s,4,ExecIf($["${CALLERID(NUM)}" = "anonymous"]?set(CALLERID(all)=+3197999999999)) ; another pain: numbers starting with + aren't handled properly exten => s,5,ExecIf($["${OLDNUM:0:1}" = "+"]?set(CALLERID(num)=00${OLDNUM:1}))) exten => s,6,Log(NOTICE, ${OLDNUM:0:1}) exten => s,7,Log(NOTICE, Rewrote CID for PSTN (CheapConnect) call from ${OLDCID} to <${CALLERID(all)}>) exten => s,8,Gosub(inbound,s,1) exten => s,9,Hangup() [phones] ;toestellen exten => 0198123456,1,Answer(500) same = n,Playback(hello-world) same = n,Hangup() exten => _01999.,1,Log(NOTICE, Dialing out from ${CALLERID(all)} to ${EXTEN:5} through EPVPN) same = n,Set(CALLERID(all)=RevSpace<7380>) same = n,Dial(PJSIP/${EXTEN:5}@epvpn_endpoint, 45) ;same = n,Goto(s-${DIALSTATUS},1) same = n,Log(NOTICE,${DIALSTATUS}) same = n,Hangup() exten => _+491999.,1,Log(NOTICE, Dialing out from ${CALLERID(all)} to ${EXTEN:7} through EPVPN) same = n,Set(CALLERID(all)=RevSpace<7380>) same = n,Dial(PJSIP/${EXTEN:7}@epvpn_endpoint, 45) ;same = n,Goto(s-${DIALSTATUS},1) same = n,Log(NOTICE,${DIALSTATUS}) same = n,Hangup() exten => _+31[1-8].,1,Log(NOTICE, Dialing out to ${EXTEN} via public phone network) same = n,Dial(PJSIP/${EXTEN}@cheapconnect_endpoint, 45) same = n,HangUp() exten => _0[1-8].,1,Log(NOTICE, Dialing out to ${EXTEN} via public phone network) same = n,Dial(PJSIP/${EXTEN}@cheapconnect_endpoint, 45) same = n,HangUp() exten => _.,1,Log(NOTICE, Call to ${EXTEN} forbidden!) same = n,Answer() same = n,Playback(invalid) same = n,Hangup()
pjsip.conf
[transport-udp-internet-v4] type=transport bind=49.13.171.67:45060 protocol=udp [transport-udp-internet-v6] type=transport bind=[2a01:4f8:1c1b:56aa::1]:45060 protocol=udp [sip2sim] type=endpoint transport=transport-udp-internet-v6 context=phones disallow=all allow=alaw aors=sip2sim auth=sip2sim direct_media=no [sip2sim] type=auth auth_type=userpass username=geheim password=geheim [sip2sim] type=identify endpoint=sip2sim match=81.187.30.111 match=81.187.30.113 match=2001:8b0:0:30:5060::1 match=2001:8b0:0:30:5060::3 match=81.187.30.112 match=81.187.30.114 match=2001:8b0:0:30:5060::2 match=2001:8b0:0:30:5060::4 [sip2sim] type=aor max_contacts=1 [epvpn] type = registration contact_user = 7380 transport = transport-udp-internet-v4 outbound_auth = epvpn_auth server_uri = sip:hg.eventphone.de:5060 client_uri = sip:7380@hg.eventphone.de:5060 [epvpn_auth] type = auth auth_type = userpass password = geheim username = 7380 [epvpn_endpoint] type = endpoint transport = transport-udp-internet-v4 aors = epvpn_aor context = inbound_epvpn disallow = all allow = alaw outbound_auth = epvpn_auth direct_media = no from_domain = hg.eventphone.de [epvpn_identify] type = identify endpoint = epvpn_endpoint match=hg.eventphone.de [epvpn_aor] type = aor contact = sip:hg.eventphone.de:5060 qualify_frequency = 30 [cheapconnect] type = registration transport = transport-udp-internet-v4 outbound_auth = cheapconnect_auth server_uri = sip:voip.cheapconnect.net:5060 client_uri = sip:31705690105@voip.cheapconnect.net:5060 [cheapconnect_auth] type = auth auth_type = userpass password = geheim username = 31705690105 [cheapconnect_endpoint] type = endpoint transport = transport-udp-internet-v4 aors = cheapconnect_aor context = inbound_pstn disallow = all allow = alaw outbound_auth = cheapconnect_auth direct_media = no from_domain = voip.cheapconnect.net [cheapconnect_identify] type = identify endpoint = cheapconnect_endpoint match = voip.cheapconnect.net [cheapconnect_aor] type = aor contact = sip:voip.cheapconnect.net:5060 qualify_frequency = 30
/var/lib/asterisk/agi-bin/revspace-state.sh
#!/bin/bash STATE=`curl --silent https://revspace.nl/status/status.php | jq .open` if [ $? -eq 0 ]; then if [ "$STATE" = "true" ]; then echo 'SET VARIABLE open "1"' exit fi echo 'SET VARIABLE open "0"' exit fi # something went wrong when getting the spacestate, assume it is open (fail-safe) echo 'SET VARIABLE open "1"'