Shopify Flow “Judge.me Review Requests via WhatsApp” template fails to send WhatsApp messages due to list-based order data

I’m using the official Shopify Flow template
Judge.me Review Requests via WhatsApp” with a WhatsApp app (WhatFlow Chat Automation).

I have another WhatsApp workflow with the same condition (shipping address phone is not empty) that works perfectly.
However, this specific ready-made Judge me template does not send WhatsApp messages, even though the Flow run shows Succeeded.

What I found

  • The issue is not the condition.

  • The issue is not the phone number (it exists and is valid).

  • The issue is not Judge me itself.

The problem is caused by the Get order data step used in the template.

Root cause

The ready-made template uses:

Get orders using an advanced query
(even with Maximum number of orders = 1)

This action still returns a list/array of orders, not a single Order object.

Because of this:

  • Shopify Flow treats the result as an array.

  • Variables are wrapped internally in {% for %} loops.

  • The WhatsApp app does not support arrays or Liquid loops.

  • As a result, the WhatsApp action receives:

    • an empty phone_number, or

    • the country code in the wrong field.

  • The Flow run succeeds, but no WhatsApp message is actually delivered.

Why another workflow works

In my working workflow:

  • The trigger is Order-based (Order created / fulfilled).

  • The WhatsApp app receives a single Order object.

  • order.shippingAddress.phone is passed as a simple string.

  • The message is sent successfully.

Expected behavior

The Judge me WhatsApp template should retrieve a single order, not a list.

Ideally, the template should use:
“Retrieve order details from the order ID provided in the Judge me trigger”
instead of “Get orders using an advanced query”.

Summary

  • Condition is correct.

  • Phone number exists.

  • Failure is caused by array-based order data in the template.

  • This is a compatibility issue between the template’s data structure and WhatsApp app actions.

Yes, “Get data…” actions always return arrays of results.
It’s then up to you whether to use the “Loop” action or liquid loops in variable fields of further actions to extract single value.

Default Flow Template uses variables like this:

{{ getOrderData.billingAddress.phone | first }}

which takes first item out of the array returned from the first “Get data …” step.

So nothing wrong here.

For the second "Get data .. " action, the following code is used

{% for getOrderData1_item in getOrderData1 %}  {{getOrderData1_item.billingAddress.phone}}{% endfor %}

Which should produce a single value given that “Get data …” is limited to 1.
Same for country code.

So nothing wrong again.

If you can provide screenshots/logs I’d be happy to look at them.

mind you it has already sent messages previously in another workflow with the same whatflow app and it had the same log just the number had no added code

If I understand properly from the screenshots, the “Start typing” action gets empty phone number and country code, right?

In this case, for this step I’d try to replace the default inputs here (they do look a bit suss):

With these:

{% for o in getOrderData %} {{ o.billingAddress.phone }} {% endfor %}

and

{% for o in getOrderData %} {{ o.billingAddress.countryCodeV2 }} {% endfor %}

Okay so the main issue i think would be the added code {% for %} in the variable for Phone in here

If there are extra spaces or return characters messing the phone number, you can modify this code

{% for o in getOrderData %} {{ o.billingAddress.phone }} {% endfor %}

Like this:

{%- for o in getOrderData -%} {{- o.billingAddress.phone -}} {%- endfor -%}

Added dashes will strip extra space – Liquid basics