Re: Originate with label?

Antony Stone <[email protected]>
Newsgroups gmane.comp.telephony.pbx.asterisk.user
Message-ID <[email protected]>
On Tuesday 30 August 2022 at 18:17:08, Mark Murawski wrote:

> On 8/30/22 11:16, Antony Stone wrote:
> > If I write in my AEL dialplan:
> > 	Set(Tracker=${CDR(uniqueid)});
> > 
> > this results in executing:
> > 	Set(Tracker=eagle.domain.com-1661872057.2349)
> > 
> > Just what I want.
> > 
> > However writing:
> > 	Tracker=${CDR(uniqueid)};
> > 
> > results in:
> > 	MSet(Tracker=-1661872057.2349)
> > 
> > systemname is missing.
> 
> Hi Antony,
> 
> This is not a problem with MSet.

No, it is indeed the documented behaviour of MSet "MSet behaves in a similar 
fashion to the way Set worked in 1.2/1.4 and is thus prone to doing things 
that you may not expect."

> Keep in mind that AEL is a transpiler, the AEL itself is not evaluated
> at the time of execution... extensions.conf-style dialplan is what's
> being executed.

Agreed.

> Also... keep in mind that var=val assignments always use surround the
> value with $[]  which will either evaluate math or boolean expressions.
> 
> Since 'eagle.domain.com' is not numeric, and not boolean, it's expected
> it would not be included in the final value.

Yes, but to be fair, that is not what I would expect Tracker=${CDR(uniqueid)} 
to do in any other language.

> If you do a 'dialplan show' on the context after AEL has processed it,
> you'll clearly see the MSet and ${CDR(uniqueid)} being inside $[]

Yes.

> If you run the same code through extensions.conf you'll get exactly the
> same result... so I would call this expected behavior.

I think we'll have to disagree on what a programmer "expects" a syntax like 
var=value to do, then.

> The fix/workaround is to explicitly use Set() when you need to work with
> anything non-numeric and non-boolean

True, and that is precisely what I have been doing in order to avoid such 
problems.  This example slipped through my conversion process (I've been 
converting previously-non-AEL dialplans into AEL because I prefer the general 
style).

What I am suggesting is that Tracker=${CDR(uniqueid)} should be converted by 
AEL into Set(Tracker=${CDR(uniqueid)}) in order to avoid this sort of 
surprise.

If someone knows they want to perform arithmetic, they can write 
Result=$[${var1}-4] and end up with Set(Result=$[${var1}-4]) after AEL has 
done its transpilation.


Maybe you could offer an example of where MSet() does what most people would 
expect, and Set() does not?


I still intend to abide by the documentation for MSet "Avoid its use if 
possible.", and I simply think it would be good if AEL: did the same.



Antony.

-- 
+++ Divide By Cucumber Error.  Please Reinstall Universe And Reboot +++

                                                   Please reply to the list;
                                                         please *don't* CC me.

-- 
_____________________________________________________________________
-- Bandwidth and Colocation Provided by http://www.api-digital.com --

Check out the new Asterisk community forum at: https://community.asterisk.org/

New to Asterisk? Start here:
      https://wiki.asterisk.org/wiki/display/AST/Getting+Started

asterisk-users mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/asterisk-users
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.