Необходимо их различать.
Что бы различать в cdr, можно задействовать доп поле userfield
1500 - допустим внутренний номер оператора
*220 - номер по которому операторы меняют свое имя каждое утро, можно добавить проверку что бы они не забывали это делать.
[app-register-operator]
exten => _*220,1,Answer
same => n,Noop(-------app-register-operator----)
same => n,Set(MYPIN=NOPIN)
same => n,Read(${MYPIN},enterPin,,,4,15)
same => n,Goto(go-${MYPIN})
same => n(go-2232,Noop(------register-ping-${MYPIN}------)
same => n,Set(DB(AOPERATOR/1500)="Operator1")
same => n,HangUP()
same => n(go-3321),Noop(------register-ping-${MYPIN}------)
same => n,Set(DB(AOPERATOR/1500)="Operator2")
same => n,HangUP()
same => n(go-NOPIN),Noop(------register-ping-${MYPIN}------)
same => n,Set(DB(AOPERATOR/1500)="NotSet")
same => n,HangUP()
[dial]
exten => _X.,1,Noop(----Internal-Call----)
same => n,GotoIf($[${DB(AOPERATOR/${CALLERID(num)})}= NotSet]?:go-notset)
same => n,Set(CDR(userfield)=${DB(AOPERATOR/${CALLERID(num)})}) ;; добавляем в CDR имя в специальное поле в DB cdr, или любое другое поле
same => n,Dial(SIP/${EXTEN})
same => n,HangUp()
same => n(go-notset),PlayBack(phoneNotRegister_PleaseRegisterBeforeCall)
same => n,HangUp()
Добавить задание в крон которое будет скидывать значение после работы
asterisk -rx "database put AOPERATOR 1500 NotSet"
Через SIP можно заставить телефон перезагрузиться, соответственно написать app который будет по короткому номеру генерить новый конфиг для телефона и отправлять ему команду reboot.
/etc/asterisk/sip_notify.conf