VIDEOCHAT  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

GotoIf - как сравнить MESSAGE(from)

Новичком считается только что прочитавший «Астериск - будущее телефонии»
http://asterisk.ru/knowledgebase/books
и пытающийся сделать большее

Модераторы: april22, Zavr2008

Ответить
Uhoh
Сообщения: 2
Зарегистрирован: 02 янв 2024, 13:13

GotoIf - как сравнить MESSAGE(from)

Сообщение Uhoh »

Всем привет!

Настраиваю получение SMS через многоканальный goip-шлюз на Asterisk 21.2.0 (PJSIP). Мой вариант goip (старая железка) отправляет SMS со всех каналов на один и тот же номер, при этом в поле MESSAGE(from) можно увидеть конкретный номер линии, куда пришла SMS:

<sip:goip8-L01@192.168.0.100>
<sip:goip8-L02@192.168.0.100>
<sip:goip8-L03@192.168.0.100>
и т.д. Тут значимыми являются именно L01, L02 и т.д - т.е. номер GSM-канала, куда прилетела SMS.

Я хочу непосредственно в Dialplan, по значению MESSAGE(from) - в зависимости от того, на какой канал пришла SMS - делать определенные действия (например, перенаправлять SMS в ту или другую сторону). Идея была использовать GotoIf, типа такого:

Код: Выделить всё

same = n,GotoIf($[${MESSAGE(from)}==<sip:goip8-L01@192.168.0.100>]?8-L01)
same = n,GotoIf($[${MESSAGE(from)}==<sip:goip8-L02@192.168.0.100>]?8-L02)

Затык в том, что это дает мне ошибку:

Код: Выделить всё

[Jun  4 13:40:47] WARNING[1204][C-00000002]: ast_expr2.fl:468 ast_yyerror: ast_yyerror():  syntax error: syntax error, unexpected '<', expecting $end; Input:
<sip:goip8-L02@192.168.0.100>==<sip:goip8-L02@192.168.0.100>
^
[Jun  4 13:40:47] WARNING[1204][C-00000002]: ast_expr2.fl:472 ast_yyerror: If you have questions, please refer to https://docs.asterisk.org/Configuration/Dialplan/Variables/Channel-Variables/
Т.е. Asterisk'у не нравятся скобки <>, соответственно сравнения не происходит и GotoIf не работает так, как от него ожидалось.

Подскажите, как правильно прописать сравнение в dialplan'е ?

Заранее спасибо за ответы!
Glukinho
Сообщения: 661
Зарегистрирован: 07 янв 2011, 20:05

Re: GotoIf - как сравнить MESSAGE(from)

Сообщение Glukinho »

Во-первых, при сравнении строк внутри $[ ] нужно каждую часть оборачивать в кавычки.
Во-вторых, оператор сравнения в диалплане - это один знак равенства = , а не двойной ==

Как-то так получается:

Код: Выделить всё

same = n,GotoIf($[ "${MESSAGE(from)}" = "<sip:goip8-L01@192.168.0.100>" ]?8-L01)
Uhoh
Сообщения: 2
Зарегистрирован: 02 янв 2024, 13:13

Re: GotoIf - как сравнить MESSAGE(from)

Сообщение Uhoh »

Йесссс! Работает, спасибо большое!
Кучу вариантов перепробовал, а самый очевидный как-то от меня ускользнул... :)

Спасибо еще раз!!!
Ответить
© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH