First time here? Check out the FAQ!

Пожалуйста, войдите здесь. Часто задаваемые вопросы О нас
Задайте Ваш вопрос

Вызов через просулшивающего оператора

0

Здравствуйте. Поставлена такая задача. Есть asterisk и есть абоненты, которые к нему подключены. При совершении входящих/исходящих вызовов необходимо чтобы трафик прослушивали операторы и в случае чего вмешивались в разговор. Подскажите парни, это можно как-то реализовать? P.S.: используются софтфоны,которые при необходимости можно запрограммировать.

спросил Apr 2 '13

Annapolis Gravatar Annapolis
21 4 1 4

обновил Apr 2 '13

Comments

Это какие такие "софтфоны,которые при необходимости можно запрограммировать" ?

zzuz (Apr 2 '13)edit

>> Это какие такие "софтфоны,которые.."

twinkle в исходниках!! кто б тырфейс полюдски "запрограммировал", я б денег дал (на пиво, больше нету))

viktorkho (Apr 4 '13)edit

Ну так. С таким подходом и Linphone можно туда же относить.

zzuz (Apr 4 '13)edit

2 Ответа

2

закидывать всех в конференцию или ChanSpy

ссылка удалить спам редактировать

ответил Apr 2 '13

komrad123 Gravatar komrad123
3810 5 3 44

Comments

Нужно чтобы в разговор можно было вмешаться тут же, без дополнительных операций у пользователя либо того кто ему звонит.

Annapolis (Apr 2 '13)edit

Мысленной командой чтоли?

switch (Apr 2 '13)edit

Оператор и абонент подключены к АТС, при событии снятия трубки(успешного вызова) абонентом, схема должна срабатывать.

Annapolis (Apr 2 '13)edit
3

Ищите интегратора, платите ему деньги за то, что будет интерпретировать ваши марсианские послания.

switch (Apr 2 '13)edit
1

если правильно понял задачу... не тестировал...

-- extensions.lua

technology
="SIP"
extensions
={}
dialincontext
="dialin" -- имя контекста входящих звонков
dialoutcontext
="dialout" -- имя контекста исходящих звонков
spygocontext
="spygo"
spyspoolcontext
="spyspool"
spyspoolexten
="start"
spystartcontext
="spystart"
spystartexten
="start"

env
=getfenv()
asterisk_exten_table
="extensions"
operatorlist
= {"0001","0002","0003","0004","0005"}  -- устройства операторов которых нужно обзванивать для прослушивания
callorder
= "random" -- может быть - random или seq случайном или по порядку)

CALLSPOOL_TMPFILE
= "/tmp/%s.call"
CALLSPOOL_WORKINGDIR
= "/var/spool/asterisk/outgoing"
MEDIA_STARTLISTENING_NOTIFICATION
= "now-listening" -- медиа файл который будет проигрываться оператору перед включением в канал

callfile
= [[
Channel: Local/%s@%s
Context: %s
Extension: %s
Priority: 1
Set: PEERCHAN=%s
Set: TOANNOUNCE=%s
]]

function macrooption(peerannounce)
 
return ("M(%s,%s,%s)"):format(spygocontext,channel.CHANNEL:get(),peerannounce)
end

t
=env[asterisk_exten_table]

t
[dialoutcontext] = {}    -- контекст для исходящих вызовов
t
[dialincontext]["_X."] = function(c,e)
 app
.dial( ("%s/%s/%s"):format(technology, outgoingpeer, e), null, macrooption(channel.CHANNEL("peername"):get()))
 app
.hangup()
end

t
[dialincontext] = {} -- контекст для входящих вызовов
t
[dialincontext]["_X."] = function(c,e)
 app
.dial(("%s/%s"):format(technology, e),null,macrooption(e))
 app
.hangup()
end


t
[("macro-%s"):format(spygocontext)] = {} -- макрос создающий .call файл
t
[("macro-%s"):format(spygocontext)]['s'] = function(c,e)
  tmpfilename
=CALLSPOOL_TMPFILE:format(channel.UNIQUEID:get())
 
local file = assert(io.open(tmpfilename, "w"))
 
assert(file:write(callfile:format(spyspoolexten,spyspoolexten,spystartcontext,spystartexten,channel.ARG1:get(),channel.ARG1:get())))
 
assert(file:close())
 
assert(os.rename(tmpfilename, CALLSPOOL_WORKINGDIR))
end


t
[spyspoolcontext] = {} -- контекст с циклом обзвона операторов
t
[spyspoolcontext][spyspoolexten] = function(c,e)
 ol_len
= #operatorlist
 
for i = 1, ol_len do
 
({random = function()
    nextoperator
= math.random(#operators)
   
operator = operators[nextoperator]
    table
.remove(operators,nextoperator)
   
end,
   seq
= function()
   
operator = operators[i]
   
end
 
})[callorder]()
  app
.dial(("%s/%s"):format(technology,operator))
 
end
end

t
[spystartcontext] = {} -- контекст осуществляющий включение в канал
t
[spystartcontext][spystartexten] = function(c,e)
 
local peerchan=channel.PEERCHAN:get()
 app
.wait(1)
 app
.answer()
 app
.playback("silence/1")
 app
.playback(MEDIA_STARTLISTENING_NOTIFICATION)
 
if (channel.TOANNOUNCE:get()):match('%d') then -- если в имени пира цифры то проговариваем ему
  app
.playback("silence/1")
  app
.saydigits(channel.TOANNOUNCE:get())
 
end
 app
.playback("silence/1")
 app
.channspy(channel.PEERCHAN:get())
 app
.hangup()
end
ссылка удалить спам редактировать

ответил Apr 7 '13

octopas Gravatar octopas
111 5 1 3

обновил Apr 7 '13

Comments

Вот оно новое поколение комментаторов! Тоже не проверил, но уже не RTFM

Топикстартеру - проверьте решение, отпишите, не забудьте, это вам писали

viktorkho (Apr 7 '13)edit

Да, обязательно, благодарю!

Annapolis (Apr 8 '13)edit

Ваш ответ

Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!
[скрыть предварительный просмотр]

Закладки и информация

Добавить закладку

подписаться на rss ленту новостей

Статистика

Задан: Apr 2 '13

Просмотрен: 343 раз

Обновлен: Apr 07 '13

Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией GNU GPL.