VIDEOCHAT  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

Звонит клиент. Как ему проиграть НЕСКОЛЬКО файлов при ответе

Проблемы Asterisk без вэб-оболочек и их решения

Модераторы: april22, Zavr2008

Felt
Сообщения: 66
Зарегистрирован: 25 фев 2017, 15:52

Re: Звонит клиент. Как ему проиграть НЕСКОЛЬКО файлов при от

Сообщение Felt »

ded писал(а):Одновременно - сложно. Вы писали в начале, что готовы рассмотреть последовательно. Это более соответствует реальной логике звонка, при которой есть вызывающая сторона, посылка вызова, и Answer на принимающей стороне. Когда Answer проходит - каналы бриджуются между собой, и засунуть туда Playback можно только через Chanspy.
Чую, Вы роботов программируете. Тупиковая ветвь эволюции. Особенно, когда робот с роботом будет общаться по телефону: слышать сообщения в предответном состоянии "Абонент разговаривает по другой линии...."
Рассмотрите всё же вариант последовательного воспроизведения. файлов.
Вызывающая сторона может звонить с опцией m, которая вместо музыки в ожидании будет воспроизводить operator1.wav, а вызываемая сторона слушать например customer1 после ответа
Dial(SIP/provider/9333333333,,mA(customer1))

Книгу читал в бумажном виде. а спрашиваете - воспроизведение сообщений без прослушивания вызывающим абонентов гудков как реализовать? Недочитали. И опциии команды Dial - выполнение диалплана после Answer тоже не увидели.
Последовательно хуже, но тоже устроит. Но последовательно не так, что клиент дозвонился и ему сразу Answer и Playback (с такой реализацией у меня проблем нет, всё линейно).
А последовательно в том смысле, что только после поднятия трубки оператором проиграть оператору несколько файлов и уже только после этого поднять трубку клиента и ему проговорить несколько других файлов. Именно так последовательно.

Это в частности сэкономит деньги на 8-800, т.к. чем короче разговор, тем лучше (сразу поднимать трубку нам дорого). В том числе поэтому не подойдет опция m.
К тому же для каждого клиента файлы разные и хочется более прямого способа воспроизводить, чем MOH'ом. Да и MOH прервётся как только оператор соединится неизвестно через какое время. Не то в общем.
Последний раз редактировалось Felt 26 окт 2017, 14:51, всего редактировалось 1 раз.
ded
Сообщения: 15629
Зарегистрирован: 26 авг 2010, 19:00

Re: Звонит клиент. Как ему проиграть НЕСКОЛЬКО файлов при от

Сообщение ded »

fecyt писал(а):А только после того, как оператор поднял трубку - тогда проиграть оператору несколько файлов и только после этого поднять трубку клиента и ему проговорить несколько других файлов. Именно так последовательно.
Я думал Вы читаете то что пишу:
ded писал(а):Вызывающая сторона может звонить с опцией m, которая вместо музыки в ожидании будет воспроизводить operator1.wav, а вызываемая сторона слушать например customer1 после ответа
Dial(SIP/provider/9333333333,,mA(customer1))

Книгу читал в бумажном виде. а спрашиваете - воспроизведение сообщений без прослушивания вызывающим абонентов гудков как реализовать? Недочитали. И опциии команды Dial - выполнение диалплана после Answer тоже не увидели.
Felt
Сообщения: 66
Зарегистрирован: 25 фев 2017, 15:52

Re: Звонит клиент. Как ему проиграть НЕСКОЛЬКО файлов при от

Сообщение Felt »

Поднятия трубки оператором может вообще не произойти по многим причинам.
Не подходит сразу же автоматом поднимать трубку клиенту без готовности оператора. Нужно именно по поднятию трубки оператором.
Felt
Сообщения: 66
Зарегистрирован: 25 фев 2017, 15:52

Re: Звонит клиент. Как ему проиграть НЕСКОЛЬКО файлов при от

Сообщение Felt »

ded писал(а):
Felt писал(а):Диалплан на LUA,
Пожалуйста, отвяжитесь Вы от LUA!
Если владеете С++ то в сторону бейсика уже гордость не позволяет смотреть? Исполнение диалплана пошагово - это тот же бейсик. Почитайте вы уже про все опции команды Dial! Ичто такое канал Local, в которм вызываем последовательное выполнение любых команд - Playback, Background (желательно без макросов!).
Проверил ваш первоначальный вариант без LUA, на чистом extensions.conf. Выдаёт 1 в 1 как на LUA, соединение происходит сразу, никому ничего не говорится.

dialplan show 50@talk_op

Код: Выделить всё

[ Context 'talk_op' created by 'pbx_config' ]
  '_.' =>           1. noop(talk_op)                              [pbx_config]
                    2. Dial(SIP/50,,A(tt-monkeys))                [pbx_config]
Пробовал и так:
dialplan show 50@talk_op

Код: Выделить всё

[ Context 'talk_op' created by 'pbx_config' ]
  '_.' =>           1. noop(talk_op)                              [pbx_config]
                    2. Dial(SIP/provider/9333333333,,A(tt-monkeys)) [pbx_config]

test.call копируется в момент поднятия трубки. 100% копируется, в логах есть запись (в остальном лог повторяется как был прежде).
Felt
Сообщения: 66
Зарегистрирован: 25 фев 2017, 15:52

Re: Звонит клиент. Как ему проиграть НЕСКОЛЬКО файлов при от

Сообщение Felt »

Я помню про ваше описание происходящего и сейчас как раз занят тестированием вашей идеи с бриджеванием :)
Просто нужно было выполнить все предыдущие тесты до конца и проверить не на LUA, а на классике.
ded
Сообщения: 15629
Зарегистрирован: 26 авг 2010, 19:00

Re: Звонит клиент. Как ему проиграть НЕСКОЛЬКО файлов при от

Сообщение ded »

вариант без LUA, на чистом extensions.conf проверяется командой dialplan show 50@talk_op, и видно визуальное его выполнение, особенно с опциями core set verbose 10 и debug.
а на LUA - нет.
Чую, роботов автообзвонщиков пишете - грех это, не будет вам щастья.
Felt
Сообщения: 66
Зарегистрирован: 25 фев 2017, 15:52

Re: Звонит клиент. Как ему проиграть НЕСКОЛЬКО файлов при от

Сообщение Felt »

Полностью согласен про dialplan show. Правда там и так по одной строчке в контексте, чего уж проверять. Но согласен :)

Да не роботов. У нас интеграция с 2ГИС, 1С, Redmine и Яндекс.Спич, нужно произнести обоим сторонам некоторый набор разной составной информации (почти вся речевка уже закэширована, но иногда подгружаем новые фразы и названия новых звонящих организаций). У нас сейчас так работает уже года полтора-два, очень удобно, всем нравится. Но приходится склеивать в один файл, вот это мне надоело, решил найти способ произносить несколько файлов. Заодно набраться нового экспириенса и сделать левел ап :)

P.S. А робот-обзвонщик проще простого - посылаешь из крутящегося демона по AMI команду (или создаешь call-файл), при ответе жертвы в контексте написал background и потом playback на нажатия разных кнопок с последующим dial оператору. Для автообзвона сложнее нормальный интерфейс управления сделать, чем 10 строчек в Астериске!
Кстати, для такого робота есть и мирный атом - мы оповещаем наших клиентов о готовности их заказа с возможностью кнопками выбрать доставку до дома, соединиться с оператором и т.д. Менеджеры не тратят дорогое время на то, что можно автоматизировать (задача в Редмайне закрылась - звонок сам пошёл клиенту).

Только сейчас понял о каких роботах вы толкуете. Всё не мог понять почему вы роботы да роботы :) Уверяю вас, не роботы. Прединформатор при входящем добровольном звонке клиента оператору техподдержки, да и менеджерам тоже нравится.
Felt
Сообщения: 66
Зарегистрирован: 25 фев 2017, 15:52

Re: Звонит клиент. Как ему проиграть НЕСКОЛЬКО файлов при от

Сообщение Felt »

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 и т.д.
Чувствую себя каким-то криворуким - пробую все ваши идеи и ни одна не работает.

Я правда не понял идею использовать пример в прямом виде - в прямом виде клиенту отвечалось автоматически, даже если оператор уже давно ушел домой. Модифицировал до того вида, который ниже.

В этом варианте оператору проигрывают речевку после поднятия трубки, но потом сразу соединят с клиентом (клиенту ничего не говорят).
После разговора оператору поступает еще один звонок и еще раз проигрывается речевка и разговор оканчивается. После этого поступает еще один звонок и так бесконечно! :)
Эта рекурсия собственно видна - вместо перехода к каналу клиента мы вызываем еще один канал оператора (если в Channel указывать канал клиента, то независимо от формата ничего полезного не происходит):

Код: Выделить всё

[incoming]
exten => _X.,1,dial(SIP/50,,M(test-dial-takeup))

[macro-test-dial-takeup]
exten => s,1,Set(chan=${CHANNEL})
 same => n,System(echo "Channel: SIP/50\nMaxRetries: 1\nRetryTime: 5\nWaitTime: 20\nContext: test\nExtension: 1\nPriority: 100\nSet: chan=${chan}\nArchive: yes\n" > /tmp/file.call)
 same => n,System(mv /tmp/file.call /var/spool/asterisk/outgoing/)
 same => n,Answer()
 same => n,Background(hello)

[test]
exten => 1,100,Answer()
 same => n,Background(tt-monkeys)
 same => n,Bridge(${chan},)
Пробовал и с Hangup, но тоже ничего хорошего не вышло.
Снова зашел в тупик. Есть клиент, висит на линии, его канал известен - как в его канал что-то проиграть?
fecyt
Сообщения: 148
Зарегистрирован: 17 янв 2017, 17:51

Re: Звонит клиент. Как ему проиграть НЕСКОЛЬКО файлов при от

Сообщение fecyt »

Эх даже не стали разбираться зачем нужна переменная chan. Остальное наверно тоже не адаптировали.
Есть вариант еще один, использовать G.
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER:
G([[context^]exten^]priority): If the call is answered, transfer
the calling party to the specified <priority> and the called party to
the specified <priority> plus one.
NOTE: You cannot use any additional action post answer options in
conjunction with this option.
И в контексте проигрывать обоим сообщения, затем бриджевать. Удачи в написании логики и кода.
Felt
Сообщения: 66
Зарегистрирован: 25 фев 2017, 15:52

Re: Звонит клиент. Как ему проиграть НЕСКОЛЬКО файлов при от

Сообщение Felt »

С chan я по-разному игрался, просто не выкладывать же все 20 вариантов.
В частности пробовал и так:

Код: Выделить всё

[incoming]
exten => _X.,1,Set(__chan=${CHANNEL})
 same => n,dial(SIP/50,,M(test-dial-takeup))
Тогда в chan в макросе поднятия трубки оператором приходит канал клиента, всё отлично. Именно в этот канал и требуется проиграть звуки клиенту!
Но так вообще ругается - мол не буду звонить из call-Файла по кривому каналу с тире (например, SIP/9333333333-00000175). Даже если вместо chan указывать SIP/9333333333 или SIP/provider/9333333333 - не происходит соединения (и правильно, т.к. с клиентским номером SIP/provider/9333333333 может быть множество разговоров, например, если 9333333333 многоканальный).

G попробую (немного смущает NOTE: You cannot use any additional action post answer options in conjunction with this option).
Ответить
© 2008 — 2025 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH