Дзвонить на зовнішній номер -> АТС передзвонює назад -> набираємо внутрішній номер абонента -> спілкуємося через вихідний з транку на АТС.
що нам потрібно:
Пара рядків діалплану, які будуть обробляти вхідне з'єднання та вихідне з'єднання
Скрипт генерації .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})
Таким чином ми телефонуємо на внутрішній номер не за свій рахунок, а за рахунок АТС.
