!порядковый! номер канала
Добавлено: 27 фев 2011, 00:27
Добрый день!
Кто-нибудь знает приемы или штатные функции как в диалплане получить порядковый номер активного канала в sip-транке? Поделитесь опытом, пожалуйста! На форуме и в нете искал - результат отрицательный.
Реализован простенький автоответчик, который принимает звонок, проигрывает приветствие и записывает результат в файл (большего и не надо). Входящие поступают с сип-транка толщиной в 20 каналов. Транк позвязан на один многоканальный городской индекс.
Возникла необходимость сохранять порядковый номер канала по которому пришел вызов.
Решения более простого чем хранить 20 глобальных переменных (или ключей в БД) я не нашел. Таоке решение требует дополнительной (и сложноватой для диалплана) логики.
В качестве временной меры использую количество активных в данный момент каналов, которые считаю самостоятельно в начале и в конце дилплана простым инкрементом и декрементом. Пробовал использовать группы, но с ними возникает сложность при обращении к ним из AMI.
С переменными тоже проблемы: во-первых ICN отражает не совсем то, что хотелось бы, а во-вторых, раз на 5-10 тыс. входящих счетчик сбивается и получается что при отсутствии входящих ICN=1 ... и это при двух простых командах инкремента и декремента счтетчика, трудно представить как же будет сбиватся многопотоковый астериск при обработке 20 переменных в 20 строках диалплана
Вресия астериска 1.6
Диалплан приводится:
Кто-нибудь знает приемы или штатные функции как в диалплане получить порядковый номер активного канала в sip-транке? Поделитесь опытом, пожалуйста! На форуме и в нете искал - результат отрицательный.
Реализован простенький автоответчик, который принимает звонок, проигрывает приветствие и записывает результат в файл (большего и не надо). Входящие поступают с сип-транка толщиной в 20 каналов. Транк позвязан на один многоканальный городской индекс.
Возникла необходимость сохранять порядковый номер канала по которому пришел вызов.
Решения более простого чем хранить 20 глобальных переменных (или ключей в БД) я не нашел. Таоке решение требует дополнительной (и сложноватой для диалплана) логики.
В качестве временной меры использую количество активных в данный момент каналов, которые считаю самостоятельно в начале и в конце дилплана простым инкрементом и декрементом. Пробовал использовать группы, но с ними возникает сложность при обращении к ним из AMI.
С переменными тоже проблемы: во-первых ICN отражает не совсем то, что хотелось бы, а во-вторых, раз на 5-10 тыс. входящих счетчик сбивается и получается что при отсутствии входящих ICN=1 ... и это при двух простых командах инкремента и декремента счтетчика, трудно представить как же будет сбиватся многопотоковый астериск при обработке 20 переменных в 20 строках диалплана
Вресия астериска 1.6
Диалплан приводится:
Код: Выделить всё
exten => ${GLOBAL(NUM)},1,Set(GLOBAL(ICN)=${MATH(${GLOBAL(ICN)}+1)})
exten => ${GLOBAL(NUM)},n,Set(CN=${GLOBAL(ICN)})
exten => ${GLOBAL(NUM)},n,Answer
exten => ${GLOBAL(NUM)},n,Wait(1)
exten => ${GLOBAL(NUM)},n,Playback(${GLOBAL(HP)}${GLOBAL(ADP)}service/greeting,skip)
exten => ${GLOBAL(NUM)},n,Set(FileName=${STRFTIME(${EPOCH},,%Y-%m-%d-%H-%M-%S)}-${IF($[${CN}<10]?0${CN:0:1}:${CN:0:2})}-${CALLERID(num)})
exten => ${GLOBAL(NUM)},n,Record(${GLOBAL(HP)}${GLOBAL(ADP)}tmp/${FileName}:wav,0,90,skip)
exten => ${GLOBAL(NUM)},n,Hangup
exten => h,1,ExecIf($["${FileName}"!=""]?System(mv ${GLOBAL(HP)}${GLOBAL(ADP)}tmp/${FileName}.wav ${GLOBAL(HP)}${GLOBAL(ADP)}vrs/))
exten => h,n,Set(GLOBAL(ICN)=${MATH(${GLOBAL(ICN)}-1)})