Подстановка caller-id и ротация номеров внутри провайдера

Администратор, 12.03.2020

Таких провайдеров не так много, например на данный момент мы можем подтвердить, что такую услугу предоставляет Powertelecom, и частично МТТ. 
Хотим представить вашему вниманию диалплан на астериск, где предполагается, что система будет спрашивать какой caller-id вы хотите подставить, и в случае, если он 11 символов, отправит его на вызов в провайдера: 

exten => _9XXXX.,1,NoOp(Outgoing call from operator ${CALLERID(num)} to company ${EXTEN:1})

same => n,Answer()

same => n,NoOp(lets change callerid)

same => n,Playback(/var/lib/asterisk/sounds/input)

same => n(again),Read(CLIENT-CALLERID,,11)

same => n,GotoIF($["${LEN(${CLIENT-CALLERID})}"="11"]?:again)

same => n,NooP(CHECK CALLERID ${CLIENT-CALLERID:1}"="${EXTEN:2}")

same => n,GotoIF($["${CLIENT-CALLERID:1}"="${EXTEN:2}"]?again:)

same => n,Set(CALLERID(num)=${CLIENT-CALLERID})

same => n,Dial(SIP/powertelecom/${EXTEN:1},60,T)

same => n,Hangup()


Также вам будет интересен другой вариант, где нужно не вводить самому желаемый caller-id, а система сама выбирала из доступных номеров:

Создадим в /etc/asterisk/scripts/callerid.py следующего содержания: 

import random

numberslist = ['444', '333', '123', '456', '789', '789', '789', '789', '789', '789', '789', '789', '789', '789', '789', '789', '789', '789', '789', '789' ]

print(numberslist[random.randint(0,(len(numberslist)-1))])

Где вы вместо трехзначных цифр вы сможете подставить свои номера для отправки caller-id в провайдера.

Затем в диалплане asterisk добавим следующую строку при наборе номера:

exten => _XXX.,n,Set(CALLERID(num)=${SHELL(python3 /etc/asterisk/sctripts/callerid.py)})


Все успешно будет работать, благодарим за внимание.