Friday, July 29, 2011

FreePBX, настройка outbound callerid.

Возникла необходимость, на сервере Asterisk с FreePBX версии 2.9, добавлять к исходящему Cellerid еще две циферки впереди.
Т.е. к примеру у нас екстеншн с номером 456555, при звонке в сеть пстн провайдера необходимо что бы вызов был от номера 33456555. Где 33 - префикс города. Т.е. на всех номерах должен добавляться этот самый 33. Конечно можно в настройках екстеншина указывать вручную callerID. Но это как-то лениво, и иногда можно просто напросто забыть это сделать.
Потому делаем смело следующее
1 редактируем extensions_override_freepbx.conf
nano /etc/asterisk/extensions_override_freepbx.conf

по умолчанию, файл пуст, добавляем туда следующие строки


include => macro-outbound-callerid-custom
exten => s,1,ExecIf($["${CALLINGPRES_SV}" != ""]?Set(CALLERPRES()=${CALLINGPRES_SV}))
exten => s,n,ExecIf($["${REALCALLERIDNUM:1:2}" = ""]?Set(REALCALLERIDNUM=33${CALLERID(number)}))
exten => s,n(start),GotoIf($[ $["${REALCALLERIDNUM}" = ""] | $["${KEEPCID}" != "TRUE"] | $["${OUTKEEPCID_${ARG1}}" = "on"] ]?normcid)
exten => s,n,Set(USEROUTCID=${REALCALLERIDNUM})
exten => s,n,GotoIf($["foo${DB(AMPUSER/${REALCALLERIDNUM}/device)}" = "foo"]?bypass)
exten => s,n(normcid),Set(USEROUTCID=${DB(AMPUSER/${AMPUSER}/outboundcid)})
exten => s,n(bypass),Set(EMERGENCYCID=${DB(DEVICE/${REALCALLERIDNUM}/emergency_cid)})
exten => s,n,Set(TRUNKOUTCID=${OUTCID_${ARG1}})
exten => s,n,GotoIf($["${EMERGENCYROUTE:1:2}" = "" | "${EMERGENCYCID:1:2}" = ""]?trunkcid)
exten => s,n,Set(CALLERID(all)=${EMERGENCYCID})
exten => s,n(exit),MacroExit()
exten => s,n(trunkcid),ExecIf($[${LEN(${TRUNKOUTCID})} != 0]?Set(CALLERID(all)=${TRUNKOUTCID}))
exten => s,n(usercid),ExecIf($[${LEN(${USEROUTCID})} != 0]?Set(CALLERID(all)=${USEROUTCID}))
exten => s,n,ExecIf($[${LEN(${TRUNKCIDOVERRIDE})} != 0 | ${LEN(${FORCEDOUTCID_${ARG1}})} != 0]?Set(CALLERID(all)=${IF($[${LEN(${FORCEDOUTCID_${ARG1}})}=0]?${TRUNKCIDOVERRIDE}:${FORCEDOUTCID_${ARG1}})}))
exten => s,n(hidecid),ExecIf($["${CALLERID(name)}"="hidden"]?Set(CALLERPRES()=prohib_passed_screen))


Где вписываем нужный нам префикс для перед CallerID.
Сохраняем и делаем релоад конфига в растериске:

config reload /etc/asterisk/extensions_additional.conf

Делаем тестовый звонок - и уррраааа!!!!  У нас добавляется волшебный номер 33.)))

Теперь задачка усложнится, нужно проверить если чел звонит на международку, то тогда нужно добавлять код страны и горда что-то типо 456 33. Где 456 код страны. :)

Гуглим...

Нагуглил! :)
В этом же файле добавляю строку вида

exten => s,n,ExecIf($["${DIAL_NUMBER:0:2}" = "00"]?Set(REALCALLERIDNUM=45633${CALLERID(number)}))
Т.е. мы проверяем, если номер содержит вначале 00, тогда добавляем 45633 к CallerId.

Добавляем её после строки 

exten => s,n,ExecIf($["${REALCALLERIDNUM:1:2}" = ""]?Set(REALCALLERIDNUM=33${CALLERID(number)}))