{ 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" ''; }