Страница 2 из 6
Re: Звонит клиент. Как ему проиграть НЕСКОЛЬКО файлов при от
Добавлено: 25 окт 2017, 13:03
Felt
Через конференцию интересное решение! Что-то в нем есть. Но не пойму что меня отталкивает от построения всех входящих звонков на базе конференций. Ощущается некоторая неправильность использования инструмента конференций для всех входящих разговоров.
Чувствую есть простое решение на обычном Dial'е. Идея ded мне нравится, но я не могу прочувствовать её до конца, чтобы довести до рабочего решения.
Re: Звонит клиент. Как ему проиграть НЕСКОЛЬКО файлов при от
Добавлено: 25 окт 2017, 13:30
Repz
А никто не призывает использовать конференции, вы просили понимания, но просветления не наступило....
https://wiki.asterisk.org/wiki/display/ ... ion_Bridge
удачи!
Re: Звонит клиент. Как ему проиграть НЕСКОЛЬКО файлов при от
Добавлено: 26 окт 2017, 07:49
virus_net
ded писал(а):Попробуйте без копирования, без макроса, упростите тест насколько возможно
Felt писал(а):А как без макроса, если мне нужно проиграть текст при поднятии трубки оператором?
Так как и было написано:
ded писал(а):Из этого факта и исходите.
Felt писал(а):Но я не понимаю как мне проиграть несколько файлов другой стороне так же.
Читаем снова:
ded писал(а):Попробуйте без копирования, без макроса, упростите тест насколько возможно
Пробуем:
Код: Выделить всё
Dial(SIP/provider/9333333333,,A(operator1))
Работает ?
Felt писал(а):про копирование test.call в логе ничего нет, т.к. он копируется средствами LUA без прямого участия Asterisk (но файл точно копируется)
верите что я вам не верю ?
так же если вы пользуете system, то стоит всегда указывать полные пути до всего, а не относительные, в том числе до исполняемых бинарей
Felt писал(а):Даже почему-то не входит в контексты talk_op и talk_customer.
Felt писал(а):После звонка в /var/spool/asterisk/outgoing_done содержимое test.call такое:
А вы уверены что вы смотрите в тот самый файл ? Для понимания этого, чтобы не морочиться с разглядывание дат создания файла, всегда можно добавить в начало что-то типа:
Asterisk auto-dial out
И опять же, как и было сказано
ded`ом, идем путем упрощения, а именно
Minimal Call File Example
Re: Звонит клиент. Как ему проиграть НЕСКОЛЬКО файлов при от
Добавлено: 26 окт 2017, 08:32
Felt
Имена файлов вообще другие, они с полными путями оба. Копируется 100%
Диалплан на LUA, поэтому по dialplan show ничего не покажет наверняка.
Да и в логе есть же строчка, которая могла возникнуть только при срабатывании test.call.
В общем, давайте исключим то, что файл не копируется.
Для удобства диагностики и чтобы дать ответы на вопросы - я сегодня на другом сервере сделаю классическую конфигурацию, которую можно классически отлаживать.
Re: Звонит клиент. Как ему проиграть НЕСКОЛЬКО файлов при от
Добавлено: 26 окт 2017, 11:28
fecyt
Все логично. Исходя из указанного диалплана:
[incoming]
exten => _X.,1,dial(SIP/50,60,M(test-dial-takeup))
[macro-test-dial-takeup]
exten => s,1,noop(Подняли трубку, копируем test.call)
same => n,system("cp /etc/asterisk/test.call /var/spool/asterisk/outgoing/test.call")
[talk_op]
exten => _X.,1,noop(talk_op)
same => n,Dial(SIP/50,,A(operator1))
[talk_customer]
exten => _X.,1,noop(talk_customer)
same => n,Dial(SIP/provider/9333333333,,A(customer1))
Приходит вызов, допустим извне, на номер 50, там поднимается трубка, происходит разговор, параллельно по срабатыванию поднятия трубки запускается макрос, который создает кол файл, тот делает вызов в контекст talk_customer, где вызывается номер через peer provider, и вызываемому проигрывается сообщение, если конечно он дозвонится. Естественно в данном варианте звонящему ничего не проиграется, оператору ничего не проиграется, т.к. трубка уже поднята, разговорный тракт проключен. Чему проигрываться то?
Составьте задачу корректно и реализуйте поэтапно.
Надо проиграть файл звонящему? Включаете плэйбэк, надо проиграть файл вызываемому? Добавляете опцию A в приложение Dial. И т.д.
Re: Звонит клиент. Как ему проиграть НЕСКОЛЬКО файлов при от
Добавлено: 26 окт 2017, 11:41
fecyt
Плюс, одновременное воспроизведение сообщений без прослушивания вызывающим абонентов гудков как реализовать? Мне представляется это возможным, если количество секунд прослушивания этих файлов будет равно количеству секунд дозвона до абонента Б+количество секунд прослушивания файлов абонентом Б, либо больше, чтобы абонент Б ответил и ждал подключения абонента А. А если использовать опцию А в Dial, то уже не получается, нужно значит в виде мелодии ожидания что-то воспроизводить, либо искать другие пути решения - callfile опять же...
Re: Звонит клиент. Как ему проиграть НЕСКОЛЬКО файлов при от
Добавлено: 26 окт 2017, 11:57
ded
Felt писал(а):Диалплан на LUA,
Пожалуйста, отвяжитесь Вы от LUA!
Если владеете С++ то в сторону бейсика уже гордость не позволяет смотреть? Исполнение диалплана пошагово - это тот же бейсик. Почитайте вы уже про все опции команды Dial! Ичто такое канал Local, в которм вызываем последовательное выполнение любых команд - Playback, Background (желательно без макросов!).
fecyt писал(а):Плюс, одновременное воспроизведение сообщений без прослушивания вызывающим абонентов гудков как реализовать? Мне представляется это возможным, если количество секунд прослушивания этих файлов будет равно количеству секунд дозвона до абонента Б+количество секунд прослушивания файлов абонентом Б, либо больше, чтобы абонент Б ответил и ждал подключения абонента А.
Зачем Вы взрываете мозг другим? Порождаете только хаос.
Пора Вам сесть за книгу "Будущее телефонии" читать.
Re: Звонит клиент. Как ему проиграть НЕСКОЛЬКО файлов при от
Добавлено: 26 окт 2017, 12:33
Felt
Да нет, я не против обычных диалпланов, никакого снобизма. Но поскольку большинство проектов уже на LUA, то и делаю на нём. Принципиальности нет, на LUA было сподручнее (всё готово, настроено, работает - нужно только добавить эту функцию).
По поводу разного количества секунд - я делал вариант, когда разница во времени сама заполнялась музыкой ожидания. Но уже не вспомню какие были проблемы: по-моему либо проигрывался один файл клиенту, либо через ChanSpy слышались голоса собеседников (если была музыка ожидания, то вряд ли через ChanSpy).
Канал Local знаком. Опции Dial читал раз на 30 за эту неделю, как пользоваться опцией A и другими понимаю. Книгу читал в бумажном виде.
Но никак не сойдутся шарики с роликами - как при поднятии трубки оператором во время входящего звонка проиграть обоим сторонам одновременно несколько разных звуковых файлов?
Re: Звонит клиент. Как ему проиграть НЕСКОЛЬКО файлов при от
Добавлено: 26 окт 2017, 13:33
ded
Одновременно - сложно. Вы писали в начале, что готовы рассмотреть последовательно. Это более соответствует реальной логике звонка, при которой есть вызывающая сторона, посылка вызова, и Answer на принимающей стороне. Когда Answer проходит - каналы бриджуются между собой, и засунуть туда Playback можно только через Chanspy.
Чую, Вы роботов программируете. Тупиковая ветвь эволюции. Особенно, когда робот с роботом будет общаться по телефону: слышать сообщения в предответном состоянии "Абонент разговаривает по другой линии...."
Рассмотрите всё же вариант последовательного воспроизведения. файлов.
Вызывающая сторона может звонить с опцией m, которая вместо музыки в ожидании будет воспроизводить operator1.wav, а вызываемая сторона слушать например customer1 после ответа
Dial(SIP/provider/9333333333,,mA(customer1))
Книгу читал в бумажном виде. а спрашиваете - воспроизведение сообщений без прослушивания вызывающим абонентов гудков как реализовать? Недочитали. И опциии команды Dial - выполнение диалплана после Answer тоже не увидели.
Re: Звонит клиент. Как ему проиграть НЕСКОЛЬКО файлов при от
Добавлено: 26 окт 2017, 13:56
fecyt
Вот смастерил такой вариант:
exten => 1,1,Set(chan=${CHANNEL})
exten => 1,n,System(echo -e "Channel: SIP/102\nCallerid: 101\nMaxRetries: 1\nRetryTime: 5\nWaitTime: 20\nContext: test2\nExtension: 1\nPriority: 100\nSet: chan=${chan}\n" > /tmp/file.call)
exten => 1,n,System(mv /tmp/file.call /var/spool/asterisk/outgoing/)
exten => 1,n,Answer()
exten => 1,n,Background(tt-monkeys)
exten => 1,n,NoOp(${chan})
exten => 1,n,Wait(5)
exten => 1,n,Hangup()
exten => 1,100,Answer()
exten => 1,n,NoOp(${chan})
exten => 1,n,Background(tt-monkeys)
exten => 1,n,Bridge(${chan},)
exten => 1,n,Hangup()
Может за основу какую то пойдет. Как раз нет ConfBridge, вместо него обычный Bridge. А там как душе угодно, можно на два контекста разбить, как делал Repz и т.д.