How to create basic IVR on Asterisk on Oracle Linux 9.3
To Create Basic IVR On Asterisk On Oracle Linux 9.3
Introduction
IVR, which stands for Interactive Voice Response, is a technology that streamlines customer service interactions by allowing callers to interact using touch-tone digits or their voice. A basic example of an IVR application is an automated attendant or voice menu: callers are presented with a recorded menu and respond by selecting a digit or, in some cases, by entering an extension number.
Procedure Steps
Step 1: Check the OS version by using the below command
[root@linuxhelp ~]# cat /etc/os-release
NAME="Oracle Linux Server"
VERSION="9.3"
ID="ol"
ID_LIKE="fedora"
VARIANT="Server"
VARIANT_ID="server"
VERSION_ID="9.3"
PLATFORM_ID="platform:el9"
PRETTY_NAME="Oracle Linux Server 9.3"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:oracle:linux:9:3:server"
HOME_URL="https://linux.oracle.com/"
BUG_REPORT_URL="https://github.com/oracle/oracle-linux"
ORACLE_BUGZILLA_PRODUCT="Oracle Linux 9"
ORACLE_BUGZILLA_PRODUCT_VERSION=9.3
ORACLE_SUPPORT_PRODUCT="Oracle Linux"
ORACLE_SUPPORT_PRODUCT_VERSION=9.3
Step 2: Check the status of the Asterisk by using the below command
[root@linuxhelp ~]# systemctl status asterisk.service
● asterisk.service - LSB: Asterisk PBX
Loaded: loaded (/etc/rc.d/init.d/asterisk; generated)
Active: active (running) since Thu 2024-05-09 16:08:17 IST; 1h 5min ago
Docs: man:systemd-sysv-generator(8)
Process: 6428 ExecStart=/etc/rc.d/init.d/asterisk start (code=exited, status=0/SUCCESS)
Main PID: 6458 (asterisk)
Tasks: 44 (limit: 21739)
Memory: 42.5M
CPU: 41.152s
CGroup: /system.slice/asterisk.service
├─6456 /bin/sh /usr/sbin/safe_asterisk
└─6458 /usr/sbin/asterisk -f -vvvg -c
May 09 16:08:17 linuxhelp systemd[1]: Starting LSB: Asterisk PBX...
May 09 16:08:17 linuxhelp asterisk[6428]: Starting asterisk:
May 09 16:08:17 linuxhelp systemd[1]: asterisk.service: Can't open PID file /run/asterisk/asterisk.pid (yet?) after start: Operation not permitted
May 09 16:08:17 linuxhelp systemd[1]: asterisk.service: Supervising process 6458 which is not our child. We'll most likely not notice when it exits.
May 09 16:08:17 linuxhelp systemd[1]: Started LSB: Asterisk PBX.
Step 3: Move to the Asterisk directory by using the below command
[root@linuxhelp ~]# cd /etc/asterisk/
[root@linuxhelp asterisk]#
Step 4: Edit the extensions.conf file to add IVR by using the below command
[root@linuxhelp asterisk]# vim extensions.conf
Add the following lines
[internal]
exten => 167,1,Background(pls-wait-connect-call)
exten => 167,n,Goto(test,s,1)
[test]
exten => s,1,Answer()
same => n,Background(press-1&press-2)
same => n,WaitExten()
exten => 1,1,Playback(you-entered)
same => n,SayNumber(${EXTEN})
same => n,Dial(PJSIP/167,20)
same => n,Hangup()
exten => 2,1,Playback(you-entered)
same => n,SayNumber(${EXTEN})
same => n,Dial(PJSIP/167,20)
same => n,Hangup()
exten => i,1,Playback(option-is-invalid)
Step 5: Login to the Asterisk CLI mode by using the below command
[root@linuxhelp asterisk]# asterisk -rvvvvvvvvvvvvvvvvvv
Asterisk 20.5.0, Copyright (C) 1999 - 2022, Sangoma Technologies Corporation and others.
Created by Mark Spencer <markster@digium.com>
Asterisk comes with ABSOLUTELY NO WARRANTY; type 'core show warranty' for details.
This is free software, with components licensed under the GNU General Public
License version 2 and other licenses; you are welcome to redistribute it under
certain conditions. Type 'core show license' for details.
=========================================================================
Connected to Asterisk 20.5.0 currently running on linuxhelp (pid = 6458)
linuxhelp*CLI>
Step 6: Reload the dialplan by using the below command
linuxhelp*CLI> dialplan reload
Dialplan reloaded.
-- Time to scan old dialplan and merge leftovers back into the new: 0.000086 sec
-- Time to restore hints and swap in new dialplan: 0.000009 sec
-- Time to delete the old dialplan: 0.000018 sec
-- Total time merge_contexts_delete: 0.000113 sec
-- pbx_config successfully loaded 2 contexts (enable debug for details).
Step 7: Now make call for 168 to 167 to check the IVR by using Zoiper and Microsip software
Step 8: Now make call from 168 to 167 and now press 1 the call is working fine
Snap 9: Again to make call from 168 to 167 and now press 2 the call is working fine
Step 10: Output for Press 1
Executing [167@internal:1] BackGround("PJSIP/168-00000003", "pls-wait-connect-call") in new stack
> 0x7f91bc0725f0 -- Strict RTP learning after remote address set to: 192.168.6.102:4008
-- <PJSIP/168-00000003> Playing 'pls-wait-connect-call.ulaw' (language 'en')
> 0x7f91bc0725f0 -- Strict RTP learning after remote address set to: 192.168.6.102:4008
> 0x7f91bc0725f0 -- Strict RTP switching to RTP target address 192.168.6.102:4008 as source
-- Executing [167@internal:2] Goto("PJSIP/168-00000003", "test,s,1") in new stack
-- Goto (test,s,1)
-- Executing [s@test:1] Answer("PJSIP/168-00000003", "") in new stack
-- Executing [s@test:2] BackGround("PJSIP/168-00000003", "press-1&press-2") in new stack
-- <PJSIP/168-00000003> Playing 'press-1.ulaw' (language 'en')
-- <PJSIP/168-00000003> Playing 'press-2.ulaw' (language 'en')
-- Executing [s@test:3] WaitExten("PJSIP/168-00000003", "") in new stack
> 0x7f91bc0725f0 -- Strict RTP learning complete - Locking on source address 192.168.6.102:4008
-- Executing [1@test:1] Playback("PJSIP/168-00000003", "you-entered") in new stack
-- <PJSIP/168-00000003> Playing 'you-entered.ulaw' (language 'en')
-- Executing [1@test:2] SayNumber("PJSIP/168-00000003", "1") in new stack
-- <PJSIP/168-00000003> Playing 'digits/1.ulaw' (language 'en')
-- Executing [1@test:3] Dial("PJSIP/168-00000003", "PJSIP/167,20") in new stack
-- Called PJSIP/167
-- PJSIP/167-00000004 is ringing
== Everyone is busy/congested at this time (1:1/0/0)
-- Executing [1@test:4] Hangup("PJSIP/168-00000003", "") in new stack
== Spawn extension (test, 1, 4) exited non-zero on 'PJSIP/168-00000003'
Step 11: Output for Press 2
Executing [167@internal:1] BackGround("PJSIP/168-00000005", "pls-wait-connect-call") in new stack
> 0x7f91bc07c140 -- Strict RTP learning after remote address set to: 192.168.6.102:4012
-- <PJSIP/168-00000005> Playing 'pls-wait-connect-call.ulaw' (language 'en')
> 0x7f91bc07c140 -- Strict RTP learning after remote address set to: 192.168.6.102:4012
> 0x7f91bc07c140 -- Strict RTP switching to RTP target address 192.168.6.102:4012 as source
-- Executing [167@internal:2] Goto("PJSIP/168-00000005", "test,s,1") in new stack
-- Goto (test,s,1)
-- Executing [s@test:1] Answer("PJSIP/168-00000005", "") in new stack
-- Executing [s@test:2] BackGround("PJSIP/168-00000005", "press-1&press-2") in new stack
-- <PJSIP/168-00000005> Playing 'press-1.ulaw' (language 'en')
-- <PJSIP/168-00000005> Playing 'press-2.ulaw' (language 'en')
-- Executing [s@test:3] WaitExten("PJSIP/168-00000005", "") in new stack
> 0x7f91bc07c140 -- Strict RTP learning complete - Locking on source address 192.168.6.102:4012
-- Executing [2@test:1] Playback("PJSIP/168-00000005", "you-entered") in new stack
-- <PJSIP/168-00000005> Playing 'you-entered.ulaw' (language 'en')
-- Executing [2@test:2] SayNumber("PJSIP/168-00000005", "2") in new stack
-- <PJSIP/168-00000005> Playing 'digits/2.ulaw' (language 'en')
-- Executing [2@test:3] Dial("PJSIP/168-00000005", "PJSIP/167,20") in new stack
-- Called PJSIP/167
-- PJSIP/167-00000006 is ringing
== Everyone is busy/congested at this time (1:1/0/0)
-- Executing [2@test:4] Hangup("PJSIP/168-00000005", "") in new stack
== Spawn extension (test, 2, 4) exited non-zero on 'PJSIP/168-00000005'
Conclusion:
We have reached the end of this article. In this guide, we have walked you through the steps to create a basic IVR on Asterisk on Oracle Linux 9.3. Your feedback is much welcome
Comments ( 0 )
No comments available