Crmgo Блог

Asterisk, зворотний виклик

Asterisk, зворотний виклик

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

Asterisk, зворотний виклик

Дзвонить на зовнішній номер -> АТС передзвонює назад -> набираємо внутрішній номер абонента -> спілкуємося через вихідний з транку на АТС.

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

Таким чином ми телефонуємо на внутрішній номер не за свій рахунок, а за рахунок АТС.

Примітка: матеріал міг бути створений за підтримки ШІ з подальшою людською редакцією. Відповідальний за зміст: Dmytro Lomaka, Kaltenkirchen.