Archives October 2023

How to – Use ViciDial’s AGI’s

AGI

How to – Use ViciDIal’s AGI’s


In the dynamic world of call centers, staying ahead of the curve requires constant innovation. One groundbreaking technology that’s been quietly shaping the industry is VICIdial AGI (Asterisk Gateway Interface). AGIs are the unsung heroes behind the scenes, making complex call center operations look seamless and effortless.
What is VICIdial AGI?
VICIdial, a popular open-source call center suite, employs AGI to interact with Asterisk, the underlying telephony platform. This interface empowers VICIdial to communicate with external systems and execute a wide range of tasks during live calls, offering call centers an unprecedented level of automation and customization.
The Power of Automation
VICIdial AGIs can automate repetitive and time-consuming tasks, such as call routing, data retrieval, and post-call actions. This automation significantly reduces the workload on agents, allowing them to focus on providing top-notch customer service.
Enhancing the Customer Experience
AGIs are the magic behind personalized customer experiences. They can pull up customer data in real-time, enabling agents to greet callers by name and access their history and preferences. This level of personalization can transform a routine call into a memorable interaction.
Unleashing Real-time Insights
VICIdial AGIs are adept at gathering and analyzing data during live calls. This real-time insight is invaluable for call center managers. It provides a window into agent performance, customer sentiment, and call outcomes, helping in immediate decision-making and performance optimization.
Customizing to Perfection
One of the greatest strengths of VICIdial AGIs is their ability to be tailored to meet the specific needs of a call center. From custom scripts to integration with external databases and applications, AGIs offer a world of possibilities.
Challenges and Expertise
While VICIdial AGIs offer immense potential, they do require a level of technical expertise to configure and maintain. Call centers often seek the support of experienced professionals who can harness the full power of AGIs.
The Future of VICIdial AGIs
As call centers continue to evolve, VICIdial AGIs are set to play an even more significant role. They are the driving force behind efficient, personalized, and data-driven customer interactions.
In conclusion, VICIdial AGIs are a true game-changer in the call center industry, providing automation, personalization, and real-time insights that redefine customer service. As businesses strive for excellence, AGIs are becoming a critical component in the pursuit of superior customer experiences.


In this article, I will just display some information from each AGI so there is a useful resource to see what each AGI’s function(s) are plus an example of how to use them. Keep in mind, these can all be changed within the source code to customize solutions you may be trying to accomplish. They can all be found here: /var/lib/asterisk/agi-bin/


agent-monitor.agi

# agent_monitor.agi      version 2.14
#
# NOTE! - To use this script you MUST have entries in the System Settings
#         "Custom Dialplan Entry" for this to work.
#         Read the AGENT_MONITOR.txt document for more information.
#
# This script is designed to allow managers to listen to agent sessions by
# dialing a phone exten number or user ID number. For this to work, the user ID
# or phone extension must be only digits. If you are using the phone extension,
# then all phone extensions on the system must be unique.
#
# user is prompted for a user ID or phone login then press #
# then the user is forwarded to monitor the active vicidial agent session
#
# ; settings for this script:
# ; 1. USER, PHONE, PLOGIN, REDIRECT or RANDOM, lookup by user id, phone extension or phone login (default is USER)
# ; 2. Y or N, log in api log (default is N)
# ; 3. BARGE or LISTEN, (default is LISTEN)
# ; 4. Prepopulated ID, for use in context by itself
# ; 5. Campaign limits, double-dash-delimited, i.e. "TEST--TEST2", (default is disabled)
# ; 6. Y or N, play user IDs to listen to (default is N)
#
# can be added as an AGI to a Call Menu, or just a direct extension transfer:
#
# ; call menu AGI with options:
#  agent_monitor.agi,USER---N---LISTEN------TEST--TEST2---N
#
# ; or as extension transfer to "up_monitor" context and "s" extension

agi-AGENT_dial_in.agi

# agi-AGENT_dial_in.agi      version 2.6
#
# This script is designed to allow agents the ability to dial in to an extension
# to establish the phone connection to their VICIDIAL session. The user login
# and password must be only digits and nothing but digits to use this utility.
#
# user is prompted for their user ID then press #
# user is prompted for their passcode then press #
# then the user is forwarded to the active vicidial agent session
#
# ; settings for this script:
# ; 1. allow user_id only login (disabled by default)
# ;     Y - allow user ID only with no password
# ;     CONTACTS - lookup the user ID as the 'office_num' field in the contact_information table
# ;     N or (blank) - require password (default)
# ; 2. forward to A or B within Call Menu instead of logging into an agent session
# ;     Y - forward to A option on valid user ID or B option on invalid user ID
# ;     N or (blank) - go to agent session (default)
#
# can be added as an AGI to a Call Menu, or as below:
# ;agent dial-in:
#exten => 2345,1,Answer         ; Answer the line
#exten => 2345,2,AGI(agi-AGENT_dial_in.agi)
#exten => 2345,3,Hangup
#
# ; call menu with options:
#       agi-AGENT_dial_in.agi,Y---Y

agi-AGENT_route.agi

# agi-AGENT_route.agi version 2.14
#
# for use with a Call Menu in the custom dialplan section or as an AGI route.
#
# ; settings for this script:
# ; 1. DID pattern to use for In-group initiation settings ('default' is default)
# ; 2. the agentdirect in-group to send the calls to ('AGENTDIRECT' is default)
# ; 3. transfer only to ACTIVE in the system agent or vicidial LOGGED_IN agent
# ;             ('ACTIVE' is default)
# ; 4. prompt for user ID, if this is filled in with a filename it will ask,
# ;             otherwise it will assume $extension is the user ID
# ; 5. number of digits required for user ID validation, X will allow anything,
# ;             this will only be enforced if "prompt for user ID" prompt is populated
# ; 6. audio filename for invalid selection, agent not available ('invalid' is default)
# ; 7. audio filename for invalid user id re-enter prompt, agent not available
# ; 8. number of retry attempts to enter a valid user ID
# ;             this will only be enforced if "prompt for user ID" prompt is populated
# ; 9. in-group to send the call to if there is no valid agent, if none is
# ;             defined, then the call will be directed to 's' exten
# ; 10. audio filename before sending call to no-agent route
# ; 11. audio filename before sending call to no-agent route if agent active but
# ;             not logged-in to vicidial
#
#; example in CallMenu AGI route with all options
# "agi-AGENT_route.agi,default---AGENTDIRECT---LOGGED_IN---if-u-know-ext-dial---X---invalid---please-try-again---3---TEST_IN3---pbxtransfer---outside-transf>
#; example with 4-digit agent IDs
# exten => _XXXX,1,AGI(agi-AGENT_route.agi,default---AGENTDIRECT---ACTIVE)

agi-CALLCARD_dial_in.agi

# agi-CALLCARD_dial_in.agi      version 2.6
#
# This script is designed to allow customers the ability to dial in to a DID and
# enter in a PIN number that would look up their account and send on to a
# specified in-group if pin is valid
#
# user is prompted for their PIN number only (no pound '#' required)
# then the user is forwarded to the active vicidial agent session
#
# can be added as an AGI to a Call Menu, or as below:
# Call Menu Entry: "agi-CALLCARD_dial_in.agi,en---3---callcard_pin_enter---callcard_pin_invalid---default"
# ;agent dial-in:
#exten => 2346,1,Answer         ; Answer the line
#exten => 2346,2,AGI(agi-CALLCARD_dial_in.agi,en---3---callcard_pin_enter---callcard_pin_invalid---default)
#exten => 2346,3,Hangup
#
# ; Below are the parameters needed for the script to be run properly
# ; 1. language
# ;     - en -                  English <default>
# ;     - es -                  Spanish
# ;     - fr -                  French, not fully supported
# ; 2. maximum attempts before hangup:
# ;     - 3        <default>
# ; 3. audio file enter pin number prompt:
# ;     - callcard_pin_enter        <default>
# ; 4. audio file invalid pin number prompt:
# ;     - callcard_pin_invalid      <default>
# ; 5. DID pattern to use for in-group forwarding settings:
# ;     - default      <default>
# ;         - USE-ORIGINATING-DID - this option will look up the DID the customer dialed in on and use those settings
#
# other audio files used:
# - pin-number-accepted
# - vm-youhave
# - callcard_minutes_left

agi-CANADA_PRI_CIDname.agi

# agi-CANADA_PRI_CIDname.agi version 0.1
#
# Runs after call goes through IAX loop to send out custom CallerIDname on
# Canadian PRIs that allow dynamic setting of CIDname with call initiation
#
# You need to have lines similar to those below in your extensions.conf file:
#
# ;outbound VICIDIAL calls:
#exten => _91NXXNXXXXXX,1,AGI(call_log.agi,${EXTEN})
#exten => _91NXXNXXXXXX,2,AGI(agi-CANADA_PRI_CIDname.agi,${EXTEN})
#exten => _91NXXNXXXXXX,3,Dial(${TRUNKX}/${EXTEN:1},55,tTo)
#exten => _91NXXNXXXXXX,4,Hangup

agi-DID_route.agi

# agi-DID_route.agi version 2.14
#
# runs when a call comes into an inbound context on a trunk. This script will
# send the calls to various places depending on the settings for each DID.
#
# You need to put a line similar to this below in your extensions.conf file in
# the context for where incoming calls go from your trunks (for example, the
# trunkinbound context which is present in the default dialplan):
#
#[trunkinbound]
# ;inbound DID catch-all:
#exten => _X.,1,AGI(agi-DID_route.agi)

agi-dtmf.agi

# agi-dtmf.agi - script for playing DTMF tones or signals received as the callerid field or in the command CLI
#
# DTMF sound files must be in /var/lib/asterisk/sounds for this to work
#
# Accepted values are: 1 2 3 4 5 6 7 8 9 0 # * ,
# comma means pause for 1 second (use 'S' for pause in CLI mode)
#
# exten => 8500998,1,Answer
# exten => 8500998,2,Playback(silence)
# exten => 8500998,3,AGI(agi-dtmf.agi)
#; exten => 8500998,3,AGI(agi-dtmf.agi,signalonly) ; optional signal only DTMF
# exten => 8500998,4,Hangup
#
# Can also be used in a Call Menu: agi-dtmf.agi,signalonly---12345   # optional signal only DTMF with CLI-defined DTMF values

agi-ingroup_survey.agi

# agi-ingroup_survey.agi version 2.14
#
# runs after a call gets transferred from an agent to ask a question, then
# optionally transfer to a call menu. Takes settings from an In-Group

agi-IVR_recording_verification.agi

# agi-IVR_recording_verification.agi      version 2.6
#
# This script is designed to function as a complete automated 3rd party
# verification IVR recording system. This script will work by optionally asking
# for a company ID and/or a customer phone number, then it will play through the
# listed prompts asking for a single digit press (i.e. 1 for a yes or a 3 for a
# no, hash/pound/star/zero/0 are not accepted only 1-9 is valid for these steps).
# All data for these calls will be logged to the vicidial_ivr table as well as
# optionally to a log file  in the standard astguiclient log file directory
# and/or STDERR output on the asterisk process. This script uses the
# /etc/astguiclient.conf file for database connection settings, logging data and
# for logfile path information only.
#
# With a modified VDAD agi transfer script, this script could also be used to do
# automated outbound surveys as well. Feature under development.
#
# ; 1. the DNIS or inbound number called
# ; 2. play the recording ID (Y|N) with prompt leading up to it
# ; 3. record this call(Y|N)
# ; 4. ask for a company code(Y|N) with the number of digits in that company code and the prompt
# ; 5. ask for a user code(Y|N) with the number of digits in that user code and the prompt
# ; 6. ask for the customer phone number(Y|N) with the number of digits in that phone number and the prompt (Y-10-85100001)
# ; 7. speak the current date (Y|N) with prompt announcing the date
# ; 8. a dash-delimited list of prompts that expect responses(85100002-85100003)
# ; 9. a "your recording ID is..." prompt (85100004)
# ; 10. logging/output (FILE|STDERR|BOTH|NONE)
#
# ;inbound IVR call:
#exten => 1234,1,Ringing        ; call ringing
#exten => 1234,2,Wait(1)        ; Wait 1 second for CID delivery from PRI
#exten => 1234,3,Answer         ; Answer the line
#exten => 1234,4,AGI(agi-IVR_recording_verification.agi,7274506620---Y-85100004---Y---Y-1-85100016---N---N---Y-85100007---85100009-600--85100012-30--8510001>
#exten => 1234,5,Hangup
#
# ;inbound IVR call from a VICIDIAL transfer:
#exten => _83002*.,1,Ringing            ; call ringing
#exten => _83002*.,2,Wait(1)            ; Wait 1 second for CID delivery
#exten => _83002*.,3,Answer             ; Answer the line
#exten => _83002*.,4,AGI(agi-IVR_recording_verification.agi,7275551234---N---Y---N---N---Y-10-85100001---N---85100002-85100003---85100004---BOTH)
#exten => _83002*.,5,Hangup

agi-LCR-Route.agi

# agi-LCR-Route.agi version 2.2.0
#
# This script looks up the NPANXX in the lcr table and sets
# the LCRTRUNK dialplan variable to the carrier string
# with the cheapest rate. If no carrier is found for this NPANXX
# the variable is unchanged so you should set it with the default
# previously.
#
# [globals]
# LCRTRUNK=SIP/provider1    ; default LCR trunk
#
# [default]
# ;outbound VICIDIAL calls:
# exten => _91NXXNXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log)
# exten => _91NXXNXXXXXX,n,AGI(agi-LCR-Route.agi,${EXTEN:2:6})
# exten => _91NXXNXXXXXX,n,Dial(${LCRTRUNK}/${EXTEN:2},,To)
# exten => _91NXXNXXXXXX,n,Hangup
#
# Here is the SQL to create the lcr table:
#
# create table if not exists lcr (
#        npanxx mediumint not null,
#        rate varchar(10) not null,
#        carrier_string varchar(20) not null
# );
# alter table lcr add unique index (npanxx, rate, carrier_string);
#
# A typical npanxx from this table should look like:
#
# mysql> select npanxx,rate,carrier_string from lcr where npanxx='734223';
# +--------+--------+----------------+
# | npanxx | rate   | carrier_string |
# +--------+--------+----------------+
# | 734223 | 0.0064 | SIP/provider1  |
# | 734223 | 0.0076 | SIP/provider2  |
# +--------+--------+----------------+
#
# Unfortunately these rate sheets are not in a standard format.
# You will have to write a custom loading script to populate this table.
# An exampe loading script is provided in the extras directory of the
# astguiclient source code called lcr_loader_example.pl

agi-NVA_recording.agi

# agi-NVA_recording.agi version 2.12
#
# This script is designed to give recording ability to agents not the using
# ViciDial agent screen
#
# ; 1. logging output (NONE|STDERR|FILE|BOTH)
# ; 2. the ViciDial user ID, if empty it defaults to accountcode(usually phone extension) or vicidial_live_agents user who launched the call
# ; 3. log this call in user_call_log (Y|N) default N
# ; 4. log this call in call_log (Y|N) default N, ONLY NEEDED FOR INBOUND AND INTERSYSTEM CALLS!!!
# ; 5. audio record this call (Y|N) default N
# ; 6. double-log this call in call_log (Y|N) default N, ONLY NEEDED FOR INBOUND CALLMENU FORWARDED CALLS!!!
# ; 7. play the recording ID of this call before recording starts
# ; 8. include the recording ID in the filename
# ; 9. search vicidial_list for phone number dialed (Y|N) default N, assumes 10 digit phone numbers
# ; 10. if 9 is Y, this is search method (ALLLISTS|PHONE) default ALLLISTS, search all lists, use phone setting, CURRENTLY DOES NOTHING
# ; 11. error out and end call if phone number is not found (Y|N) default N
# ; 12. run the phone entry's NVA Call URL (Y|N) default N
# ; 13. if 9 is Y, and phone number is not found, insert into phone's NVA List ID (Y|N) default N
# ; 14. if 13 is Y, override phone's NVA List ID with this list ID when lead is inserted
# ; 15. if 13 is Y, override phone's NVA Phone Code with this phone code when lead is inserted
# ; 16. if 13 is Y, override phone's NVA Status with this status when lead is inserted
#
#
# ;custom dialplan entry example: (similar to the defaultlog Call Menu)
#exten => _X.,1,AGI(agi-NVA_recording.agi,BOTH------Y---N---Y---N---N---N)
#exten => _X.,n,Goto(default,${EXTEN},1)
#exten => _X.,n,Hangup
#
# ;inbound to agent example:
#exten => 5678,1,AGI(agi-NVA_recording.agi,BOTH------Y---Y---Y---N---N---N)
#exten => 5678,n,Goto(vicidial-auto,5678,1)
#exten => 5678,n,Hangup
#
# ; example of dial prefix of 94 in System Settings Custom Dialplan to default log
#exten => _941NXXNXXXXXX,1,Goto(defaultlog,9${EXTEN:2},1)
#
# ; example of using as Call Menu prompt to record with playing of recording id
#agi-NVA_recording.agi,BOTH------Y---N---Y---N---Y---Y
#
# ; example of using as Call Menu prompt to record, search for phone number, run NVA call URL and error if not found
#agi-NVA_recording.agi,BOTH------Y---N---Y---N---N---N---Y---ALLLISTS---Y---Y
#
# ;custom dialplan entry example: (similar to the defaultlog Call Menu) with NVA options
#exten => _X.,1,AGI(agi-NVA_recording.agi,BOTH------Y---N---Y---N---N---N---Y---ALLLISTS---N---Y---Y)
#exten => _X.,n,Goto(default,${EXTEN},1)
#exten => _X.,n,Hangup

agi-NVA_recording_MIX.agi

# agi-NVA_recording_MIX.agi version 2.14
#
# This script is designed to give recording ability to agents not the using
# ViciDial agent screen. This version is designed for Asterisk 16 (MixMonitor)
#
# ; 1. logging output (NONE|STDERR|FILE|BOTH)
# ; 2. the ViciDial user ID, if empty it defaults to accountcode(usually phone extension) or vicidial_live_agents user who launched the call
# ; 3. log this call in user_call_log (Y|N) default N
# ; 4. log this call in call_log (Y|N) default N, ONLY NEEDED FOR INBOUND AND INTERSYSTEM CALLS!!!
# ; 5. audio record this call (Y|N) default N
# ; 6. double-log this call in call_log (Y|N) default N, ONLY NEEDED FOR INBOUND CALLMENU FORWARDED CALLS!!!
# ; 7. play the recording ID of this call before recording starts
# ; 8. include the recording ID in the filename
# ; 9. search vicidial_list for phone number dialed (Y|N) default N, assumes 10 digit phone numbers
# ; 10. if 9 is Y, this is search method (ALLLISTS|PHONE) default ALLLISTS, search all lists, use phone setting, CURRENTLY DOES NOTHING
# ; 11. error out and end call if phone number is not found (Y|N) default N
# ; 12. run the phone entry's NVA Call URL (Y|N) default N
# ; 13. if 9 is Y, and phone number is not found, insert into phone's NVA List ID (Y|N) default N
# ; 14. if 13 is Y, override phone's NVA List ID with this list ID when lead is inserted
# ; 15. if 13 is Y, override phone's NVA Phone Code with this phone code when lead is inserted
# ; 16. if 13 is Y, override phone's NVA Status with this status when lead is inserted
#
#
# ;custom dialplan entry example: (similar to the defaultlog Call Menu)
#exten => _X.,1,AGI(agi-NVA_recording_MIX.agi,BOTH------Y---N---Y---N---N---N)
#exten => _X.,n,Goto(default,${EXTEN},1)
#exten => _X.,n,Hangup
#
# ;inbound to agent example:
#exten => 5678,1,AGI(agi-NVA_recording_MIX.agi,BOTH------Y---Y---Y---N---N---N)
#exten => 5678,n,Goto(vicidial-auto,5678,1)
#exten => 5678,n,Hangup
#
# ; example of dial prefix of 94 in System Settings Custom Dialplan to default log
#exten => _941NXXNXXXXXX,1,Goto(defaultlog,9${EXTEN:2},1)
#
# ; example of using as Call Menu prompt to record with playing of recording id
#agi-NVA_recording_MIX.agi,BOTH------Y---N---Y---N---Y---Y
#
# ; example of using as Call Menu prompt to record, search for phone number, run NVA call URL and error if not found
#agi-NVA_recording_MIX.agi,BOTH------Y---N---Y---N---N---N---Y---ALLLISTS---Y---Y
#
# ;custom dialplan entry example: (similar to the defaultlog Call Menu) with NVA options
#exten => _X.,1,AGI(agi-NVA_recording_MIX.agi,BOTH------Y---N---Y---N---N---N---Y---ALLLISTS---N---Y---Y)
#exten => _X.,n,Goto(default,${EXTEN},1)
#exten => _X.,n,Hangup

agi-phone_monitor.agi

# agi-phone_monitor.agi      version 2.8
#
# NOTE! - To use this script you MUST have entries in the System Settings
#         "Custom Dialplan Entry" for this to work.
#         Read the AGENT_MONITOR.txt document for more information.
#
# This script is designed to allow managers to listen to agent sessions by
# dialing a phone exten number or user ID number. For this to work, the user ID
# or phone extension must be only digits. If you are using the phone extension,
# then all phone extensions on the system must be unique.
#
# user is prompted for a user ID or phone login then press #
# then the user is forwarded to monitor the active vicidial agent session
#
# ; settings for this script:
# ; 1. USER, PHONE or PLOGIN, lookup by user id, phone extension or phone login (default is USER)
# ; 2. Y or N, log in api log (default is N)
# ; 3. BARGE or LISTEN, (default is LISTEN)
# ; 4. Prepopulated ID, for use in context by itself
#
# can be added as an AGI to a Call Menu, or just a direct extension transfer:
#
# ; call menu AGI with options:
#  agi-phone_monitor.agi,USER---N---LISTEN---
#
# ; or as extension transfer to "up_monitor_exit" context and "s" extension

agi-record_prompts.agi

# agi-record_prompts.agi      version 2.12
#
# for recording prompts to GSM file over the phone
# Saves recordings with 8-digit filenames to be played when exten is dialed
#
#       ; prompts for recording AGI script, ID is 4321
#   ; first variable is format (gsm/wav)
#       ; second variable is timeout in milliseconds (default is 360000 [6 minutes])
#       exten => 8167,1,Answer
#       exten => 8167,2,AGI(agi-record_prompts.agi,wav-----360000)
#       exten => 8167,3,Hangup
#       exten => 8168,1,Answer
#       exten => 8168,2,AGI(agi-record_prompts.agi,gsm-----360000)
#       exten => 8168,3,Hangup
#
#       ; playback of recorded prompts
#       exten => _851XXXXX,1,Answer
#       exten => _851XXXXX,2,Playback(${EXTEN})
#       exten => _851XXXXX,3,Hangup
#
#       GSM Sound Files used:
#       - ld_welcome_pin_number
#       - ld_invalid_pin_number
#       - vm-rec-generic
#       - auth-thankyou
#       - vm-review
#       - vm-msgsaved
#       - vm-goodbye

agi-set_variables.agi

# agi-set_variables.agi version 2.14
#
# runs after a call_log before call is placed out the trunk and sets all
# vicidial_list fields as variables for the call
#
# You need to put lines similar to those below in your extensions.conf file:
#
# ; VICIDIAL_auto_dialer transfer script AMD with Load Balanced:
# exten => _91NXXNXXXXXX,1,AGI(agi://127.0.0.1:4577/call_log)
# exten => _91NXXNXXXXXX,n,AGI(agi-set_variables.agi,)
# exten => _91NXXNXXXXXX,n,Verbose("phone_code:${phone_code}, phone_number:${phone_number}, lead_id:${lead_id}")
# exten => _91NXXNXXXXXX,n,Dial(${TESTSIPTRUNK}/${EXTEN:2},,tTor)
# exten => _91NXXNXXXXXX,n,Hangup

agi-TILTX_SHAKEN.agi

# agi-TILTX_SHAKEN.agi version 2.14
#
# Runs before a call goes to a carrier for optional DNC/Disconnect check as well
# as CID check and STIR/SHAKEN SIP call Identity tagging through TILTX service
#
# You need to put lines similar to those below in your VICIdial carrier dialplan entry:
#
# exten => _91NXXNXXXXXX,n,AGI(/var/lib/asterisk/agi-bin/agi-TILTX_SHAKEN.agi,${EXTEN:-10}-----${CALLERID(num)}-----YES-----)
#
# CLI FLAG OPTIONS:
# 1. Phone number being called
# 2. CallerID number being sent with call
# 3. (YES/NO) whether to speak error messages or not, default 'NO'
# 4. Settings Container ID to use for TILTX API settings, default 'TILTX_SHAKEN_API_KEY'

agi-VDAD_ALL_inbound.agi

# agi-VDAD_ALL_inbound.agi version 2.14
#
# runs when a call comes in from an inbound call. This script will
# send the calls out to the closers that are logged in.
# ## THIS SCRIPT CONSOLIDATES THIRTEEN SEPARATE VDAD closer inbound SCRIPTS ##
#
#
# You need to put lines similar to those below in your extensions.conf file:
# ; Below are the parameters needed for the script to be run properly
# ; 1. the method of call handling for the script:
# ;     - CID -         CID received, add record with phone number
# ;     - CIDLOOKUP -   Lookup CID to find record in whole system
# ;     - CIDLOOKUPRL - Restrict lookup to one list
# ;     - CIDLOOKUPRC - Restrict lookup to one campaign's lists
# ;     - CIDLOOKUPALT -        Lookup CID to find record in whole system by phone number then alt_phone
# ;     - CIDLOOKUPRLALT -      Restrict lookup to one list by phone number then alt_phone
# ;     - CIDLOOKUPRCALT -      Restrict lookup to one campaign's lists by phone number then alt_phone
# ;     - CIDLOOKUPADDR3 -      Lookup CID to find record in whole system by phone number then address3
# ;     - CIDLOOKUPRLADDR3 -    Restrict lookup to one list by phone number then address3
# ;     - CIDLOOKUPRCADDR3 -    Restrict lookup to one campaign's lists by phone number then address3
# ;     - CIDLOOKUPALTADDR3 -   Lookup CID to find record in whole system by phone number then alt_phone then address3
# ;     - CIDLOOKUPRLALTADDR3 - Restrict lookup to one list by phone number then alt_phone then address3
# ;     - CIDLOOKUPRCALTADDR3 - Restrict lookup to one campaign's lists by phone number then alt_phone then address3
# ;     - CLOSER -      Closer calls from VICIDIAL fronters(and previous in-group calls)
# ;     - ANI -         ANI received, add record with phone number (based on RBS T1s)
# ;     - ANILOOKUP -   Lookup ANI to find record in whole system
# ;     - ANILOOKUPRL - Restrict lookup to one list
# ;     - ANILOOKUPRC - Restrict lookup to one campaign's lists
# ;     - VID -         Add record with Vendor Lead Code received as argument 12
# ;     - VIDLOOKUP -   Lookup Vendor Lead Code received as argument 12 to find record in whole system
# ;     - VIDLOOKUPRL - Restrict lookup to one list (argument 12)
# ;     - VIDLOOKUPRC - Restrict lookup to one campaign's lists (argument 12)
# ;     - VIDPROMPT -   Prompt Vendor Lead Code to User with IVR to add record with Vendor Lead Code
# ;     - VIDPROMPTLOOKUP -     Prompt Vendor Lead Code to User with IVR to find record in whole system
# ;     - VIDPROMPTLOOKUPRL -   Restrict lookup to one list
# ;     - VIDPROMPTLOOKUPRC -   Restrict lookup to one campaign's lists
# ;     - 3DIGITID -    Enter 3 digit code to go to agent
# ;     - 4DIGITID -    Enter 4 digit code to go to agent
# ;     - XDIGITID -    Enter X digit code to go to agent(variable, i.e. 9DIGITID, 12DIGITID, etc...)
# ; 2. the method of searching for an available agent:
# ;     - LO - Load Balance Overflow only (priority to home server)
# ;     - LB - <default> Load Balance total system
# ;     - SO - Home server only
# ; 3. the full name of the IN GROUP to be used in vicidial for the inbound call
# ; 4. the phone number that was called, for the log entry
# ; 5. the callerID or lead_id of the person that called(usually overridden)
# ; 6. the park extension audio file name if used
# ; 7. the status of the call initially(usually not used)
# ; 8. the list_id to insert the new lead under if it is new (and CID/ANI available)
# ; 9. the phone dialing code to insert with the new lead if new (and CID/ANI available)
# ; 10. the campaign_id to search within lists if CIDLOOKUPRC
# ; 11. the user to queue the call to for AGENTDIRECT in-group calls
# ; 12. vendor_lead_code if external mechanism like custom IVR is used to prompt user for ID
# ;              you can also set the vendor_lead_code variable instead if you are using VIDPROMPT
# ; 13. VID enter prompt filename to play if method is set to a VID* option
# ; 14. VID you-have-entered filename to play if method is set to a VID* option
# ; 15. VID confirm prompt filename to play if method is set to a VID* option
# ; 16. VID digit length validation to use if method is set to a VID* option, set to empty or X to disable
#
# ;inbound VICIDIAL calls:
#exten => 1234,1,Answer                  ; Answer the line
#exten => 1234,2,AGI(agi-VDAD_ALL_inbound.agi,CID-----LB-----INB-----7274515134-----Closer-----park----------999-----1-----OUTB)
#exten => 1234,3,Hangup
#
# ;inbound with removal of first digit of callerID on all calls:
#exten => 1234,1,Answer                  ; Answer the line
#exten => 1234,n,set(CALLERID(num)=${CALLERID(num):1})
#exten => 1234,n,AGI(agi-VDAD_ALL_inbound.agi,CID-----LB-----INB-----7274515134-----Closer-----park----------999-----1-----OUTB)
#exten => 1234,n,Hangup
#
#; inbound VICIDIAL transfer calls [can arrive through PRI T1 crossover, IAX or SIP channel]
#exten => _90009.,1,Answer                  ; Answer the line
#exten => _90009.,2,AGI(agi-VDAD_ALL_inbound.agi,CLOSER-----LB-----CL_TESTCAMP-----7275551212-----Closer-----park----------999-----1)
#exten => _90009.,3,Hangup
#exten => _990009.,1,Answer                  ; Answer the line
#exten => _990009.,2,AGI(agi-VDAD_ALL_inbound.agi,CLOSER-----LB-----CL_TESTCAMP-----7275551212-----Closer-----park----------999-----1)
#exten => _990009.,3,Hangup
#; DID forwarded calls
#exten => _99909*.,1,Answer
#exten => _99909*.,2,AGI(agi-VDAD_ALL_inbound.agi)
#exten => _99909*.,3,Hangup

agi-VDAD_ALL_outbound.agi

# agi-VDAD_ALL_outbound.agi version 2.14
#
# runs when an outbound call is answered. This script will
# send the calls out to the agents that are logged in.
# ## THIS SCRIPT CONSOLIDATES EIGHT SEPARATE VDAD outbound transfer SCRIPTS ##
#
#
# You need to put lines similar to those below in your extensions.conf file:
# ; Below are the parameters needed for the script to be run properly
# ; 1. the method of call handling for the script:
# ;     - NORMAL -              <default> Standard outbound routing to agent
# ;     - TEST -                For performance testing only
# ;     - BROADCAST -   For no-agent broadcast dialing
# ;     - SURVEY -              For survery question then on to agent
# ;     - SURVEYCAMP -  For survery question using campaign settings
# ;     - SURVEYCAMPCEP - Survery question, campaign settings, cepstral name
# ;     - REMINDER -    Reminder campaign
# ;     - REMINDX -             Reminder with transfer to agent
# ; 2. the method of searching for an available agent: (agent_search_method)
# ;     - LB - <default> Load Balance total system
# ;     - LO - Load Balance Overflow only (priority to home server)
# ;     - SO - Home server only
# ; 3. The Connected Line Name to solve CID Name change issues.
# ; 4. the sound file to play when doing a SURVEY, REMINDER, REMINDX campaign
# ; 5. the acceptible dtmf digits for a SURVEY
# ; 6. the out-opt digit for a SURVEY (must be in the digit map)
# ; 7. the sound file to play for a SURVEY when transfering to an agent
# ; 8. the sound file to play for a SURVEY when DNCing the call
# ; 9. OPTIN or OPTOUT: if OPTIN call is only sent to agent with button press
# ;     if OPTOUT call is sent to agent if no button press at all
# ; 10. the status that is use for a SURVEY when someone opts out
# ;     if the status is DNC it will also add them to the internal dnc table
#
#; VICIDIAL_auto_dialer transfer script Load Balanced:
#exten => 8368,1,AGI(agi://127.0.0.1:4577/call_log)
#exten => 8368,n,AGI(agi-VDAD_ALL_outbound.agi,NORMAL-----LB-----${CONNECTEDLINE(name)})
#exten => 8368,n,Hangup()
#
# ;outbound VICIDIAL SURVEY calls:
#exten => 8366,1,AGI(agi://127.0.0.1:4577/call_log)
#exten => 8366,2,AGI(agi-VDAD_ALL_outbound.agi,SURVEY-----LB-----US_pol_survey_hello-----1238-----8-----US_pol_survey_transfer-----US_thanks_no_contact----->
#exten => 8366,3,AGI(agi-VDAD_ALL_outbound.agi,SURVEY-----LB-----US_pol_survey_hello-----1238-----8-----US_pol_survey_transfer-----US_thanks_no_contact----->
#exten => 8366,4,AGI(agi-VDAD_ALL_outbound.agi,SURVEY-----LB-----US_pol_survey_hello-----1238-----8-----US_pol_survey_transfer-----US_thanks_no_contact----->
#exten => 8366,5,Hangup

agi-VDAD_ALL_outboundBETA2.agi

# agi-VDAD_ALL_outboundBETA2.agi version 2.14
#
# runs when an outbound call is answered. This script will
# send the calls out to the agents that are logged in.
# ## THIS SCRIPT CONSOLIDATES EIGHT SEPARATE VDAD outbound transfer SCRIPTS ##
#
#
# You need to put lines similar to those below in your extensions.conf file:
# ; Below are the parameters needed for the script to be run properly
# ; 1. the method of call handling for the script:
# ;     - NORMAL -              <default> Standard outbound routing to agent
# ;     - TEST -                For performance testing only
# ;     - BROADCAST -   For no-agent broadcast dialing
# ;     - SURVEY -              For survery question then on to agent
# ;     - SURVEYCAMP -  For survery question using campaign settings
# ;     - SURVEYCAMPCEP - Survery question, campaign settings, cepstral name
# ;     - REMINDER -    Reminder campaign
# ;     - REMINDX -             Reminder with transfer to agent
# ; 2. the method of searching for an available agent:
# ;     - LB - <default> Load Balance total system
# ;     - LO - Load Balance Overflow only (priority to home server)
# ;     - SO - Home server only
# ; 3. the sound file to play when doing a SURVEY, REMINDER, REMINDX campaign
# ; 4. the acceptible dtmf digits for a SURVEY
# ; 5. the out-opt digit for a SURVEY (must be in the digit map)
# ; 6. the sound file to play for a SURVEY when transfering to an agent
# ; 7. the sound file to play for a SURVEY when DNCing the call
# ; 8. OPTIN or OPTOUT: if OPTIN call is only sent to agent with button press
# ;     if OPTOUT call is sent to agent if no button press at all
# ; 9. the status that is used for a SURVEY when someone opts out
# ;     if the status is DNC it will also add them to the internal dnc table
#
# ;outbound VICIDIAL calls:
#exten => 8368,1,AGI(agi://127.0.0.1:4577/call_log)
#exten => 8368,2,AGI(agi-VDAD_ALL_outbound.agi,NORMAL-----LB)
#exten => 8368,3,AGI(agi-VDAD_ALL_outbound.agi,NORMAL-----LB)
#exten => 8368,4,AGI(agi-VDAD_ALL_outbound.agi,NORMAL-----LB)
#exten => 8368,5,Hangup
#
# ;outbound VICIDIAL SURVEY calls:
#exten => 8366,1,AGI(agi://127.0.0.1:4577/call_log)
#exten => 8366,2,AGI(agi-VDAD_ALL_outbound.agi,SURVEY-----LB-----US_pol_survey_hello-----1238-----8-----US_pol_survey_transfer-----US_thanks_no_contact----->
#exten => 8366,3,AGI(agi-VDAD_ALL_outbound.agi,SURVEY-----LB-----US_pol_survey_hello-----1238-----8-----US_pol_survey_transfer-----US_thanks_no_contact----->
#exten => 8366,4,AGI(agi-VDAD_ALL_outbound.agi,SURVEY-----LB-----US_pol_survey_hello-----1238-----8-----US_pol_survey_transfer-----US_thanks_no_contact----->
#exten => 8366,5,Hangup

agi-VDAD_ALL_outboundBETA.agi

# agi-VDAD_ALL_outboundBETA.agi version 2.14
#
# runs when an outbound call is answered. This script will
# send the calls out to the agents that are logged in.
# ## THIS SCRIPT CONSOLIDATES EIGHT SEPARATE VDAD outbound transfer SCRIPTS ##
#
#
# You need to put lines similar to those below in your extensions.conf file:
# ; Below are the parameters needed for the script to be run properly
# ; 1. the method of call handling for the script:
# ;     - NORMAL -              <default> Standard outbound routing to agent
# ;     - TEST -                For performance testing only
# ;     - BROADCAST -   For no-agent broadcast dialing
# ;     - SURVEY -              For survery question then on to agent
# ;     - SURVEYCAMP -  For survery question using campaign settings
# ;     - SURVEYCAMPCEP - Survery question, campaign settings, cepstral name
# ;     - REMINDER -    Reminder campaign
# ;     - REMINDX -             Reminder with transfer to agent
# ; 2. the method of searching for an available agent:
# ;     - LB - <default> Load Balance total system
# ;     - LO - Load Balance Overflow only (priority to home server)
# ;     - SO - Home server only
# ; 3. the sound file to play when doing a SURVEY, REMINDER, REMINDX campaign
# ; 4. the acceptible dtmf digits for a SURVEY
# ; 5. the out-opt digit for a SURVEY (must be in the digit map)
# ; 6. the sound file to play for a SURVEY when transfering to an agent
# ; 7. the sound file to play for a SURVEY when DNCing the call
# ; 8. OPTIN or OPTOUT: if OPTIN call is only sent to agent with button press
# ;     if OPTOUT call is sent to agent if no button press at all
# ; 9. the status that is used for a SURVEY when someone opts out
# ;     if the status is DNC it will also add them to the internal dnc table
#
# ;outbound VICIDIAL calls:
#exten => 8368,1,AGI(agi://127.0.0.1:4577/call_log)
#exten => 8368,2,AGI(agi-VDAD_ALL_outbound.agi,NORMAL-----LB)
#exten => 8368,3,AGI(agi-VDAD_ALL_outbound.agi,NORMAL-----LB)
#exten => 8368,4,AGI(agi-VDAD_ALL_outbound.agi,NORMAL-----LB)
#exten => 8368,5,Hangup
#
# ;outbound VICIDIAL SURVEY calls:
#exten => 8366,1,AGI(agi://127.0.0.1:4577/call_log)
#exten => 8366,2,AGI(agi-VDAD_ALL_outbound.agi,SURVEY-----LB-----US_pol_survey_hello-----1238-----8-----US_pol_survey_transfer-----US_thanks_no_contact----->
#exten => 8366,3,AGI(agi-VDAD_ALL_outbound.agi,SURVEY-----LB-----US_pol_survey_hello-----1238-----8-----US_pol_survey_transfer-----US_thanks_no_contact----->
#exten => 8366,4,AGI(agi-VDAD_ALL_outbound.agi,SURVEY-----LB-----US_pol_survey_hello-----1238-----8-----US_pol_survey_transfer-----US_thanks_no_contact----->
#exten => 8366,5,Hangup

agi-VDADautoREMINDER.agi

# agi-VDADautoREMINDER.agi      version 2.6
#
# runs when a call comes in from the VICIDIAL auto_dialer. This script will
# send the calls out to specified voicemail boxes in if called person presses key.
# The voicemail box is defined per-lead in the vicidial_list.security_phrase field
# This campaign does not send calls to live agents.
#
#   Call statuses from this script:
#       N- Call was picked up, didn't finish initial message
#       MP- Initial message was played
#       VM- call was sent to voicemail
#       CALLBK- customer selected to be called back
#
# It is recommended that you run this campaign at a dial level of 1.0
# It is recommended that you use remote_agents for activation of this script
#
# You need to put lines similar to those below in your extensions.conf file:
#
# ;VICIDIAL_auto_dialer transfer script:
# exten => 8372,1,AGI(call_log.agi,${EXTEN})
# exten => 8372,2,AGI(agi-VDADautoREMINDER.agi,${EXTEN})


agi-VDADautoREMINDERxfer.agi

# agi-VDADautoREMINDERxfer.agi      version 2.6
#
# runs when a call comes in from the VICIDIAL auto_dialer. This script will
# send the calls out to specified voicemail boxes or specified extensions if
# called person presses specified key(1,2,3).
# The voicemail box is defined per-lead in the vicidial_list.security_phrase field
# The exten xfer number is defined per-lead in the vicidial_list.comments field
#
#   Call statuses from this script:
#       N- Call was picked up, didn't finish initial message
#       MP- Initial message was played
#       VM- call was sent to voicemail
#       XFER- call was sent to specified extension
#       CALLBK- customer selected to be called back
#
# It is recommended that you run this campaign at a dial level of 1.0
# It is recommended that you use remote_agents for activation of this script
#
# You need to put lines similar to those below in your extensions.conf file:
#
# ;VICIDIAL_auto_dialer transfer script:
# exten => 8372,1,AGI(call_log.agi,${EXTEN})
# exten => 8372,2,AGI(agi-VDADautoREMINDERxfer.agi,${EXTEN})

agi-VDADfixCXFER.agi

# agi-VDADfixCXFER.agi      version 2.6
#
# runs when a Consultative transfer is released by the vicidial fronter as the
# call arrives on another channel so that the vicidial_live_agents record is
# updated to be accurate.
#
# You need to put lines similar to those below in your extensions.conf file:
#
# ;VICIDIAL Consultative Xfer fix script:
# exten => _8600XXX*.,1,AGI(agi-VDADfixCXFER.agi)
# exten => _010*010*010*015*8600XXX*.,1,AGI(agi-VDADfixCXFER.agi)

agi-VDAD_inbound_calltime_check.agi

# agi-VDAD_inbound_calltime_check.agi   version 2.14
#
# Runs when a call comes in from an inbound call. This script will check the
# settings of the defined calltime scheme in VICIDIAL and either send the call
# to the after-hours method for the defined IN-GROUP or exit to let the call
# continue. This script is also used by Call Menus.
#
# You need to put lines similar to those below in your extensions.conf file:
# ; Below are the parameters needed for the script to be run properly
# ; 1. the in-group to take settings from
# ; 2. whether to log the call into the vicidial_auto_calls table:
# ;             - YES - insert the call as status IVR
# ;             - NO  - do not insert call into vac table
# ; 3. note to put in the comment_b field when record inserted into the
# ;    live_inbound_log table, no spaces in this field, use underscore '_'
# ;    default if not populated is NONE
# ; 4. call time scheme override
# ; 5. call route after hours override
# ; 6. call route value after hours override
# ; 7. call route context after hours override
# ; 8. vicidial_list query qualification (YES/NO, default is NO)
# ;    * only works with lead_id-populated calleridname phone calls.
# ;    This option allows you to specify a SQL fragment used to do a count(*)
# ;    against the vicidial_list table for the lead and other field values
# ;    This feature will look for the qualify_sql in the call menu record
# ; 9. play sip-silence audio, YES/NO, default is YES
# ;
# ;inbound calls check calltime:
#exten => 1234,1,Answer                  ; Answer the line
#exten => 1234,2,AGI(agi-VDAD_inbound_calltime_check.agi,INBOUND-----YES-----START-----24hours-----EXTENSION-----101-----default-----NO-----YES)
#exten => 1234,3,Hangup

agi-VDADinbound_NI_DNC_CIDlookup.agi

# NOTE: IT IS RECOMMENDED THAT YOU USE cm_dnc.agi THROUGH A CALL MENU INSTEAD!
#
# agi-VDADinbound_NI_DNC_CIDlookup.agi version 2.0.5   *DBI-version*
#
# runs when a call comes in from an inbound call. This script will
# play a message and take input to automatically change customer lead to NI or DNC.
#  *** This version detects inbound callerID over PRI ***
#
# Flag Options:
# 1- default to insert into the vicidial_dnc table for DNC selections (Default=YES)
# 2- campaign to take dnc settings from(overrides option 1)
#
# ;inbound call from outbound CID callbacks from VICIDIAL calls:
#exten => 1234,1,Ringing                 ; call ringing
#exten => 1234,2,Wait(1)                 ; Wait 1 second for CID delivery from PRI
#exten => 1234,3,Answer                  ; Answer the line
#exten => 1234,4,AGI(agi-VDADinbound_NI_DNC_CIDlookup.agi,YES-----TESTCAMP)
#exten => 1234,5,Hangup

agi-VDADlisten_DTMF.agi

# agi-VDADlisten_DTMF.agi version 2.0.5   *DBI-version*
#
# To be initiated by an agent so during a call. Agent will click a PIN NUMBER
# link on a web form webpage that will Originate a new call to this script
#
# This script plays a beep and waits for entry of 4 digits then inserts record
#
# ***** THIS SCRIPT ONLY WORKS WITH A CROSSOVER T1 CABLE FROM ONE T1 PORT *****
# ***** TO ANOTHER T1 PORT WHETHER ON THE SAME SERVER OR DIFFERENT ONE    *****
#
# IN THE CAMPAIGN OR IN-GROUP NUMBER PRESET FIELD:
# AXFER83009
#
# ON THE SERVER ORIGINATING THE CALL:
#;outbound DTMF VICIDIAL calls:
#exten => _983009.,1,AGI(call_log.agi,${EXTEN})
#exten => _983009.,2,Dial(${TRUNKY}/${EXTEN:1},60)
#exten => _983009.,3,Hangup
#
# ON THE SERVER THAT HAS THIS SCRIPT:
#;inbound DTMF VICIDIAL calls:
#exten => _83009.,1,AGI(agi-VDADlisten_DTMF.agi,${EXTEN})
#exten => _83009.,2,Hangup

agi-VDAD_local_optimize.agi

# agi_VDAD_local_optimize.agi
#
# This script looks up the Local channel in the cid_channels_recent table
# and redirects the actual channel to the current extension with the first
# two digits stripped off. IE 138368 -> 8368. This is to overcome the change
# to Local channels in Asterisk 12 and later.

agi-VDAD_pin_IVR.agi

# agi-VDAD_pin_IVR.agi version 2.0.5   *DBI-version*
#
# At the end of a call, the agent transfers customer to this script
#
# This script plays a beep then plays the first portion of the message
# then logs the portion as listened to in the vicidial_list_pins table
# then plays second portion and hangs up.
#
# IN THE CAMPAIGN OR IN-GROUP NUMBER PRESET FIELD:
# AXFER83209
#
# ON THE SERVER ORIGINATING THE CALL:
#;outbound IVR play VICIDIAL calls:
#exten => _983209.,1,AGI(call_log.agi,${EXTEN})
#exten => _983209.,2,Dial(${TRUNKY}/${EXTEN:1},60)
#exten => _983209.,3,Hangup
#
# ON THE SERVER THAT HAS THIS SCRIPT:
#;inbound IVR play VICIDIAL calls:
#exten => _83209.,1,Answer
#exten => _83209.,2,AGI(agi-VDAD_pin_IVR.agi,${EXTEN})
#exten => _83209.,3,Hangup

agi-VDAD_RINGALL.agi

# agi-VDAD_RINGALL.agi version 2.8
#
# NOTE: this script is used for on-hook agents to be connected to customer calls
# when they answer their ringing phones
#
# In the default dialplan context, this is set to the following:
# ; these are used for the ring_all function in VICIDIAL
# exten => _8331*.,1,Playback(sip-silence)
# exten => _8331*.,n,AGI(agi-VDAD_RINGALL.agi,${EXTEN})
# exten => _8331*.,n,AGI(agi-VDAD_RINGALL.agi,${EXTEN})
# exten => _8331*.,n,Hangup

agi-VDADselective_CID.agi

# agi-VDADselective_CID.agi version 0.1   *NO DB Connection*
#
# Runs before a call is placed outbound to filter outgoing callerIDnumber
#
# You need to put lines similar to those below in your extensions.conf file:
#
# ;outbound VICIDIAL calls:
#exten => _91NXXNXXXXXX,1,AGI(call_log.agi,${EXTEN})
#exten => _91NXXNXXXXXX,2,AGI(agi-VDADselective_CID.agi,${EXTEN})
#exten => _91NXXNXXXXXX,3,Dial(${TRUNKX}/${EXTEN:1},55,tTo)
#exten => _91NXXNXXXXXX,4,Hangup

agi-VDADselective_CID_hangup.agi

# agi-VDADselective_CID_hangup.agi      version 2.6
#
# Will hangup a call if it is not within the specified area codes
#
# You need to put lines similar to those below in your extensions.conf file:
#
# ;outbound VICIDIAL calls:
#exten => 8352,1,AGI(agi-VDADselective_CID_hangup.agi,${EXTEN})
#exten => 8352,2,Playback(85100001)
#exten => 8352,3,Hangup

agi-VICIrecGateway.agi

# agi-VICIrecGateway.agi version 2.14
#
# Designed to work on a stand-alone Asterisk server and record calls in stereo
#
# You need to put a line similar to this below in your extensions.conf file in
# the context for where incoming calls go from your trunks (for example, the
# trunkinbound context which is present in the default dialplan):
#
#[handler]
#exten => addheader,1,Set(PJSIP_HEADER(add,X-VICIrecGatewayID)=${VICIrecGatewayID})
#exten => addheader,n,Return()
#
#[stereo-rec-inbound]
#exten => _X.,1,Progress()
#exten => _X.,n,Noop(${CALLERID(num)})
#exten => _X.,n,AGI(agi-VICIrecGateway.agi)
#exten => _X.,n,Noop(${CARRIER_FILENAME})
#exten => _X.,n,Noop(${DIALER_FILENAME})
#exten => _X.,n,MixMonitor(,r(${CARRIER_FILENAME})t(${DIALER_FILENAME})S)
#exten => _X.,n,Dial(PJSIP/${EXTEN}@pjdial147,,Tob(handler^addheader^1))
#
#[stereo-rec-outbound]
#exten => _X.,1,Progress()
#exten => _X.,n,Noop(${CALLERID(num)})
#exten => _X.,n,AGI(agi-VICIrecGateway.agi)
#exten => _X.,n,Noop(${CARRIER_FILENAME})
#exten => _X.,n,Noop(${DIALER_FILENAME})
#exten => _X.,n,MixMonitor(,t(${CARRIER_FILENAME})r(${DIALER_FILENAME})S)
#exten => _X.,n,Dial(PJSIP/${EXTEN}@pjsgw1,,To)

call_inbound.agi

# call_inbound.agi      version 2.6
#
# runs at the beginning and ending of every inbound call received
#
# You need to put lines similar to those below in your extensions.conf file:
#
# parameters for call_inbound.agi (7 fields separated by five dashes "-----"):
# 1. the extension of the phone to ring as defined in the asterisk.phones table
# 2. the phone number that was called, for the live_inbound/_log entry
# 3. a text description of the number that was called in
# 4-7. optional fields, they are also passed as fields in the GUI to web browser
#
# ;inbound calls:
#exten => _*NXXNXXXXXX*3429,3,AGI(call_inbound.agi,spa2000-----8005553429-----Inbound 800-----x-----y-----z-----w)

cepstral_generate.pl

# cepstral_generate.pl    version 2.2.0
#
# Text-To-Speech files will be cached for later use.
#
# Call this script like this:
# /var/lib/asterisk/agi-bin/cepstral_generate.pl --debug --voice=Allison-8kHz --dialog=Hello\ There

cm.agi

# cm.agi   version 2.14
#
# Used by Call Menus to log digit presses if enabled in the settings. You should
# not need to manually use this script, it is used by the dialplan builder.
#
# You need to put lines similar to those below in your extensions.conf file:
# ; Below are the parameters needed for the script to be run properly
# ; 1. the in-group to take settings from
# ; 2. digit pressed
# ; 3. field(in vicidial_list) to update with DTMF pressed (only if lead_id populated)
# ; 4. alt-log(enable alternate logging)
# ; 5. question number used if alt-logging is enabled
# ;
# ;inbound calls check calltime:
#exten => 1,1,AGI(cm.agi,INBOUND-----1-----province----------)
#exten => 1,2,...
#
# ;to allow for multi-digit entries, put similar entry in the Custom Dialplan Entry:
#exten => _XXXXX,1,AGI(cm.agi,INBOUND-----${EXTEN}-----postal_code)
#exten => _XXXXX,n,Goto(next_callmenu_here,s,1)

cm_areacode.agi

# cm_areacode.agi version 2.12
#
# Designed to work with Call Menus to allow searching of the areacode of the
# caller ID phone number the customer called in on, to be searched within the
# vicidial_phone_codes table to gather the state, then search the
# vicidial_inbound_dids table for that state in the did_carrier_description
# field and send the call on to the did that matches.
#
# If areacode is not found call will go to the 'D' option in the call menu
# If state DID is not found call will go to the 'C' option in the call menu
#
# Flag Options:
# 1- Country code to search the areacode within, default 1
# 2- Length of areacode in digits, default 3
# 3- DID prefix to filter by in searching for DIDs, default 999
#
# example of what to set in the Call Menu:
# Set the prompt to "sip-silence"
# Set the Timeout to 1 second
# Option: "Timeout" Route: "AGI" AGI: "cm_areacode.agi,1---3---999"

cm_cid_change.agi

# cm_cid_change.agi version 2.14
#
# Designed to allow you to change the CID of a call to either a fixed number or
# a combination of CUSTOMER, CLOSER just like the in-group Action Transfer CID
# feature. Script is designed to handle calls already assigned to leads, not
# new inbound calls that only have a phone number.
#
# Flag Options:
# 1- Fixed CID number, or CUSTOMER or CUSTOMERCLOSER
#
# example of what to put in the AGI entry for a Call Menu AGI route:
# cm_cid_change.agi,CUSTOMERCLOSER

cm_date.agi

# cm_date.agi   version 2.6
#
# Can be used in a call menu prompt to play a date string as defined by the settings below
#
# ; Below are the parameters needed for the script to be run properly
# ; the "SAY DATETIME" parameters for what to say separated by three dashes
# ; 1. offset from current epoch in seconds, positive or negative
# ;             1 hour is 3600
# ;             1 day is 86400
# ;             1 week is 604800
# ;             30 days is 2592000
# ;             1 year is 31536000
# ; 2. format of the date to say, i.e. "ABdY":
# ;     A: Day of the week
# ;     B: Month (Full Text)
# ;     m: Month (Numeric)
# ;     d: Day of the month
# ;     Y: Year
# ;     I: Hour (12-hour format)
# ;     H: Hour (24-hour format)
# ;     M: Minutes
# ;     P: AM/PM
# ;     Q: Shorthand for Today, Yesterday or ABdY
# ;     R: Shorthand for HM
# ;     S: Seconds
# ;     T: Timezone
#
# ;inbound calls check calltime:
# ;   (this example is for yesterday and says "Monday March 25th 2013")
# cm_date.agi,-86400---ABdY

cm_dnc.agi

# cm_dnc.agi version 2.14
#
# Designed to work with Cell Menus to allow setting of a number as DNC or NI
# This script is meant as a replacement for the agi-VDADinbound_NI_DNC_CIDlookup.agi
# script. It is designed to work easily in the Call Menu framework, it plays no
# audio itself, and it has more options.
#
# Flag Options:
# 1- run as DNC status or NI status (Default=NI)
# 2- default to insert into the vicidial_dnc table for DNC selections (Default=YES)
# 3- campaign to take dnc settings from(overrides option 2)
# 4- call menu option to send the call to after executing (Default=B)
# 5- if option 3 is used, search for lead in campaign lists or whole system(CAMP or SYS) (Default=SYS)
#
# example of what to put in the AGI entry for a Call Menu AGI route:
# cm_dnc.agi,DNC---YES---TESTCAMP---B---CAMP

cm_dnc_new.agi

# cm_dnc_new.agi version 2.12
#
# Designed to work with Cell Menus to allow setting of a number as DNC or NI
# This script is meant as a replacecment for the agi-VDADinbound_NI_DNC_CIDlookup.agi
# script. It is designed to work easily in the Call Menu framework, it plays no
# audio itself, and it has more options.
#
# Flag Options:
# 1- run as DNC status or ANY OTHER status (Default=NI)
# 2- default to insert into the vicidial_dnc table for DNC selections (Default=YES)
# 3- campaigns to take dnc settings from(overrides option 2) multiple campaigns separated by single dash
# 4- call menu option to send the call to after executing (Default=B)
# 5- if option 3 is used, search for lead in campaign lists or whole system(CAMP or SYS) (Default=SYS)
# 6- optional audio store file to play
#
# example of what to put in the AGI entry for a Call Menu AGI route:
# cm_dnc_new.agi,DNC---YES---TESTCAMP---B---CAMP---auth-thankyou

cm_fpg.agi

# cm_fpg.agi version 2.14
#
# Designed to work with Cell Menus to allow the entry of a CID number into a
# Filter Phone Group. It is designed to work easily in the Call Menu framework,
# it plays no audio itself, and it has more options.
#
# Flag Options:
# 1- Filter Phone Group ID to insert into
# 2- call menu option to send the call to after executing (Default=B)
# 3- (optional) number to enter instead of CIDnumber
#
# example of what to put in the AGI entry for a Call Menu AGI route(CID method):
# cm_fpg.agi,TEST_FPG---B
#
# example of what to put in the Custom Dialplan Entry of a Call Menu (caller entry of number method):
# exten => _XXXXXXXXXX,1,cm_fpg.agi,99test---C---${EXTEN}

cm_lookup.agi

# cm_lookup.agi version 2.6
#
# for use with a Call Menu in the custom dialplan section.
#
# ; settings for this script:
# ; 1. The vicidial_list field to do a lookup on ('vendor_lead_code' is default)
# ; 2. Type of lookup to do: (default is SYSTEM)
# ;     SYSTEM will search the entire system
# ;     CAMPAIGNLISTS will search inside all of the active lists within the campaign
# ;     CAMPLISTSALL will search inside all of the active and inactive lists within the campaign
# ;     LIST will search only within the specified List ID
# ; 3. If CAMPAIGN or LIST is used above, this is the campaign_id or list_id to be used
# ; 4. TTS confirmation of name (1 for yes, 2 for no) put in TTS prompt ID
# ; 5. Update the vicidial_list record phone number with the callerID of the caller:
# ;     Y - update the record with the phone number
# ;     N - Do nothing (default)
# ; 6. Update lead's address3 field to the uniqueid of the call
# ;     Y - update the record with the uniqueid
# ;     N - Do nothing (default)
# ; 7. Update the lead's record with the call's agent_user_id variable
# ;     Y - update the lead record's 'user' field with the agent_user_id variable
# ;     COMMENTS - update the lead record's 'comments' field with the agent_user_id variable
# ;     N - Do nothing (default)
# ; 8. Update the lead's record with the call's title variable
# ;     Y - update the lead record's 'title' field with the call's title variable
# ;     N - Do nothing (default)
#
# Found entries will send the call to the 'A' option in the source call menu
# Not-Found entries will send the call to the 'B' option in the source call menu
#
#; example with 8-digit vendor lead codes
# exten => _XXXXXXXX,1,AGI(cm_lookup.agi,vendor_lead_code---CAMPLISTSALL---TESTCAMP---lastname_oneyestwono---N---N---Y---N)
#
#; example with 8-digit vendor lead codes
# exten => _XXXXXXXX,1,AGI(cm_lookup.agi,vendor_lead_code---CAMPLISTSALL---TESTCAMP---lastname_oneyestwono---N---N---Y---N)

cm_phonesearch.agi

# cm_phonesearch.agi version 2.14
#
# Designed to work with Call Menus to allow searching of the caller ID phone
# number the customer called in with against the vicidial_list table, and
# finding the list of the most recent match, the campaign tied to that list and
# the default transfer in-group of that campaign, then transferring the call to
# that in-group
#
# If phone number is not found, call will go to the 'D' option in the call menu
# If default in-group is not found, call will go to the 'C' option in the call menu
# If default in-group is found, call will go to the 'B' option in the call menu
#    (NOTE: you MUST set the In-Group to DYNAMIC_INGROUP_VAR for 'B' option)
#
# Flag Options:
# 1- Country code to search the areacode within, default 1
# 2- Match lead order, default: "entry_newest"
#          entry_newest, entry_oldest, modify_newest, modify_oldest, call_newest, call_oldest, rank_highest, rank_lowest
# example of what to set in the Call Menu:
# Set the prompt to "sip-silence"
# Set the Timeout to 1 second
# Option: "Timeout" Route: "AGI" AGI: "cm_phonesearch.agi,1---entry_newest"
#    OR JUST
# Set the prompt to "sip-silence|cm_phonesearch.agi,1---entry_oldest"

cm_postal.agi

# cm_postal.agi version 2.12
#
# Designed to work with Cell Menus to allow searching of the number entered by
# the customer to be searched within the vicidial_postal_codes table to gather
# the state, then search the vicidial_inbound_dids table for that state in the
# did_carrier_description field and send the call on to the did that matches.
#
# If postal code is not found call will go to the 'D' option in the call menu
# If state DID is not found call will go to the 'C' option in the call menu
#
# Flag Options:
# 1- minimum number of digits allowed in postal code, default 5
# 2- DID prefix to filter by in searching for DIDs, default 999
#
# example of what to put in the Custom Dialplan entry for a Call Menu:
#exten => _XXXXX,1,AGI(cm_postal.agi,5---999)

cm_sc_areacode.agi

# cm_sc_areacode.agi version 2.14
#
# Designed to work with Call Menus to allow searching of the areacode of the
# caller ID phone number the customer called in with to be searched within the
# vicidial_phone_codes table to gather the state, or use the lead_id of the
# already-established call, then use the settings container ID to gather the
# state routing parameters to find the destination for that state
#
# If areacode is not found, call will go to the 'D' option in the call menu
# If destination is not found, call will go to the 'C' option in the call menu
#
# Flag Options:
# 1- Country code to search the areacode within, default 1
# 2- Length of areacode in digits, default 3
# 3- container_id for settings container with state and routing parameters
#
# example of what to set in the Call Menu:
# Set the prompt to "sip-silence"
# Set the Timeout to 1 second
# Option: "Timeout" Route: "AGI" AGI: "cm_sc_areacode.agi,1---3---east_west"
#
# example of what to put in settings container:
# NOTE: if you want any state non-matches to go to a destination, put that line FIRST
#<destination type>|<destination>|<states list separated by spaces>
#DID|9998881111|--NOMATCHES--
#DID|9998882222|FL TX NY CA
#EXTEN|919998887112|AL MS MO TN KY
#CALLMENU|test_menu|IL MN WI MI IA

cm_sc_ccc_lookup_insert.agi

# cm_sc_ccc_lookup_insert.agi version 2.14
#
# Designed to work with Call Menus to send a URL defined in a Settings Container
# for a call with a call_id associated with it for calls coming from an external
# VICIdial system on a private IAX trunk so that the lead information can be
# copied to this destination cluster.
#
# If container is not found, call will go to the 'C' option in the call menu
# If call_id is not defined, call will go to the 'D' option in the call menu
# If lead is not found on external system, call will go to the 'B' option in the call menu
# If lead is found on external system, call will go to the 'A' option in the call menu
#
# Flag Options:  (separated by triple-pipe: "---")
# 1- container_id for settings container with URL to send
# 2- local list_id to insert lead into(if not populated, will use external list_id)
#
# example of what to set in the Call Menu:
# Set the prompt to "wait-moment|cm_sc_ccc_lookup_insert.agi,ccc_test---8199"

cm_sc_send_url.agi

# cm_sc_send_url.agi version 2.14
#
# Designed to work with Call Menus to send a URL defined in a Settings Container
# for a call with a lead_id associated with it(use CUSTOMERCLOSER in the In-Group
# Action Transfer CID field!).
#
# If container is not found, call will go to the 'C' option in the call menu
# If lead_id is not defined, call will go to the 'D' option in the call menu
# After URL is sent, call will go to the 'B' option in the call menu
#
# Flag Options:
# 1- container_id for settings container with URL to send
#
# example of what to set in the Call Menu:
# Set the prompt to "sip-silence|cm_sc_send_url.agi,test_cm_url"
#
# The URL that you define in the Settings Container can use most of the
# variables you can use in the Dispo Call URL fields. The 'user' and 'status'
# fields as well as the talk_time, talk_time_min and ivr_time fields that are
# also available will all use the last vicidial_agent_log entry for it's values.

cm_sc_send_url_status.agi

# cm_sc_send_url_status.agi version 2.14
#
# Designed to work with Call Menus to send a URL defined in a Settings Container
# for a call with a lead_id associated with it(use CUSTOMERCLOSER in the In-Group
# Action Transfer CID field!).
#
# If container is not found, call will go to the 'C' option in the call menu
# If lead_id is not defined, call will go to the 'D' option in the call menu
# After URL is sent, call will go to the 'B' option in the call menu
#
# Flag Options: (separated by 3 dashes '---')
# 1- container_id for settings container with URL to send
# 2- GET or POST (send URL method, defaults to GET)
# 3- status to change lead to <optional>
#
# example of what to set in the Call Menu Prompt:
# Set the prompt to "sip-silence|cm_sc_send_url_status.agi,test_cm_url---POST---BGOOD"
#
# example of what to set in a Call Menu AGI option:
# Set the prompt to "cm_sc_send_url_status.agi,test_cm_url---POST---BGOOD"
#
# The URL that you define in the Settings Container can use most of the
# variables you can use in the Dispo Call URL fields. The 'user' and 'status'
# fields as well as the talk_time, talk_time_min and ivr_time fields that are
# also available, it will all use the last vicidial_agent_log entry for it's values.

cm_speak_var.agi

# cm_speak_var.agi version 2.14
#
# runs after a call has lead_id assigned to it, speaks letters/numbers
#
# You need to put lines similar to those below in your Custom Dialplan:
#
# exten => 8412,1,Answer
# exten => 8412,n,AGI(cm_speak_var.agi,say_digits---security_phrase---DB)
# exten => 8412,n,Hangup
#
# CLI FLAG OPTIONS:
# 1. function: (say_digits, say_number, say_alpha, say_datetime, say_phonetic, stream_file)
# 2. field: (any vicidial_list field)
# 3. variable type: DB(default) or DP(Asterisk Dialplan Variable)

cm_status_dial.agi

# cm_status_dial.agi   version 2.14
#
# Used as a Call Menu AGI option route to alter status of a lead before dialing.
# The lead is only updated if the call is tagged with a lead_id before this script.
#
# You need to put lines similar to those below in your extensions.conf file or
# a Custom Dialplan entry:
# ; Below are the parameters needed for the script to be run properly
# ; 1. the status to change the lead to
# ; 2. the phone number or extension to dial
# ; 3. the context to dial in
# ;
# ;inbound calls check calltime:
#cm_status_dial.agi,XFER-----917275551212-----default

cm_VID_SPECIAL.agi

# cm_VID_SPECIAL.agi version 2.14
#
# runs when a call comes from a Call Menu VIDPROMPTSPECIAL... INGROUP option.
# This script will send calls to various In-Groups or Call Menu options based
# on settings in a Settings Container and results of a lead search.
#
#
# You need to put lines similar to those below in your extensions.conf file:
# ; Below are the parameters needed for the script to be run properly
# ; 1. the method of call handling for the script:
# ;     - VIDPROMPTSPECIALLOOKUP -      Prompt Vendor Lead Code to User with IVR to find record in whole system
# ;     - VIDPROMPTSPECIALLOOKUPRL -    Restrict lookup to one list
# ;     - VIDPROMPTSPECIALLOOKUPRC -    Restrict lookup to one campaign's lists
# ; 2. the method of searching for an available agent:
# ;     - LO - Load Balance Overflow only (priority to home server)
# ;     - LB - <default> Load Balance total system
# ;     - SO - Home server only
# ; 3. the list_id to insert the new lead under if it is new (and CID/ANI available)
# ; 4. the phone dialing code to insert with the new lead if new (and CID/ANI available)
# ; 5. the campaign_id to search within lists if CIDLOOKUPRC
# ; 6. VID enter prompt filename to play if method is set to a VID* option
# ; 7. VID you-have-entered filename to play if method is set to a VID* option
# ; 8. VID confirm prompt filename to play if method is set to a VID* option
# ; 9. VID digit length validation to use if method is set to a VID* option, set to empty or X to disable
# ; 10. Settings Container to use for settings for this script, must be CM_VIDPROMPT_SPECIAL container type
#
# ;inbound VICIDIAL calls:
#exten => 1234,1,Answer                  ; Answer the line
#exten => 1234,2,AGI(cm_VID_SPECIAL.agi,VIDPROMPTSPECIALLOOKUP---LB---999---1---TESTCAMP---x---y---z---X---VID_special_test)
#exten => 1234,3,Hangup

cm_wait.agi

# cm_wait.agi version 2.14
#
# Designed to make a call wait for X milliseconds before exiting
#
# Flag Options:
# 1- milliseconds to wait, default 1000
#
# example of what to set in the Call Menu:
# Set the prompt to "cm_wait.agi,1000"

debug_speak.agi

# debug_speak.agi version 2.0.5
#
# runs during any extension and speaks the extension sent to it while
# printing the extension as well as lots of info about the call to STDERR
#
# You need to put lines similar to those below in your extensions.conf file:
#
# ;inbound errors with speaking of extension:
#exten => _XXXX,1,AGI(debug_speak.agi,${EXTEN})
#exten => _XXXX,3,Hangup

getAGENTchannel.agi

# getAGENTchannel.agi by Omar Rodriguez  www.ItContinental.com
# Copyright (C) 2016  Matt Florell <vicidial@gmail.com>    LICENSE: AGPLv2
# This script is able to return the name of the channel that belongs to the agent,
# to allow administrators to whisper to the agents
# Has been made using Vicidial code as Base

invalid_speak.agi

# invalid_speak.agi version 2.0.5
#
# runs during an invalid extension and speaks the extension sent to it while printing to STDERR
#
# You need to put lines similar to those below in your extensions.conf file:
#
# ;inbound errors with speaking of extension:
#exten => _XXXX,1,AGI(invalid_speak.agi,${EXTEN})
#exten => _XXXX,2,Playback(invalid)
#exten => _XXXX,3,Hangup
#
#exten => _*XXXXXXXXXX*XXXX,1,AGI(invalid_speak.agi,${EXTEN})
#exten => _*XXXXXXXXXX*XXXX,2,Playback(invalid)
#exten => _*XXXXXXXXXX*XXXX,3,Hangup
#
#exten => _*XXXXXXXXXX*XXXX*,1,AGI(invalid_speak.agi,${EXTEN})
#exten => _*XXXXXXXXXX*XXXX*,2,Playback(invalid)
#exten => _*XXXXXXXXXX*XXXX*,3,Hangup
#
#exten => _**XXXX,1,AGI(invalid_speak.agi,${EXTEN})
#exten => _**XXXX,2,Playback(invalid)
#exten => _**XXXX,3,Hangup
#
#exten => _**XXXX*,1,AGI(invalid_speak.agi,${EXTEN})
#exten => _**XXXX*,2,Playback(invalid)
#exten => _**XXXX*,3,Hangup

park_call_IVR_cf_collect.agi

# park_call_IVR_cf_collect.agi version 2.12
#
# NOTE: this script is to be used with the Park Call IVR feature in campaigns.
# The purpose of this script is to allow the agent to park a call on this IVR
# and have the customer enter in sensitive numbers. This script should not
# require any modification to work.
#
# Defined in the Park Call AGI IVR field of a campaign, this script will ask
# customer for their ID and then populate it in the custom fiels defined in the
# variable below and then send the call back to the agent. If the customer
# enters nothing X number of times then the call can be kicked out to a separate
# in-group
#
# Here is a list of the variables that you can set:
#  1.  Language - default: en (English), other options are es-Spanish, fr-French
#  2.  First prompt - default: please_enter_id_number
#  3.  You-Entered prompt - default: you-entered
#  4.  Confirmation prompt - default: confirm_id_number
#  5.  Thank you prompt - default: auth-thankyou
#  6.  Invalid prompt - default: buzz
#  7.  Attempts before kick-out - default: 2
#  8.  Kick-out prompt - default: outside-transfer
#  9.  Kick-out In-Group
#  10. Custom Field to populate
#
# Example Park Call AGI IVR field:
# park_call_IVR_cf_collect.agi,en---please_enter_id_number---you-entered---confirm_id_number---auth-thankyou---buzz---2---outside-transfer---TEST_IN---test2

park_call_IVR_example.agi

# park_call_IVR_example.agi version 2.4
#
# NOTE: this script is an example of how you can use a custom AGI script with
# the new Park Call IVR feature in campaigns. You will most likely need to
# significantly alter this script to suit your specific needs
#
# Defined in the Park Call AGI IVR field of a campaign, this script will ask
# customer for their ID and then populate it in the vicidial_list table and then
# send the call back to the agent. If the customer enters nothing X number of
# times then the call can be kicked out to a separate in-group
#
# Here is a list of the variables that you can set:
#  1.  Language - default: en (English), other options are es-Spanish, fr-French
#  2.  First prompt - default: please_enter_id_number
#  3.  You-Entered prompt - default: you-entered
#  4.  Confirmation prompt - default: confirm_id_number
#  5.  Thank you prompt - default: auth-thankyou
#  6.  Invalid prompt - default: buzz
#  7.  Attempts before kick-out - default: 2
#  8.  Kick-out prompt - default: outside-transfer
#  9.  Kick-out In-Group
#
# Example Park Call AGI IVR field:
# park_call_IVR_example.agi|en---please_enter_id_number---you-entered---confirm_id_number---auth-thankyou---buzz---2---outside-transfer---TEST_IN
#
# NOTE: For Asterisk 1.8 and higher, use a comma instead of a pipe in the Park Call AGI IVR field

park_CID.agi

# park_CID.agi version 2.14
#
# runs before the park extension to populate the parked_channels entry with the channel's callerid
#
# You need to put lines similar to those below in your extensions.conf file:
#
# ;outbound dialing:
# exten => 8301,1,Answer
# exten => 8301,2,AGI(park_CID.agi)
# exten => 8301,3,Playback(park)
# exten => 8301,4,Hangup

phone_alt_CID.agi

# phone_alt_CID.agi
#
# Changes the CID number on calls that pass through it to the Alternate defined
# in the 'phones' record for the phone that placed the call
#
# You need to have lines similar to those below in your Custom Dialplan:
#
#;use alternate CID, if defined:
#exten => _91NXXNXXXXXX,1,AGI(phone_alt_CID.agi,${EXTEN})
#exten => _91NXXNXXXXXX,n,Goto(default,${EXTEN},1)
#
# The easiest way to set this up for a phone is to create a new Call Menu and
# then put the above Custom Dialplan into it, then set the Phone's
# 'phone context' to the call menu ID that you just created.

timer_rebeep.agi

# timer_rebeep.agi
#
# This script is designed to be launched from the in-group/campaign timer
# setting to set another trigger event for the next X seconds. Often used for
# calls that need to have a periodic beep signifying that the call is being
# recorded
#
# Just add the following to the System Settings Custom Dialplan Entry
# and set rebuild conf=Y
# exten => 8399,1,Answer
# exten => 8399,n,Wait(1)
# exten => 8399,n,Playback(beep)
# exten => 8399,n,AGI(timer_rebeep.agi,20---D1_DIAL_QUIET)
# exten => 8399,n,Hangup
#
# ; Below are the parameters needed for the script to be run properly
# ; 1. seconds delay before next trigger goes
# ; 2. timer action to launch
#
# Then set the in-groups/campaigns that you want to have this enabled
#   "Timer Action" = D1_DIAL_QUIET
#   "Timer Action Seconds" = 20
#   "Transfer Conf Number 1" = 8399

VD_amd.agi

# VD_amd.agi version 2.14
#
# runs after a call goes through AMD in extensions.conf to send the call on to
# it's proper destination, or when agent sends to VM message
#
# You need to put lines similar to those below in your extensions.conf file:
#
# ; VICIDIAL_auto_dialer transfer script AMD with Load Balanced:
# exten => 8369,1,AGI(call_log.agi,${EXTEN})
# exten => 8369,2,(AMD),AMD
# exten => 8369,3,AGI(VD_amd.agi,${EXTEN}-----NO)
# exten => 8369,4,AGI(agi-VDAD_LB_transfer.agi,${EXTEN})
# exten => 8369,5,AGI(agi-VDAD_LB_transfer.agi,${EXTEN})
# exten => 8369,6,AGI(agi-VDAD_LB_transfer.agi,${EXTEN})
# exten => 8369,7,Hangup
#
# exten => 8320,1,AGI(VD_amd.agi,${EXTEN}-----YES)
# exten => 8320,2,Hangup
# exten => _8320*.,1,AGI(VD_amd.agi,${EXTEN}-----YES)
# exten => _8320*.,2,Hangup

VD_auto_post_VERIFY.agi

# VD_auto_post_VERIFY.agi version 2.0.5   *DBI-version*
#
# NOTE: This script is only used with auto-message campaigns with dynamic data
#
# runs after a call is answered
#
# You need to put lines similar to those below in your extensions.conf file:
#
# ; VICIDIAL_auto_dialer transfer script AMD with Load Balanced:
#exten => 8320,1,WaitForSilence(2000,2) ; wait for 2 seconds of silence
#exten => 8320,2,AGI(VD_auto_post_VERIFY.agi,${EXTEN})
#exten => 8320,3,Hangup

VDL_CID_lookup.agi

# VDL_CID_lookup.agi      version 2.6
#
# runs after a call goes through AMD in extensions.conf to send the call on to
# it's proper destination
#
# You need to put lines similar to those below in your extensions.conf file:
#
# ; VICIDIAL_auto_dialer transfer script AMD with Load Balanced:
# exten => 8369,1,Ringing
# exten => 8369,2,Wait(1)
# exten => 8369,3,Answer
# exten => 8369,4,AGI(VDL_CID_lookup.agi)
# exten => 8369,5,AGI(agi-VDAD_ALL_inbound.agi,CID-----LB-----IN_TEST-----7275551212-----Closer-----park----------999-----1)
# exten => 8369,6,Hangup
# exten => 8369,7,AGI(call_logCID.agi,${EXTEN}-----${CALLERID}-----${CALLERIDNUM}-----${CALLERIDNAME})
# exten => 8369,8,AGI(agi-VDADinbound_NI_DNC_CIDlookup.agi)
# exten => 8369,9,Hangup

How to – Install FusionPBX on Debian 12

FusionPBX

How to – Install FusionPBX on Debian 12

This article will go over the very easy instructions to get FusionPBX up and running. This is assuming you already have a server with Debian 12 ready to go for installation.

Step 1 – Copy and paste the code below

wget -O - https://raw.githubusercontent.com/fusionpbx/fusionpbx-install.sh/master/debian/pre-install.sh | sh;
cd /usr/src/fusionpbx-install.sh/debian && ./install.sh

Step 2 – Login to the FusionPBX Admin Panel

After this install, it will provide you the link, the admin user and a randomly generated password to login as shown below:

FusionPBX

Once you login you should see your dashboard, from here you can begin installing the components you need.

That’s all there is to it, enjoy. I’ll start creating more articles for setting up FusionPBX as time goes on.

Chris aka carpenox

CyburDial Website Scavenger Hunt

CyburDial's scavenger hunt

CyburDial Website Scavenger Hunt

Contest Rules:

  1. Contestants must visit CyburDial’s website at www.dialer.one.
  2. They will be provided with a list of specific key phrases or features to find on the website.
  3. Participants must navigate through the website to locate these phrases or features. Each discovery will earn them points.
  4. The first contestant or team to successfully find all the required items or accumulate the most points within the set time limit wins the contest.

Key Phrases and Features to Find:

  1. “Avoiding DNC Violations” – How does CyburDial help businesses avoid costly DNC violations?
  2. “Customer Follow-ups” – What is CyburDial doing to help advance your business customer follow up?
  3. “CyburDial Logo” – Why did CyburDial choose the Phoenix for it’s logo? What’s the story behind it?
  4. “Data Protection” – What are 5 ways that CyburDial protects your data?
  5. “Quality Control Module” – Find the video for this on our YouTube channel or website and tell us how it works.
  6. “AI-Driven Solutions” – What does CyburDial’s AI numbers feature accomplish? How high of a percent of accuracy does CyburDial’s Answering Machine Detection reach?

Scoring and Evaluation:

  • Participants earn points for each correctly identified key phrase or feature.
  • A panel of judges will verify the discoveries and calculate the final scores.

Prizes:

  • The contestant or team with the highest score will be declared the winner and receive a 2 week trial account with full access to CyburDial and all of it’s features.
  • or
  • $50 dollars cash – must have cashapp or PayPal

The winner will be announced as soon as the first person or team accomplishes all the goals. Contest expires Sunday evening at 8:00 PM EST on November 5th 2023.

How to win:

Once you find all of the answers or as many as you can, just login and comment down below with your answers.

How to – Create a simple CDR report for ViciDial

ViciDial Custom Report

How to – Create a simple CDR report for ViciDial

This article will go over how to create a simple CDR report for ViciDial using MySQL and PHP. I will provide the code I’ve used to accomplish this report which can be altered to fit your needs. First off, I have to thank Nik from www.amdy.io for helping me with the MySQL query for it. Check out his site and his amazing AMD(Answering Machine Detection) service they offer for ViciDial and other dialer systems. Ok so lets get started.

Step 1 – Create the directory on your web server

First move into your web directory by the following commands for both RedHat(CentOS, Alma or Rocky) and OpenSuSE(Leap) distros.

RedHat:

cd /var/www/html
mkdir reports
cd reports

OpenSuSE:

cd /srv/www/htdocs
mkdir reports
cd reports

Step 2 – Copy the code below and create the PHP file to serve it up

Now just copy and paste the code below into a .php file to use with ViciDial after typing the following command: nano cdr-report.php

<?php

$servername = "localhost";
$username = "cron";
$password = "1234";
$dbname = "asterisk";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
}

$sql = "SELECT vc.`lead_id`, `campaign_id`, va.`user`, `phone_number`, `first_name`, `last_name`, `outbound_cid`, vd.`call_date`, `dial_time`, va.`status` FROM vicidial_carrier_log vc,  vicidial_agent_log va, vicidial_list vl, vicidial_dial_log vd WHERE vc.`lead_id`= vl.`lead_id` AND va.uniqueid = vc.uniqueid AND vl.lead_id = vd.lead_id and va.`status` NOT LIKE 'NEW'  and vc.caller_code = vd.caller_code;";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
  // output data of each row
  while($row = $result->fetch_assoc()) {
    echo "<b><font color=red>Lead ID:</b></font> " . $row["lead_id"]. " -|- <b><font color=red>Campaign:</font></b> " . $row["campaign_id"]. " -|- <font color=red><b>Agent:</b></font> " . $row["user"]. " -|- <b><font color=red>Customer Number:</b></font> " . $row["phone_number"]. " -|- <b><font color=red>First Name:</b></font> " . $row["first_name"]. " -|- <b><font color=red>Last Name:</b></font> " . $row["last_name"]. " -|- <b><font color=red>Outbound Caller ID:</b></font> " . $row["outbound_cid"]. " -|- <b><font color=red>Dial Time:</b></font> " . $row["dial_time"]. " -|- <b><font color=red>Dispo:</b></font> " . $row["status"]. " -|- <b><font color=red>Call Date:</b></font> " . $row["call_date"]. "<br>";
  }
} else {
  echo "0 results";
}
$conn->close();
?>

After you save and exit, you should be able to access this page by going to https://yourserver.com/reports/cdr-report.php and you should see something like the image below:

CDR Report

Step 3 – Add this report into ViciDial through custom reports

  • Login to your admin panel and go to the reports page
  • Click on Admin Utilities as shown below
ViciDial Admin Utilities
  • Click on “Custom Reports Admin Page”
Custom Reports Admin Page
  • Fill out the first line with “CDR Report”
  • Fill out the third line with “../reports/cdr-report.php
Create Custom Report

Step 4 – Update User Group Permissions

Now you need to make sure the User Groups that you want to have access to this new report have the proper permissions.

  1. Click on User Groups and “Show User Groups”
  2. Click on the User Group you want to have access to this report
  3. Scroll down to the “Allowed Cutom Reports” area and click on “All Reports” or specify the new report we just created only.
Allowed Custom Reports

Step 5 – Check the Reports page for your newly created Custom Report

CDR Report

That’s it, You’ve now created a custom report to retrieve your CDR details. This article can be followed to create other custom reports as well, just modify the code as needed or create links to outside web pages or links to access through your reports page within ViciDial. I hope you will find this useful. Feel free to join our Skype Live Support if you need assistance.

-Chris aka carpenox

Transforming Health Insurance Customer Service: The Power of CyburDial

Health Insurance

Transforming Health Insurance Customer Service: The Power of CyburDial

In the ever-evolving world of healthcare, providing exceptional customer service is paramount for health insurance companies. Members rely on timely and accurate information, quick responses, and efficient problem resolution. In this article, we explore how CyburDial, a versatile call center solution, can help health insurance companies address common pain points and enhance customer service in this critical industry.

Understanding the Pain Points

1. High Call Volume: Health insurance companies often experience peaks in call volume, especially during open enrollment periods. The challenge is to efficiently manage these surges while maintaining high service standards.

2. Complex Inquiries: Members have a multitude of complex questions related to coverage, claims, and network providers. Agents must be well-prepared to handle these inquiries accurately and promptly.

3. Regulatory Compliance: The healthcare industry is heavily regulated. Ensuring compliance with healthcare laws while maintaining a seamless customer service experience is a delicate balancing act.

4. Data Security: Protecting sensitive health data is of utmost importance. Health insurance companies must safeguard member information while providing efficient service.

CyburDial’s Solutions

CyburDial offers a range of features and solutions tailored to address these pain points:

1. Automated Call Routing: CyburDial’s AI-driven call routing system ensures that calls are directed to the most qualified agents, reducing hold times and enhancing member satisfaction.

2. Knowledge Base Integration: Agents can access a comprehensive knowledge base directly through the CyburDial platform. This empowers them to answer complex inquiries accurately and consistently.

3. Real-Time Analytics: CyburDial’s customizable dashboard provides real-time insights into call center operations. Managers can make informed decisions, allocate resources effectively, and optimize service quality.

4. Compliance Tools: CyburDial offers features like AI-driven quality control, ensuring that conversations meet regulatory standards. Plus, secure call recording and storage for compliance purposes.

5. Multichannel Support: CyburDial’s platform enables health insurance companies to interact with members through various channels, including phone, email, and chat. This versatility improves member access and engagement.

6. White-Label Customization: The platform is fully white-label, allowing health insurance companies to customize the user interface to align with their brand and improve the overall member experience.

Solving the Pain Points

  • Efficiency: By leveraging AI, CyburDial optimizes agent resources, helping health insurance companies handle high call volumes efficiently.
  • Accuracy: The knowledge base integration ensures that agents provide members with precise information, addressing complex inquiries effectively.
  • Regulatory Compliance: The AI-driven quality control feature flags conversations that do not meet compliance standards, reducing risk.
  • Data Security: CyburDial prioritizes data security, making it an ideal solution for health insurance companies that handle sensitive member information.

Embracing the Future

CyburDial empowers health insurance companies to elevate their customer service game and embrace the future of healthcare. By addressing pain points with advanced technology, it allows these companies to meet the evolving needs of members while staying compliant with regulations.

With CyburDial, health insurance companies can streamline their call center operations, enhance member satisfaction, and ensure that customer service remains a cornerstone of their business. The result? Healthier, happier members and a thriving health insurance organization.

How to – Setup a Press 1 campaign in ViciDial

Press 1 campaign

How to – Setup a Press 1 campaign in ViciDial

In this article I will cover how to setup a press 1 campaign in ViciDial. I am in no way a lawyer, however you should know that press 1 campaigns in the US is illegal to customers unless you have express permission. This can be used in a business to business model though.

Step 1 – Enable “Central Sound Control” in systems settings

  1. Login to your admin panel then click on admin and then system settings
  2. Enable “Central Sound Control” by setting active to 1
  3. Specify the domain or IP used for the web server as shown below
Central Sound Control

Step 2 – Upload your Press 1 sound file to the Audio Store

Make sure the sound file you create is in the format of a 16bit Mono 8k PCM WAV audio file. The 2 links below can be used to create your file using a text to speech engine and to convert that file to the needed format.

After you have done this, you can upload the file to the audio store in your administration panel as shown below:

Make sure it was uploaded correctly, it should show a similar message to this one:

Step 3 – Setup your campaign for a Press 1

We need to change the routing extension used for a Press 1 campaign to either 8366 which doesnt use AMD or to 8373 which does. There is other options available for cepstral text to speech with or without AMD usage as shown in the image below:

  1. Change the routing extension from the default 8368(no AMD) or 8369(AMD) to 8366 or 8373 depending if you want to use Answering machine detection or not
  2. Set your “Dial Method” to Ratio and what you want that ratio to be, such as 3:1
  3. Click on the survey tab at the top of your detail view of the campaign
  4. Change the audio file to the one you created and uploaded to the audio store

Step 4 – Have your agents login and the campaign will begin

Once your agents login to the active campaign, they will start to receive calls from anyone who has pressed 1 or didn’t press anything at all.

That’s all there is to it, I hope this helps those of you that needed this information.

Chris aka carpenox

Join Smart Carrier – The Carrier Agnostic AI driven service provider

Quality Control
Quality Control
<span class=

SOLUTIONS

If You Think Compliance Is Expensive
Try Non-Compliance

We sell a uniform compliance solution that includes more than tokenization. The platform fee is one that is packaged neatly to be sent out to underlying carriers.

Smart Carrier is the “Easy” button to simplify connections – to sign calls and keep your company in compliance.

We provide real-time updates and data that will enable you to make more informed decisions to better suit your entire business.

Our Smart Carrier AI Suite of Services, including AI Numbers and AI Answering Machine Detection is a total compliance ecosystem.

Smart Caller ID®

Never let your customers guess who is really calling again. With Smart Caller ID®, the Caller ID displays a caller’s company name, location and other identifiable information to let the customer know, without a doubt, who is calling them.

LEARN MORE

STIR/SHAKEN Compliance Management

A call tokenization service using our certificate and key pair or yours. This Service allows us to sign your calls, which ultimately may display a verified checkmark on your recipient’s handset, thereby possibly increasing your contact rates, increasing overall ASR.

SMS-Automated Text Messaging

We offer a beneficial way to automate your texts and reach customers at the right times.

Caller ID Assessment

Our cutting-edge Caller ID Assessment service provides each number with a reputable scoring system that notifies the client if a number is flagged by underlying carriers. We provide full tokenization generation for STIR/SHAKEN.  As of June 2022, it is required by U.S. Federal law that all calls must be signed through the FCC STIR/SHAKEN mandate. The TRACED Act required the FCC to mandate the STIR/SHAKEN caller identification framework. Our service also works with our SHAKEN Rest Web Service Designed to simplify the rollout of STIR/SHAKEN for organizations that prefer to integrate with web services instead of traditional SIP. This easily integrates into platforms such as Freeswitch, Asterisk, FreePBX, FusionPBX, and many others.

DIDs/Telephone Numbers (Local and Toll Free)

Our network and inter-relationships cover approximately 96% of the United States. We offer a different level of tiered DIDs to include Tier 1, Tier 2 & Tier 3 with the best network quality available.

DID/Telephone Number Management

Our Comprehensive DID Management platform will allow you to see individual number statistics to help you analyze what is happening with your numbers like never before.

Advanced Geoproximation

Advanced Geoproximation uses the most advanced dial pattern algorithms to distinguish area code overlay and provides a seamless experience for your outbound dialer. The main benefit of this service is that it will allow the most accurate, friendly dial patterns that take the guesswork out of which exchange is most beneficial to use to reach each specific client. Another benefit is that it allows your outbound dialer to always have the correct area code for dialing by utilizing pinpoint accuracy without NPA overlap mismatching.

What does this all mean? You have the best chance of customer engagement.

Enhanced Insights

We offer the ability to have an enhanced look at traffic profiles and routing logic. This feature provides portability information, current carrier, carrier type (wireless or landline)and National Do Not Call Registry status for any number.

NumberRisk

NumberRisk can determine if your Caller ID is flagged as SPAM/SPAM LIKELY.

Hydrogen Class IV Switch

Our Hydrogen Class IV Switch is an all-in-one solution when you are looking for a completely secure, high-performing, easily scalable platform. It comes with a robust routing service, billing, reporting, and automatic alert capabilities, so that you may easily manage your voice and DID origination services. This service works seamlessly with each of our other services.

SIP VPN

Smart Carrier offers a fully hosted and managed Virtual Private Network (VPN) solution that can be used to securely access sensitive and protected resources such as VoIP, databases, web, files, and other services. This VPN solution securely encrypts all traffic, is designed for the intense use of VoIP, and can be used by organizations required to operate within a regulatory environment.

Outbound Calling

We offer Outbound Termination Services that include both flat rate and NPA-NXX-based ratings. We have made a reputation by only providing the best quality. All routes are supported by our network of Tier 1 and CLEC carrier backbones with a 1-HOP away approach.

Smart Shaper

Our proprietary Smart Shaper module takes away the effort required to implement our solutions. With a simple line of code added to your existing dialer, you can have access to many of our services that will operate before an actual call is formed. This will allow you to easily integrate with certain dialer software with zero hassle and begin using our services without complication.

Customer Support background image
Customer Support profile image

CUSTOMER SUPPORT

Your first steps to join us!

CUSTOMER SUPPORT 

Contact Us background image
Contact Us profile image

CONTACT US

Contact us and request a quote today!

REQUEST A QUOTE 

JOIN SMART CARRIER background image
JOIN SMART CARRIER profile image

JOIN SMART CARRIER

Join us today and gain access to all of our member only benefits!

SIGN UP 

Knowledge Based Articles

How to – Patch Asterisk 16 or 18 for ViciDial

Asterisk patch

How to – Patch Asterisk 16 or 18 for ViciDial

In this article, I will go over how to patch newer versions of Asterisk that can be used with ViciDIal. Copy and paste the lines of code that have to do with the version of Asterisk you plan to use.

Step 1 – Download the needed files for Asterisk and the patches from ViciDial

cd /usr/src/asterisk
wget https://downloads.asterisk.org/pub/telephony/asterisk/old-releases/asterisk-16.30.0.tar.gz
wget https://downloads.asterisk.org/pub/telephony/asterisk/old-releases/asterisk-18.18.1.tar.gz
tar -xzvf asterisk-16.30.0.tar.gz
tar -xzvf asterisk-18.18.1.tar.gz

cd /usr/src/asterisk/asterisk-16.30.0
wget http://download.vicidial.com/asterisk-patches/Asterisk-16/amd_stats.patch
wget http://download.vicidial.com/asterisk-patches/Asterisk-16/iax2_peer_status.patch
wget http://download.vicidial.com/asterisk-patches/Asterisk-16/sip_logging_peer_status.patch
wget http://download.vicidial.com/asterisk-patches/Asterisk-16/timeout_reset_dial.patch
wget http://download.vicidial.com/asterisk-patches/Asterisk-16/timeout_reset_dial_app.patch
cd apps/
wget http://download.vicidial.com/asterisk-patches/Asterisk-16/enter.h
wget http://download.vicidial.com/asterisk-patches/Asterisk-16/leave.h
yes | cp -rf enter.h.1 enter.h
yes | cp -rf leave.h.1 leave.h

cd /usr/src/asterisk/asterisk-18.18.1/
wget http://download.vicidial.com/asterisk-patches/Asterisk-18/amd_stats-18.patch
wget http://download.vicidial.com/asterisk-patches/Asterisk-18/iax_peer_status-18.patch
wget http://download.vicidial.com/asterisk-patches/Asterisk-18/sip_peer_status-18.patch
wget http://download.vicidial.com/asterisk-patches/Asterisk-18/timeout_reset_dial_app-18.patch
wget http://download.vicidial.com/asterisk-patches/Asterisk-18/timeout_reset_dial_core-18.patch
cd apps/
wget http://download.vicidial.com/asterisk-patches/Asterisk-18/enter.h
wget http://download.vicidial.com/asterisk-patches/Asterisk-18/leave.h
yes | cp -rf enter.h.1 enter.h
yes | cp -rf leave.h.1 leave.h

Step 2 – Apply the patches to the version you chose to use

Now that we’ve got the files, lets begin patching them as shown below. After applying each patch, copy and paste the location shown below each patch line.

Asterisk 16 patches

patch < amd_stats.patch apps/app_amd.c
patch < iax2_peer_status.patch channels/chan_iax2.c
patch < sip_logging_peer_status.patch channels/chan_sip.c
patch < timeout_reset_dial_app.patch apps/app_dial.c
patch < timeout_reset_dial.patch main/dial.c

Asterisk 18 patches

patch < amd_stats-18.patch apps/app_amd.c
patch < iax_peer_status-18.patch channels/chan_iax2.c
patch < sip_peer_status-18.patch channels/chan_sip.c
patch < timeout_reset_dial_app-18.patch apps/app_dial.c
patch < timeout_reset_dial_core-18.patch main/dial.c

Step 3 – Compile Asterisk

Now to compile Asterisk after applying the necessary patches. Copy and paste the desired Asterisk version code.

Asterisk 16

cd /usr/src/asterisk/asterisk-16.30.0/
: ${JOBS:=$(( $(nproc) + $(nproc) / 2 ))}
./configure --libdir=/usr/lib64 --with-gsm=internal --enable-opus --enable-srtp --with-ssl --enable-asteriskssl --with-pjproject-bundled --with-jansson-bundled

make menuselect/menuselect menuselect-tree menuselect.makeopts
#enable app_meetme
menuselect/menuselect --enable app_meetme menuselect.makeopts
#enable res_http_websocket
menuselect/menuselect --enable res_http_websocket menuselect.makeopts
#enable res_srtp
menuselect/menuselect --enable res_srtp menuselect.makeopts
make -j ${JOBS} all
make install

Asterisk 18

cd /usr/src/asterisk/asterisk-18.18.1/
: ${JOBS:=$(( $(nproc) + $(nproc) / 2 ))}
./configure --libdir=/usr/lib64 --with-gsm=internal --enable-opus --enable-srtp --with-ssl --enable-asteriskssl --with-pjproject-bundled --with-jansson-bundled

make menuselect/menuselect menuselect-tree menuselect.makeopts
#enable app_meetme
menuselect/menuselect --enable app_meetme menuselect.makeopts
#enable res_http_websocket
menuselect/menuselect --enable res_http_websocket menuselect.makeopts
#enable res_srtp
menuselect/menuselect --enable res_srtp menuselect.makeopts
make -j ${JOBS} all
make install

That completes this article, make sure you restart asterisk if its running with “core restart now”

-Chris aka carpenox

How to – Fix ViciBox 11 after kernel update

ViciBox 11

How to – Fix ViciBox 11 after kernel update

Ok, so it seems that if you run a “zypper up” on ViciBox 11, it will update the kernel which then leaves dahdi with errors that won’t allow it to start up and calls will have no audio and you will not hear the “only-person” sound when you login. After debugging this issue for a few hours, I was able to figure out a fix for it. We are going to manually install the latest dahdi and some updates that are needed in order to fix this, so let’s get started.

Step 1 – Download dahdi

OK, so first lets go to the /usr/src directory and then download the file for dahdi

cd /usr/src/
wget https://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/dahdi-linux-complete-3.2.0%2B3.2.0.tar.gz
tar -xzvf dahdi-linux-complete-3.2.0+3.2.0.tar.gz
cd dahdi-linux-complete-3.2.0+3.2.0/

Step 2 – Download kernel update and needed compile tools

zypper in autoconf gcc make libtool
zypper in *kernel-default*

Press 2 when it gives you options

Step 3 – Compile Dahdi

Run the following commands:

make
make install
make install-config
cd tools
make clean
make
make install
make install-config
cp /etc/dahdi/system.conf.sample /etc/dahdi/system.conf
Dahdi

Step 4 – Run modprobe for dahdi and check to make sure its working

modprobe dahdi
dahdi_cfg -v