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




_______________________________________________
--Bandwidth and Colocation provided by Easynews.com --

Asterisk-Users mailing list
To UNSUBSCRIBE or update options visit:
  http://lists.digium.com/mailman/listinfo/asterisk-users

Reply via email to