nixos-configuration/hosts/aluminium/services/asterisk.nix
2023-07-20 10:59:03 +00:00

169 lines
5.1 KiB
Nix

{ config, lib, pkgs, ... }:
let
secretConfigFiles = [
"ari"
"pjsip"
"voicemail"
];
rtp = {
start = 10000;
end = 10200;
};
in
{
services.asterisk = {
enable = true;
confFiles = {
"extensions.conf" = ''
[sipgate-in]
exten = _499846876,1,Noop(Processing an incoming call)
;same = n,Dial(PJSIP/10)
same = n,Dial(PJSIP/10&PJSIP/11,45,tT)
;same = n,VoiceMail(876@lechner,u)
same = n,Hangup()
exten => _4998469779781,1,Verbose(3,Incoming fax)
; folder where your incoming faxes will initially be stored
same => n,Set(FAXDEST=/tmp)
exten = _4998469779782,1,Noop(Test call)
same = n,Dial(PJSIP/10)
; put a timestamp on this call so the resulting file is unique
same => n,Set(tempfax=''${STRFTIME(,,%C%y%m%d%H%M)})
same => n,ReceiveFax(''${FAXDEST}/''${tempfax}.tif)
same => n,Verbose(3,- Fax receipt completed with status: ''${FAXSTATUS})
same => n,System(echo | s-nail -a ''${FAXDEST}/''${tempfax} -s "Asterisk Fax" mail@jalr.de)
exten = _499846977892,1,Noop(Processing an incoming call)
same = n,Dial(PJSIP/12,30,tT)
;same = n,VoiceMail(977892@pauline,u)
same = n,Hangup()
exten = _499846977891,1,Noop(Processing an incoming call)
same = n,Dial(PJSIP/13&PJSIP/16,30,tT)
same = n,VoiceMail(977891@jakob,u)
same = n,Hangup()
[dect]
exten = 100,1,Answer()
same = n,Wait(1)
same = n,Playback(hello-world)
same = n,Hangup()
;exten = 10,1,Dial(PJSIP/10,10)
;same = n,VoiceMail(876@lechner,u)
exten = _1X,1,Dial(PJSIP/''${EXTEN},30)
same = n,Hangup()
exten = 50,1,Dial(PJSIP/10&PJSIP/11,30,tT)
same = n,Hangup()
exten = 99,1,Answer()
same = n,VoiceMailMain(876@lechner)
exten = 98,1,Answer()
same = n,VoiceMailMain(977892@pauline)
exten = _ZX.,1,Noop(Ortsgespraech)
same = n,Dial(PJSIP/09846''${EXTEN}@sipgate,300)
same = n,Hangup()
exten = _0ZXXXXX.,1,Noop(Deutsches Festnetz)
same = n,Dial(PJSIP/''${EXTEN}@sipgate,300)
same = n,Hangup()
exten = _00XXXXX.,1,Noop(Internationales Gespraech)
same = n,Dial(PJSIP/''${EXTEN}@sipgate,300)
same = n,Hangup()
[voicemail-callback]
exten = s,1,HasNewVoicemail(977892@pauline)
exten = s,2,Hangup
exten = s,102,Dial(PJSIP/12,15)
exten = s,n,VoiceMailMain(977892@pauline)
exten = s,n,Hangup
[fax-tx]
exten => s,1,NoOp(**** SENDING FAX ****)
;exten => s,n,Set(FAXFILE=output.tif)
exten => s,n,NoOp(**** SETTING FAXOPT ****)
exten => s,n,Set(FAXOPT(ecm)=yes)
;exten => s,n,Set(FAXOPT(localstationid)=098469779780)
exten => s,n,Set(FAXOPT(maxrate)=14400)
exten => s,n,Set(FAXOPT(minrate)=2400)
exten => s,n,NoOp(**** SENDING FAX : ''${FAXFILE} ****)
exten => s,n,SendFAX(/var/lib/asterisk/fax-outgoing/''${FAXFILE},d)
;exten => send,n,Wait(6)
;exten => send,n,Set(GLOBAL(FAXCOUNT)=''$[ ''${GLOBAL(FAXCOUNT)} + 1 ])
;exten => send,n,Set(FAXCOUNT=''${GLOBAL(FAXCOUNT)})
;exten => send,n,Set(FAXFILE=dw-faxout.tif)
; Set FAXOPTs
;exten => send,n,NoOp(**** SETTING FAXOPT ****)
;exten => send,n,Set(FAXOPT(ecm)=yes)
;exten => send,n,Set(FAXOPT(headerinfo)=Fax from ''${GLOBAL(LASTFAXCALLERNAME)} at ''${GLOBAL(LASTFAXCALLERNUM)} was received.)
;exten => send,n,Set(FAXOPT(maxrate)=14400)
; Send the fax
exten => send,n,SendFAX(/home/jalr/fax.tif,d)
'';
"http.conf" = ''
[general]
enabled=yes
bindaddr=127.0.0.1
; Port to bind to for HTTP sessions (default is 8088)
;bindport=8088
tlsdisablev1=yes
tlsdisablev11=yes
tlsdisablev12=yes
tlsservercipherorder=yes
'';
"rtp.conf" = ''
[general]
rtpstart=${toString rtp.start}
rtpend=${toString rtp.end}
'';
"dnsmgr.conf" = ''
[general]
enable=yes
refreshinterval=300
'';
};
useTheseDefaultConfFiles = [ ];
};
sops.secrets = (lib.listToAttrs (map
(name: lib.nameValuePair "asterisk-${name}" {
sopsFile = ../secrets.yaml;
owner = config.users.users.asterisk.name;
})
secretConfigFiles));
environment.etc = lib.mapAttrs'
(name: _: lib.nameValuePair
"asterisk/${name}.conf"
{ source = config.sops.secrets."asterisk-${name}".path; })
(lib.listToAttrs (map (name: lib.nameValuePair name { }) secretConfigFiles));
networking.firewall = {
allowedUDPPortRanges = [
{
from = rtp.start;
to = rtp.end;
}
];
};
system.activationScripts.symlink-asterisk-sounds-de = lib.stringAfter [ "var" ] ''
sounds="/var/lib/asterisk/sounds"
sounds_de="$sounds/de"
mkdir -p "$sounds"
[ -L "$sounds_de" ] && rm "$sounds_de"
ln -s "${pkgs.asterisk-sounds-de}/" "$sounds_de"
'';
}