Call recordings (IVR)

Hello I created an IVR, the thing is that I record the conversations of my queue with Mix Monitor. I would like to find a way for the caller to refuse the recording and listening to his call by pressing, for example, the * key to not record or listen to the call, as can be seen in certain call centers.

You can use stopmixmonitor from your IVR, or pausemonitor, if using the legacy monitor application. There is a pause mixmonitor AMI action, but there doesn’t seem to be a dialplan one; call centres are likely to be using AMI anyway, and it is more typical for the agent to initiate the pause.

Also, Aserisk is a toolkit, which can create IVRs, but doesn’t have an IVR application, so there is more than one way that your IVR could have been implmented.

My IVR looks like this, is it possible that the user only presses the * key without “AMI”. I don’t understand how to do it.

[from-external]
exten => s,1,Ringing(1)
same => n,Answer
same => n,Playback(this-call-may-be-monitored-or-recorded)
same => n,Goto(hotline,s,1)
same => n(goodbye),playBack(demo-thanks)
same => n,Hangup

[hotline]
exten => s,1,Answer
;same => n,Set(__CALLERID(num)=${CALLERID(name)})
;same => n,Set(__CALLERID(number)=${CALLERID(name)})
same => n,MixMonitor(/var/spool/asterisk/monitor/${UNIQUEID}.wav,b)
same => n,Set(CDR(recordingpath)=/var/spool/asterisk/monitor/${UNIQUEID}.wav)
same => n,Queue(support,tTmwWF)
same => n(busy),Hangup ()

This isn’t an IVR as it isn’t interactive; it doesn’t take any input from the caller. The last two priorities of from-external are unreachable.

I would like to redirect, so with go to to the different services. and cancel the recording if the need does not want his call to be recorded.

Whatever you do, DO NOT use * to reject recording. The * is used as the default to hangup the call in Asterisk, even though you don’t allow the caller to hang up, the caller MIGHT be using Asterisk as their phone system, and hangup the call, whenever they press the * key. I have a supplier that made this incredibly stupid decision, meaning I either have to accept recording, or bypass our phone system entirely. Not optimal.

As for the actual implementation, I’ve designed our system like this:

  • Call comes in, recording settings are checked, if disabled, just proceed with the call. If not:
  • Play a message to the caller, with legally required information.
  • Ask caller to press 1 to accept, 2 to reject
    • Caller presses 1
      • Start recording, proceed with call
    • Caller presses 2
      • Proceed with call, without recording.

In the dialplan I check AstDB to see if recording is enabled for the particular callflow, and use the MixMonitor app to start the actual recording. I’ve also implemented a feature telling the agent if the caller rejected recording, to make sure they know they need to document the call in another way.

Would that even be legal? In my country we need consent BEFORE recording ANYTHING.

If the person does not refuse the recording and the call is used for training purposes. I think it’s legal

In most jurisdictions I know of, any recording prior to consent, would be illegal. I would check your local rules, or consult a lawyer, to make sure you implement it in a legal way. All it takes is one customer complaining, for you to get into trouble.

so a message like press 1 if you agree to have this call recorded is better in my case?

If you take payment card details online, you will also need a mechanism to turn of recording whilst the caller is giving the CVV. That’s a condition for accepting telephone payments, not a national law.

You can easily make it “Press 1 to decline, or wait to accept”, then make a reasonable delay, say 10 sec, for the caller to press 1. I see no problem with that.

Ain’t rules on call recording, just WONDERFUL? It’s a simple thing, make insanely complicated. I suppose a feature code to pause recording would be the solution here. But for some reason the MixMonitorMute feature is only exposed as a manager command, not a dialplan application.
Guess stopping and then resuming the recording, using the a option, is the solution.

and to return to the technical part how do I do that from what I wrote? I say in the call my welcome message then my services: billing, IT support (the main activity of the company) and a sales department. I offer him to listen to this message again and then I make the person wait until he selects a key. After selecting the service, I ask for his agreement to record or listen to this call. I then need to inform the person picking up the call that they do not want the call recorded or listened to.
Do you have examples of numbering plans? I don’t know how to do that.

If you are to record ALL calls, I would play a short “Welcome to Acme Inc”, then the required “Calls are recorded, to opt out…” then set a variable with the callers answer. When the call is ready to be delivered to an agent, start the recording, before dialing the agent, or before adding the call to the queue, if you don’t mind the irrelevant sound from while the caller was in the queue. Also most callers would not assume the call is recorded while queued or on hold, and may say things that should not be recorded, but that’s for you to decide.

If you don’t want the call to be recorded while in the queue, you can use the queue’s b or B option, or the gosub parameter, depending on which one gives the results you want.

Can you show me an example please?

i am trying to build the IVR can you help me please?

open from 9:00 a.m. to 12:30 p.m. and from 1:30 p.m. to 5:30 p.m. (voicemail)
0 to decline call recording
Satisfaction survey

[from-external]
include => sales
include => support
include => billing

exten => s,1,Answer
same => n,Playback(welcome)
same => n,Background(choose)
same => n,WaitExten(10)

[sales]
exten => 1,1,
same => n,
same => n,
same => n,Queue(sales,tT)
same => n,Goto(survey,s,1)

[support]
exten => 2,1,
same => n,
same => n,
same => n,Queue(support,tT)
same => n,Goto(survey,s,1)

[billing]
exten => 3,1,
same => n,
same => n,
same => n,Queue(billing,tT)
same => n,Goto(survey,s,1)

[survey]
exten => s,1,Answer
same => n,Background(survey)

Whatever you do, DO NOT use * to reject recording. The * is used as the default to hangup the call in Asterisk, even though you don’t allow the caller to hang up, the caller MIGHT be using Asterisk as their phone system, and hangup the call, whenever they press the * key. I have a supplier that made this incredibly stupid decision, meaning I either have to accept recording, or bypass our phone system entirely. Not optimal.

This has to be explicitly enabled for calls using the appropriate Dial option.

* is a stupid choice anyways since it’s reasonable to use * or # to navigate some kind of DTMF menu - I use ** for mine, when I choose to.

I believe the use of * originally stems from the use of * in remote access services to disconnect a call. However, the * had to be at least 1 second to do this. If it was less than a second, it was interpreted as a remote hook flash to access calling features on the distant end.

Asterisk generally doesn’t do anything based on DTMF length, but if you set it up in such a way that you took the length into account, a single digit might make sense – but typically that’s not how Asterisk is setup and hence I recommend avoiding single-digit codes.

In most jurisdictions I know of, any recording prior to consent, would be illegal. I would check your local rules, or consult a lawyer, to make sure you implement it in a legal way. All it takes is one customer complaining, for you to get into trouble.

There are one party and two party consent states in the U.S., but it seems like the OP might be elsewhere.

Generally you are fine as long as you either inform the caller the call is being recorded or play the record tone every 15 seconds (which used to be more common).

Hello, I added mix monitor but I don’t know what I can use to deny recording and avoid callee that caller denied recording and listening.

same => n,MixMonitor(/var/spool/asterisk/monitor/${UNIQUEID}.wav,b)

i am trying to build the IVR can you help me please?

You will probably want to use the GotoIfTime application for that, as well as BackGround, WaitExten, and friends (seems you already have some of this in place).

I recommend perusing the following book if you haven’t already: Asterisk™: The Future of Telephony

A foundational understanding of the dialplan is needed before you can start building things, and a lot of the questions you ask are answered in overview readings such as the above.