Как пустить голосовое приветствие в канал но не дать ответ 200 SIP пока второй канал не поднимет трубку?
Имеется сложный продукт в котором используется следующая схема:
- Сервер соединен с телефонным провайдером по стандартному SIP потоку через авторизацию
- На самом серваке крутится астериск в хостовой системе и несколько виртуалок с своим телефонным сервером и бизнеслогикой.
- В зависимости от номера цели астериск в хостовой системе определяет на какую виртуалку завернуть поток.
- На интересующей нас виртуалке находится freeswitch который через AGI соединен с нашим приложением написаном на Ruby и общающимся через Adhearsion.
Потому входящий звонок проходит следующую цепочку:
После чего Ruby согласно бизнеслогике определяет куда должен идти звонок и по какой схеме он должен реализовываться, а в это время звонившему проигрывается голосовое приветствие.
В некоторых случаях просто проигрывается голосовое приветствие и в зависимости от действий звонившего будет выбран маршрут и цель звонка.
Суть проблемы в том что до того как мы проигрываем звонившему в SIP канал уходит код SIP 200 после которого оператор начинает тарифицировать звонок.
Необходимо: найти решение когда при проигрывании голосового приветствия мы не отправляем код SIP 200, но при этом после действия звонившего мы набираем вторую цель и как только она снимает трубку, мы шлем команду SIP 200
Для начала не совсем понятно на каком отрезке соединения и в какой момент это делать.
Считаю что логично это рулить на уровне приложения через Adhearsion, но не уверен что он способен этим рулить, по крайней мере не нашел такого в функциях.
UPD.:
проблема в том что тарификация на входящий вызов - 2 евро минута
и пока клиент слушает приветствие и делает действия не хочется облагать его таким тарифом
смысл - тарифицировать лишь его общение с целью
Предполагаю, что до ответа 200 ваш провайдер не соединит голосовые RTP-каналы и абонент на той стороне получит только статус RINGING и будет слышать только сигнал вызова.
Also etwas so:
same => n,Playback(demo-nogo,noanswer) ;->183 Session Progress
same => n,Answer ; -> 200 OK
но это при использовании лишь астериска, а у меня кроме него еще и мой продукт, который юзает Adhearsion и не уверен что я могу на уровне команд Adhersion рулить этими кодами в командах
проблема в том что тарификация на входящий вызов - 2 евро минута
и пока клиент слушает приветствие и делает действия не хочется облагать его таким тарифом
смысл - тарифицировать лишь его общение с целью
Ну вы не по адресу обратились. Здесь вам никто не подскажет. А разработка и реализация ваших хотелок обойдется по деньгам гораздо дороже чем 2 евро минута. Так что лучше ищите провайдера телефонии без поминутной тарификации. Проще будет.
суть в том что проект зарабатывает на входящих звонках.
деньги по европе снимает телефонный оператор имеющий линии в разных странах
в каждой стране своя тарификация
и суть в том что не хочется чтоб пока клиент будет "слушать радио", оператор считал его деньги.
а почему Вы решили что тут никто не подскажет - вроде серьезный ресурс и не раз находил решение проблем с которыми столкнулся.