From 8dc27b1081f43088707b8fccf9003c16fd0a9a67 Mon Sep 17 00:00:00 2001 From: Brian West Date: Mon, 31 Oct 2016 12:27:13 -0500 Subject: [PATCH] Commit an example of using the IVRMenu object to build the ivr in lua. --- scripts/lua/lua_ivr.lua | 107 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 scripts/lua/lua_ivr.lua diff --git a/scripts/lua/lua_ivr.lua b/scripts/lua/lua_ivr.lua new file mode 100644 index 0000000000..f3b1a8caba --- /dev/null +++ b/scripts/lua/lua_ivr.lua @@ -0,0 +1,107 @@ +-- lua_ivr.lua +-- +-- This script is virtually identical to the demo_ivr defined in conf/autoload_configs/ivr.conf.xml +-- It uses the same sound files and mostly the same settings +-- It is intended to be used as an example of how you can use Lua to create dynamic IVRs +-- + +-- This hash defines the main IVR menu. It is equivalent to the lines in ivr.conf.xml +ivr_def = { + ["main"] = undef, + ["name"] = "demo_ivr_lua", + ["greet_long"] = "phrase:demo_ivr_main_menu", + ["greet_short"] = "phrase:demo_ivr_main_menu_short", + ["invalid_sound"] = "ivr/ivr-that_was_an_invalid_entry.wav", + ["exit_sound"] = "voicemail/vm-goodbye.wav", + ["confirm_macro"] = "", + ["confirm_key"] = "", + ["tts_engine"] = "flite", + ["tts_voice"] = "rms", + ["confirm_attempts"] = "3", + ["inter_digit_timeout"] = "2000", + ["digit_len"] = "4", + ["timeout"] = "10000", + ["max_failures"] = "3", + ["max_timeouts"] = "2" +} + +-- top is an object of class IVRMenu +-- pass in all 16 args to the constructor to define a new IVRMenu object +top = freeswitch.IVRMenu( + ivr_def["main"], + ivr_def["name"], + ivr_def["greet_long"], + ivr_def["greet_short"], + ivr_def["invalid_sound"], + ivr_def["exit_sound"], + ivr_def["confirm_macro"], + ivr_def["confirm_key"], + ivr_def["tts_engine"], + ivr_def["tts_voice"], + ivr_def["confirm_attempts"], + ivr_def["inter_digit_timeout"], + ivr_def["digit_len"], + ivr_def["timeout"], + ivr_def["max_failures"], + ivr_def["max_timeouts"] +); + +-- bindAction args = action, param, digits +-- The following bindAction line is the equivalent of this XML from demo_ivr in ivr.conf.xml +-- +top:bindAction("menu-exec-app", "transfer 9996 XML default", "2"); +top:bindAction("menu-exec-app", "transfer 9999 XML default", "3"); +top:bindAction("menu-exec-app", "transfer 9991 XML default", "4"); +top:bindAction("menu-exec-app", "bridge sofia/${domain}/888@conference.freeswitch.org", "1"); +top:bindAction("menu-exec-app", "transfer 1234*256 enum", "5"); +top:bindAction("menu-sub", "demo_ivr_submenu","6"); +top:bindAction("menu-exec-app", "transfer $1 XML features", "/^(10[01][0-9])$/"); +top:bindAction("menu-top", "demo_ivr_lua","9"); + +-- This hash defines the main IVR sub-menu. It is equivalent to the lines in ivr.conf.xml +ivr_sub_def = { + ["main"] = undef, + ["name"] = "demo_ivr_submenu_lua", + ["greet_long"] = "phrase:demo_ivr_sub_menu", + ["greet_short"] = "phrase:demo_ivr_main_sub_menu_short", + ["invalid_sound"] = "ivr/ivr-that_was_an_invalid_entry.wav", + ["exit_sound"] = "voicemail/vm-goodbye.wav", + ["confirm_macro"] = "", + ["confirm_key"] = "", + ["tts_engine"] = "flite", + ["tts_voice"] = "rms", + ["confirm_attempts"] = "3", + ["inter_digit_timeout"] = "2000", + ["digit_len"] = "4", + ["timeout"] = "15000", + ["max_failures"] = "3", + ["max_timeouts"] = "2" +} + +-- sub_menu is an object of class IVRMenu +-- pass in all 16 args to the constructor to define a new IVRMenu object +sub_menu = freeswitch.IVRMenu( + ivr_sub_def["main"], + ivr_sub_def["name"], + ivr_sub_def["greet_long"], + ivr_sub_def["greet_short"], + ivr_sub_def["invalid_sound"], + ivr_sub_def["exit_sound"], + ivr_sub_def["confirm_macro"], + ivr_sub_def["confirm_key"], + ivr_sub_def["tts_engine"], + ivr_sub_def["tts_voice"], + ivr_sub_def["confirm_attempts"], + ivr_sub_def["inter_digit_timeout"], + ivr_sub_def["digit_len"], + ivr_sub_def["timeout"], + ivr_sub_def["max_failures"], + ivr_sub_def["max_timeouts"] +); + +-- Bind the action "menu-top" to the * key +sub_menu:bindAction("menu-top","demo_ivr_lua","*"); +--sub_menu:execute(session,"demo_ivr_submenu_lua"); + +-- Run the main menu +top:execute(session, "demo_ivr_lua");