s + $//g;
$ ARGV [2]=~ s/^ s + | s + $//g;
$ ARGV [3]=~ s/^ s + | s + $//g;
$ ARGV [4]=~ s/^ s + | s + $//g;
# Якщо дзвінок ще в предответном стані - відповідаємо
$ AGI- gt; answer ();% AGI;
# ініціалізувавши змінні
$ status=»»;
$ result=»»;
$ to=»»;
# Змушуємо Asterisk виконати команду GET DATA
# Формат команди: GET DATA lt; file to be streamed gt; [timeout] [max digits]
# де lt; file to be streamed gt;- Шлях до медіафайлів, який треба відтворити абоненту
# [timeout] - тайм-аут очікування введення цифри
# [max digits] - максимальна кількість цифр
# Чекаємо введення однієї цифри
print «GET DATA $ ARGV [0] $ ARGV [1] 1 n»;
# Повертаний результат:
# невдале завершення: 200 result=- 1
# тайм-аут з введеними цифрами: 200 result= lt; digits gt; (timeout)
# тайм-аут без введених чисел: 200 result=(timeout)
# вдале завершення: 200 result= lt; digits gt;
# Отримуємо і розбираємо результат
$ result= lt; STDIN gt ;;
$ tt=$ result;
($ status, $ res_str, $ to)=split//, $ result;
($ fake, $ result)=split /=/, $ res_str;
$ to=~ s/^ s + | s + $//g;
$ result=~ s/^ s + | s + $//g;
# Якщо команда завершилася вдало, але цифр не введено - була просто натиснута #
# повертаємо ознака необхідності повторити набір ПІН-коду і виходимо
if (($ result eq «) amp; amp; ($ to eq«)) {
$ AGI- gt; set_variable ($ ARGV [4], 2); (0);
}
# Нічого не набрали протягом тайм-ауту - повертаємо соотвтетствующій ознака і виходимо
if ($ result eq «) {
$ AGI- gt; set_variable ($ ARGV [4], 1);
exit (0);
}
# Була натиснута * - повертаємо ознака необхідності повторити набір ПІН-коду і виходимо
if ($ result eq «*») {
$ AGI- gt; set_variable ($ ARGV [4], 2);
exit (0);
}
# Отримано символи відмінні від цифр - (A, B, C, D) -
# повертаємо ознака помилкового ПІН-коду і виходимо
if ($ result=~/^ D + $ /) {
$ AGI- gt; set_variable ($ ARGV [4], 3);
exit (0);
}
# Файл вітання відтворений, перша цифра отримана. Подолжаем збір далі
$ count=1; (1) {
# Очікуємо черговий символ із заданим тайм-аутом
$ digit=$ AGI- gt; wait_for_digit ($ ARGV [1]);
# Стався тайм-аут, повертаємо ознака помилкового ПІН-коду і виходимо
if ($ digit == 0) {
$ AGI- gt; set_variable ($ ARGV [4], 3);
exit (0);
}
$ count ++;
# Аналізуємо отримане
# Нам був повернутий код символу. Отримуємо сам символ функцією chr ()
$ digit=chr ($ digit);
# Натиснуто * або # - повертаємо ознака необхідності повторити набір ПІН-коду і виходимо
if (($ digit eq «*») || ($ digit eq «#»)) {
$ AGI- gt; set_variable ($ ARGV [4], 2); (0);
}
# Отримано символи відмінні від цифр - (A, B, C, D) -
# повертаємо ознака помилкового ПІН-коду і виходимо
if ($ result=~/^ D + $ /) {
$ AGI- gt; set_variable ($ ARGV [4], 3);
exit (0);
}
# Додаємо чергову цифру в ПІН-код
$ result=«$ result». «$ Digit»;
# Якщо зібрано 8 цифр - перевіряємо ПІН-код на приналежність до технічних
# якщо вірно - завершуємо цикл збору цифр
if (($ count == 8) amp; amp; (substr ($ result, 0,1) eq «0»)) {last;}
#...