(Pre-)Voicemail Menu

Original ticket: #1592

The idea is to have a menu before sending callers to voicemail, that allows them to do various things (besides go to voicemail).

This would be a special case of an IVR. I was initially hoping we could add this code to the existing IVR code as a 'special case', but I'm not actually sure it would be powerful enough if we did that.

The interface should allow the admin to setup the base IVR to be used. It would basically be the standard IVR, with an intro announcement, timeout/loop limits, but each option would have an additional destination drop-down with user-specific options:

  • "Ring extension again" - this would just call the extension again. There should probably be a limit on the number of times this option can be used before it disappears.
  • "Go to users voicemail" - drops to the user's voicemail box
  • "Park and Page group xxx" - Parks the call, and announces it via a page group, saying something like "Extension 123 <recorded name> please pickup call on 71". (Not sure if it would be best to only say the extension number (123) in Allison's voice, mix in the recorded name (if available) in the user's voice, or play both just to be sure they hear). It could re-play this announcement every minute or two, until the parking time is exceeded, then return the caller to the voicemail IVR.
  • "Activate follow-me" - try the user's followme, if available
  • "Hold for the extension to become available", as per #993 ( or maybe we should START here and then offer the "(Pre-)Voicemail Menu" as a break-out option?)
  • "Call me when extension is available" - also known as camp-on, this would call the caller back once the callee was done on the phone, and upon picking up, a call would be placed back to the original callee. This should probably only be available for internal callers (though, it could be done for external calls as well), and possibly should play a message "Calling extension 123" in case they've camped-on to multiple extensions.

They would also be able to use any of the other standard freepbx destinations (eg, going to a queue, ring group, or specific (operator) extension).

The major difference from the IVR code is that each option should also have an associated recording. This would be so freepbx could dynmically build the full recording, based on what options are available.

If you have the following setup:

  • 1, t - users voicemail
  • 2 - users followme
  • 3 - users extension (redial)
  • 9 - main ivr
  • 0 - operator at extension 100

When the caller calls someone with followme, they will hear something like: "Sorry, the user is unavailable." "Press 1 to leave voicemail" "Press 2 to try other methods of contacting this user" "Press 3 to ring their phone again" "Press 9 to return to the main menu" "or press 0 for an operator". (it may even be desirable to have no announcement for some options, like redial or parkandpage, so they're 'hidden' from non-employees).

If the user calls someone with no follow-me, they should hear the same thing, without the "Press 2 ...." message. This is only possible if we split all the announcements up on a per-option basis. Likewise, if they redial the user for example 3 times, they should no longer be allowed to redial the user and the option should not be played back.

This IVR will also need to be context-aware (once we add contexts to core), so different IVRs can be created for users in different contexts (I think one voicemail IVR per context is good enough).