AI Zone Admin Forum Add your forum

NEWS: survey on 3000 US and UK consumers shows it is time for chatbot integration in customer service!read more..

Getting the value of an argument via ^argument(n)


I’m just starting to learn ChatScript, and I haven’t found a solution to a problem I’m having trying to use ^argument(n) from within an outputmacro to loop through all its arguments.

outputmacro: ^testmacro variable ( ^arg1 ^arg2 ^arg3 ^arg4 )
= ^argument($_argIndex)
code using that value...
$_argIndex += 1

^argument($_argIndex) will return matching variables _0 to _3 for $_argIndex = 1 to 4.

However, I couldn’t find a way to read the value of _0 rather than the matching variable name. I have tried ^$_argValue to no avail.

Enabling :trace all gives me:

System call ^argument(`1`)
NOPROBLEM ^argument(1) => `_0`
$_argvalue = ^argument(_0)
System call ^return(`$_argvalue`)
ENDCALL ^return(_0) => `_0

How should I proceed if I want to use the value of an argument within the outputmacro itself?

Apologies in advance if this is answered in the docs, I did do my research and came out empty.
Thank you

EDIT: I should note that when accessing _0 directly (in a comparison for instance, or logging something like ^“value is: _0”) I get the value of that argument just fine.


  [ # 1 ]

I figured out a workaround for now. I just parse an active json string containing all arguments into an array so I can iterate through it the same way I would iterate through them with ^argument. Not very elegant though as I have to edit the json string to match the arguments

$_argIndex 0
= ^jsonparse( ^"[ ^arg1 ^arg2 ^arg3 ^arg4 ]" )
$_length = ^length$_args )

loop$_length )
# ... same code as before using $_argValue
$_argIndex += 1

I’m assuming I’d need to wrap the variable in two layers of active strings so $_argValue can become ^“_0” on the first evaluation then the actual value on the 2nd evaluation. I don’t know how though.

I did manage to get the right value printed out, but it’s because it was going through a custom log method which would use the argument passed to it within an active string, doing exactly what I describe above. ^logvalue(^”$_argValue”) would work because in ^logvalue it’d do something like ^log( OUTPUT_ECHO, ^”^arg”)

If anyone has a code snippet of a successful usage of ^argument(n) I’d love to see that.

EDIT: Another workaround is to run the variable through an outputmacro that returns the active string containing the argument passed to it:

outputmacro: ^testmacro( ^arg )
  ^return( ^
"^arg" )

# ...
outputmacro: ^testmacro2( ^arg1... )
= ^argument(1)
$_test = ^testmacro( ^"$_t)
logOUTPUT_ECHO ^"$_test\n)



  [ # 2 ]

The following code worked for me:

outputmacro: ^test( $_t1 $_t2 $_t3)

topic: ~INTRODUCTIONS keep repeat (~emogoodbye ~emohello ~emohowzit name here )

t: Greetings
u: (test) ^test(1 2 3 )


  [ # 3 ]

I went back to the basics like your example and realized my problem comes from the fact that I call that macro with the matching variables from a pattern as arguments


u: (test _~number _~number _~numberResult:  ^test_0 _1 _2 

^argument(1) returns ‘_0’ and I have to play tricks with active strings to get the value out of it (as described in previous posts)


u: (test _~number _~number _~numberResult:  ^test1 2 3 

^argument(1) returns 1


u: (test _~number _~number _~numberResult:  ^test( ^"_0" ^"_1" ^"_2" 

^argument(1) returns 1

I guess I’m still a bit confused about how variable references vs. values work in ChatScript, I guess _0 doesn’t automatically print out its value because it’s in a macro call, not directly in the output.

Thanks for your help!


  [ # 4 ]

Its a CS bug. will fix for next release.


  login or register to react
404: Page not Found

NEWS: survey on 3000 US and UK consumers shows it is time for chatbot integration in customer service!read more..



The page you were trying to reach could not be found.
Please select one of the options below or return to the homepage.