Вход | Регистрация
Вы здесь: Главная / Форум / Главный форум по Asterisk / Конфигурация и настройка / Asterisk+n-way+call+HOWTO где инициатором выступает третий участник

Asterisk+n-way+call+HOWTO где инициатором выступает третий участник

а может быть и совсем другим способом
<1 2
Avatara of litnimax
Откуда: Москва
Сообщений: 3421

Re: Asterisk+n-way+call+HOWTO где инициатором выступает третий участник

Наверное, мы придумываем велосипед на костылях вместо колес :-)
Да породить сразу AGI, и в нем все сделать. При использовании System, шела, awk, grep и тд - это сколько fork'ов то будет!?
http://pbxware.ru - все для Asterisk! || Switchvox - сделано на Asterisk! Подробности на http://switchvox.ru
2008-10-30 23:36

Сообщений: 1573

Re: Asterisk+n-way+call+HOWTO где инициатором выступает третий участник

Во-во .... :)
2008-10-31 00:12

Сообщений: 4

Re: Asterisk+n-way+call+HOWTO где инициатором выступает третий участник

Я все же реализовал эту задачу следующим образом.

Концовка meetme.conf
[rooms]
conf => 1234


manager.conf
[general]
enabled = yes
port = 5038
bindaddr = 0.0.0.0

[sysadmin]
secret = sysadmin
deny = 0.0.0.0/0.0.0.0
permit = 127.0.0.1/255.255.255.255
read = all,system,call,log,verbose,command,agent,user,config
write = all,system,call,log,verbose,command,agent,user,config


Добавления в extensions.conf
; Вызов редиректа разговора оператора в MeetMe-конференцию
exten => _*9X.,1,Gosub(start-redirect,${EXTEN:2},1)

[start-redirect]
exten => _X.,1,Verbose(Trying to redirect talking ${EXTEN})
exten => _X.,n,System(/var/lib/asterisk/scripts/invade.sh ${EXTEN})
exten => _X.,n,Gosub(addto-meetme,${EXTEN},1)

[addto-meetme]
exten => s,1,Verbose(Trying to add ${EXTEN} to MeetMe conference)
exten => s,n,MeetMe(1234,qodx)

exten => _X.,1,Verbose(Trying to add ${EXTEN} to MeetMe conference)
exten => _X.,n,MeetMe(1234,qodx)


Вот листинг скрипта invade.sh
#Получаем от Asterisk список активных каналов и помещаем его в файл activechannels.tmp
asterisk -rx 'core show channels' > /var/lib/asterisk/scripts/activechannels.tmp

#При помощи скрипта getchannels.awk выделяем активные каналы, которые соответствуют экстеншену $1
#Далее из скрипта getchannels.awk запускается скрипт redirect.sh, который при помощи Asterisk AMI производит редирект в MeetMe-конференцию
awk -f /var/lib/asterisk/scripts/getchannels.awk EXTEN=$1 /var/lib/asterisk/scripts/activechannels.tmp


Вот листинг awk-скрипта getchannels.awk
{
SEARCH = "SIP/"EXTEN
# Ищем строку с надписью "Bridged Call", которая отображает состояние канала разговора и в ней ищем SIP/EXTEN
if ($0 ~ /Bridged Call/ && ($1 ~ SEARCH || $5 ~ SEARCH) )
{
if ($1 ~ SEARCH)
{
channel1 = $1
channel2 = $5
}
else
{
channel1 = $5
channel2 = $1
}

# Обрезаем ненужное слово Call и скобки по краям
if (channel1 ~ /^Call/)
{
sub(/Call\(/,"",channel1)
sub(/\)/,"",channel1)
}
if (channel2 ~ /^Call/)
{
sub(/Call\(/,"",channel2)
sub(/\)/,"",channel2)
}
}
}
END {
# Запускаем скрипт redirect.sh передавая в качестве параметров названия двух каналов и extension.
# Вывод скрипта осуществляется в telnet
system("expect /var/lib/asterisk/scripts/redirect.exp "channel1" "channel2" "EXTEN)
}


Ну и последний листинг скрипта redirect.exp
# Usage: ./redirect.exp channel1 channel2

# The user account from manager.conf:
set username "sysadmin"
set secret "sysadmin"
set host "127.0.0.1"
set port "5038"

if {[llength $argv] != 3} {
send_user "Error: You must specify two channels and extension to redirect!\n"
exit 1
}

set channel1 [lindex $argv 0]
set channel2 [lindex $argv 1]
set EXTEN [lindex $argv 2]

# Mute output to stdout:
log_user 0

# Open connection to AMI:
spawn telnet $host $port

# Just in case telnet aborts because it cannot connect:
expect_before eof {
send_user "Failed to connect.\n"
exit 1
}

# Wait for the text "Manager"; once received, send a login packet:
expect "Manager" {
send_user "Connected.\n"
send "Action: Login\nUsername: $username\nSecret: $secret\n\n"
}

# Login successful?:
expect {
-re "Response:\\s*Error" {
send_user "Login failed.\n"
exit 1
}
-re "Response:\\s*Success" {
send_user "Logged in.\n"
send "Action: Redirect\nChannel: $channel1\nExtraChannel: $channel2\nExtension: *99\nContext: addto-meetme\nPriority: 1\n\n"
}
}

send "Action: Logoff\n\n"



В результате звонок на *9<номер_телефона> приводит к вклиниванию в разговора с этого номера.
Цитирование покоцало пробелы в листингах, но что ж тут поделаешь? ))))))))
Думаю, что можно реализовать идею красивее, но времени было как всегда в обрез.
2008-11-01 10:11

Сообщений: 1573

Re: Asterisk+n-way+call+HOWTO где инициатором выступает третий участник

Еще раз, повторюсь - чем это, и другое подобное, решение отличается от написания AGI-скрипта?

Кроме доп.нагрзки на систему и усложнения задачи - я ничего не вижу ...

Digium для таких задач предлагает - AGI ... :))
2008-11-01 13:45

Сообщений: 4

Re: Asterisk+n-way+call+HOWTO где инициатором выступает третий участник

Как AGI может кардинально облегчить данную задачу? Все равно необходимо будет производить вызов скрипта, а команды, предоставляемые непосредственно AGI, не так уж многочисленны.
2008-11-05 11:24

Avatara of litnimax
Откуда: Москва
Сообщений: 3421

Re: Asterisk+n-way+call+HOWTO где инициатором выступает третий участник

Команд AGI предостаточно, особенно EXEC :-)
AGI более эффективен с точки зрения нагрузки на систему. Это раз.
На любимом языке программирования писать приятнее и более понятнее, чем ваять на шеле. Это два :-)
http://pbxware.ru - все для Asterisk! || Switchvox - сделано на Asterisk! Подробности на http://switchvox.ru
2008-11-05 12:06

<1 2
Добавить страницу в закладки:  Delicious Google Slashdot Yahoo Yandex.ru Reddit Digg Technorati Bobrdobr.ru Newsland.ru Smi2.ru Rumarkz.ru Vaau.ru Memori.ru Rucity.com Moemesto.ru News2.ru Mister-Wong.ru Myscoop.ru 100zakladok.ru