Weekly sharing
Hi everyone, I am Ekim, a fresh Bootcamp graduate and an IT helper (I don't dare to call myself a programmer yet). Every Friday, I will share some of the work that I've done over the last week in a bid to get feedbacks from you guys and record my journey to become a programmer.
Previously
Asterisk Manager with JavaScript
Introduction
Today, I would like to share how we could make a simple interactive voice response (IVR). I know you might have had some horrible experiences with that, but it would be a weird but fun experience when you hear your voice on the phone talking to you.
What is Interactive Voice Response (IVR) menu?
- An IVR menu is a list of options that are presented to an inbound caller which prompts them to make a selection, thus qualifying the call and directing it to the most appropriate contact.
Recording our own audio track through Asterisk for IVR
If you have read my previous posts, you would know that the codecs that telephony supports are limited.
Even if you have recorded a very good quality audio track, you still need to convert it into the format that our phones support.
To save time, I am not going to go through the
ffmpeg
part again. Instead, I am going to record all the IVR audio track through theRecord
dialplan application.In pjsip.conf
[transport-udp-nat] type = transport protocol = udp bind = 0.0.0.0 [calling](!) type=endpoint context=interaction allow = !all, ulaw, alaw direct_media=no trust_id_outbound=yes rtp_symmetric=yes force_rport=yes rewrite_contact=yes device_state_busy_at=1 dtmf_mode=rfc4733 [auth-userpass](!) type = auth auth_type = userpass [aor-single-reg](!) type = aor max_contacts = 1 [7000](calling) auth=7000 aors=7000 callerid = 7000 <7000> [7000](auth-userpass) password = 7000 username = 7000 [7000](aor-single-reg) mailboxes = 7000@main [7100](calling) auth=7100 aors=7100 callerid = 7100 <7100> [7100](auth-userpass) password = 7100 username = 7100 [7100](aor-single-reg) mailboxes = 7100@main
- In extensions.conf
[interaction] exten = *555,1,NoOp(recording) same = n,Answer same = n,Record(record/greeting.wav) same = n,Playback(vm-received) same = n,Playback(en/digits/1) same = n,Record(record/press1.wav) same = n,Playback(vm-received) same = n,Playback(en/digits/2) same = n,Record(record/press2.wav) same = n,Playback(vm-received) same = n,Playback(en/digits/3) same = n,Playback(vm-last) same = n,Record(record/wrong-key.wav) same = n,Playback(vm-received) same = n,Playback(en/digits/4) same = n,Hangup ;exten = _7X00,1,NoOp(Call for ${EXTEN}) ;same = n,Dial(PJSIP/${EXTEN}) ;same = n,Hangup exten = 8888,1,NoOp(Call IVR) same = n,Goto(ivr,s,1) [ivr] exten = s,1,NoOp(You are in IVR now) same = n,Answer ; here is the start of the SIP protocol same = n(play),Playback(record/greeting) same = n,WaitExten(10) ; wait 10 seconds for the caller to press key exten = 1,1,NoOp(Pressed 1) same = n,Playback(record/press1) same = n,Goto(s,play) ; go back to 'n(play),Playback(record/greeting)' exten = 2,1,NoOp(Pressed 2) same = n,Playback(record/press2) same = n,Goto(s,play) exten = i,1,NoOp(unknown key) ; handle invalid keys --> when keys other than 1 and 2 are pressed same = n,Playback(record/wrong-key) same = n,Goto(s,play) exten = t,1,NoOp(Waited too long for exten) ; handle WaitExten timeout same = n,Goto(s,play)
Implementation
- First of all, let's record all the necessary navigation menu tracks.
- I have set in the dialplan that when we call
*555
, we will start recording each audio file one by one. - When you hear the first 'beep' sound, it is for the recording of the greeting. - For example, "thanks for calling, English, press 1; Deutsch, press 2". - When you finish each recording, remember to press#
to save it. - If successful, you will hear the number of recording received.
- If you finished one recording, you will hear "received 1"
- When you hear "last", that means you are going to record the last audio.
-
Here is the sequence of the recording sections
- greeting
- the navigation after pressing 1
- the navigation after pressing 2
- the navigation when wrong key is pressed
- greeting
To go into the IVR, dial
8888
and it will start the IVR menu.
Conclusion
Now, you have just made yourself an IVR menu. If you follow tight, you would realize that the whole IVR is a loop. You could feel free to add the Hangup
dialplan application wherever you like. One thing I would like to stress here is that this IVR structure is a very basic one as things are repetitive and could be refactorized in another way. A more advanced one might be introduced some time later (I hope ... ) with the use of database and AGI (Asterisk Gateway Interface). That's all for today. See you next time.
Top comments (0)