SHARE
TWEET

Untitled

a guest Apr 21st, 2019 186 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. local accountcode = argv[1];
  2. local destination = argv[2];
  3. local domain = argv[3];
  4. --
  5. local luasql = require "luasql.postgres"
  6. --
  7. -- Настройки подключения к базе PostgreSQL
  8. DBHOST = '127.0.0.1'
  9. DBNAME = 'freeswitch'
  10. DBUSER = 'freeswitch'
  11. DBPASS = '************'
  12. DBPORT = '5432'
  13.  
  14. --Получаем стоимость минуты звонка по направлению и баланс
  15. local env = assert (luasql.postgres())
  16. local dbcon = env:connect(DBNAME, DBUSER, DBPASS, DBHOST, DBPORT)
  17. res = dbcon:execute("SELECT * FROM code WHERE '".. destination .."' LIKE CONCAT(prefix,'%') ORDER BY CHAR_LENGTH(prefix) DESC OFFSET 0 LIMIT 1")
  18. readsql = dbcon:execute("SELECT * FROM extensions WHERE accountcode='".. accountcode .."' AND domain='".. domain .."'")
  19. row = res:fetch ({}, "a");
  20. row1 = readsql:fetch ({}, "a");
  21.        
  22.     if (row and row1 ~= nil) then
  23.        price = tonumber(row.price);
  24.        gate = row.gate;
  25.        balance = tonumber(row1.balance);
  26.        readsql:close();
  27.        res:close();
  28.        dbcon:close();
  29.        env:close();
  30.     else
  31.        readsql:close();
  32.        res:close();
  33.        dbcon:close();
  34.        env:close();
  35.        session:preAnswer();
  36.        session:sleep(1000);
  37.        session:execute("playback", "shout://tts.voicetech.yandex.net/tts?format=mp3&quality=hi&platform=web&application=translate&lang=ru_RU&speaker=ermil&emotion=good&text=${url_encode Нет линий на данное направление.");
  38.        session:hangup();
  39.     return;
  40.     end;
  41.        
  42.     if balance >= price  then
  43.         freeswitch.consoleLog("WARNING","##################################################\n");
  44.         freeswitch.consoleLog("WARNING","# Совершаем звонок на номер ".. destination .. "          #\n");
  45.         freeswitch.consoleLog("WARNING","# Стоимость направления ".. price .." руб.                #\n");
  46.         freeswitch.consoleLog("WARNING","# Кто звонит  ".. accountcode .."@".. domain .."                   #\n");
  47.         freeswitch.consoleLog("WARNING","# Баланс  ".. balance .." руб.                             #\n");
  48.         freeswitch.consoleLog("WARNING","##################################################\n");
  49.        
  50.     if gate == "qwerty" then
  51.        legA = freeswitch.Session("{sip_cid_type=none,absolute_codec_string='PCMA,PCMU',enable_heartbeat_events=60,nibble_rate=".. price ..",nibble_account=".. accountcode .."}sofia/gateway/qwerty/" .. destination);
  52.     else
  53.         legA = freeswitch.Session("{absolute_codec_string='PCMA,PCMU',enable_heartbeat_events=60,nibble_rate=".. price ..",nibble_account=".. accountcode .."}sofia/gateway/F15/" .. destination);
  54.     end;
  55.      
  56. freeswitch.bridge(session, legA); -- Бриджуем
  57. nibble_bill = legA:getVariable("nibble_total_billed"); -- Узнаем стоимость звонка
  58.      
  59.      if ( nibble_bill ~= nil )  then -- Если значение nibble_bill есть...
  60.         session:setVariable("rate", "".. nibble_bill ..""); -- Записываем в переменную, чтобы была стоимость звонка в CDR к звонку
  61.         freeswitch.consoleLog("INFO","Стоимость звонка ".. nibble_bill .. " руб.\n");
  62.      end;
  63.  
  64. --session:execute("info"); -- Выводим все переменные на канале session
  65. --legA:execute("info"); -- Выводим все переменные на канале legA
  66. end;
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top