After-hours notification service

I'm conducting some research to determine if a custom web service could provide an after-hours notification service for on-call technicians. Here’s the gist:

  • Outside of business hours, inbound calls are directed to an “on-call” voicemail
  • When new voicemail messages are deposited in this mailbox then a call is automatically placed out to the mobile phone of the technician who is on call that day/week, notifying them that there is a voicemail.
  • If the call is unanswered then several more attempts are made until the call is answered.

I’m pretty sure a custom web service could be created to fulfill this requirement. Here’s how I envision the back-end could be implemented:

  • A custom web service registers for notifications when new voicemail messages are left in a specific mailbox
  • When a new VM is deposited into the mailbox it creates an agentless dialing campaign with a contact list containing the technician’s mobile phone number
  • When the campaign connects to the technician it would execute an outbound flow that plays a prompt indicating that a new voicemail is available in the mailbox.
  • If the technician doesn’t answer the campaign automatically gets recycled several times until the call is answered.

What I’m not certain about is how the custom web service can be made aware of whether or not the campaign successfully connects to a live person or if the campaign needs to be recycled because the technician didn’t answer the call. Would it have to poll the campaign progress and make a decision to recycle based on the result?

Is this feasible? Is there a better/different approach that would be easier?

I think the general approach makes sense. It would be nice to be able to do this without Dialer and just place an outbound call connected to the IVR, but non-user dialing isn't on the roadmap.

The process for this would be to configure the agentless campaign, insert the contact record, and check that contact record for success/failure. I would suggest either using answering machine detection and dispositioning as success if a person answers or using an IVR that allows the person to acknowledge the message (e.g. "press 1 to acknowledge this call") to disposition as success only if the user interacts with the call appropriately.

To check on the contact record, you'll want to provide your own contact ID for the record when you insert it so you know what record to check on later. Since you know the contact ID, you can use GET /api/v2/outbound/contactlists/{contactListId}/contacts/{contactId} to verify the outcome of the record.

Another potential option is to use a repeating sequence, so the recycling is handled automatically. Then you could configure the wrap up code used by the flow when it reaches the technician to mark the contact as uncallable, via dialer's wrap up code mappings. That would stop the calls to the technician.

There are a couple caveats/downsides - just marking the contact uncallable will prevent further calls since it's the only contact in the list, but it wouldn't actually stop the sequence. However, without any callable contacts the sequence will likely trip the limit on how quickly sequences are permitted to repeat, which will cause it to be turned off. That's also the second caveat - with only one contact the sequence may repeat too quickly and be stopped.

If those downsides scare you off the sequence option then Tim's suggestion is a good one. Long term we will be adding the ability to stop sequences based on various criteria, so when that's available (no ETA on that) that might make the sequence option more feasible.