Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
metoda.doc
Скачиваний:
65
Добавлен:
01.03.2016
Размер:
8.2 Mб
Скачать
      1. Команда Playtones()

Проигрывает список тонов. Может проигрывать тональную последовательность по имени tonename, согласно его определению в файле indications.conf, или, описанный прямо в команде, список - tonelist, с частотами и продолжительностью сигналов.

Выполнение будет немедленно продолжено со следующей по приоритету команды, при этом тональные сигналы будут продолжать генерироваться. Используйте команду StopPlaytones для останова проигрывания тонов. В данном случае эта команда, по своим действиям, аналогична команде Background, которая проигрывает заданный звуковой файл "в фоновом режиме".

; testing playtones

exten => 209,1,Answer

exten => 209,2,Playtones(congestion)

; Тоны будут генерироваться пока не наступит

;состояние таймаута

; или пользователь не наберет номер другого

; екстеншена

exten => 264,1,Answer

exten => 264,2,Wait(1)

exten => 264,3,Playtones(!950/330,!1400/330,!1800/330,0)

exten => 264,4,Wait(5)

exten => 264,5,StopPlaytones

exten => 264,6,Wait(2)

exten => 264,7,Playback(beep)

exten => 264,8,Hangup

Рисунок 4.4 – Пример. Asterisk ожидает ввода пользователя 5 секунд

      1. AGI - интерфейс взаимодействия с внешними скриптами

AGI (Asterisk Gateway Interface) - это встроенный в Asterisk метод выполнения внешних скриптов (по аналогии с CGI для http серверов), который может расширить функциональность asterisk при помощи других языков программирования. Таких, как: Perl, PHP, C, Pascal, Bourne Shell - все зависит от Вашего желания и умения.

AGI скрипты: могут управлять вызовом в плане набора, вызываются из файла: extensions.conf

EAGI скрипты: дают приложению возможности доступа и управления звуковыми каналами, в дополнение к управлению вызовами в плане набора.

FastAGI могут быть использованы для выполнения обработки на удаленной машине

deadagi скрипты: имеют доступ к "мертвым" (отключенным) каналам, т.е. могут продолжать работать после окончания вызова.

    1. Порядок выполнения работы

Порядок выполнения работы составлен для выполнения в fedora11.

  1. Установить пакет с дополнительными звуковыми файлами для Asterisk

    # yum install asterisk-sounds-core-en-gsm

  2. Придумать структуру голосового меню

Пример абстракной структуры меню:

a. приветствие

• добро пожаловать в мое голосове меню

b. основная часть

• для набора абонента user1 нажмите «1»

• для набора абонента user2 нажмите «2»

• для перехода в подменю нажмите «3»

• для завершения звонка нажмите «0»

c. просьба осуществления выбора

• пожалуйста, сделайте свой выбор

Вам необходимо выбрать предметную область для своего варианта и придумать структуру голосового меню для нее.

01 - Аэропорт

02 - Вокзал

03 - Речной порт

04 - Автовокзал

05 - Приемная президента

06 - Ресторан

07 - Деканат

08 - Столовая

09 - Справочное бюро

10 - Сервисный центр

  1. Записать аудиосообщения для голосового меню

  • В /etc/asterisk/extensions.conf добавляем секцию [other] в конец файла

# nano /etc/asterisk/extensions.conf

[other]

Exten => 9205,1,Wait(2)

Exten => 9205,2,Record(/tmp/asterisk-recording:gsm)

Exten => 9205,3,Wait(2)

Exten => 9205,4,Playback(/tmp/asterisk-recording)

Exten => 9205,5,wait(2)

Exten => 9205,6,Hangup

  • Делаем include для секции [other] в секции [default]

[default] ; ; By default we include the demo. In a production

; system, you ; probably don't want to have the demo there. ; include => demo ;

  • перезапускаем asterisk

# /etc/init.d/asterisk restart

  • осуществляем звонок на номер 9205

После звукового сигнала начнется запись вашего аудиосообщения. Для прекращения записи нажмите #. После этого вы сможете прослушать записанное вами аудиосообщение и будете отсоединены. Ваше аудиосообщение сохранится в файл /tmp/asterisk-recording.gsm, откуда можно его скопировать в папку /usr/share/asterisk/sounds и осмысленно назвать.

  • Таким образом формируем набор аудиосообщений, необходимых для голосового меню

  1. Настроить голосовое меню

  • В /etc/asterisk/extensions.conf добавляем секции [my] для основной части и секцию [mysub] для подменю вашего голосового меню в конец файла

[mysub]

exten => s,1,Background(my/submenu)

exten => s,2,Background(silence/5)

exten => s,3,Background(my/choise)

exten => s,4,Background(silence/1)

exten => s,5,Goto(mysub,s,1)

exten => i,1,Background(my/invalid)

exten => i,2,Background(silence/1)

exten => i,3,Goto(mysub,s,1)

exten => 1,1,Wait(2)

exten => 1,2,Playtones(!950/330,!1400/330,!1800/330,0)

exten => 1,3,Wait(1)

exten => 1,4,StopPlaytones

exten => 1,5,Wait(1)

exten => 1,6,Goto(mysub,s,1)

exten => 2,1,Goto(my,s,2)

exten => 0,1,Playback(my/end)

exten => 0,2,Hangup

;

[my]

exten => s,1,Answer

exten => s,2,Playback(beep)

exten => s,3,Background(my/main)

exten => s,4,Background(my/menu)

exten => s,5,Background(silence/5)

exten => s,6,Background(my/choise)

exten => s,7,Background(silence/1)

exten => s,8,Goto(my,s,4)

exten => i,1,Background(my/invalid)

exten => i,2,Background(silence/1)

exten => i,3,Goto(my,s,4)

exten => 1,1,Dial(SIP/111,10,t)

exten => 1,2,Background(silence/1)

exten => 1,3,Goto(my,s,2)

exten => 2,1,Dial(SIP/222,10,t)

exten => 2,2,Background(silence/1)

exten => 2,3,Goto(my,s,2)

exten => 3,1,Goto(mysub,s,1)

exten => 0,1,Playback(my/end)

exten => 0,2,Hangup

;

  • В /etc/asterisk/extensions.conf задаем номер для нашего голосового меню, описывая его в секции [default]

# nano /etc/asterisk/extensions.conf

[default] ; ; By default we include the demo. In a production system, you ; probably don't want to have the demo there. ; include => demo ; include => other

;

exten => 789,1,Goto(my,s,1)

include => other

  • Перезапускаем asterisk

# /etc/init.d/asterisk restart

  • Осуществляем звонок на номер 789 и проверяем работу голосового меню

  1. Научиться использовать AGI-скрипты

  • В папке /usr/share/asterisk/agi-bin создаем два файла-скрипта

# nano /usr/share/asterisk/agi-bin/script1.agi

#!/usr/bin/perl use strict; $|=1; # Setup some variables my %AGI; my $tests = 0; my $fail = 0; my $pass = 0; while(<STDIN>) { chomp; last unless length($_); if (/^agi_(\w+)\:\s+(.*)$/) { $AGI{$1} = $2; } } print STDERR "AGI Environment Dump:\n"; foreach my $i (sort keys %AGI) { print STDERR " -- $i = $AGI{$i}\n"; } sub checkresult { my ($res) = @_; my $retval; $tests++; chomp $res; if ($res =~ /^200/) { $res =~ /result=(-?\d+)/; if (!length($1)) { print STDERR "FAIL ($res)\n"; $fail++; } else { print STDERR "PASS ($1)\n"; $pass++; } } else { print STDERR "FAIL (unexpected result '$res')\n"; $fail++; } } print STDERR "Testing 'saynumber'..."; print "SAY NUMBER 12345 \"\"\n"; my $result = <STDIN>; &checkresult($result);

Вам необходимо разобрать содержание AGI-скрипта и изменить число, которое произносится на произвольно выбранное.

# nano /usr/share/asterisk/agi-bin/script2.agi

#!/bin/sh # only with real numerical CLID while read line do if echo $line | grep -q "agi_callerid: "; then CLID=${line##agi_callerid: } if echo ${CLID} | grep -q "^[[:digit:]]*$"; then echo "Good CLID (${CLID})" >&2 else echo "STREAM FILE vm-unknown-caller \"\"\n" echo "Bad CLID (${CLID})" >&2 exit 1 fi else if [ ${#line} -eq 0 ]; then break; fi fi done # say 'enter password' and get max 4-digit password echo "GET DATA vm-password 5000 4\n" read line PASS=${line##200 result=} if [ "_${PASS}_" != "_1234_" ]; then echo "STREAM FILE vm-incorrect \"\"\n" exit 2 else echo "STREAM FILE you-entered \"\"\n" exit 0 fi

Вам необходимо разобрать содержание AGI-скрипта и изменить число, которое служит паролем на произвольно выбранное.

  • правим права 755

    # chmod 755 /usr/share/asterisk/agi-bin/script1.agi

    # chmod 755 /usr/share/asterisk/agi-bin/script2.agi

  • в секции [other] описываем номера для AGI-скриптов

# nano /etc/asterisk/extensions.conf

exten => 5001,1,Answer exten => 5001,2,AGI(script1.agi) exten => 5001,3,Hangup exten => 5002,1,Answer exten => 5002,2,AGI(script2.agi) exten => 5002,3,Hangup

  • перезапускаем asterisk

# /etc/init.d/asterisk restart

  • осуществляем звонок на номера 5001, 5002 и проверяем работу AGI-скриптов

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]