Пожалуйста, войдите здесь. Часто задаваемые вопросы О нас
Задайте Ваш вопрос

Определение и запоминание входящего номера Asterisk

0

Каким образом можно заставить Астериск запоминать входящий номер (хотя бы только внутренних абонентов), чтобы потом его использовать как переменную? Суть такова:

[internal_custom]
exten =>_1XX,1,Dial(SIP/${foo}${EXTEN})

Нужно, чтобы какая-либо команда принимала номер звонящего, отсекала последние три цифры от него и остальное было бы значением для переменной foo. Например: при звонке с 3104, переменная будет 3, при звонке с 54108, переменная будет 54 и т.п.

удалить закрыть спам изменить тег редактировать

спросил 2013-08-17 10:17:06 +0400

Janealter Gravatar Janealter
37 2 3

обновил 2013-08-19 10:15:20 +0400

Olpag Gravatar Olpag
1884 3 4 29

2 Ответа

1

Set(foo=${CALLERID(num):1:-3})

в букварях по астериску это примерно на букву 'Б'

ссылка удалить спам редактировать

ответил 2013-08-17 11:50:13 +0400

komrad123 Gravatar komrad123
3780 5 3 42

обновил 2013-08-17 11:51:39 +0400

Comments

Спасибо большое) По поводу букваря намек понял, "Asterisk: Будущее телефонии" уже взял на прочтение =)

Janealter ( 2013-08-17 13:26:48 +0400 )редактировать

Еще не помешает при Dial сначала проверить а foo не пустой ли)

Zavr2008 ( 2013-08-22 17:46:29 +0400 )редактировать

Уже все настроил =) И NoOp на foo имеется)

Janealter ( 2013-08-26 23:47:47 +0400 )редактировать
0

callerid(num) ?

ссылка удалить спам редактировать

ответил 2013-08-17 12:08:08 +0400

OleSv Gravatar OleSv
71 1

Comments

То, что написал komrad123 дает нулевой результат. Придумал такой код. По-другому заставить Астериск отрубать 3 последние цифры у любого номера не смог. Теперь и у 4-х, и у 5-ти значных номеров остаются только первые 1, 2 и т.п. цифры =)

exten =>1XX,1,Set(foo=${CALLERID(num)}) exten =>1XX,2,Set(foo2=$[{LEN(${foo})}-3]) exten =>_1XX,3,Dial(SIP/${CALLERID(num):0:${foo2}}${EXTEN})

Janealter ( 2013-08-17 20:32:43 +0400 )редактировать

"То, что написал komrad123 дает нулевой результат...." Вы имеете ввиду буквари по астериску? А так работает?

Set(foo=${CALLERID(num):-3})

Olpag ( 2013-08-19 09:54:05 +0400 )редактировать

Смищно =) Нет, не работает и не будет. Чтобы вы лучше понимали ситуацию, приложу описание подстрок.

${foo:offset:length}

  • Если значение offset отрицательное, то смещение будет отсчитываться не от начала строки, а от ее конца.
  • Если значение length пропущено или отрицательное, то размер возвращаемой строки не ограничивается и будет возвращена вся строка, начиная со смещения offset.

Т.е. Set(foo=${CALLERID(num):-3}) будет давать смещение с конца на три символа. Например при CallerID 2101 с таким смещением переменная будет равняться 101.

Janealter ( 2013-08-19 11:47:42 +0400 )редактировать

может у нас астериски с разных планет

grep 622 tests.conf

exten => 622,1,NoOp(${CALLERID(num)})

exten => 622,2,NoOp(${CALLERID(num):0:-3})

exten => 622,3,NoOp(${CALLERID(num):0:-2})

== Using SIP RTP CoS mark 5

-- Executing [622@sip_lines:1] NoOp("SIP/i-mbl-00000033", "2501") in new stack

-- Executing [622@sip_lines:2] NoOp("SIP/i-mbl-00000033", "2") in new stack

-- Executing [622@sip_lines:3] NoOp("SIP/i-mbl-00000033", "25") in new stack
komrad123 ( 2013-08-19 11:59:16 +0400 )редактировать

Вы в начале написали Set(foo=${CALLERID(num):1:-3}). С единицей вместо нуля =) Я это проверял, и естественно это не подошло. С нулем сейчас проверил, и с NoOp действительно работает. А я сидел и придумывал кусок кода с LEN и математической функцией =)

Janealter ( 2013-08-19 12:35:18 +0400 )редактировать

Дело в том, что имеется неточность в описании подстрок:

Если значение length пропущено или отрицательное, то размер возвращаемой строки не ограничивается и будет возвращена вся строка, начиная со смещения offset.

На самом деле, когда lenght пропущено, то размер действительно не ограничивается, а когда отрицательное, то длина отсчитывается с конца. Именно поэтому я, понадеясь на описание, не стал сам эксперементировать с минусовым lenght.

Janealter ( 2013-08-19 12:46:27 +0400 )редактировать

Ваш ответ

Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!
[скрыть предварительный просмотр]

Закладки и информация

Добавить закладку

подписаться на rss ленту новостей

Статистика

Задан: 2013-08-17 10:17:06 +0400

Просмотрен: 875 раз

Обновлен: Aug 19 '13

Похожие вопросы:

Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией GNU GPL.