Proposed Asterisk Dialplan
From LinuxMCE
Revision as of 11:01, 22 July 2013 by Foxi352 (Talk | contribs) (Actual asterisk config files in RT DB)
We desperately need to write a new Asterisk dial plan to replace the AMP generated one that has become far too bit-rotten to be of any substantial use. This page will track the conceptual flow of what will be needed for the new post Asterisk 1.8+ dialplan.
This is being added to, as I write more and more of the schema, and will get much...much bigger. --Tschak909 07:30, 18 July 2013 (CEST)
Dial Plan Flow
Call from outside line (1xx)
- Call comes in from outside line
- Get house mode and branch between five possible states:
- Ring extensions
- All checked extensions (2xx) are rung in parallel.
- Transfer to a specific user
- Transfer to specified (3xx) extension
- Go to a specific user's voicemail
- Transfer to selected user's voicemail
- Present a menu to select Home user (101)
- Is the number listed in Callers for me(?) for a user.
- Transfer to user extension. (3xx)
- Present menu audio, and select between options:
- If explicit extension is selected, ring said extension. (Do we want to allow all extensions to be pressed here?)
- If User number is selected, Transfer to user (3xx)
- If General Voicemail, drop to general voicemail box (100)
- Is the number listed in Callers for me(?) for a user.
- Transfer to outside number
- Dial outside #
- Ring extensions
- Get house mode and branch between five possible states:
Ring specific extension (2xx)
- Does current house mode allow extension to be rang?
- No? Bounce to Menu (101)
- Yes? ...then
- Ring specified extension
- While ringing, user has the opportunity to:
- Transfer to a specific phone (2xx)
- Transfer to a specific user (3xx)
- Transfer to an outside number (dial specified number given to dial pad)
- dial someone else in to conference before we all pick up (this is strange, but the button is there!)
- Send to General voicemail (100)
- Drop the call
- If extension does not pick up within specified IVR delay time, Transfer to (101) for IVR menu
- While ringing, user has the opportunity to:
- Ring specified extension
Ring specific user (3xx)
- Find user via AGI script, map to a list of (2xx) extensions.
- Is number on Priority caller list?
- No, it is a normal caller, Process normal caller routing (see normal/priority user routing below)
- Yes, it is a priority caller, Process priority caller routing (see normal/priority user routing below)
Normal/Priority User Routing
For each user, there is a set of routing steps to be executed serially, depending on if the user is a normal or priority caller, and then based on the current USER mode. A user is a priority caller if they are listed in the priority callers list. Any number of steps can be created, and a dial plan segment should be created for each one.
- Get house mode
- If Normal caller, select normal caller steps given house mode
- If Priority caller, select priority caller steps given house mode
- If checkbox is selected for give option for voicemail, play message, listen for "#"
- If checkbox selected, and If # pressed, go to user voicemail
- Execute next step which is one of four possible states: (TOP)
- Ring Extensions
- Parallel ring selected extensions (2xx)
- Transfer to another user
- Transfer call to specified (3xx) extension
- Go to user's voicemail
- Transfer call to specified user voicemail
- Transfer to an outside number
- Ring Extensions
- Loop back around to (TOP)
- If all instructions are carried out and still unresolved, drop back to menu (101)
Security Plugin Phone Extensions
Security Notfiications (999)
- run AGI to determine which rooms have been affected, generate audio message
- Determine priority in the following order
- Orbiters then Other numbers (uses one outgoing channel)
- Ring each orbiter for 15 seconds, if no answer, then ring the next orbiter
- If answer, Play Security IVR
- If no more orbiters, ring each "other number" for 15 seconds, if no answer, then ring next other number.
- If answer, Play security IVR
- (what to do here if everybody has been rung, and no answer?)
- Ring each orbiter for 15 seconds, if no answer, then ring the next orbiter
- Other numbers then Orbiters (uses one outgoing channel)
- Ring each "other number" for 15 seconds, if no answer, then ring the next number.
- If answer, Play security IVR
- If no more "other numbers", ring each Orbiter for 15 seconds, if no answer, then ring the next orbiter.
- Ring each "other number" for 15 seconds, if no answer, then ring the next number.
- Both orbiters and other numbers at the same time. (uses two outgoing channels)
- spawn two threads, one for "Orbiters" one for "Other numbers", for each thread
- Ring each number for 15 seconds, if no answer, then ring the next number.
- If answer, Play security IVR
- (What to do when all numbers have been rung?)
- Ring each number for 15 seconds, if no answer, then ring the next number.
- spawn two threads, one for "Orbiters" one for "Other numbers", for each thread
- Orbiters then Other numbers (uses one outgoing channel)
Security IVR
- 1 to Reset the Alarm
- Play "Alarm has been reset."
- 2 to Ignore the alarm
- 3 to call emergency contacts
- 4 to Notify neighbors
- 5 to speak to the person in the house
Lists for...
House Modes
- Armed - At Home
- Armed - Away
- Armed - Extended Away
- Entertaining
- Sleeping
- Unarmed - At Home
User Modes
- At Home
- Away
- Do Not Disturb
- Sleeping
Incoming Call extensions
- 100 - General Voicemail box
- 101 - IVR menu
Example Phone extensions
- 201 - Living Room
- 202 - Bedroom Master
- 203 - Den
- ...
Example User extensions
- 301 - Thom
- 302 - Lana
- 303 - Nina
- ...
Example User voicemail extensions
- 401 - Thom
- 402 - Lana
- 403 - Nina
Security Extensions
- 999 - Security
- 998 - Fire
- 997 - Air Quality
- 996 - Movement
- 995 - Information
- 994 - Doorbell
- 993 - Monitor Mode
- 992 - Babysitter Mode
- 991 - Speak to person inside house (this needs to be changed in all the code, this was 998)
Contexts
- from-trunk - Calls from outside lines
- from-internal - Calls originating from inside the system
Actual config files in database
sip.conf
+------------+------------+----------+------------------+---------------------------------------+ | cat_metric | var_metric | category | var_name | var_val | +------------+------------+----------+------------------+---------------------------------------+ | 0 | 0 | general | bindport | 5060 | | 0 | 1 | general | bindaddr | 0.0.0.0 | | 0 | 2 | general | videosupport | yes | | 0 | 3 | general | disallow | all | | 0 | 4 | general | allow | alaw | | 0 | 5 | general | allow | ulaw | | 0 | 6 | general | allow | h263p | | 0 | 7 | general | allow | h263 | | 0 | 8 | general | context | from-sip-external | | 0 | 9 | general | callerid | Unknown | | 0 | 10 | general | tos | 0x68 | | 0 | 11 | general | notifyringing | yes | | 0 | 12 | general | notifyhold | yes | | 0 | 13 | general | limitonpeers | yes | | 0 | 14 | general | rtcachefriends | yes | | 0 | 15 | general | rtupdate | yes | | 0 | 16 | general | tcpenable | yes | | 0 | 17 | general | tcpbindaddr | 0.0.0.0 | | 0 | 18 | general | registerattempts | 0 | | 0 | 19 | general | registertimeout | 15 | | 0 | 20 | general | language | en | | 0 | 21 | general | alwaysauthreject | yes | | 0 | 101 | general | register | username:password@sipserver/extension | +------------+------------+----------+------------------+---------------------------------------+
iax.conf
+------------+------------+----------+-------------------+-------------------+ | cat_metric | var_metric | category | var_name | var_val | +------------+------------+----------+-------------------+-------------------+ | 0 | 0 | general | bindport | 4569 | | 0 | 1 | general | bindaddr | 0.0.0.0 | | 0 | 2 | general | disallow | all | | 0 | 3 | general | allow | alaw | | 0 | 4 | general | allow | ulaw | | 0 | 5 | general | allow | gsm | | 0 | 6 | general | context | from-sip-external | | 0 | 7 | general | mailboxdetail | yes | | 0 | 8 | general | iaxcompat | yes | | 0 | 9 | general | nochecksums | no | | 0 | 10 | general | delayreject | yes | | 0 | 11 | general | bandwidth | high | | 0 | 12 | general | dtmfmode | auto | | 0 | 13 | general | rtcachefriends | yes | | 0 | 14 | general | rtupdate | yes | | 0 | 15 | general | tos | 0x18 | | 0 | 16 | general | maxjitterbuffer | 1000 | | 0 | 17 | general | maxjitterinterps | 10 | | 0 | 18 | general | jitterbuffer | yes | | 0 | 19 | general | resyncthreshold | 1000 | | 0 | 20 | general | trunktimestamps | yes | | 0 | 21 | general | minregexpire | 120 | | 0 | 22 | general | maxregexpire | 300 | | 0 | 23 | general | iaxthreadcount | 256 | | 0 | 24 | general | iaxmaxthreadcount | 256 | +------------+------------+----------+-------------------+-------------------+
voicemail.conf
+------------+------------+--------------+------------------+-------------------------------------------------------------+ | cat_metric | var_metric | category | var_name | var_val | +------------+------------+--------------+------------------+-------------------------------------------------------------+ | 0 | 0 | general | format | wav|gsm | | 0 | 1 | general | serveremail | LinuxMCE@dcerouter | | 0 | 2 | general | maxlogins | 3 | | 0 | 3 | general | emaildateformat | %A, %B %d, %Y at %r | | 0 | 4 | general | sendvoicemail | yes | | 0 | 5 | general | skipms | 3000 | | 0 | 6 | general | maxsilence | 10 | | 0 | 7 | general | silencethreshold | 128 | | 0 | 8 | general | maxlogins | 3 | | 1 | 0 | zonemessages | eastern | America/New_York|'vm-received' Q 'digits/at' IMp | | 1 | 1 | zonemessages | central | America/Chicago|'vm-received' Q 'digits/at' IMp | | 1 | 2 | zonemessages | central24 | America/Chicago|'vm-received' q 'digits/at' H N 'hours' | | 1 | 3 | zonemessages | military | Zulu|'vm-received' q 'digits/at' H N 'hours' 'phonetic/z_p' | | 1 | 4 | zonemessages | european | Europe/Copenhagen|'vm-received' a d b 'digits/at' HM | +------------+------------+--------------+------------------+-------------------------------------------------------------+
musiconhold.conf
+------------+------------+----------+-----------+-------------------------------+ | cat_metric | var_metric | category | var_name | var_val | +------------+------------+----------+-----------+-------------------------------+ | 0 | 0 | default | mode | files | | 0 | 1 | default | directory | /var/lib/asterisk/mohmp3 | | 1 | 0 | none | mode | files | | 1 | 1 | none | directory | /var/lib/asterisk/mohmp3/none | +------------+------------+----------+-----------+-------------------------------+
cdr_mysql.conf
- This is for "Call Detail Records". In webadmin -> Telecom -> Call Detail Records is a parser interface
+------------+------------+----------+----------+-----------------------------+ | cat_metric | var_metric | category | var_name | var_val | +------------+------------+----------+----------+-----------------------------+ | 0 | 0 | global | dbname | asterisk | | 0 | 1 | global | table | cdr | | 0 | 2 | global | password | lmce | | 0 | 3 | global | user | asteriskuser | | 0 | 4 | global | sock | /var/run/mysqld/mysqld.sock | +------------+------------+----------+----------+-----------------------------+
google talk
- This is for google talk. Apparently the api's changed once again, and this is no more the recommended way of getting it to work. But for new modules i *think* we need asterisk 1.10+. This has to be researched and confirmed.
jabber.conf
+------------+------------+----------+--------------+---------+ | cat_metric | var_metric | category | var_name | var_val | +------------+------------+----------+--------------+---------+ | 0 | 0 | general | autoregister | yes | +------------+------------+----------+--------------+---------+
gtalk.conf
+------------+------------+----------+------------+------------+ | cat_metric | var_metric | category | var_name | var_val | +------------+------------+----------+------------+------------+ | 0 | 0 | general | context | from-trunk | | 0 | 1 | general | bindaddr | 0.0.0.0 | | 0 | 2 | general | allowguest | yes | | 1 | 0 | guest | disallow | all | | 1 | 1 | guest | allow | ulaw | | 1 | 2 | guest | context | from-trunk | | 1 | 3 | guest | connection | asterisk | +------------+------------+----------+------------+------------+