From 93c235f7ae047d75f10d1ad919b1da238944ea76 Mon Sep 17 00:00:00 2001 From: Tech4Dev Date: Mon, 3 Aug 2026 13:21:31 +0530 Subject: [PATCH 01/16] Clarify has-all/has-phrase/has-only-phrase criteria in Wait for Response docs Rewrites the "has all of the words", "has a phrase" (renamed to "has the phrase" to match the live dropdown label), and "has only the phrase" descriptions with worked examples, verified against Glific.Flows.Case do_execute/2 behavior and the floweditor operatorConfigList labels. Adds a screenshot of the response-criteria dropdown. Fixes glific/docs#665 --- .../04. Wait for the contact to respond.md | 13 +++++++++---- .../flows/flows_wait_for_response_criteria.png | Bin 0 -> 39235 bytes 2 files changed, 9 insertions(+), 4 deletions(-) create mode 100644 static/img/flows/flows_wait_for_response_criteria.png diff --git a/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md b/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md index f9efd18421..61387bba16 100644 --- a/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md +++ b/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md @@ -58,6 +58,8 @@ The Wait for Response node is essential whenever a flow needs input from the con ## Text-based responses +![Response type dropdown showing has any of the words, has all of the words, has the phrase, and has only the phrase](../../../../static/img/flows/flows_wait_for_response_criteria.png) + ### 1. has any of the words This option accepts the input if it contains any of the words defined in the response criteria. Multiple words can be added, separated by commas. For example, if the criteria include Yes, Y, Ya, Yup, then any of these responses will be treated as valid. Also, if the field is left blank, any text response from the user will be accepted. @@ -66,13 +68,16 @@ Also, if the field is left blank, any text response from the user will be accept ### 2. has all of the words -To accept the input if the input matches exactly what is defined in the response criteria. +This option accepts the input if it contains all of the words defined in the response criteria, in any order. The input can also contain other words besides the ones listed. +For example, if the criteria include cat, dog, then "I have a dog and a cat" will be treated as valid, but "I have a dog" will not, since it is missing cat. -### 3. has a phrase -To accept the input if the input is present in the response criteria. +### 3. has the phrase +This option accepts the input if it contains the exact phrase defined in the response criteria, with the words in that same order, anywhere in the message. The input can have other words before or after the phrase. +For example, if the criteria is customer support, then "I need customer support please" will be treated as valid, but "I need support from a customer" will not, since the words are not in that order. ### 4. has only the phrase -Accepts only if the response matches exactly what is defined in the response criteria. +This option accepts the input only if it matches the response criteria exactly, with nothing else added. +For example, if the criteria is yes please, then "yes please" will be treated as valid, but "yes please now" will not, since it has an extra word. --- diff --git a/static/img/flows/flows_wait_for_response_criteria.png b/static/img/flows/flows_wait_for_response_criteria.png new file mode 100644 index 0000000000000000000000000000000000000000..fe7e8edca69e64697e3ec6586a87aba594859ea3 GIT binary patch literal 39235 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 Date: Mon, 3 Aug 2026 14:39:05 +0530 Subject: [PATCH 02/16] Expand Wait for Response docs: field guide, matching examples, media syntax, no-response branch - Add an "Understanding the fields in this node" section near the top explaining every blank in the dialog (criteria dropdown, value box, categorize as, Result Name, no-response timeout). - Fix "has a number between" screenshot: category name was misspelled "Kida", now "Kids", and align its text example (and the "has a number equal to" example) with what the screenshot actually shows. - Rewrite text examples across the doc to match the actual values in each existing screenshot instead of generic placeholders. - Fix duplicated/invalid "has an email" examples with distinct valid addresses. - Add the create-a-result-variable + @results..url/.caption syntax explanation to has audio, has video, has image, and has file, matching the existing has media section. Also add it for location. - Add a new "The no-response branch in your flow" section with a canvas screenshot showing the Yes/Other/No Response branches, and clarify the difference between Other and No Response. - General grammar and plain-language cleanup throughout. Continues glific/docs#665 --- .../04. Wait for the contact to respond.md | 144 ++++++++++-------- ...s_wait_for_response_no_response_branch.png | Bin 0 -> 12349 bytes ...flows_wait_for_response_number_between.png | Bin 0 -> 48841 bytes 3 files changed, 78 insertions(+), 66 deletions(-) create mode 100644 static/img/flows/flows_wait_for_response_no_response_branch.png create mode 100644 static/img/flows/flows_wait_for_response_number_between.png diff --git a/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md b/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md index 61387bba16..c7d3c2e41b 100644 --- a/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md +++ b/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md @@ -54,6 +54,19 @@ The Wait for Response node is essential whenever a flow needs input from the con --- +## Understanding the fields in this node + +The Wait for Response node has a few blank fields you need to fill in. Here is what each one means: + +- **Response criteria dropdown** (shows "has only the phrase" by default): choose how the contact's reply should be checked, for example "has any of the words" or "has a number". See Response Types below for the full list. +- **Value box** (next to the criteria dropdown): the word, phrase, or number the contact's reply is checked against. Some criteria, like "has a number" or "has an email", don't need a value here since they check the type of reply instead of specific text. +- **Categorize as**: the label given to this branch. This becomes the name of the exit point you connect the rest of your flow to, so use something that describes the outcome, like "Yes" or "Has Number". +- You can add more than one row of criteria. Each row becomes its own branch, so a reply can be routed differently depending on which criteria it matches. +- **Result Name**: the variable the contact's reply is saved under. Once named, you can reuse the reply later with `@results.`, for example `@results.age`. +- **Continue when there is no response for**: optional. Tick this box and pick a time gap (for example, 1 hour) to let the flow move on to a separate path if the contact never replies, instead of waiting forever. See Handling no response below. + +--- + ## Response Types ## Text-based responses @@ -85,22 +98,23 @@ For example, if the criteria is yes please, then "yes please" will be treated as ## Numeric responses ### 1. Has a number -Accepts any numeric input, This will accept any number as a valid response. Any non numeric input will be treated as invalid response. +Accepts any numeric input as a valid response. Any non-numeric input is treated as invalid. +In the example below, a numeric reply is categorized as "Has Number" and saved under the result name registration_number, so it can be reused later as `@results.registration_number`. Screenshot 2025-10-08 at 2 35 29 AM ### 2. has a number between -Accepts input if it is numeric and falls within the defined range. This option will accept numbers only given in the range. any number out of range will be treated as invalid response. -Example: Criteria = 18-60, so only numbers within 18 and 60 range will be accepted. +Accepts input only if it is numeric and falls within the defined range. Any number outside the range is treated as invalid. +In the example below, four ranges are set up under the result name age: 1-12 is categorized as Kids, 13-19 as Teens, 20-60 as Adults, and 60-100 as Sr Citizens. A reply of 15 would be categorized as Teens, while a reply of 45 would be categorized as Adults. -Screenshot 2025-10-08 at 2 36 13 AM +![Wait for Response dialog with four "has a number between" ranges: 1-12 categorized as Kids, 13-19 as Teens, 20-60 as Adults, and 60-100 as Sr Citizens, with result name age](../../../../static/img/flows/flows_wait_for_response_number_between.png) ### 3. has a number equal to -Accepts input only if it exactly matches the defined number. This will accept only the number given in the criteria as a valid response. Any other response will be treated as invalid response. -Example: Criteria = 5, so only 5 will be valid. +Accepts input only if it exactly matches the defined number. Any other number is treated as invalid. +In the example below, three separate cases are set up under the result name currency: 10, 20, and 50. A reply of 20 matches only the second case and is categorized as "20". A reply of 15 would not match any case and would be treated as invalid. Screenshot 2025-10-08 at 2 37 57 AM @@ -111,22 +125,26 @@ Example: Criteria = 5, so only 5 will be valid. ### 1. has a phone number -Accepts input if the response is a valid phone number.It accepts mobile and landline numbers. +Accepts input if the response is a valid phone number. This includes mobile and landline numbers. Supported formats include: -- 10 digit Mobile number (XXXXXXXXXX). -- 10 digit Mobile number with 0 prefix (0XXXXXXXXXX). -- 10 digit Mobile number with country code prefix (+91 XXXXXXXXXX). -- landline number with (XXX XXXXXXX). -- landline number with 0 and state code (0XXX XXXXXXX). -- landline number with with country code prefix (+91 XXX XXXXXXX). +- 10-digit mobile number (XXXXXXXXXX). +- 10-digit mobile number with 0 prefix (0XXXXXXXXXX). +- 10-digit mobile number with country code prefix (+91 XXXXXXXXXX). +- Landline number (XXX XXXXXXX). +- Landline number with 0 and state code (0XXX XXXXXXX). +- Landline number with country code prefix (+91 XXX XXXXXXX). + +In the example below, this is categorized as "Has Phone" and saved under the result name phone, so it can be reused later as `@results.phone`. Screenshot 2025-10-08 at 2 40 28 AM ### 2. has an email Accepts input if the response is a valid email address. -Examples: abc@xyz.xyz, abc@xyz.xyz, abc@xyz +Examples: priya@example.org, contact.team@example.co.in, user+alerts@example.com + +In the example below, this is categorized as "Has Email" and saved under the result name email, so it can be reused later as `@results.email`. Screenshot 2025-10-08 at 2 41 42 AM @@ -149,13 +167,18 @@ Users can store both the URL and caption of the media file. Now users can use the media file URL received and its caption. -In this example, the syntax will be. -- for media file URL @results.picture.url -- for media file caption @results.picture.caption +In this example, the syntax is: +- for the media file URL: `@results.picture.url` +- for the media file caption: `@results.picture.caption` ### 2. has audio Accepts input if the response is an audio file. +To store the audio file, create a result variable (in the example below, audio is given as the result name). +In this example, the syntax is: +- for the audio file URL: `@results.audio.url` +- for the audio file caption: `@results.audio.caption` + Screenshot 2025-10-08 at 2 50 16 AM @@ -163,6 +186,11 @@ Accepts input if the response is an audio file. ### 3. has video Accepts input if the response is a video file (mp4 video files). +To store the video file, create a result variable (in the example below, video is given as the result name). +In this example, the syntax is: +- for the video file URL: `@results.video.url` +- for the video file caption: `@results.video.caption` + Screenshot 2025-10-08 at 2 51 53 AM @@ -170,6 +198,11 @@ Accepts input if the response is a video file (mp4 video files). ### 4. has image Accepts input if the response is an image file (jpeg, png). +To store the image file, create a result variable (in the example below, image is given as the result name). +In this example, the syntax is: +- for the image file URL: `@results.image.url` +- for the image file caption: `@results.image.caption` + Screenshot 2025-10-08 at 2 52 39 AM @@ -177,6 +210,11 @@ Accepts input if the response is an image file (jpeg, png). ### 5. has file Accepts input if the response is a document (pdf, doc). +To store the file, create a result variable (in the example below, file is given as the result name). +In this example, the syntax is: +- for the file URL: `@results.file.url` +- for the file caption: `@results.file.caption` + Screenshot 2025-10-08 at 2 53 44 AM --- @@ -185,15 +223,17 @@ Accepts input if the response is a document (pdf, doc). ## Location ### 1. has location -Accepts input if the response is a location +Accepts input if the response is a location. Screenshot 2025-10-08 at 2 54 52 AM -- User can get the value of location with Has Location in contact response and save it in the form of longitude and latitude. -- In the given example, result name is given as ‘location’. -- Now user can save or use the location details received in longitude and latitude forms in the flow like other variables. +- The location is saved as longitude and latitude. +- In the example below, location is given as the result name. +- You can reuse these values elsewhere in the flow. In this example, the syntax is: + - for the longitude: `@results.location.longitude` + - for the latitude: `@results.location.latitude` Screenshot 2025-10-08 at 2 56 30 AM @@ -207,10 +247,12 @@ To get the detailed location details using webhook - refer to this [document](ht This option is used to validate a response against a specific format using a regular expression (regex). It is especially useful when inputs need to follow strict patterns, such as dates, ID numbers, or custom codes. -Example: To ensure a date of birth is entered in the format DD/MM/YYYY, use the following regex: -^(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[0-2])/[0-9]{4}$ +Example: to ensure a date of birth is entered in the format DD/MM/YYYY, use the following regex: +`^(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[0-2])/[0-9]{4}$` + +Valid responses include 05/09/1995 and 31/12/2000. -Valid responses include - 05/09/1995, 31/12/2000 +In the example below, this is categorized as "correct format" and saved under the result name dob, so it can be reused later as `@results.dob`. Screenshot 2025-10-08 at 2 59 20 AM @@ -218,54 +260,24 @@ Valid responses include - 05/09/1995, 31/12/2000 ## Handling no response -If a contact does not respond, you can configure the flow to continue after a set wait time. -Example: Send a reminder after 2 hours of inactivity. - -Click on ‘Continue if there is no response for’ and choose the time gap after which a nudge will be sent to the end user. -In the example given below, a reminder is sent to the end user every hour (up to 3 times) if no response is received. - -Screenshot 2025-10-08 at 3 01 07 AM - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +If a contact does not respond, you can configure the flow to continue after a set wait time, instead of waiting forever. +Tick **Continue when there is no response for** and choose the time gap after which the flow should move on. In the example below, the flow continues down the no-response path if the contact has not replied within 1 hour. +To send a repeated reminder (for example, every hour, up to 3 times) rather than moving on after a single wait, connect this no-response path back into another Wait for Response node with its own timer. See "The no-response branch in your flow" below for what this looks like on the canvas. +Screenshot 2025-10-08 at 3 01 07 AM +--- +## The no-response branch in your flow +Once you save a Wait for Response node with "Continue when there is no response for" ticked, an extra **No Response** branch appears on the canvas alongside your other criteria branches. You connect the rest of your flow to it the same way you would any other branch: drag from its red circle to the next node. +In the example below, the node has one criteria branch (**Yes**), an automatic **Other** branch for replies that do not match any criteria, and the **No Response** branch for when the contact does not reply in time. +![Wait for Response node on the flow canvas showing Yes, Other, and No Response branches](../../../../static/img/flows/flows_wait_for_response_no_response_branch.png) +:::note +**Other** and **No Response** are not the same thing. **Other** fires when the contact replies with something that does not match any of your criteria. **No Response** fires only when the contact does not reply at all within the time you set. +::: diff --git a/static/img/flows/flows_wait_for_response_no_response_branch.png b/static/img/flows/flows_wait_for_response_no_response_branch.png new file mode 100644 index 0000000000000000000000000000000000000000..d10e146b04ac40fffb457cb81353e648627b91ec GIT binary patch literal 12349 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

g!94ZOGr(NQ|>DcTW%8 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 z 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 literal 0 HcmV?d00001 From dd1c0c7bb609b6b882fc346d56195904a82d0e58 Mon Sep 17 00:00:00 2001 From: Tech4Dev Date: Mon, 3 Aug 2026 15:12:11 +0530 Subject: [PATCH 03/16] Fix review pass: verified media captions, add missing criteria, trim repetition MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Verified in staging Preview that has file, has audio, has video, and has image do not expose a working caption field (only has media does) — removed the unverified @results..caption lines for those four, keeping only the URL syntax. - Add "has multiple values" and "starts with" entries under Text-based responses, verified against Glific.Flows.Case do_execute/2 (has_multiple, has_beginning) — these were live in the dropdown/screenshot but undocumented. - Trim repeated explanation of the no-response checkbox between "Understanding the fields in this node" and "Handling no response". - Restore the original "every hour, up to 3 times" example as stated fact rather than a generic placeholder, per confirmation that pre-existing doc content should be trusted as-is. Continues glific/docs#665 --- .../04. Wait for the contact to respond.md | 43 +++++++++---------- 1 file changed, 20 insertions(+), 23 deletions(-) diff --git a/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md b/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md index c7d3c2e41b..cb59bc7a0e 100644 --- a/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md +++ b/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md @@ -63,7 +63,7 @@ The Wait for Response node has a few blank fields you need to fill in. Here is w - **Categorize as**: the label given to this branch. This becomes the name of the exit point you connect the rest of your flow to, so use something that describes the outcome, like "Yes" or "Has Number". - You can add more than one row of criteria. Each row becomes its own branch, so a reply can be routed differently depending on which criteria it matches. - **Result Name**: the variable the contact's reply is saved under. Once named, you can reuse the reply later with `@results.`, for example `@results.age`. -- **Continue when there is no response for**: optional. Tick this box and pick a time gap (for example, 1 hour) to let the flow move on to a separate path if the contact never replies, instead of waiting forever. See Handling no response below. +- **Continue when there is no response for**: optional. Lets the flow move on if the contact never replies, instead of waiting forever. See Handling no response below for details. --- @@ -71,7 +71,7 @@ The Wait for Response node has a few blank fields you need to fill in. Here is w ## Text-based responses -![Response type dropdown showing has any of the words, has all of the words, has the phrase, and has only the phrase](../../../../static/img/flows/flows_wait_for_response_criteria.png) +![Response type dropdown showing has any of the words, has multiple values, has all of the words, has the phrase, has only the phrase, and starts with](../../../../static/img/flows/flows_wait_for_response_criteria.png) ### 1. has any of the words This option accepts the input if it contains any of the words defined in the response criteria. Multiple words can be added, separated by commas. For example, if the criteria include Yes, Y, Ya, Yup, then any of these responses will be treated as valid. @@ -80,18 +80,26 @@ Also, if the field is left blank, any text response from the user will be accept Screenshot 2025-10-08 at 2 28 48 AM -### 2. has all of the words +### 2. has multiple values +This option accepts the input only if every word in it is one of the words defined in the response criteria. Unlike "has all of the words," it does not require every listed word to be present — the reply just cannot contain anything outside the list. +For example, if the criteria include red, blue, green, then "red blue" and "green" will be treated as valid, but "red yellow" will not, since yellow is not in the list. + +### 3. has all of the words This option accepts the input if it contains all of the words defined in the response criteria, in any order. The input can also contain other words besides the ones listed. For example, if the criteria include cat, dog, then "I have a dog and a cat" will be treated as valid, but "I have a dog" will not, since it is missing cat. -### 3. has the phrase +### 4. has the phrase This option accepts the input if it contains the exact phrase defined in the response criteria, with the words in that same order, anywhere in the message. The input can have other words before or after the phrase. For example, if the criteria is customer support, then "I need customer support please" will be treated as valid, but "I need support from a customer" will not, since the words are not in that order. -### 4. has only the phrase +### 5. has only the phrase This option accepts the input only if it matches the response criteria exactly, with nothing else added. For example, if the criteria is yes please, then "yes please" will be treated as valid, but "yes please now" will not, since it has an extra word. +### 6. starts with +This option accepts the input only if it begins with the exact text defined in the response criteria. +For example, if the criteria is order, then "order 123" will be treated as valid, but "my order is 123" will not, since it does not start with "order". + --- @@ -154,19 +162,16 @@ In the example below, this is categorized as "Has Email" and saved under the res ### 1. has media Accepts input if the response is a media file (jpeg, png, mp4). -Users can store both the URL and caption of the media file. Screenshot 2025-10-08 at 2 47 19 AM -- To store the media file - create a result variable(in the given example below, picture is given as result name) +To store the media file, create a result variable (in the example below, picture is given as the result name). Screenshot 2025-10-08 at 2 48 08 AM -Now users can use the media file URL received and its caption. - In this example, the syntax is: - for the media file URL: `@results.picture.url` - for the media file caption: `@results.picture.caption` @@ -175,9 +180,7 @@ In this example, the syntax is: Accepts input if the response is an audio file. To store the audio file, create a result variable (in the example below, audio is given as the result name). -In this example, the syntax is: -- for the audio file URL: `@results.audio.url` -- for the audio file caption: `@results.audio.caption` +In this example, the syntax for the audio file URL is: `@results.audio.url` Screenshot 2025-10-08 at 2 50 16 AM @@ -187,9 +190,7 @@ In this example, the syntax is: Accepts input if the response is a video file (mp4 video files). To store the video file, create a result variable (in the example below, video is given as the result name). -In this example, the syntax is: -- for the video file URL: `@results.video.url` -- for the video file caption: `@results.video.caption` +In this example, the syntax for the video file URL is: `@results.video.url` Screenshot 2025-10-08 at 2 51 53 AM @@ -199,9 +200,7 @@ In this example, the syntax is: Accepts input if the response is an image file (jpeg, png). To store the image file, create a result variable (in the example below, image is given as the result name). -In this example, the syntax is: -- for the image file URL: `@results.image.url` -- for the image file caption: `@results.image.caption` +In this example, the syntax for the image file URL is: `@results.image.url` Screenshot 2025-10-08 at 2 52 39 AM @@ -211,9 +210,7 @@ In this example, the syntax is: Accepts input if the response is a document (pdf, doc). To store the file, create a result variable (in the example below, file is given as the result name). -In this example, the syntax is: -- for the file URL: `@results.file.url` -- for the file caption: `@results.file.caption` +In this example, the syntax for the file URL is: `@results.file.url` Screenshot 2025-10-08 at 2 53 44 AM @@ -262,9 +259,9 @@ In the example below, this is categorized as "correct format" and saved under th If a contact does not respond, you can configure the flow to continue after a set wait time, instead of waiting forever. -Tick **Continue when there is no response for** and choose the time gap after which the flow should move on. In the example below, the flow continues down the no-response path if the contact has not replied within 1 hour. +Tick **Continue when there is no response for** and choose the time gap after which the flow should move on. In the example below, a reminder is sent to the end user every hour, up to 3 times, if no response is received. -To send a repeated reminder (for example, every hour, up to 3 times) rather than moving on after a single wait, connect this no-response path back into another Wait for Response node with its own timer. See "The no-response branch in your flow" below for what this looks like on the canvas. +To repeat a reminder like this, connect the no-response path back into another Wait for Response node with its own timer, chaining as many times as you like. See "The no-response branch in your flow" below for what this branch looks like on the canvas. Screenshot 2025-10-08 at 3 01 07 AM From 1a04fe0379a4cb9742329305f266467ab827ffe3 Mon Sep 17 00:00:00 2001 From: Tech4Dev Date: Mon, 3 Aug 2026 15:32:01 +0530 Subject: [PATCH 04/16] Address CodeRabbit review: grammar, phone digit count, overlapping ranges - "criteria is" -> "criterion is" (singular) in the has the phrase, has only the phrase, and starts with examples. - Fix phone format label: 0XXXXXXXXXX is 11 digits (0 prefix + 10 digits), not 10. - Verified on staging that overlapping "has a number between" rows resolve to the first matching row, not the more specific one. Added a note documenting this for the existing 20-60 / 60-100 example instead of changing the ranges, since the screenshot already shows them as originally set up. Continues glific/docs#665 --- .../04. Wait for the contact to respond.md | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md b/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md index cb59bc7a0e..fcc2ac5c96 100644 --- a/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md +++ b/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md @@ -90,15 +90,15 @@ For example, if the criteria include cat, dog, then "I have a dog and a cat" wil ### 4. has the phrase This option accepts the input if it contains the exact phrase defined in the response criteria, with the words in that same order, anywhere in the message. The input can have other words before or after the phrase. -For example, if the criteria is customer support, then "I need customer support please" will be treated as valid, but "I need support from a customer" will not, since the words are not in that order. +For example, if the criterion is customer support, then "I need customer support please" will be treated as valid, but "I need support from a customer" will not, since the words are not in that order. ### 5. has only the phrase This option accepts the input only if it matches the response criteria exactly, with nothing else added. -For example, if the criteria is yes please, then "yes please" will be treated as valid, but "yes please now" will not, since it has an extra word. +For example, if the criterion is yes please, then "yes please" will be treated as valid, but "yes please now" will not, since it has an extra word. ### 6. starts with This option accepts the input only if it begins with the exact text defined in the response criteria. -For example, if the criteria is order, then "order 123" will be treated as valid, but "my order is 123" will not, since it does not start with "order". +For example, if the criterion is order, then "order 123" will be treated as valid, but "my order is 123" will not, since it does not start with "order". --- @@ -116,6 +116,10 @@ In the example below, a numeric reply is categorized as "Has Number" and saved u Accepts input only if it is numeric and falls within the defined range. Any number outside the range is treated as invalid. In the example below, four ranges are set up under the result name age: 1-12 is categorized as Kids, 13-19 as Teens, 20-60 as Adults, and 60-100 as Sr Citizens. A reply of 15 would be categorized as Teens, while a reply of 45 would be categorized as Adults. +:::note +The Adults and Sr Citizens ranges both include 60. When ranges overlap like this, a reply always matches the first matching row in the list — so a reply of exactly 60 is categorized as Adults, not Sr Citizens. To avoid this, use ranges that don't share a boundary number (for example, 20-59 and 60-100). +::: + ![Wait for Response dialog with four "has a number between" ranges: 1-12 categorized as Kids, 13-19 as Teens, 20-60 as Adults, and 60-100 as Sr Citizens, with result name age](../../../../static/img/flows/flows_wait_for_response_number_between.png) @@ -137,7 +141,7 @@ Accepts input if the response is a valid phone number. This includes mobile and Supported formats include: - 10-digit mobile number (XXXXXXXXXX). -- 10-digit mobile number with 0 prefix (0XXXXXXXXXX). +- 11-digit mobile number with 0 prefix (0XXXXXXXXXX). - 10-digit mobile number with country code prefix (+91 XXXXXXXXXX). - Landline number (XXX XXXXXXX). - Landline number with 0 and state code (0XXX XXXXXXX). From 2c178c006c79c3d53b86984e0295cedb74fbc117 Mon Sep 17 00:00:00 2001 From: Tech4Dev Date: Mon, 3 Aug 2026 15:35:35 +0530 Subject: [PATCH 05/16] Revert phone digit-count wording to match original doc --- .../2. Flow Actions/04. Wait for the contact to respond.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md b/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md index fcc2ac5c96..ee55fd5aaa 100644 --- a/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md +++ b/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md @@ -141,7 +141,7 @@ Accepts input if the response is a valid phone number. This includes mobile and Supported formats include: - 10-digit mobile number (XXXXXXXXXX). -- 11-digit mobile number with 0 prefix (0XXXXXXXXXX). +- 10-digit mobile number with 0 prefix (0XXXXXXXXXX). - 10-digit mobile number with country code prefix (+91 XXXXXXXXXX). - Landline number (XXX XXXXXXX). - Landline number with 0 and state code (0XXX XXXXXXX). From 1f9b9efe9bbb49ba369d60f6111ab3fa73c9e883 Mon Sep 17 00:00:00 2001 From: Tech4Dev Date: Mon, 3 Aug 2026 15:48:28 +0530 Subject: [PATCH 06/16] Add bold label to the multiple-criteria-rows bullet for consistency --- .../2. Flow Actions/04. Wait for the contact to respond.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md b/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md index ee55fd5aaa..7cae9771cb 100644 --- a/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md +++ b/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md @@ -61,7 +61,7 @@ The Wait for Response node has a few blank fields you need to fill in. Here is w - **Response criteria dropdown** (shows "has only the phrase" by default): choose how the contact's reply should be checked, for example "has any of the words" or "has a number". See Response Types below for the full list. - **Value box** (next to the criteria dropdown): the word, phrase, or number the contact's reply is checked against. Some criteria, like "has a number" or "has an email", don't need a value here since they check the type of reply instead of specific text. - **Categorize as**: the label given to this branch. This becomes the name of the exit point you connect the rest of your flow to, so use something that describes the outcome, like "Yes" or "Has Number". -- You can add more than one row of criteria. Each row becomes its own branch, so a reply can be routed differently depending on which criteria it matches. +- **Multiple criteria rows**: you can add more than one row of criteria. Each row becomes its own branch, so a reply can be routed differently depending on which criteria it matches. - **Result Name**: the variable the contact's reply is saved under. Once named, you can reuse the reply later with `@results.`, for example `@results.age`. - **Continue when there is no response for**: optional. Lets the flow move on if the contact never replies, instead of waiting forever. See Handling no response below for details. From 9588505e5d325e3d6a09fe9f9335dc845895aec5 Mon Sep 17 00:00:00 2001 From: Tech4Dev Date: Mon, 3 Aug 2026 15:49:38 +0530 Subject: [PATCH 07/16] Remove media caption syntax, keep only the URL syntax for has media --- .../2. Flow Actions/04. Wait for the contact to respond.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md b/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md index 7cae9771cb..33c3cbb1d6 100644 --- a/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md +++ b/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md @@ -176,9 +176,7 @@ To store the media file, create a result variable (in the example below, picture -In this example, the syntax is: -- for the media file URL: `@results.picture.url` -- for the media file caption: `@results.picture.caption` +In this example, the syntax for the media file URL is: `@results.picture.url` ### 2. has audio Accepts input if the response is an audio file. From 7637329a8c76b51f33d744f72847186117e36e31 Mon Sep 17 00:00:00 2001 From: Tech4Dev Date: Mon, 3 Aug 2026 15:55:10 +0530 Subject: [PATCH 08/16] Explain the automatic Other branch in the fields overview section --- .../2. Flow Actions/04. Wait for the contact to respond.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md b/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md index 33c3cbb1d6..0f37932562 100644 --- a/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md +++ b/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md @@ -62,6 +62,7 @@ The Wait for Response node has a few blank fields you need to fill in. Here is w - **Value box** (next to the criteria dropdown): the word, phrase, or number the contact's reply is checked against. Some criteria, like "has a number" or "has an email", don't need a value here since they check the type of reply instead of specific text. - **Categorize as**: the label given to this branch. This becomes the name of the exit point you connect the rest of your flow to, so use something that describes the outcome, like "Yes" or "Has Number". - **Multiple criteria rows**: you can add more than one row of criteria. Each row becomes its own branch, so a reply can be routed differently depending on which criteria it matches. +- **Other branch**: an automatic branch that is always added alongside your criteria rows, for replies that don't match any of them. See "The no-response branch in your flow" below for what it looks like next to the No Response branch on the canvas. - **Result Name**: the variable the contact's reply is saved under. Once named, you can reuse the reply later with `@results.`, for example `@results.age`. - **Continue when there is no response for**: optional. Lets the flow move on if the contact never replies, instead of waiting forever. See Handling no response below for details. From 12faea72d8147258cd0b5c445f0c26e9864f8f83 Mon Sep 17 00:00:00 2001 From: Tech4Dev Date: Mon, 3 Aug 2026 16:05:14 +0530 Subject: [PATCH 09/16] Explain the Other branch self-contained, with screenshots, in the fields section Verified on staging: the automatic Other branch is only added once at least one criteria row is filled in. With every row left blank, the node shows a single "All Responses" branch instead. Documented both states with screenshots directly in "Understanding the fields in this node", without referring forward to the no-response branch section. Continues glific/docs#665 --- .../04. Wait for the contact to respond.md | 11 ++++++++++- ...s_wait_for_response_all_responses_branch.png | Bin 0 -> 7008 bytes .../flows_wait_for_response_other_branch.png | Bin 0 -> 10354 bytes 3 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 static/img/flows/flows_wait_for_response_all_responses_branch.png create mode 100644 static/img/flows/flows_wait_for_response_other_branch.png diff --git a/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md b/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md index 0f37932562..e42af0d1c8 100644 --- a/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md +++ b/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md @@ -62,10 +62,19 @@ The Wait for Response node has a few blank fields you need to fill in. Here is w - **Value box** (next to the criteria dropdown): the word, phrase, or number the contact's reply is checked against. Some criteria, like "has a number" or "has an email", don't need a value here since they check the type of reply instead of specific text. - **Categorize as**: the label given to this branch. This becomes the name of the exit point you connect the rest of your flow to, so use something that describes the outcome, like "Yes" or "Has Number". - **Multiple criteria rows**: you can add more than one row of criteria. Each row becomes its own branch, so a reply can be routed differently depending on which criteria it matches. -- **Other branch**: an automatic branch that is always added alongside your criteria rows, for replies that don't match any of them. See "The no-response branch in your flow" below for what it looks like next to the No Response branch on the canvas. - **Result Name**: the variable the contact's reply is saved under. Once named, you can reuse the reply later with `@results.`, for example `@results.age`. - **Continue when there is no response for**: optional. Lets the flow move on if the contact never replies, instead of waiting forever. See Handling no response below for details. +**The Other branch** + +If you leave every criteria row blank, the node has a single **All Responses** branch that accepts any reply. + +![Wait for Response node with no criteria filled in, showing a single All Responses branch](../../../../static/img/flows/flows_wait_for_response_all_responses_branch.png) + +As soon as you fill in at least one criteria row, an automatic **Other** branch is added alongside it, for replies that don't match any of your rows. + +![Wait for Response node with one filled-in criteria row (Yes), showing the automatic Other branch next to it](../../../../static/img/flows/flows_wait_for_response_other_branch.png) + --- ## Response Types diff --git a/static/img/flows/flows_wait_for_response_all_responses_branch.png b/static/img/flows/flows_wait_for_response_all_responses_branch.png new file mode 100644 index 0000000000000000000000000000000000000000..02a86ca6a98b9db4fe314b558391e4c9430945bb GIT binary patch literal 7008 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 literal 0 HcmV?d00001 diff --git a/static/img/flows/flows_wait_for_response_other_branch.png b/static/img/flows/flows_wait_for_response_other_branch.png new file mode 100644 index 0000000000000000000000000000000000000000..709b379803a0457a6164963b5a642d3366edfd56 GIT binary patch literal 10354 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 literal 0 HcmV?d00001 From 3dd72ef6a261bb0e04bc54aa9909dfc9978eff97 Mon Sep 17 00:00:00 2001 From: Tech4Dev Date: Mon, 3 Aug 2026 17:20:28 +0530 Subject: [PATCH 10/16] Address latest CodeRabbit review: MD022 spacing, reminder chaining wording - Add a blank line after every ### heading in the file (MD022), not just the newly added ones, for consistency across the whole page. - Reword the reminder-chaining explanation: "chaining as many times as you like" read as contradicting "up to 3 times". Clarified that there's no automatic counter -- the reminder count is simply how many Wait for Response nodes you chain, so three chained nodes give the three reminders in the example. Continues glific/docs#665 --- .../04. Wait for the contact to respond.md | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md b/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md index e42af0d1c8..60471b585d 100644 --- a/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md +++ b/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md @@ -20,6 +20,7 @@ Note: the contact variable can be used across flows, but the result variable is --- ## Why use Wait for Response? + The Wait for Response node is essential whenever a flow needs input from the contact. Common use cases include: - Gathering registration details (e.g., name, age, email). - Conducting surveys or quizzes. @@ -84,6 +85,7 @@ As soon as you fill in at least one criteria row, an automatic **Other** branch ![Response type dropdown showing has any of the words, has multiple values, has all of the words, has the phrase, has only the phrase, and starts with](../../../../static/img/flows/flows_wait_for_response_criteria.png) ### 1. has any of the words + This option accepts the input if it contains any of the words defined in the response criteria. Multiple words can be added, separated by commas. For example, if the criteria include Yes, Y, Ya, Yup, then any of these responses will be treated as valid. Also, if the field is left blank, any text response from the user will be accepted. @@ -91,22 +93,27 @@ Also, if the field is left blank, any text response from the user will be accept ### 2. has multiple values + This option accepts the input only if every word in it is one of the words defined in the response criteria. Unlike "has all of the words," it does not require every listed word to be present — the reply just cannot contain anything outside the list. For example, if the criteria include red, blue, green, then "red blue" and "green" will be treated as valid, but "red yellow" will not, since yellow is not in the list. ### 3. has all of the words + This option accepts the input if it contains all of the words defined in the response criteria, in any order. The input can also contain other words besides the ones listed. For example, if the criteria include cat, dog, then "I have a dog and a cat" will be treated as valid, but "I have a dog" will not, since it is missing cat. ### 4. has the phrase + This option accepts the input if it contains the exact phrase defined in the response criteria, with the words in that same order, anywhere in the message. The input can have other words before or after the phrase. For example, if the criterion is customer support, then "I need customer support please" will be treated as valid, but "I need support from a customer" will not, since the words are not in that order. ### 5. has only the phrase + This option accepts the input only if it matches the response criteria exactly, with nothing else added. For example, if the criterion is yes please, then "yes please" will be treated as valid, but "yes please now" will not, since it has an extra word. ### 6. starts with + This option accepts the input only if it begins with the exact text defined in the response criteria. For example, if the criterion is order, then "order 123" will be treated as valid, but "my order is 123" will not, since it does not start with "order". @@ -116,6 +123,7 @@ For example, if the criterion is order, then "order 123" will be treated as vali ## Numeric responses ### 1. Has a number + Accepts any numeric input as a valid response. Any non-numeric input is treated as invalid. In the example below, a numeric reply is categorized as "Has Number" and saved under the result name registration_number, so it can be reused later as `@results.registration_number`. @@ -123,6 +131,7 @@ In the example below, a numeric reply is categorized as "Has Number" and saved u ### 2. has a number between + Accepts input only if it is numeric and falls within the defined range. Any number outside the range is treated as invalid. In the example below, four ranges are set up under the result name age: 1-12 is categorized as Kids, 13-19 as Teens, 20-60 as Adults, and 60-100 as Sr Citizens. A reply of 15 would be categorized as Teens, while a reply of 45 would be categorized as Adults. @@ -135,6 +144,7 @@ The Adults and Sr Citizens ranges both include 60. When ranges overlap like this ### 3. has a number equal to + Accepts input only if it exactly matches the defined number. Any other number is treated as invalid. In the example below, three separate cases are set up under the result name currency: 10, 20, and 50. A reply of 20 matches only the second case and is categorized as "20". A reply of 15 would not match any case and would be treated as invalid. @@ -147,6 +157,7 @@ In the example below, three separate cases are set up under the result name curr ### 1. has a phone number + Accepts input if the response is a valid phone number. This includes mobile and landline numbers. Supported formats include: @@ -163,6 +174,7 @@ In the example below, this is categorized as "Has Phone" and saved under the res ### 2. has an email + Accepts input if the response is a valid email address. Examples: priya@example.org, contact.team@example.co.in, user+alerts@example.com @@ -175,6 +187,7 @@ In the example below, this is categorized as "Has Email" and saved under the res ## Media responses ### 1. has media + Accepts input if the response is a media file (jpeg, png, mp4). Screenshot 2025-10-08 at 2 47 19 AM @@ -189,6 +202,7 @@ To store the media file, create a result variable (in the example below, picture In this example, the syntax for the media file URL is: `@results.picture.url` ### 2. has audio + Accepts input if the response is an audio file. To store the audio file, create a result variable (in the example below, audio is given as the result name). @@ -199,6 +213,7 @@ In this example, the syntax for the audio file URL is: `@results.audio.url` ### 3. has video + Accepts input if the response is a video file (mp4 video files). To store the video file, create a result variable (in the example below, video is given as the result name). @@ -209,6 +224,7 @@ In this example, the syntax for the video file URL is: `@results.video.url` ### 4. has image + Accepts input if the response is an image file (jpeg, png). To store the image file, create a result variable (in the example below, image is given as the result name). @@ -219,6 +235,7 @@ In this example, the syntax for the image file URL is: `@results.image.url` ### 5. has file + Accepts input if the response is a document (pdf, doc). To store the file, create a result variable (in the example below, file is given as the result name). @@ -232,6 +249,7 @@ In this example, the syntax for the file URL is: `@results.file.url` ## Location ### 1. has location + Accepts input if the response is a location. Screenshot 2025-10-08 at 2 54 52 AM @@ -273,7 +291,7 @@ If a contact does not respond, you can configure the flow to continue after a se Tick **Continue when there is no response for** and choose the time gap after which the flow should move on. In the example below, a reminder is sent to the end user every hour, up to 3 times, if no response is received. -To repeat a reminder like this, connect the no-response path back into another Wait for Response node with its own timer, chaining as many times as you like. See "The no-response branch in your flow" below for what this branch looks like on the canvas. +To repeat a reminder like this, connect the no-response path to another Wait for Response node with its own timer, and connect that node's no-response path the same way for each additional reminder you want to send — three nodes chained this way gives you the three reminders in the example above. There's no automatic counter: the number of reminders is simply the number of nodes you connect. See "The no-response branch in your flow" below for what this branch looks like on the canvas. Screenshot 2025-10-08 at 3 01 07 AM From c8f7b2b102a6f4c8305213d7bf45595b5af4d904 Mon Sep 17 00:00:00 2001 From: Tech4Dev Date: Mon, 3 Aug 2026 17:27:27 +0530 Subject: [PATCH 11/16] Align vocabulary with the rest of the docs repo, drop unused admonition syntax - Replace "canvas" with "flow editor" (the term used everywhere else in this repo; "canvas" appeared nowhere else). - Replace "exit point" with "branch" ("branch" is already established in Split By docs; "exit point"/"exit" appeared nowhere else). - Convert both ":::note" admonitions to plain "Note: ..." text -- no doc in this repo uses Docusaurus admonition syntax, and this same file's own pre-existing convention is a plain "Note:" prefix. No content/claims changed, only wording to match established style. Continues glific/docs#665 --- .../04. Wait for the contact to respond.md | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md b/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md index 60471b585d..d6ae5164a7 100644 --- a/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md +++ b/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md @@ -61,7 +61,7 @@ The Wait for Response node has a few blank fields you need to fill in. Here is w - **Response criteria dropdown** (shows "has only the phrase" by default): choose how the contact's reply should be checked, for example "has any of the words" or "has a number". See Response Types below for the full list. - **Value box** (next to the criteria dropdown): the word, phrase, or number the contact's reply is checked against. Some criteria, like "has a number" or "has an email", don't need a value here since they check the type of reply instead of specific text. -- **Categorize as**: the label given to this branch. This becomes the name of the exit point you connect the rest of your flow to, so use something that describes the outcome, like "Yes" or "Has Number". +- **Categorize as**: the label given to this branch, so use something that describes the outcome, like "Yes" or "Has Number". This becomes the name of the branch you connect the rest of your flow to. - **Multiple criteria rows**: you can add more than one row of criteria. Each row becomes its own branch, so a reply can be routed differently depending on which criteria it matches. - **Result Name**: the variable the contact's reply is saved under. Once named, you can reuse the reply later with `@results.`, for example `@results.age`. - **Continue when there is no response for**: optional. Lets the flow move on if the contact never replies, instead of waiting forever. See Handling no response below for details. @@ -135,9 +135,7 @@ In the example below, a numeric reply is categorized as "Has Number" and saved u Accepts input only if it is numeric and falls within the defined range. Any number outside the range is treated as invalid. In the example below, four ranges are set up under the result name age: 1-12 is categorized as Kids, 13-19 as Teens, 20-60 as Adults, and 60-100 as Sr Citizens. A reply of 15 would be categorized as Teens, while a reply of 45 would be categorized as Adults. -:::note -The Adults and Sr Citizens ranges both include 60. When ranges overlap like this, a reply always matches the first matching row in the list — so a reply of exactly 60 is categorized as Adults, not Sr Citizens. To avoid this, use ranges that don't share a boundary number (for example, 20-59 and 60-100). -::: +Note: the Adults and Sr Citizens ranges both include 60. When ranges overlap like this, a reply always matches the first matching row in the list — so a reply of exactly 60 is categorized as Adults, not Sr Citizens. To avoid this, use ranges that don't share a boundary number (for example, 20-59 and 60-100). ![Wait for Response dialog with four "has a number between" ranges: 1-12 categorized as Kids, 13-19 as Teens, 20-60 as Adults, and 60-100 as Sr Citizens, with result name age](../../../../static/img/flows/flows_wait_for_response_number_between.png) @@ -291,7 +289,7 @@ If a contact does not respond, you can configure the flow to continue after a se Tick **Continue when there is no response for** and choose the time gap after which the flow should move on. In the example below, a reminder is sent to the end user every hour, up to 3 times, if no response is received. -To repeat a reminder like this, connect the no-response path to another Wait for Response node with its own timer, and connect that node's no-response path the same way for each additional reminder you want to send — three nodes chained this way gives you the three reminders in the example above. There's no automatic counter: the number of reminders is simply the number of nodes you connect. See "The no-response branch in your flow" below for what this branch looks like on the canvas. +To repeat a reminder like this, connect the no-response path to another Wait for Response node with its own timer, and connect that node's no-response path the same way for each additional reminder you want to send — three nodes chained this way gives you the three reminders in the example above. There's no automatic counter: the number of reminders is simply the number of nodes you connect. See "The no-response branch in your flow" below for what this branch looks like in the flow editor. Screenshot 2025-10-08 at 3 01 07 AM @@ -299,12 +297,10 @@ To repeat a reminder like this, connect the no-response path to another Wait for ## The no-response branch in your flow -Once you save a Wait for Response node with "Continue when there is no response for" ticked, an extra **No Response** branch appears on the canvas alongside your other criteria branches. You connect the rest of your flow to it the same way you would any other branch: drag from its red circle to the next node. +Once you save a Wait for Response node with "Continue when there is no response for" ticked, an extra **No Response** branch appears in the flow editor alongside your other criteria branches. You connect the rest of your flow to it the same way you would any other branch: drag from its red circle to the next node. In the example below, the node has one criteria branch (**Yes**), an automatic **Other** branch for replies that do not match any criteria, and the **No Response** branch for when the contact does not reply in time. -![Wait for Response node on the flow canvas showing Yes, Other, and No Response branches](../../../../static/img/flows/flows_wait_for_response_no_response_branch.png) +![Wait for Response node in the flow editor showing Yes, Other, and No Response branches](../../../../static/img/flows/flows_wait_for_response_no_response_branch.png) -:::note -**Other** and **No Response** are not the same thing. **Other** fires when the contact replies with something that does not match any of your criteria. **No Response** fires only when the contact does not reply at all within the time you set. -::: +Note: **Other** and **No Response** are not the same thing. **Other** fires when the contact replies with something that does not match any of your criteria. **No Response** fires only when the contact does not reply at all within the time you set. From 62f8214c325971052dba0293cf7c1ddabb9b6447 Mon Sep 17 00:00:00 2001 From: Tech4Dev Date: Wed, 5 Aug 2026 10:34:48 +0530 Subject: [PATCH 12/16] Update Last Updated date to August 2026 --- .../2. Flow Actions/04. Wait for the contact to respond.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md b/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md index d6ae5164a7..94631854d1 100644 --- a/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md +++ b/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md @@ -4,7 +4,7 @@ 5 minutes read Level: Beginner - Last Updated: October 2025 + Last Updated: August 2026 From 8522f4f7a91bd68bd23e7d768663693e6b29eea9 Mon Sep 17 00:00:00 2001 From: Tech4Dev Date: Wed, 5 Aug 2026 10:51:26 +0530 Subject: [PATCH 13/16] Fix unmatched-numeric-reply wording and missing reminder message step - The numeric response sections (has a number, has a number between, has a number equal to) said an unmatched reply is "treated as invalid" with no stated destination, contradicting "The Other branch" section which says unmatched replies always route there. Reworded all three to consistently say the reply routes to the automatic Other branch. - The reminder-chaining explanation only described connecting the No Response branch to another Wait for Response node, which extends the wait but never actually sends anything. Added the missing "Send the contact a message" node required between each pair, so the described Send message -> Wait for Response chain actually produces the reminders it claims to. Continues glific/docs#665 --- .../04. Wait for the contact to respond.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md b/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md index 94631854d1..6572a75127 100644 --- a/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md +++ b/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md @@ -124,7 +124,7 @@ For example, if the criterion is order, then "order 123" will be treated as vali ### 1. Has a number -Accepts any numeric input as a valid response. Any non-numeric input is treated as invalid. +Accepts any numeric input as a valid response. A non-numeric reply doesn't match this criterion and is routed to the automatic Other branch instead (see "The Other branch" above). In the example below, a numeric reply is categorized as "Has Number" and saved under the result name registration_number, so it can be reused later as `@results.registration_number`. Screenshot 2025-10-08 at 2 35 29 AM @@ -132,7 +132,7 @@ In the example below, a numeric reply is categorized as "Has Number" and saved u ### 2. has a number between -Accepts input only if it is numeric and falls within the defined range. Any number outside the range is treated as invalid. +Accepts input only if it is numeric and falls within the defined range. A number that doesn't fall in any of your ranges is routed to the automatic Other branch instead. In the example below, four ranges are set up under the result name age: 1-12 is categorized as Kids, 13-19 as Teens, 20-60 as Adults, and 60-100 as Sr Citizens. A reply of 15 would be categorized as Teens, while a reply of 45 would be categorized as Adults. Note: the Adults and Sr Citizens ranges both include 60. When ranges overlap like this, a reply always matches the first matching row in the list — so a reply of exactly 60 is categorized as Adults, not Sr Citizens. To avoid this, use ranges that don't share a boundary number (for example, 20-59 and 60-100). @@ -143,8 +143,8 @@ Note: the Adults and Sr Citizens ranges both include 60. When ranges overlap lik ### 3. has a number equal to -Accepts input only if it exactly matches the defined number. Any other number is treated as invalid. -In the example below, three separate cases are set up under the result name currency: 10, 20, and 50. A reply of 20 matches only the second case and is categorized as "20". A reply of 15 would not match any case and would be treated as invalid. +Accepts input only if it exactly matches the defined number. Any other number is routed to the automatic Other branch instead. +In the example below, three separate cases are set up under the result name currency: 10, 20, and 50. A reply of 20 matches only the second case and is categorized as "20". A reply of 15 would not match any case and would be routed to the automatic Other branch. Screenshot 2025-10-08 at 2 37 57 AM @@ -289,7 +289,7 @@ If a contact does not respond, you can configure the flow to continue after a se Tick **Continue when there is no response for** and choose the time gap after which the flow should move on. In the example below, a reminder is sent to the end user every hour, up to 3 times, if no response is received. -To repeat a reminder like this, connect the no-response path to another Wait for Response node with its own timer, and connect that node's no-response path the same way for each additional reminder you want to send — three nodes chained this way gives you the three reminders in the example above. There's no automatic counter: the number of reminders is simply the number of nodes you connect. See "The no-response branch in your flow" below for what this branch looks like in the flow editor. +To repeat a reminder like this, connect the No Response branch to a **Send the contact a message** node with your reminder text, then connect that message node to another **Wait for Response** node with its own timer. Repeat this Send message → Wait for Response pair for each additional reminder you want to send — the example above uses three pairs to send three reminders. Connect the last Wait for Response node's No Response branch to wherever the flow should continue once all reminders have been sent. There's no automatic counter: the number of reminders is simply how many Send message → Wait for Response pairs you connect. See "The no-response branch in your flow" below for what the No Response branch looks like in the flow editor. Screenshot 2025-10-08 at 3 01 07 AM From 9df8c7e27f0bf8f63f5045575934f88cd0db7a54 Mon Sep 17 00:00:00 2001 From: Tech4Dev Date: Wed, 5 Aug 2026 11:31:50 +0530 Subject: [PATCH 14/16] Final polish: consistent quoting, fix has-media categorize-as gap - Consistent quoting on cross-references (Response Types, Handling no response) to match The Other branch / The no-response branch in your flow elsewhere in the doc. - has media's first screenshot never had its "categorized as" value stated in the text, unlike every other section (phone, email, number, regex all state theirs). Added it for consistency. Verified: zero MD022 violations (markdownlint-cli2), all image paths resolve, all 4 cross-references match real section labels. Continues glific/docs#665 --- .../2. Flow Actions/04. Wait for the contact to respond.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md b/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md index 6572a75127..4cb8671198 100644 --- a/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md +++ b/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md @@ -59,12 +59,12 @@ The Wait for Response node is essential whenever a flow needs input from the con The Wait for Response node has a few blank fields you need to fill in. Here is what each one means: -- **Response criteria dropdown** (shows "has only the phrase" by default): choose how the contact's reply should be checked, for example "has any of the words" or "has a number". See Response Types below for the full list. +- **Response criteria dropdown** (shows "has only the phrase" by default): choose how the contact's reply should be checked, for example "has any of the words" or "has a number". See "Response Types" below for the full list. - **Value box** (next to the criteria dropdown): the word, phrase, or number the contact's reply is checked against. Some criteria, like "has a number" or "has an email", don't need a value here since they check the type of reply instead of specific text. - **Categorize as**: the label given to this branch, so use something that describes the outcome, like "Yes" or "Has Number". This becomes the name of the branch you connect the rest of your flow to. - **Multiple criteria rows**: you can add more than one row of criteria. Each row becomes its own branch, so a reply can be routed differently depending on which criteria it matches. - **Result Name**: the variable the contact's reply is saved under. Once named, you can reuse the reply later with `@results.`, for example `@results.age`. -- **Continue when there is no response for**: optional. Lets the flow move on if the contact never replies, instead of waiting forever. See Handling no response below for details. +- **Continue when there is no response for**: optional. Lets the flow move on if the contact never replies, instead of waiting forever. See "Handling no response" below for details. **The Other branch** @@ -186,7 +186,7 @@ In the example below, this is categorized as "Has Email" and saved under the res ### 1. has media -Accepts input if the response is a media file (jpeg, png, mp4). +Accepts input if the response is a media file (jpeg, png, mp4). In the example below, this is categorized as "Has Media". Screenshot 2025-10-08 at 2 47 19 AM From ae5e79f81e0ef3979564625186e10301a1af07b1 Mon Sep 17 00:00:00 2001 From: Tech4Dev Date: Wed, 5 Aug 2026 13:42:04 +0530 Subject: [PATCH 15/16] Three-pass final review: vocabulary, style/tone, content/logic - Bold "Other" consistently in the numeric-response sections, matching its styling everywhere else it's used as the branch name. - Align terminology: has-a-number-equal-to called its rows "cases" while every other section calls them "rows" -- switched to "rows". - Quote category labels ("Kids", "Teens", "Adults", "Sr Citizens") consistently with every other categorize-as example in the doc. - Restructure the reminder-chaining explanation from one dense five-sentence paragraph into numbered steps, matching the doc's own "How to configure" convention for sequential instructions. Clarify that each repeated pair connects to the previous node's No Response branch, not the original one. - Re-verified: zero MD022 violations, all image paths resolve, no curly quotes, all four "see X above/below" cross-references still point in the correct direction after restructuring. Continues glific/docs#665 --- .../04. Wait for the contact to respond.md | 23 ++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md b/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md index 4cb8671198..5681cc648c 100644 --- a/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md +++ b/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md @@ -124,7 +124,7 @@ For example, if the criterion is order, then "order 123" will be treated as vali ### 1. Has a number -Accepts any numeric input as a valid response. A non-numeric reply doesn't match this criterion and is routed to the automatic Other branch instead (see "The Other branch" above). +Accepts any numeric input as a valid response. A non-numeric reply doesn't match this criterion and is routed to the automatic **Other** branch instead (see "The Other branch" above). In the example below, a numeric reply is categorized as "Has Number" and saved under the result name registration_number, so it can be reused later as `@results.registration_number`. Screenshot 2025-10-08 at 2 35 29 AM @@ -132,10 +132,10 @@ In the example below, a numeric reply is categorized as "Has Number" and saved u ### 2. has a number between -Accepts input only if it is numeric and falls within the defined range. A number that doesn't fall in any of your ranges is routed to the automatic Other branch instead. -In the example below, four ranges are set up under the result name age: 1-12 is categorized as Kids, 13-19 as Teens, 20-60 as Adults, and 60-100 as Sr Citizens. A reply of 15 would be categorized as Teens, while a reply of 45 would be categorized as Adults. +Accepts input only if it is numeric and falls within the defined range. A number that doesn't fall in any of your ranges is routed to the automatic **Other** branch instead. +In the example below, four ranges are set up under the result name age: 1-12 is categorized as "Kids", 13-19 as "Teens", 20-60 as "Adults", and 60-100 as "Sr Citizens". A reply of 15 would be categorized as "Teens", while a reply of 45 would be categorized as "Adults". -Note: the Adults and Sr Citizens ranges both include 60. When ranges overlap like this, a reply always matches the first matching row in the list — so a reply of exactly 60 is categorized as Adults, not Sr Citizens. To avoid this, use ranges that don't share a boundary number (for example, 20-59 and 60-100). +Note: the "Adults" and "Sr Citizens" ranges both include 60. When ranges overlap like this, a reply always matches the first matching row in the list — so a reply of exactly 60 is categorized as "Adults", not "Sr Citizens". To avoid this, use ranges that don't share a boundary number (for example, 20-59 and 60-100). ![Wait for Response dialog with four "has a number between" ranges: 1-12 categorized as Kids, 13-19 as Teens, 20-60 as Adults, and 60-100 as Sr Citizens, with result name age](../../../../static/img/flows/flows_wait_for_response_number_between.png) @@ -143,8 +143,8 @@ Note: the Adults and Sr Citizens ranges both include 60. When ranges overlap lik ### 3. has a number equal to -Accepts input only if it exactly matches the defined number. Any other number is routed to the automatic Other branch instead. -In the example below, three separate cases are set up under the result name currency: 10, 20, and 50. A reply of 20 matches only the second case and is categorized as "20". A reply of 15 would not match any case and would be routed to the automatic Other branch. +Accepts input only if it exactly matches the defined number. Any other number is routed to the automatic **Other** branch instead. +In the example below, three separate rows are set up under the result name currency: 10, 20, and 50. A reply of 20 matches only the second row and is categorized as "20". A reply of 15 would not match any row and would be routed to the automatic **Other** branch. Screenshot 2025-10-08 at 2 37 57 AM @@ -287,9 +287,16 @@ In the example below, this is categorized as "correct format" and saved under th If a contact does not respond, you can configure the flow to continue after a set wait time, instead of waiting forever. -Tick **Continue when there is no response for** and choose the time gap after which the flow should move on. In the example below, a reminder is sent to the end user every hour, up to 3 times, if no response is received. +Tick **Continue when there is no response for** and choose the time gap after which the flow should move on. The screenshot below shows a single Wait for Response node configured to wait 1 hour before continuing down the **No Response** branch. -To repeat a reminder like this, connect the No Response branch to a **Send the contact a message** node with your reminder text, then connect that message node to another **Wait for Response** node with its own timer. Repeat this Send message → Wait for Response pair for each additional reminder you want to send — the example above uses three pairs to send three reminders. Connect the last Wait for Response node's No Response branch to wherever the flow should continue once all reminders have been sent. There's no automatic counter: the number of reminders is simply how many Send message → Wait for Response pairs you connect. See "The no-response branch in your flow" below for what the No Response branch looks like in the flow editor. +To send a reminder before giving up — for example, a reminder every hour, up to 3 times — chain **Send the contact a message** and **Wait for Response** nodes together: + +1. Connect the No Response branch to a **Send the contact a message** node with your reminder text. +2. Connect that message node to another **Wait for Response** node with its own timer. +3. For each additional reminder, repeat steps 1 and 2, connecting the new pair to the previous **Wait for Response** node's No Response branch — three pairs chained this way send three reminders. +4. Connect the last **Wait for Response** node's No Response branch to wherever the flow should continue once all reminders have been sent. + +There's no automatic counter: the number of reminders is simply how many Send message → Wait for Response pairs you connect. See "The no-response branch in your flow" below for what the No Response branch looks like in the flow editor. Screenshot 2025-10-08 at 3 01 07 AM From 2b73d855ed722b05a95375e20752d6bd38290cf9 Mon Sep 17 00:00:00 2001 From: Tech4Dev Date: Wed, 5 Aug 2026 19:19:41 +0530 Subject: [PATCH 16/16] Fix note placement, clarify Result Name step, reorder for logical flow - Move the contact-variable-vs-result-variable note from the intro (before either concept was introduced) to right after Result Name is defined in "Understanding the fields in this node". - Clarify "Give a Result Name (this becomes your variable)" -> spell out that it's the result variable that stores the contact's reply. - "for replies that don't match any of your rows" -> "criteria", matching the phrasing used for the same concept in "The no-response branch in your flow". - Reorder Text-based responses so "has all of the words" (a direct contrast with "has any of the words") comes right after it, with "has multiple values" following -- logical teaching order rather than raw dropdown order. Renumbered 1-6 accordingly; the dropdown screenshot's alt text still accurately describes the actual UI order, which differs from this teaching order intentionally. Continues glific/docs#665 --- .../04. Wait for the contact to respond.md | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md b/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md index 5681cc648c..01003efd66 100644 --- a/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md +++ b/docs/4. Product Features/03. Flows/2. Flow Actions/04. Wait for the contact to respond.md @@ -15,8 +15,6 @@ The Wait for Response node is used whenever the flow needs to pause and collect Once the response is received, it can be validated, stored in a variable, and reused later in the same flow or across different flows. -Note: the contact variable can be used across flows, but the result variable is limited to the same flow. - --- ## Why use Wait for Response? @@ -41,7 +39,7 @@ The Wait for Response node is essential whenever a flow needs input from the con -**3. Give a Result Name (this becomes your variable).** +**3. Give a Result Name (this becomes the result variable that stores the contact's reply).** **4. (Optional) Check Continue when there is no response to nudge the users to respond.** @@ -66,13 +64,15 @@ The Wait for Response node has a few blank fields you need to fill in. Here is w - **Result Name**: the variable the contact's reply is saved under. Once named, you can reuse the reply later with `@results.`, for example `@results.age`. - **Continue when there is no response for**: optional. Lets the flow move on if the contact never replies, instead of waiting forever. See "Handling no response" below for details. +Note: the contact variable can be used across flows, but the result variable (the one named in Result Name) is limited to the same flow. + **The Other branch** If you leave every criteria row blank, the node has a single **All Responses** branch that accepts any reply. ![Wait for Response node with no criteria filled in, showing a single All Responses branch](../../../../static/img/flows/flows_wait_for_response_all_responses_branch.png) -As soon as you fill in at least one criteria row, an automatic **Other** branch is added alongside it, for replies that don't match any of your rows. +As soon as you fill in at least one criteria row, an automatic **Other** branch is added alongside it, for replies that don't match any of your criteria. ![Wait for Response node with one filled-in criteria row (Yes), showing the automatic Other branch next to it](../../../../static/img/flows/flows_wait_for_response_other_branch.png) @@ -92,16 +92,16 @@ Also, if the field is left blank, any text response from the user will be accept Screenshot 2025-10-08 at 2 28 48 AM -### 2. has multiple values - -This option accepts the input only if every word in it is one of the words defined in the response criteria. Unlike "has all of the words," it does not require every listed word to be present — the reply just cannot contain anything outside the list. -For example, if the criteria include red, blue, green, then "red blue" and "green" will be treated as valid, but "red yellow" will not, since yellow is not in the list. - -### 3. has all of the words +### 2. has all of the words This option accepts the input if it contains all of the words defined in the response criteria, in any order. The input can also contain other words besides the ones listed. For example, if the criteria include cat, dog, then "I have a dog and a cat" will be treated as valid, but "I have a dog" will not, since it is missing cat. +### 3. has multiple values + +This option accepts the input only if every word in it is one of the words defined in the response criteria. Unlike "has all of the words," it does not require every listed word to be present — the reply just cannot contain anything outside the list. +For example, if the criteria include red, blue, green, then "red blue" and "green" will be treated as valid, but "red yellow" will not, since yellow is not in the list. + ### 4. has the phrase This option accepts the input if it contains the exact phrase defined in the response criteria, with the words in that same order, anywhere in the message. The input can have other words before or after the phrase.