diff --git a/asterisk/conf/basic/extensions.conf b/asterisk/conf/basic/extensions.conf index 93ca40c..c46fc65 100644 --- a/asterisk/conf/basic/extensions.conf +++ b/asterisk/conf/basic/extensions.conf @@ -62,7 +62,8 @@ exten => 3,1,Goto(outbound-one,${number},1) exten => nonum,1,Playback(unidentified-no-callback) same => n,Hangup() -exten => timeout,1,Hangup() +exten => timeout,1,Playback(vm-goodbye) + same => Hangup() [app-vm] exten = 1571,1,Verbose(1, "${CALLERID(num)} dialed the voicemail feature.") diff --git a/asterisk/conf/mobile/extensions.conf b/asterisk/conf/mobile/extensions.conf index 0cbe592..b86a64f 100644 --- a/asterisk/conf/mobile/extensions.conf +++ b/asterisk/conf/mobile/extensions.conf @@ -2,22 +2,68 @@ ; Remember, context names for each SIP account are specified in pjsip_wizard.conf. ; +[globals] +; first queue. +QUEUE_ONE = queue-one + +; Voicemail address (configured in voicemail.conf) +VOICEMAIL_BOX = 1000@default + ; First, some safeguards against abuse of the built-in contexts. [default] -exten => s,1,Verbose(1, "info ${CALLERID(num)} was passed to default") +exten => s,1,Verbose(1, "info: ${CALLERID(num)} was passed to default") same => n,Hangup(3) [presence] exten => _X.,hint,PJSIP/${EXTEN} -[from-ext] +[app-lastcallreturn] +exten => 1471,1,Verbose(1, "info: ${CALLERID(num)} dialed app-lastcallreturn.") + same => n,Set(number=${DB(lastcaller/${CALLERID(num)})}) + same => n,Answer(2) + same => n,GotoIf($["${number}" = ""]?nonum,1) + same => n,Playback(info-about-last-call&telephone-number) + same => n,Wait(1) + same => n,SayDigits(${number}) + same => n,Wait(1) + same => n,Playback(to-call-num-press) + same => n,Playback(digits/3) + same => n,WaitExten(10) + same => n,Goto(timeout,1) +exten => 3,1,Goto(outbound-one,${number},1) + same => n,Hangup() + +exten => nonum,1,Playback(unidentified-no-callback) + same => n,Hangup() + +exten => timeout,1,Playback(vm-goodbye) + same => Hangup() + +[app-vm] +exten = 1571,1,Verbose(1, "info: ${CALLERID(num)} dialed voicemail") + same = n,VoiceMailMain(${CALLERID(num)}@default,s) + same = n,Hangup() + +[from-quectel0] +exten => s,1,Queue(${QUEUE_ONE},nr,,,50) + same => n,Answer(500) + same => n,Voicemail(${VOICEMAIL_BOX},su) + same => n,Hangup() + +[from-ext] exten => 123,1,Goto(i,1) same => n,Hangup() exten => _XX.,1,Dial(Quectel/quectel0/${EXTEN},,r) same => n,Hangup() +exten => 1471,1,Goto(app-lastcallreturn,${EXTEN},1) + same => n,Hangup() + +exten => 1571,1,Goto(app-vm,${EXTEN},1) + same => n,Hangup() + exten => i,1,Answer(1) same => n,PlayTones(info) same => n,Wait(2) @@ -27,3 +73,8 @@ exten => i,1,Answer(1) same => n,Playback(cannot-complete-as-dialed&check-number-dial-again) same => n,PlayTones(info) same => n,Hangup() + +[to-ext] +exten => s,1,Set(DB(lastcaller/${EXTEN})=${CALLERID(num)}) + same => n,Dial(PJSIP/${EXTEN},,r) + same => n,Hangup() diff --git a/asterisk/conf/mobile/quectel.conf b/asterisk/conf/mobile/quectel.conf index 6e7b686..f269c90 100644 --- a/asterisk/conf/mobile/quectel.conf +++ b/asterisk/conf/mobile/quectel.conf @@ -78,7 +78,7 @@ dtmf = relax ; control of incoming DTMF detection, possible values: ; quectel required settings [quectel0] -context = quectel0 +context = from-quectel0 exten = +447123456789 audio = /dev/ttyUSB1 ; tty port for audio connection; no default value diff --git a/asterisk/conf/mobile/queues.conf b/asterisk/conf/mobile/queues.conf new file mode 100644 index 0000000..aace8a9 --- /dev/null +++ b/asterisk/conf/mobile/queues.conf @@ -0,0 +1,49 @@ +; /etc/asterisk/queues.conf +; +; Global queue settings go in this section. +; +; Modifed and "borrowed" (read: stolen) https://www.sacredheartsc.com/blog/building-a-personal-voip-system/ +; +[general] +; Persist dynamic member lists in the astdb. +persistentmembers = yes + +; Some options for more intuitive queue behavior. +autofill = yes +monitor-type = MixMonitor +shared_lastcall = yes +log_membername_as_agent = yes + +;;;;;;;;;;;;;;;;;;; +; Queue Definitions +;;;;;;;;;;;;;;;;;;; + +; The first queue is for incoming calls to our lines. +[queue-one] +; For each incoming call, ring all members of the queue. +strategy = ringall + +; Max number of seconds a caller waits in the queue. +timeout = 90 + +; Don't announce estimated hold time, etc. +announce-frequency = 0 +announce-holdtime = no +announce-position = no +periodic-announce-frequency = 0 + +; Allow ringing even when no queue members are present. +joinempty = yes +leavewhenempty = no + +; Ring member phones even when they are on another call. +ringinuse = yes + +; Queue Members +; +; Each member is specified with the following format: +; member => INTERFACE,PENALTY,FRIENDLY_NAME,PRESENCE_INTERFACE +; +; The "penalty" value is not interesting for our use case. +; With PJSIP, the BLF/Presence interface is identical to the standard interface name. +member => Local/1000@to-ext,0,1000,PJSIP/1000 diff --git a/asterisk/conf/mobile/voicemail.conf b/asterisk/conf/mobile/voicemail.conf new file mode 100644 index 0000000..7532a79 --- /dev/null +++ b/asterisk/conf/mobile/voicemail.conf @@ -0,0 +1,47 @@ +[general] +format = wav49|gsm|wav + +[zonemessages] +; Users may be located in different timezones, or may have different +; message announcements for their introductory message when they enter +; the voicemail system. Set the message and the timezone each user +; hears here. Set the user into one of these zones with the tz= attribute +; in the options field of the mailbox. Of course, language substitution +; still applies here so you may have several directory trees that have +; alternate language choices. +; +; Look in /usr/share/zoneinfo/ for names of timezones. +; Look at the manual page for strftime for a quick tutorial on how the +; variable substitution is done on the values below. +; +; Supported values: +; 'filename' filename of a soundfile (single ticks around the filename +; required) +; ${VAR} variable substitution +; A or a Day of week (Saturday, Sunday, ...) +; B or b or h Month name (January, February, ...) +; d or e numeric day of month (first, second, ..., thirty-first) +; Y Year +; I or l Hour, 12 hour clock +; H Hour, 24 hour clock (single digit hours preceded by "oh") +; k Hour, 24 hour clock (single digit hours NOT preceded by "oh") +; M Minute, with 00 pronounced as "o'clock" +; N Minute, with 00 pronounced as "hundred" (US military time) +; P or p AM or PM +; Q "today", "yesterday" or ABdY +; (*note: not standard strftime value) +; q "" (for today), "yesterday", weekday, or ABdY +; (*note: not standard strftime value) +; R 24 hour time, including minute +; +eastern = America/New_York|'vm-received' Q 'digits/at' IMp +central = America/Chicago|'vm-received' Q 'digits/at' IMp +central24 = America/Chicago|'vm-received' q 'digits/at' H N 'hours' +military = Zulu|'vm-received' q 'digits/at' H N 'hours' 'phonetic/z_p' +european = Europe/Copenhagen|'vm-received' a d b 'digits/at' HM +uk = Europe/London|'vm-received' q 'digits/at' HM + +[default] +; Note: The rest of the system must reference mailboxes defined here as mailbox@default. + +1000 => 1000,Default Mailbox,,,,Tz=uk