Вдруг кому пригодится:
Код: Выделить всё
; ********************************************************************************************************
; Точный номер того, с кем соединились, можно получить только из ${DIALEDPEERNUMBER}. Однако если Dial
; не вызывался (очередь, перехват) - то можно использовать ${BRIDGEPEER}. Правда если вдруг получится,
; что соединялись с пиром вот так: SIP/peer/NUM, то NUM не будет в BRIDGEPEER. В очереди и при перехвате
; такое соединение невозможно, только при Dial. В теории может быть так, что Dial был на одного пира,
; а соединились с другим (перехват?). Тогда не будет совпадать ${DIALEDPEERNAME} и ${BRIDGEPEER}. В этом
; случае тоже нужно использовать ${BRIDGEPEER}. Форматы:
;BRIDGEPEER=SIP/4352-00000045
;DIALEDPEERNUMBER=afiyet-m5/0500 или DIALEDPEERNUMBER=0500
;DIALEDPEERNAME=SIP/4352-00000045
; ********************************************************************************************************
; В любом случае если нету BRIDGEPEER - что-то тут не то, так что возвращаем unknown
exten => s,n,GotoIf($[${SET(PEERNUM=${IF($["${BRIDGEPEER}" = ""]?unknown:"${BRIDGEPEER}")})} = unknown]?command)
; Если BRIDGEPEER не совпадает с DIALEDPEERNAME - берём номер из BRIDGEPEER
exten => s,n,GotoIf($["${BRIDGEPEER}" != "${DIALEDPEERNAME}"]?bridgepeer)
; Если совпадают - из DIALEDPEERNUMBER
exten => s,n,Set(PEERNUM=${IF($[${REGEX("/" ${DIALEDPEERNUMBER})}]?${CUT(DIALEDPEERNUMBER,/,2)}:${DIALEDPEERNUMBER})})
exten => s,n,GotoIf($["${PEERNUM}" != ""]?command)
; Или таки из BRIDGEPEER? (Если имя пира содержит '-', то эта команда вернёт только первую его часть.
; Но '-' тут не должно быть, поскольку BRIDGEPEER должен использоваться только когда пир - локальный номер, а не транк)
exten => s,n(bridgepeer),Set(PEERNUM=${CUT(CUT(BRIDGEPEER,/,2),-,1)})
; Вызываем команду постобработки
exten => s,n(command),System(blah-blah)
Не до конца оттестировал, однако вроде у меня пока что работает. Возможно, что-то я упустил. Если кто скажет что - буду безмерно благодарен))