Does Logic Split with dynamic variables still not work?

I see a few old posts related to this issue, but have not had any success in consistently getting variable-valued logical split conditions to work:

I am trying to provide a __pre_conversation_sms_message variable to one of my chat agents and then simply want to split based on whether that variable is present or not.

I’ve tried several things:

  • Using the “exists” condition
  • The “not equals” condition
  • The “equals” condition
  • Using sentinel values like “blank” and “none”
  • Using an empty string
  • Removing the prefixed double underscore in case that was being stripped

In all of these situations, regardless of what I do, it seems this logical split will always take the “else” route.

From the threads I provided, it seemed like this was just an issue of dynamic variables not being usable unless they are literally mentioned and populated during the conversation. The support team mentioned that this was “under dev” a year ago. Is that still the case?

Is there no way to use a dynamic variable explicitly in this way without the agent having to say something first?

Hey @sperales checking with the team.

The agent ID I’ve been trying some of this stuff on is agent_60466298d181556661f08b6127 if that helps.

Hey @sperales Checked with the team and Dynamic variables work in Logic Split without the agent saying anything first, but the LHS needs to be wrapped in {{ }} for substitution to run.
In your “Pre-Call SMS Check” node (conversation_flow_4ef0d527aaad), the condition is currently:
__pre_conversation_sms_message == _no_pre_call_sms_

Both sides are bare strings, so it’s comparing
“__pre_conversation_sms_message” to “_no_pre_call_sms_” — always false → always Else.
Fix: brace the LHS only (the RHS is your sentinel literal, leave it):
{{__pre_conversation_sms_message}} Equals _no_pre_call_sms_ → topic_follow_script

This pairs with your defaultDynamicVariables fallback when no SMS body is passed, the default sentinel flows in and matches; when a real body is passed, it doesn’t match and routes to topic_pre_call_message. The __ prefix has no special meaning; only the braces matter.
Two related gotchas:

  • Exists checks for a leftover {{…}} token after substitution, not whether the value is non-empty. For real presence, use an OR group: {{var}} Equals “” OR {{var}} Equals null. You can validate in Runtime Test Settings same substitution path as live calls.

Thank You