Crmgo Blog

Asterisk, połączenie zwrotne

Asterisk, połączenie zwrotne

Dzwoni na numer zewnętrzny -> PBX oddzwania -> wybieramy numer wewnętrzny abonenta -> rozmawiamy przez połączenie wychodzące z trunka do PBX. czego będziemy potrzebować: Kilka linii dialplanu, które będą obsługiwać połączenie przychodzące i wychodzące. Skrypt generujący plik .call.

Asterisk, połączenie zwrotne

Dzwoni na numer zewnętrzny -> ATR dzwoni z powrotem -> wybieramy numer wewnętrzny abonent -> rozmawiamy przez połączenie wychodzące z trunka do ATR.

co będzie nam potrzebne:
Kilka linii dialplanu, które będą obsługiwać połączenie przychodzące i wychodzące
Skrypt generujący plik .call.

I tak. Pierwszym krokiem musimy… zakończyć rozmowę:

[callback-context]
exten => _7XXXXX.,1,Hangup

Dalej cała obsługa (jakie słowo duże - obsługa... Tak... Obsługiwka) będzie odbywać się w rozszerzeniu „h” tego samego kontekstu, ponieważ słuchawkę już odłożyliśmy.
Uruchamiamy skrypt tworzący plik .call.

exten => h,1,System(/usr/local/scripts/callback.sh ${CALLERID(num)})

Sam skrypt wygląda następująco:

#!/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

Skrypt oddzwoni do tego, kto zadzwonił do ATR i po tym, jak on podniesie słuchawkę, przeniesie kanał do kontekstu call-to na rozszerzenie callback w celu obsługi:
W tym kontekście odtworzymy plit powitalny i zaproszenie do wprowadzenia numeru (dla tych, którzy będą zajmować się kapipastą - nazwa pliku jest niestandardowa. Domyślnie w Asterisk nie ma tego pliku. Zapisz swój lub użyj standardowego ) będziemy oczekiwać wprowadzenia numeru, na który należy zadzwonić, który powinien składać się z - Maksymalnie 4, oczekiwać będziemy 5 sekund i damy tylko 1 próbę wprowadzenia.

Po wprowadzeniu numeru dzwonimy na niego i łączymy 2 kanały w bridge za pomocą funkcji Dial.

[call-to] exten => callback,1,Read(NUM,input-number,4,n,1,5) exten => callback,n,DIAL(PJSIP/${NUM})

W ten sposób dzwonimy na numer wewnętrzny nie za nasz koszt, ale za koszt ATR.

Uwaga: wpis mógł powstać z pomocą AI i redakcji. Odpowiedzialny: Dmytro Lomaka, Kaltenkirchen.