Страница 1 из 1

многострочные переменные в asterisk

Добавлено: 27 янв 2014, 12:22
d771
Здравствуйте!
Никак не могу найти информацию о многострочных переменных в asterisk.

Точнее, я просто использую SendText(), и хочу послать сообщение с переводом строки.
Т.е. примерно как printf "test1\ntest2\n".
Но по приходу сообщения на клиент символ "\" вырезается. Пробовал \\n, \n, и даже <br>.
В клиенте, я, правда тоже не уверен, может и он вырезает, но информации по этому поводу вообще не нашел.
Asterisk 1.8.24.0, клиент csipsimple на android.

Re: многострочные переменные в asterisk

Добавлено: 27 янв 2014, 13:10
Glukinho
Сталкивался с проблемой, надо было послать письмо по email во много строк.
Крутил по-всякому, так и не решил. Вынес в AGI PHP, о чем не жалею, ибо это более правильно и красиво.

Re: многострочные переменные в asterisk

Добавлено: 28 янв 2014, 12:06
d771
Вобщем, после изучения исходников стало понятно, что функция ast_str_get_encoded_str в sendtext вырезает все символы "\".
Т.е. контрольными последовательностями нельзя ничего добиться в app_*, использующих функцию ast_str_get_encoded_str.
Но никто не мешает поместить многострочный текст в переменную без последовательностей (с чистыми CR/LF), и передать ее на вход команде.
Буду рад, если кто подскажет, как это можно сделать в asterisk.

Re: многострочные переменные в asterisk

Добавлено: 28 янв 2014, 12:29
amateur
Я может чего не понял... Так сойдет?
> module load func_sprintf

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

Set(A=${SPRINTF("1%c2%c3%c",13,13,13)});
NoOp(A is ${A} and is ${LEN(${A})} characters long);

Re: многострочные переменные в asterisk

Добавлено: 28 янв 2014, 19:43
d771
Спасибо, ваше решение работает!
На всякий случай, если кто будет искать аналогичное решение: перевод строк осуществляется через CR/LF (13,10) - просто LF не работает. Даже в консоли астериска на linux'е строка отображается правильно только в случае CRLF.
Set(MESSAGE=${SPRINTF("test с%c%ctest b%c%cfu2%c%c",13,10,13,10,13,10)});

Re: многострочные переменные в asterisk

Добавлено: 29 янв 2014, 08:15
amateur
Спасибо и Вам!