Advertisement
Guest User

Untitled

a guest
Jul 22nd, 2016
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.99 KB | None | 0 0
  1. --set default variables
  2. max_digits = 15;
  3. digit_timeout = 5000;
  4. debug["sql"] = true;
  5.  
  6. --connect to the database
  7. require "resources.functions.database_handle";
  8. dbh = database_handle('system');
  9.  
  10. --set the api
  11. api = freeswitch.API();
  12.  
  13. --get the argv values
  14. action = argv[2];
  15.  
  16. --get the session variables
  17. if (session:ready()) then
  18. session:answer();
  19. end
  20.  
  21. --get the session variables
  22. if (session:ready()) then
  23. --general variables
  24. domain_uuid = session:getVariable("domain_uuid");
  25. domain_name = session:getVariable("domain_name");
  26. context = session:getVariable("context");
  27. uuid = session:get_uuid();
  28. agent_id = session:getVariable("agent_id");
  29. agent_password = session:getVariable("agent_password");
  30.  
  31. --set the sounds path for the language, dialect and voice
  32. default_language = session:getVariable("default_language");
  33. default_dialect = session:getVariable("default_dialect");
  34. default_voice = session:getVariable("default_voice");
  35. if (not default_language) then default_language = 'en'; end
  36. if (not default_dialect) then default_dialect = 'us'; end
  37. if (not default_voice) then default_voice = 'callie'; end
  38. end
  39.  
  40. --define the sounds directory
  41. sounds_dir = session:getVariable("sounds_dir");
  42. sounds_dir = sounds_dir.."/"..default_language.."/"..default_dialect.."/"..default_voice;
  43.  
  44. --get the agent_id from the caller
  45. if (agent_id == nil) then
  46. min_digits = 2;
  47. max_digits = 20;
  48. max_tries = 3;
  49. agent_id = session:playAndGetDigits(min_digits, max_digits, max_tries, digit_timeout, "#", "phrase:voicemail_enter_id:#", "", "\\d+");
  50. end
  51.  
  52. --get the pin number from the caller
  53. -- if (agent_password == nil) then
  54. -- min_digits = 3;
  55. -- max_digits = 20;
  56. -- max_tries = 3;
  57. -- agent_password = session:playAndGetDigits(min_digits, max_digits, max_tries, digit_timeout, "#", "phrase:voicemail_enter_pass:#", "", "\\d+");
  58. -- end
  59.  
  60. --set default as access denied
  61. authorized = 'true';
  62.  
  63. --get the agent password
  64. sql = "SELECT * FROM v_call_center_agents ";
  65. sql = sql .. "WHERE domain_uuid = '" .. domain_uuid .."' ";
  66. sql = sql .. "AND agent_id = '" .. agent_id .."' ";
  67. --sql = sql .. "AND agent_password = '" .. agent_password .."' ";
  68. freeswitch.consoleLog("notice", "[user status] sql: " .. sql .. "\n");
  69. dbh:query(sql, function(row)
  70. --set the variables
  71. agent_name = row.agent_name;
  72. agent_id = row.agent_id;
  73. --authorize the user
  74. authorized = 'true';
  75. end);
  76.  
  77. --show the results
  78. if (agent_id) then
  79. freeswitch.consoleLog("notice", "[user status][login] agent_id: " .. agent_id .. " authorized " .. authorized .. "\n");
  80. end
  81. if (agent_password and debug["password"]) then
  82. freeswitch.consoleLog("notice", "[user status][login] agent_password: " .. agent_password .. "\n");
  83. end
  84.  
  85. --get the user_uuid
  86. if (authorized == 'true') then
  87. sql = "SELECT user_uuid, user_status FROM v_users ";
  88. sql = sql .. "WHERE username = '".. agent_name .."' ";
  89. sql = sql .. "AND domain_uuid = '" .. domain_uuid .."' ";
  90. if (debug["sql"]) then
  91. freeswitch.consoleLog("NOTICE", "[call_center] sql: ".. sql .. "\n");
  92. end
  93. dbh:query(sql, function(row)
  94. --get the user info
  95. user_uuid = row.user_uuid;
  96. user_status = row.user_status;
  97. if (user_status == "Available") then
  98. action = "logout";
  99. status = 'Logged Out';
  100. else
  101. action = "login";
  102. status = 'Available';
  103. end
  104.  
  105. --show the status in the log
  106. freeswitch.consoleLog("NOTICE", "[call_center] user_status: ".. status .. "\n");
  107.  
  108. --set the user_status in the users table
  109. sql = "UPDATE v_users SET ";
  110. sql = sql .. "user_status = '"..status.."' ";
  111. sql = sql .. "WHERE user_uuid = '" .. user_uuid .."' ";
  112. if (debug["sql"]) then
  113. freeswitch.consoleLog("NOTICE", "[call_center] sql: ".. sql .. "\n");
  114. end
  115. dbh:query(sql);
  116.  
  117. --send a login or logout to mod_callcenter
  118. cmd = "callcenter_config agent set status "..agent_name.."@"..domain_name.." '"..status.."'";
  119. freeswitch.consoleLog("notice", "[user status][login] "..cmd.."\n");
  120. result = api:executeString(cmd);
  121.  
  122. --set the presence to terminated - turn the lamp off:
  123. if (action == "logout") then
  124. event = freeswitch.Event("PRESENCE_IN");
  125. event:addHeader("proto", "sip");
  126. event:addHeader("event_type", "presence");
  127. event:addHeader("alt_event_type", "dialog");
  128. event:addHeader("Presence-Call-Direction", "outbound");
  129. event:addHeader("state", "Active (1 waiting)");
  130. event:addHeader("from", agent_name.."@"..domain_name);
  131. event:addHeader("login", agent_name.."@"..domain_name);
  132. event:addHeader("unique-id", user_uuid);
  133. event:addHeader("answer-state", "terminated");
  134. event:fire();
  135. end
  136.  
  137. --set presence in - turn lamp on
  138. if (action == "login") then
  139. event = freeswitch.Event("PRESENCE_IN");
  140. event:addHeader("proto", "sip");
  141. event:addHeader("login", agent_name.."@"..domain_name);
  142. event:addHeader("from", agent_name.."@"..domain_name);
  143. event:addHeader("status", "Active (1 waiting)");
  144. event:addHeader("rpid", "unknown");
  145. event:addHeader("event_type", "presence");
  146. event:addHeader("alt_event_type", "dialog");
  147. event:addHeader("event_count", "1");
  148. event:addHeader("unique-id", user_uuid);
  149. event:addHeader("Presence-Call-Direction", "outbound");
  150. event:addHeader("answer-state", "confirmed");
  151. event:fire();
  152. end
  153. end);
  154. end
  155.  
  156. --unauthorized
  157. if (authorized == 'false') then
  158. result = session:streamFile(sounds_dir.."/voicemail/vm-fail_auth.wav");
  159. status = "Invalid ID or Password";
  160. end
  161.  
  162. --send the status to the display
  163. if (status ~= nil) then
  164. reply = api:executeString("uuid_display "..uuid.." '"..status.."'");
  165. end
  166.  
  167. --set the session sleep to give time to see the display
  168. if (session:ready()) then
  169. session:execute("sleep", "2000");
  170. end
  171.  
  172. --set the status and presence
  173. if (session:ready()) then
  174. if (action == "login") then
  175. session:execute("playback", sounds_dir.."/ivr/ivr-you_are_now_logged_in.wav");
  176. --session:execute("playback", "tone_stream://%(500,0,300,200,100,50,25)");
  177. end
  178. if (action == "logout") then
  179. session:execute("playback", sounds_dir.."/ivr/ivr-you_are_now_logged_out.wav");
  180. --session:execute("playback", "tone_stream://%(200,0,500,600,700)");
  181. end
  182. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement