Частный случай такой ситуации реализован в сегодняшнем примере диалплана:
Дозванивается на внешний номер -> АТС перезванивает обратно -> набираем внутренний номер абонента -> общаемся за через исходящий с транка на АТС.
что нам потребуется:
Пара строчек диалплана, которые будут обрабатывать входящее соединение и исходящее соединение
Скрипт генерации .call файла.
И так. Первым шагом нам нужно… закончить звонок:
[callback-context]
exten => _7XXXXX.,1,Hangup
Далее вся обработка (какое слово громкое- обработка… Так… Обработочка) будет происходить в ексеншне «h» этого же контекста, так как трубку мы уже положили.
Запускаем скрипт по созданию .call файла.
exten => h,1,System(/usr/local/scripts/callback.sh ${CALLERID(num)})
Сам скрипт выглядит вот так:
#!/bin/bash callee=$1 Channel="SIP/"$callee MaxRetries=10 RetryTime=10 WaitTime=20 Context="call-to" Extension="callback" Priority=1 DATA=`date` echo "Channel: $Channel CallerId: EXTERNAL_PBX_NUM <EXTERNAL_PBX_NUM> MaxRetries: $MaxRetries RetryTime: $RetryTime WaitTime: $WaitTime Context: $Context Extension: $Extension Priority: $Priority" > /var/spool/asterisk/outgoing/$callee.call
Скрипт перезвонит тому кто вызывал АТС и после того как он поднимет трубку переведет канал в контекст call-to на extension callback для обработки:
В данном контексте мы проиграем файл приветствия и приглашения к вводу номера (для тех кто будет заниматься капипастой — имя файла кастомное. По умолчанию в Asterisk этого файла нет. Запишите свой или используйте стандартный ) будем ожидать ввода номера на который необходимо позвонить который должен состоять из — Максимум 4, ожидать мы будем 5 секунд и дадим только 1 попытку на ввод.
После ввода номера звоним на него и соединяем 2 канала в бридж функцией Dial.
[call-to]
exten => callback,1,Read(NUM,input-number,4,n,1,5)
exten => callback,n,DIAL(PJSIP/${NUM})
Таким образом мы звоним на внутренний номер не за свой счет, а за счет АТС.
P.S.
1. Для перфекционистов: Да, я не поставил ввод пинкода. сами сделайте если вам нужно (подскажу — Надо ще раз использовать функцию Read ).
1. Да, АТС не дозвонится до абонента если он сам звонил с транка за которым не закреплен номер (которому выдается динамический номер).

