AF
Asterisk Forum
обсуждения телефонии, VoIP и IP-PBX
12разделов
5 423тем
34 385сообщений
← К списку тем

Проигрывание файла во время звонка

Newbies/FAQ Forum 11 сообщений 01.11.2010 12:47 - 12.11.2010 12:39
#1 01.11.2010 12:47

Проигрывание файла во время звонка


Здравствуйте.

Каким образом можно проиграть конкретный файл вызывающей стороне, во время звонка.
Проигрывать надо по схеме, например: два гудка, если трубку не взяли то проигрываем указанный файл, а в этот момент телефон у вызываемой стороны должен звонить (вдруг возьмут трубку), потом снова гудки.

Слышал в каком-то колцентре такое, там говорят: вы такой-то в очереди, хотя не факт что вызов в этот момент идет
#2 02.11.2010 06:50

пробовал RetryDial но это не то.

пока сделал так:
Code:

exten => XXX,1,Verbose(Звоним)
exten => XXX,n,Set(str="")
exten => XXX,n,Dial(SIP/${EXTEN},10,tT)
exten => XXX,n,AGI(my_script.php,${EXTEN})
exten => XXX,n,Background(${str})
exten => XXX,n,Dial(SIP/${EXTEN},40,tT)
exten => XXX,n,HangUp


но это не очень правильно, потому что в то время, когда работает Background вызов не идет Sad
Натолкните на правильную мысль.
#3 02.11.2010 09:31

Dial(...,,M(.....)) - не то? макрос в вызове, исполняется при соединении
#4 02.11.2010 11:37

это при соединении двух абонентов, а мне надо во время вызова чтоб работало
#5 03.11.2010 18:07

Это обычная очередь Queues. Уведомления и их частота настраиваются. Это базовая возможность астериски
#6 08.11.2010 08:31

получается без использования очередей ни как не сделать?
#7 08.11.2010 10:04

А зачем? Чем вам не нравится предложенное решение?
_________________
Успехов!
#8 11.11.2010 09:22

тем что я не использую очереди, надобности в них нет.

Расскажу для чего нужно проигрывание файла во время звонка.
Есть пропускная система, в ней регистрируется где сейчас находится человек (н-р: вне предприятия, в отпуске, в кафе-баре, в спорт-зале и т.д.) к астериску прикрутил фестивал, который проговаривает ФИО и где находится человек, и вот хочется чтоб во время звонка это проговаривалось, и одновременно шел вызов, почему:
1. вызов должен идти потому что человек мог не отметится на какой нибуть контрольной точке и тогда информация о его местонахождении будет не верна;
2. если сначала проговаривать, где он находится, а потом делать вызов - это тоже не правильно потому что много времени тратится на прослушивание, также см. п.1;

Может быть и очередь использовать для этих целей, но в очереди можно вызвать конкретного абонента, и если он не ответит то канал должен отбиваться а не идти дальше по очереди? Да и не виду смысла объединять в очередь - директора, секретаря и бухгалтера. ИМХО очереди нужны только во всяких коллцентрах, если ошибаюсь поправьте
#9 11.11.2010 10:36

Dial(...,,M(.....)) - то что нужно.
_________________
astlock:)
#10 12.11.2010 10:56

Code:

[macro-whereis]
exten => s,1,Set(str="")
exten => s,n,Verbose(whereis ${ARG1})
exten => s,n,AGI(wherebyphone.php,${ARG1})
exten => s,n,Background(${str})

[default]
exten => s,1,Answer()
exten => s,n,Dial(SIP/${EXTEN},40,tTM(whereis^${EXTEN}))


звоню с телефона А на телефон Б, идут гудки(макрос не выполняется), поднимаю трубку на телефоне Б, в CLI вижу как выполнился макрос, и файл проигрался в трубке телефона Б, а не А, что я делаю не так?
#11 12.11.2010 12:39

koqep, все делаете правильно, тк макрос выполняется для вызываемой стороны.

Quote:
M(x[^arg]) - Execute the Macro for the *called* channel before connecting


Самое просто как уже говорили это использовать Queue вместо Dial.
Либо использовать опцию m(music on hold) в Dial, а вместо музыки использовать свой анонс, к которому скажем приклеить в конце музыку или гудки дозвона(1-2 минуты).
3 вариант, использовать локальные каналы,Bridge,Originate и пробовать как-то все вместе слепить.