Marcello Lupo
2006-Jun-26 08:30 UTC
[Asterisk-Users] AEL scripting, CUT use and string concatenation
Hi to all, i'm wondering to realize a dynamic macro that can take the number of extensions to RING,the ring type and all the parameter in a dynamic way. I have done this code to test it: macro pbx-ring-group-ael(pbx_id,num_int,ring_type,timeout,ext_string) { //; pbx_id = Id of PBX in the DB //; num_int = Quantity of extensions to ring //; ring_type = Kind of RING (C=contemporaneous S=sequential) //; timeout = Amount of time to ring //; ext_string = String with extension numbers like 101-102-103-104-105 if(${ring_type}=C) { for (x=1 ; ${x} <= ${num_int} ; x=${x} + 1) { int=${CUT(ext_string,,${x})}; if(${x} = 1) { dialstring=SIP/${pbx_id}-${int}; } else { dialstring=${dialstring}&SIP/${pbx_id}-${int}; }; if(${x} = ${num_int}) { dialstring=${dialstring}|${timeout}; }; NoOp(STRING ${dialstring}); }; }; Hangup(); }; I'm getting problems both in the CUT expression and the concatenation of strings due to the presence of &,/,- in it. I think something can be done with double quote but it will be inserted as part of the string, so the concatenation will fail. For the CUT i don't know what is the problem. I tried with CUT(int=(ext_string,,${x}) too but without success. This is the dialplan resulting from the expansion of the ael script: show dialplan macro-pbx-ring-group-ael [ Context 'macro-pbx-ring-group-ael' created by 'pbx_ael' ] 's' => 1. Set(pbx_id=${ARG1}) [pbx_ael] 2. Set(num_int=${ARG2}) [pbx_ael] 3. Set(ring_type=${ARG3}) [pbx_ael] 4. Set(timeout=${ARG4}) [pbx_ael] 5. Set(ext_string=${ARG5}) [pbx_ael] 6. GotoIf($[ ${ring_type}=C ]?7:22) [pbx_ael] 7. Set(x=$[ 1 ]) [pbx_ael] 8. GotoIf($[ ${x} <= ${num_int} ]?9:21) [pbx_ael] 9. Set(x=$[ ${x} + 1 ]) [pbx_ael] 10. Set(int=$[ ${CUT(ext_string,,${x})} ]) [pbx_ael] 11. GotoIf($[ ${x} = 1 ]?12:14) [pbx_ael] 12. Set(dialstring=$[ SIP/${pbx_id}-${int} ]) [pbx_ael] 13. Goto(15) [pbx_ael] 14. Set(dialstring=$[ ${dialstring}&SIP/${pbx_id}-${int} ]) [pbx_ael] 15. NoOp(Finish if-for-if-pbx-ring-group-ael-6-7-11) [pbx_ael] 16. GotoIf($[ ${x} = ${num_int} ]?17:18) [pbx_ael] 17. Set(dialstring=$[ ${dialstring}|${timeout} ]) [pbx_ael] 18. NoOp(Finish if-for-if-pbx-ring-group-ael-6-7-16) [pbx_ael] 19. NoOp(STRING ${dialstring}) [pbx_ael] 20. Goto(8) [pbx_ael] 21. NoOp(Finish for-if-pbx-ring-group-ael-6-7) [pbx_ael] 22. NoOp(Finish if-pbx-ring-group-ael-6) [pbx_ael] 23. Hangup() [pbx_ael] -= 1 extension (23 priorities) in 1 context. =- This is the log of errors: -- Executing Macro("SIP/1234-100-b263", "pbx-ring-group-ael|1234|5|C|20|101-102-103-104-105") in new stack -- Executing Set("SIP/1234-100-b263", "pbx_id=1234") in new stack -- Executing Set("SIP/1234-100-b263", "num_int=5") in new stack -- Executing Set("SIP/1234-100-b263", "ring_type=C") in new stack -- Executing Set("SIP/1234-100-b263", "timeout=20") in new stack -- Executing Set("SIP/1234-100-b263", "ext_string=101-102-103-104-105") in new stack -- Executing GotoIf("SIP/1234-100-b263", "1?7:22") in new stack -- Goto (macro-pbx-ring-group-ael,s,7) -- Executing Set("SIP/1234-100-b263", "x=1") in new stack -- Executing GotoIf("SIP/1234-100-b263", "1?9:21") in new stack -- Goto (macro-pbx-ring-group-ael,s,9) -- Executing Set("SIP/1234-100-b263", "x=2") in new stack Jun 26 17:17:24 WARNING[31282]: ast_expr2.fl:176 ast_yyerror: ast_yyerror(): syntax error: syntax error, unexpected $end, expecting TOK_MINUS or TOK_COMPL or TOK_LP or TOKEN; Input: ^ Jun 26 17:17:24 WARNING[31282]: ast_expr2.fl:180 ast_yyerror: If you have questions, please refer to doc/README.variables in the asterisk source. -- Executing Set("SIP/1234-100-b263", "int=0") in new stack -- Executing GotoIf("SIP/1234-100-b263", "0?12:14") in new stack -- Goto (macro-pbx-ring-group-ael,s,14) Jun 26 17:17:24 WARNING[31282]: ast_expr2.fl:176 ast_yyerror: ast_yyerror(): syntax error: syntax error, unexpected TOK_AND, expecting TOK_MINUS or TOK_COMPL or TOK_LP or TOKEN; Input: &SIP/1234-0 ^ Jun 26 17:17:24 WARNING[31282]: ast_expr2.fl:180 ast_yyerror: If you have questions, please refer to doc/README.variables in the asterisk source. -- Executing Set("SIP/1234-100-b263", "dialstring=0") in new stack -- Executing NoOp("SIP/1234-100-b263", "Finish if-for-if-pbx-ring-group-ael-6-7-11") in new stack -- Executing GotoIf("SIP/1234-100-b263", "0?17:18") in new stack -- Goto (macro-pbx-ring-group-ael,s,18) -- Executing NoOp("SIP/1234-100-b263", "Finish if-for-if-pbx-ring-group-ael-6-7-16") in new stack -- Executing NoOp("SIP/1234-100-b263", "STRING 0") in new stack If you have any allernative idea to reach my goal please let me know or if you can help me debugging this issue i will be thank you. Bye, Marcello