Допустим у вас есть пачка аналоговых (FXO) каналов приходящих через DAHDI.
По умолчанию все приходящие с них звонки приходят как ноунейм, то есть никакой логики построить нельзя.
Что бы логика была, надо зайти в меню Zap Channels DIDs и там просто прописать DIDы соответственно вашим каналам. Потом зайти в DAHDI Confg (модуль FreePBXа) и для нужных каналов прописать контекст from-dahdi. И все.
А дальше уже имея хоть какие то идентификационные данные можно рулить входящими вызовами.
P.S.
гыыы, решение пришло когда уже почти дописал свои диалпланы реализующие эту функциональность
))))))) глупо конечно, но никто ведь не говорил что будет легко
Added after 15 minutes:
Да, еще
после установки модуля DAHDI config в FreePBX, у вас будут переписаны все конфиги касающиеся каналов. Изначально у меня был включаемый файл dahdi_channels.conf, который включался в chan_dahdi.conf. Так вот, эта зараза все покорежила и поменял как ей удобно.
что бы все заработало как было, я добавил это файл в chan_dahdi_channels_custom.conf, но ВАЖНО!!! добавить надо только описание каналов, никаких строк типа [channels] быть не должно! а так же все что касается общего описания работы всех каналов надо прописать в файл chan_dahdi_general_custom.conf, тоже без [general] и т.п. Эти файлы включаются в chan_dahdi.conf в нужные места и там уже есть все необходимые объявления секторов конфигурации.
Могу лишь подсказать главную мысль куда смотреть.
Но вообще то я так понял в объявлении канала уже есть свое имя для каждого. Макросы freebpx работают именно с ними, в зависимости от имени канала они передают управление дальше. Там в общем то все просто, вы поиграйтесь с переменными, и поглядите что консоль астериска выводит, там все вполне понятно. Может чуть позже выложу пример макроса который разруливает каналы.
[from-dahdi]
include => from-dahdi-custom
exten => _X.,1,Set(DID=${EXTEN})
exten => _X.,n,Goto(s,1)
exten => s,1,Noop(Entering from-dahdi with DID == ${DID})
exten => s,n,Ringing()
exten => s,n,Set(DID=${IF($["${DID}"= ""]?s:${DID})})
exten => s,n,Noop(DID is now ${DID})
exten => s,n,GotoIf($["${CHANNEL:0:5}"="DAHDI"]?dahdiok:checkzap)
exten => s,n(checkzap),GotoIf($["${CHANNEL:0:3}"="Zap"]?zapok:neither)
exten => s,n(neither),Goto(from-pstn,${DID},1)
exten => s,n,Macro(Hangupcall,dummy)
exten => s,n(dahdiok),Noop(Is a DAHDi Channel)
exten => s,n,Set(CHAN=${CHANNEL:6})
exten => s,n,Set(CHAN=${CUT(CHAN,-,1)})
exten => s,n,Macro(from-dahdi-${CHAN},${DID},1)
exten => s,n,Noop(Returned from Macro from-dahdi-${CHAN})
exten => s,n,Goto(from-pstn,${DID},1)
exten => s,n(zapok),Noop(Is a Zaptel Channel)
exten => s,n,Set(CHAN=${CHANNEL:4})
exten => s,n,Set(CHAN=${CUT(CHAN,-,1)})
exten => s,n,Macro(from-dahdi-${CHAN},${DID},1)
exten => s,n,Noop(Returned from Macro from-dahdi-${CHAN})
exten => s,n,Goto(from-pstn,${DID},1)
Макро в котором устанавливается DID канала в 15 строке, в данном примере звонок пришел на 5 DAHDI канал, соответственно выбирается макро для него:
[macro-from-dahdi-5]
include => macro-from-dahdi-5-custom
exten => s,1,Noop(Entering macro-from-dahdi-5 with DID = ${DID} and setting to: 901)
exten => s,n,Set(__FROM_DID=901)
exten => s,n,Goto(from-trunk,901,1)