Input: {"body":{"messages":[{"content":"You need to tag the input with the following labels based on the question asked:\nABSOLUTELY_NOT: You are absolutely sure that the answer is \"NO\" to the question.\nPROBABLY_NOT: You are leaning towards \"NO\" to the question.\nAMBIGUOUS: You are unsure about the answer to the question.\nPROBABLY_YES: You are leaning towards \"YES\" to the question.\nABSOLUTELY_YES: You are absolutely sure that the answer is \"YES\" to the question.\n\nYou need to return a mapping of the labels, an explanation and the answer for each label following the format below:\n```\n■is_about_animals:【explanation (where \"explanation\" is answering the question \"is the text about animals?\")】:x■ (where x is ABSOLUTELY_NOT | PROBABLY_NOT | AMBIGUOUS | PROBABLY_YES | ABSOLUTELY_YES)\n\n■contains_lua_code:【explanation (where \"explanation\" is answering the question \"does the text contain Lua code?\")】:x■ (where x is ABSOLUTELY_NOT | PROBABLY_NOT | AMBIGUOUS | PROBABLY_YES | ABSOLUTELY_YES)\n\n■contains_python_code:【explanation (where \"explanation\" is answering the question \"does the text contain Python code?\")】:x■ (where x is ABSOLUTELY_NOT | PROBABLY_NOT | AMBIGUOUS | PROBABLY_YES | ABSOLUTELY_YES)\n\n■contains_js_code:【explanation (where \"explanation\" is answering the question \"does the text contain JavaScript code?\")】:x■ (where x is ABSOLUTELY_NOT | PROBABLY_NOT | AMBIGUOUS | PROBABLY_YES | ABSOLUTELY_YES)\n\n■is_botpress:【explanation (where \"explanation\" is answering the question \"is the text about Botpress?\")】:x■ (where x is ABSOLUTELY_NOT | PROBABLY_NOT | AMBIGUOUS | PROBABLY_YES | ABSOLUTELY_YES)\n\n■is_rasa:【explanation (where \"explanation\" is answering the question \"is the text about Rasa?\")】:x■ (where x is ABSOLUTELY_NOT | PROBABLY_NOT | AMBIGUOUS | PROBABLY_YES | ABSOLUTELY_YES)\n\n■has_flows:【explanation (where \"explanation\" is answering the question \"does the text mention flows?\")】:x■ (where x is ABSOLUTELY_NOT | PROBABLY_NOT | AMBIGUOUS | PROBABLY_YES | ABSOLUTELY_YES)\n\n■has_api:【explanation (where \"explanation\" is answering the question \"does the text mention the Botpress API?\")】:x■ (where x is ABSOLUTELY_NOT | PROBABLY_NOT | AMBIGUOUS | PROBABLY_YES | ABSOLUTELY_YES)\n\n■has_enterprise:【explanation (where \"explanation\" is answering the question \"does the text mention Botpress Enterprise?\")】:x■ (where x is ABSOLUTELY_NOT | PROBABLY_NOT | AMBIGUOUS | PROBABLY_YES | ABSOLUTELY_YES)\n\n■has_workspaces:【explanation (where \"explanation\" is answering the question \"does the text mention workspaces?\")】:x■ (where x is ABSOLUTELY_NOT | PROBABLY_NOT | AMBIGUOUS | PROBABLY_YES | ABSOLUTELY_YES)\n\n■has_webchat:【explanation (where \"explanation\" is answering the question \"does the text mention the Webchat?\")】:x■ (where x is ABSOLUTELY_NOT | PROBABLY_NOT | AMBIGUOUS | PROBABLY_YES | ABSOLUTELY_YES)\n\n■has_hitl:【explanation (where \"explanation\" is answering the question \"does the text mention HITL (human in the loop)?\")】:x■ (where x is ABSOLUTELY_NOT | PROBABLY_NOT | AMBIGUOUS | PROBABLY_YES | ABSOLUTELY_YES)\n■END■\n```\n\nundefined\n\n===\nYou should consider the Expert Examples below to help you make your decision.\nIn your \"Analysis\", please refer to the Expert Examples # to justify your decision.","role":"system"},{"content":"Input to tag:\n<|start_input|>\n conversationId: '6ffe8622-49fd-4de9-81e5-412ba2296913' })\n`\nTo load a conversation, you must provide the conversation ID. You can get the conversation ID from the event payload of a `MESSAGE.SENT` event.\n---\nSending messages or instructions from your website\n[](#sending-messages-or-instructions-from-your-website)\nYou can use the `sendPayload` function to send a specific message (or instruction) to the chatbot. For sending instructions, please refer to [Triggers](../docs/events-1#webchat-triggers).\nJavaScript\n`window.botpressWebChat.sendPayload({ type: 'text', text: 'I am a message sent through code' })\n`\nYou can see examples of all of the message types you can send to the chatbot [here](https://github.com/botpress/messaging/blob/master/packages/channels/example/payloads.json).\n---\nListening to Widget Events\n[](#listening-to-widget-events)\nThis function lets you listen for certain events happening in the chat and then do something when they happen. It's like setting up a watch for specific actions.\nYou can find the list of events [here](../docs/events-1#webchat-lifecycle-and-events).\nJavaScript\n`window.botpressWebChat.onEvent(\n(event) => {\nif (event.type === 'MESSAGE.RECEIVED') {\nconsole.log('A new message was received!')\n}\n},\n['MESSAGE.RECEIVED']\n)\n`\nNext Steps\n[](#next-steps)\n* [Styling your Webchat](https://styler.botpress.app)\n* [Embedding your Webchat on React App](../docs/react-app)\n* [Embedding your Webchat on Webflow Site](../docs/webflow)\nUpdated 4 months ago\n---\n* [Table of Contents](#)\n* * [Controlling the Webchat Widget](#controlling-the-webchat-widget)  \n   * [Initializing the Widget](#initializing-the-widget)  \n   * [Changing the Widget's Configuration](#changing-the-widgets-configuration)  \n   * [Send user data from your website to Botpress](#send-user-data-from-your-website-to-botpress)  \n   * [Trigger Widget Actions](#trigger-widget-actions)  \n   * [Sending messages or instructions from your website](#sending-messages-or-instructions-from-your-website)  \n   * [Listening to Widget Events](#listening-to-widget-events)  \n   * [Next Steps](#next-steps)[Jump to Content](#content)\n[![Botpress](https://files.readme.io/c8cb63b6d586cd66085b4c960570959a424c7050c5ffeb0aeaf31711e2e1b2ac-small-BPLOGO_new_dark_1.png)](https://botpress.com)\n[Guides](/docs)[API Reference](/reference)[Changelog](/changelog)\n---\n[![Botpress](https://files.readme.io/c8cb63b6d586cd66085b4c960570959a424c7050c5ffeb0aeaf31711e2e1b2ac-small-BPLOGO_new_dark_1.png)](https://botpress.com)\nGuides\nMoon (Dark Mode)Sun (Light Mode)\n[Guides](/docs)[API Reference](/reference)[Changelog](/changelog)\nCapture Information\nSearch\n## Home\n* [Botpress Documentation](/docs/home)\n## Getting Started\n* [Build](/docs/build)\n* [Deploy](/docs/deploy)\n* [Monitor](/docs/monitor)\n## DASHBOARD\n* [Workspace](/docs/workspace)  \n   * [Home](/docs/home-1)  \n   * [Members](/docs/members)  \n   * [Audits](/docs/audits)  \n   * [Your integrations](/docs/your-integrations)  \n   * [Usage](/docs/usage-2)  \n   * [Settings](/docs/settings)  \n   * [Profile Setting](/docs/user-profile)\n* [Bot](/docs/bot)  \n   * [Overview](/docs/overview-1)  \n   * [Integrations](/docs/integrations-1)  \n   * [Webchat](/docs/webchat-1)  \n   * [Logs](/docs/logs)  \n   * [Conversations](/docs/conversations)  \n   * [Analytics](/docs/analytics-1)  \n   * [Events](/docs/events-2)  \n   * [Issues](/docs/issues)  \n   * [Configuration variables](/docs/configuration-variables-1)\n## STUDIO\n* [Interface](/docs/interface)  \n   * [Nodes](/docs/nodes)  \n   * [Home](/docs/home-2)  \n   * [Flows](/docs/studio-interface-flows)  \n   * [Knowledge Base](/docs/knowledge-base)  \n   * [Tables](/docs/tables)  \n   * [Agents](/docs/agents)  \n         * [Summary Agent](/docs/summary-agent)  \n         * [Personality Agent](/docs/personality-agent)  \n         * [Policy Agent](/docs/policy-agent)  \n         * [Translator Agent](/docs/translator-agent)  \n         * [Knowledge Agent](/docs/knowledge-agent)  \n         * [HITL Agent](/docs/hitl-agent)  \n         * [Vision Agent](/docs/vision-agent)  \n         * [Analytics Agent](/docs/analytics-agent)  \n   * [Library](/docs/library)  \n   * [Hooks](/docs/hooks)  \n   * [Integrations](/docs/integrations-3)  \n   * [Schemas](/docs/schemas)  \n   * [Card Hub](/docs/card-hub)  \n   * [Versions](/docs/versions-1)  \n   * [Chatbot Settings](/docs/chatbot-settings-1)  \n   * [Find](/docs/find)  \n   * [Variables](/docs/variables)  \n   * [Card Tray](/docs/card-tray)  \n   * [Debugger, Logs & JSON](/docs/debugger-logs-json)  \n   * [Emulator](/docs/emulator)  \n   * [Keyboard Shortcuts](/docs/keyboard-shortcuts)  \n   * [Commands](/docs/studio-commands)  \n   * [Studio Preferences](/docs/studio-preferences)  \n   * [Import & Export](/docs/import-export-bots)\n* [Cards](/docs/cards)  \n   * [Send Messages](/docs/send-messages)  \n   * [Execute](/docs/execute)  \n   * [Webchat](/docs/webchat-2)  \n   * [Flow Logic](/docs/flow-logic)  \n   * [AI](/docs/ai)  \n        \n* [Webchat](/docs/webchat-2)  \n   * [Flow Logic](/docs/flow-logic)  \n   * [AI](/docs/ai)  \n         * [AI Task](/docs/ai-task-1)  \n         * [AI Transition](/docs/ai-transition)  \n         * [AI Generate Text](/docs/ai-generate-text)  \n   * [Capture Information](/docs/capture-information)  \n   * [Events](/docs/events-3)  \n   * [Agents](/docs/agents-2)  \n   * [Utilities](/docs/utilities)\n## integrations\n* [Usage](/docs/using-integrations)  \n   * [Asana](/docs/asana-integration)  \n   * [HITL](/docs/hitl-1)  \n   * [Instagram](/docs/instagram)  \n   * [Intercom](/docs/intercom)  \n   * [Line](/docs/line)  \n   * [Messenger](/docs/messenger)  \n   * [Microsoft Teams](/docs/microsoft-teams)  \n   * [Notion](/docs/notion)  \n   * [Slack](/docs/slack)  \n   * [Sunshine Conversations](/docs/sunshine-conversations)  \n   * [Telegram](/docs/telegram)  \n   * [Trello](/docs/trello)  \n   * [Twilio](/docs/twilio)  \n   * [Viber](/docs/viber)  \n   * [Vonage](/docs/vonage)  \n   * [Webhook](/docs/webhook)  \n   * [WhatsApp](/docs/whatsapp)  \n         * [Manual Configuration](/docs/manual-configuration)  \n   * [Zapier](/docs/zapier)  \n   * [Zendesk](/docs/zendesk)\n* [Building](/docs/building-integrations)  \n   * [Getting Started](/docs/getting-started-1)  \n         * [Getting Started](/docs/getting-started-1)  \n         * [Adding Messaging Channel Capabilities](/docs/adding-messaging-channel-capabilities)  \n         * [Adding Actions & Triggers to Botpress Studio](/docs/adding-actions-triggers-to-botpress-studio)  \n         * [Publish your integration on Botpress Hub](/docs/publish-your-integration-on-botpress-hub)  \n   * [Use Your Own LLM](/docs/llm-interfaces)  \n   * [Connect a live agent platform with Botpress](/docs/hitl)  \n   * [Moving Parts](/docs/moving-parts)  \n   * [CLI](/docs/cli)  \n   * [SDK](/docs/sdk)  \n   * [Key Concepts](/docs/key-concepts)  \n         * [Architecture](/docs/architecture)\n/docs/sdk)  \n   * [Key Concepts](/docs/key-concepts)  \n         * [Architecture](/docs/architecture)  \n         * [Tags](/docs/tags)  \n         * [Channels](/docs/channels)  \n         * [Configuration](/docs/configuration)  \n         * [User](/docs/user)  \n         * [Conversations](/docs/conversations-1)  \n         * [Messages](/docs/messages)  \n         * [Event](/docs/event)  \n         * [States](/docs/states-1)  \n         * [Actions](/docs/actions)  \n         * [Definitions](/docs/definitions)  \n         * [Secrets](/docs/secrets)  \n         * [ZUI - Zod schema UI components in Botpress \\[BETA\\]](/docs/zui-zod-schema-ui-components-in-botpress)  \n   * [How to](/docs/states)  \n         * [States](/docs/states)  \n         * [Register & Unregister](/docs/register-unregister)  \n         * [Integrations Actions](/docs/integrations)  \n         * [Integration Events](/docs/integration-events)  \n         * [Handler](/docs/handler)  \n         * [Logging](/docs/logging)  \n         * [Building a Custom Integration](/docs/building-a-custom-integration)\n## Webchat\n* [Webchat](/docs/webchat)  \n   * [Webflow](/docs/webflow)  \n   * [Wix](/docs/wix)  \n   * [Wordpress](/docs/wordpress)\n* [Webchat v1 (deprecated)](/docs/web-chat-v1old)  \n   * [Controlling Web Chat using JavaScript](/docs/controlling-web-chat-using-javascript)  \n   * [Styling your webchat](/docs/chatbot-button)  \n         * [Chatbot Button](/docs/chatbot-button)  \n         * [Chat Header](/docs/chat-header)  \n         * [User Input Area](/docs/user-input-area)  \n         * [Show Bot Info](/docs/show-bot-info)  \n   * [Embedding Webchat](/docs/react-app)  \n         * [React App](/docs/react-app)  \n         * [React Native App](/docs/react-native-app)  \n         * [Web Chat Iframe](/docs/web-chat-iframe)  \n         * [Full Screen Chatbot](/docs/full-screen-chatbot)\n* [Webchat v2](/docs/embedded-webchat)  \n   * [Embedded Webchat](/docs/embedded-webchat)  \n         * [Custom CSS Reference](/docs/custom-css-reference)  \n   * [React Components](/docs/react-js)  \n   * [Webchat Client](/docs/webchat-client)\n## Botpress APIs\n* [Files API](/docs/files-api)\n* [Chat API](/docs/chat-api)\n## Appendix\n* [Safety](/docs/safety)  \n   * [Preventing Abuse](/docs/preventing-abuse)  \n   * [Brand Safety Framework](/docs/brand-safety-framework)\n* [Exporting Data](/docs/exporting-data)  \n   * [Raw Conversations](/docs/exporting-raw-conversations-with-the-botpress-api)  \n   * [Conversation History](/docs/getting-the-conversation-history-from-within-your-bot)  \n   * [Streaming Analytics](/docs/streaming-analytics-from-within-your-bot-with-hooks)  \n   * [Compiled Bot Analytics](/docs/exporting-compiled-bot-analytics-with-the-botpress-api)\nPowered by\n# Capture Information\nCards that stop the bot's workflow and waits for a user's response to capture specific pieces of information.\n[ Suggest Edits](/edit/capture-information)\n**Capture Information** cards instruct the bot to stop processing and wait for the user's response while capturing a specific piece of information from the user's input.\nThis could include details like the user's name, full address, or raw input.\nTo collect multiple pieces of information, multiple prompt fields can be added to a single prompt node. Once the information is collected, a flow variable should be created to store the extracted information for later use in the conversation or to be passed on to other systems. This allows for a more personalized and efficient experience for the user, as well as providing valuable data for the chatbot's developers.\nPrompt Field Types\n[](#prompt-field-types)\nA Prompt Field is a type of input field that is used to capture information from a user in a structured and organized manner. It can include various types of input fields such as Single Choice, Multiple Choice, Number, Email Address, Phone Number, and more.\nThe Prompt Field also includes validation messages and code validation, which helps ensure that the user inputs the correct type of information. This means that if the user inputs an invalid value, they will be notified with an error message and prompted to re-enter the correct information.\n| **Prompt Fields**                                                             | **Description & Extracted Information**                                                                                |\n| ----------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |\n| [SingleChoice](../docs/capture-information#single-choice)                     | Extracts a Single Choice from a finite list of possible ValuesVariable Type: String                                                           |\n| [MultipleChoice](../docs/capture-information#multi-choice)                    | Extracts one or multiple choices from a finite list of possible ValuesVariable Type: String                                                   |\n| [Boolean](../docs/capture-information#boolean)                                | Extract a Boolean (On/Off) from the QueryVariable Type: Boolean                                                                               |\n| [Confirmation](../docs/capture-information#confirmation)                      | Confirm a Yes/No question with a Boolean from the QueryVariable Type: Boolean                                                                 |\n| [Number](../docs/capture-information#number)                                  | Extracts a Number from the QueryVariable Type: Number                                                                                |\n| [EmailAddress](../docs/capture-information#email-address)                     | Extracts a full Email Address from the QueryVariable Type: String                                                                             |\n| [PhoneNumber](../docs/capture-information#phone-number)                       | Extracts a Telephone Number and optionally the Country Code from the QueryVariable Type: String                                               |\n| [FullAddress](../docs/capture-information#fulladdress)                        | Extract the Full Address from the QueryVariable Type: Object                                                                                |\n| [Price](https://botpress.com/docs/cloud/toolbox/capture-information/#price)   | Extracts a Price from the QueryVariable Type: Number                                                                                |\n| [RawInput](../docs/capture-information#raw-input)                             | Extract the Input provided by the User, without any processingVariable Type: String                                                           |\n| [Percentage](../docs/capture-information#percentage)                          | Extracts a Percentage from the QueryVariable Type: Number                                                                                |\n| [Quantity](../docs/capture-information#quantity)                              | Extract a Quantity from a QueryVariable Type: Number                                                                                |\n| [Color](../docs/capture-information#color)                                    | Extracts a Color as both HEX and RGB codes from the QueryVariable Type: Object                                                                |\n| [TimeMeasurement](../docs/capture-information#time-measurement)               | Extracts a time measurement as (ns, mu, ms, s, min, h, d, week, month, year) UnitsVariable Type: Number                                       |\n| [WeightMeasurement](../docs/capture-information#weight-measurement)           | Extracts a Weight Measurement as (mcg, mg, g, kg, oz, lb, mt, t) UnitsVariable Type: Number                                                   |\n| [CronSchedule](../docs/capture-information#cron-schedule)                     | Extracts a one-time or recurring schedule as a CRON Expression from the QueryVariable Type: Object                                            |\n| [OperatingSystem](../docs/capture-information#operating-system)               | Extracts the name of an Operating System (Windows, OSX, IOS, Android, Linux)Variable Type: Object                                             |\n| [QuantityofPeople](../docs/capture-information#quantity-of-people)            | Extracts the Number of People in a QueryVariable Type: Number                                                                                |\n| [VolumeMeasurement](../docs/capture-information#volume-measurement)           | Extracts a volume measurement as (mm3, cm3, ml, l, kl, m3, km3, tsp, Tbs, in3, fl-oz, cup, pnt, qt, gal, ft3, yd3) UnitsVariable Type: Number |\n| [TemperatureMeasurement](../docs/capture-information#temperature-measurement) | Extracts a Temperature Measurement as (C, K, F) UnitsVariable Type: Number                                                                    |\n| [Person](../docs/capture-information#person)                                  | Extracts the name of a person(first and last names)Variable Type: Object                                                                      |\n| [DateTime](../docs/capture-information#datetime)                              | Extracts date and time relative to the current dateVariable Type: Date                                                                        |\nSingle Choice\n[](#single-choice)\nThe **Single Choice** is a type of input field that presents the user with a list of options to choose from. The user can only select **one** option from the list, and their choice is then stored as a value in a variable. This variable can be used later in your workflow for further processing.\n> ## ��\n>\n> Tip\n>\n> If the user enters text instead of clicking a button, the AI will search their text for any of the button options, and, if there is an option the user's text will be treated as if they clicked the button.\nAn example of Single Choice would be a survey question with multiple options, where the user selects one answer from the list.\n**Steps to use Single Choice Field**\n1. Create a new capture information card.\n2. Set the Type property to **Single Choice**.\n3. Set the **Variable name** property to the name of the workflow variable you want to use to store the selected option.\n4. Set the **Prompt message** property to a message that lists the available options for the user to choose from.\n5. Click on the **Advanced Configuration** to add Choices.\nOnce the card is used, it will present the available options to the user and allow them to select only one. The selected option will be saved in the workflow variable you specified, and you can use it in other parts of your workflow to make decisions or take actions based on the user's choice.\n**Example**\nLet's say you want to ask the user about their preferred mode of transportation, and you have three options: car, bus, and bike. You can create a new capture information card with the following properties:\n`Type: Single Choice\nVariable name: preferredTransportation\nPrompt message: What is your preferred mode of transportation? Choose one from the following: car, bus, bike.\n`\nWhen the user selects their preferred mode of transportation, the Single Choice card will save the value in the **preferredTransportation** workflow variable. You can then use this variable to tailor the conversation based on the user's choice.\nFor example, if they choose bike, you can ask follow-up questions related to biking or suggest some scenic bike routes.\nYou can also use the value of the **preferredTransportation** variable in transitions. For example, if the user selects car, you can move them to a node related to car-related services or if they choose bus, you can move them to a node related to public transportation schedules.\nMulti Choice\n[](#multi-choice)\nThe **Multi Choice** type is a way to gather information from users by presenting them with a list of options to choose from. Users can select one or more options from the list.\nThis type of capture information is useful in scenarios where you want to give users a set of choices to pick from, like selecting the toppings for a pizza or the colors for a shirt. It's a quick and easy way to collect information from users without having to ask them to type out their answers.\n**Steps to use Multi Choice Field**\n1. Create a new capture information card.\n2. Set the Type property to **Multi Choice**.\n3. Set the **Variable name** property to the name of the workflow variable you want to use to store the extracted values.\n4. Set the **Prompt message** property to a message that provides a list of choices for the user to select from.\n5. Click on the **Advanced Configuration** to add Choices.\nOnce the card is used, it will extract the selected options from the user's input and save them in the workflow variable you specified. You can then use this variable in other parts of your workflow to make decisions or take actions based on the user's response.\n**Example**\nLet's say you want to ask the user what toppings they want on their pizza. You can create a new capture information card with the following properties:\n`Type: Multi Choice\nVariable name: pizzaToppings\nPrompt message: What toppings would you like on your pizza? Please select all that apply: pepperoni, mushrooms, onions, olives, sausage.\n`\nWhen the user enters their response, the Multi Choice card will extract the selected options and save them in the **pizzaToppings** workflow variable. You can then use this variable in other parts of your workflow to make decisions or take actions based on the user's response.\nFor example, if the user selects **pepperoni** and **mushrooms,** you can use the **pizzaToppings** variable to customise their order and display a message like **Your pizza with pepperoni and mushrooms is on the way!**\nBoolean\n[](#boolean)\n**Boolean** type extracts a binary value from the user's input and saves it in a variable of type boolean. The extracted information can include values like true and false, agree and disagree, accept and decline, or any other binary values.\n**Steps to use Boolean Field**\n1. Create a new capture information card.\n2. Set the Type property to **Boolean**.\n3. Set the **Variable name** property to the name of the workflow variable you want to use to store the extracted boolean value.\n4. Set the **Prompt message** property to a message that prompts the user to enter a binary value.\n5. Optionally, you can edit the Choices property if you want to customize the binary values that the user can select. By default, the choices are **Yes** and **No**. When the user provides an input, the system will extract either a **true** or **false** value based on whether the user selects **Yes** or **No**.\n**Example**\nLet's say you want to ask the user if they agree to the terms and conditions of service. You can create a new capture information card with the following properties:\n`Type: Boolean\nVariable name: agreeToTerms\nPrompt message: Do you agree to the terms and conditions of our service? Please enter 'yes' or 'no'.\n`\nWhen the user enters their response, the Boolean card will extract the binary value and save it in the **agreeToTerms** workflow variable as either true or false. You can then use this variable in other parts of your workflow to decide whether to proceed with the service or not.\nIf the user agrees to the terms and conditions, you can submit their request or move them to the next node, but if they disagree, you can say something like 'Sorry to hear that' and end the conversation. This will display a message based on the user's response and whether they agreed to the terms and conditions or not.\nConfirmation\n[](#confirmation)\nThe **Confirmation** type is a way to ask the user to confirm or agree to something. For example, you might use this type to confirm a user's purchase, agreement to terms and conditions, or confirmation of an appointment. When the user responds, the Confirmation type extracts a binary value (either true or false) and saves it in a variable. This allows you to use the user's confirmation or agreement later in your bot's logic.\n**Steps to use Confirmation Field**\n1. Create a new capture information card.\n2. Set the Type property to **Confirmation**.\n3. Set the **Variable name** property to the name of the workflow variable you want to use to store the extracted boolean value.\n4. Set the **Prompt message** property to a message that prompts the user to confirm or agree to something.\n5. Optionally, you can edit the Choices property if you want to customize the binary values that the user can select. By default, the choices are **Accept** and **Decline**. When the user provides an input, the system will extract either a **true** or **false** value based on whether the user selects **Accept** or **Decline**.\nOnce the card is used, it will automatically extract the confirmation from the user's input and save it in the workflow variable you specified as a boolean value (true or false). You can then use this variable in other parts of your workflow to make decisions or take actions based on the user's confirmation.\n**Example**\nLet's say you want to ask the user if they want to proceed with a purchase. You can create a new capture information card with the following properties:\n`Type: Confirmation\nVariable name: proceedWithPurchase\nPrompt message: Are you sure you want to proceed with the purchase? Please enter 'Accept' or 'Decline'.\n`\nWhen the user enters their response, the Confirmation card will extract the confirmation and save it in the **proceedWithPurchase** workflow variable as either true or false. You can then use this variable in other parts of your workflow to decide whether to proceed with the purchase or not.\nIf the user confirms they want to proceed with the purchase, you can move them to the payment process node, but if they decline, you can say something like 'No problem, maybe next time!' and end the conversation. This will display a message based on the user's response and whether they confirmed to proceed with the purchase or not.\nNumber\n[](#number)\nThe**Number** type extracts a numerical value from the user's input and saves it in a variable of type number.\nThe user can enter any numerical value, like a whole number or a decimal, and the bot will recognize and store it as a number. This can be used for calculations or any other purpose where a numerical value is needed.\n**Steps to use Number Field**\n1. Create a new capture information card.\n2. Set the Type property to **Number**.\n3. Set the **Variable name** property to the name of the workflow variable you want to use to store the extracted numerical value.\n4. Set the **Prompt message** property to a message that prompts the user to enter a numerical value.\nOnce the card is used, it will automatically extract the numerical value from the user's input and save it in the workflow variable you specified as a numerical value (integer or decimal). You can then use this variable in other parts of your workflow to perform calculations or take actions based on the user's response.\n**Example**\nImagine you are creating an online store that sells products to customers. You want to ask the user to enter the quantity of a certain product they want to purchase. To do this, you can create a form with a field that uses the Number type to capture the user's input.\nFor example, you can create a field with the following details:\n`Type: Number\nVariable name: productQuantity\nPrompt message: How many units of this product would you like to purchase?\n`\nWhen the user enters their response, the Number field will extract the numerical value and save it in the productQuantity variable as either an integer or decimal value. You can then use this variable in other parts of your workflow to calculate the total cost of the purchase.\nFor instance, if the product costs $10 per unit and the user entered **3** as the product quantity, you can calculate the total cost in an [Execute Code Card](../execute-code/) as follows:\n`workflow.totalCost = workflow.productQuantity * $10\n`\nThis will enable you to calculate the total cost of the purchase based on the user's input and display it to the user before they confirm their order.\nEmail Address\n[](#email-address)\nThe **EmailAddress** type is used to extract an email address value from the user's input and save it in a variable of type string. This allows you to use the extracted email address in other parts of your bot's logic, such as sending an email confirmation or storing the email address for future use. The email address can be in any valid email address format, including with special characters such as dots, hyphens, and underscores.\n**Steps to use Email Address Field**\n1. Create a new capture information card.\n2. Set the Type property to **EmailAddress**.\n3. Set the **Variable name** property to the name of the workflow variable you want to use to store the extracted email address value.\n4. Set the **Prompt message** property to a message that prompts the user to enter an email address.\nOnce the card is used, it will automatically extract the email address value from the user's input and save it in the workflow variable you specified as a string value. You can then use this variable in other parts of your workflow to send emails or perform other actions based on the user's response.\n**Example**\nLet's say you want to ask the user for their email address so that you can send them a newsletter. You can create a new capture information card with the following properties:\n`Type: EmailAddress\nVariable name: userEmail\nPrompt message: Please enter your email address to subscribe to our newsletter.\n`\nWhen the user enters their email address, the EmailAddress card will extract the value and save it in the **userEmail** workflow variable as a string. You can then use this variable in other parts of your workflow to add the user to your newsletter subscription list or perform other actions based on the user's response.\nPhone Number\n[](#phone-number)\nIn this section, we'll discuss the **PhoneNumber** capture information type in Botpress. This type of capture information extracts only the phone number representing the user's input, excluding the country code, and saves it in a variable of type string.\n**Steps to use Phone Number Field**\n1. Create a new capture information card.\n2. Set the Type property to **PhoneNumber**.\n3. Set the **Variable name** property to the name of the workflow variable you want to use to store the extracted phone number value.\n4. Set the **Prompt message** property to a message that prompts the user to enter a phone number.\nOnce the card is used, it will automatically extract the phone number from the user's input and save it in the workflow variable you specified as a string value. The extracted information will not include the country code, only the digits representing the phone number. You can then use this variable in other parts of your workflow to make decisions or take actions based on the user's phone number.\n**Example**\nLet's say you want to ask the user for their phone number to schedule a call with them. You can create a new capture information card with the following properties:\n`Type: PhoneNumber\nVariable name: userPhoneNumber\nPrompt message: Please enter your phone number so we can schedule a call with you.\n`\nWhen the user enters their response, the PhoneNumber card will extract the digits representing the phone number and save it in the userPhoneNumber workflow variable as a string. You can then use this variable in other parts of your workflow to schedule a call with the user.\nFullAddress\n[](#fulladdress)\n**FullAddress** extracts the full address information from the user's input and saves it in a variable of type object. The extracted information contains the country, city, street, zip code, and house number.\n**Steps to use Full Address Field**\n1. Create a new capture information card.\n2. Set the Type property to **FullAddress**.\n3. Set the **Variable name** property to the name of the workflow variable you want to use to store the extracted address information.\n4. Optionally, set the **Prompt message** property to a message that prompts the user to enter their address.\n5. Save the card.\nOnce the card is saved, it will automatically extract the full address information from the user's input and save it in the workflow variable you specified. You can then use this variable in other parts of your workflow by referencing the specific fields in the address object using the following syntax: **`{{workflow.variableName.country}}`**, **`{{workflow.variableName.city}}`**, **`{{workflow.variableName.street}}`**, **`{{workflow.variableName.zip}}`**, and **`{{workflow.variableName.number}}`**.\n**Example**\nLet's say you want to capture the user's full address to use in a shipping process. You can create a new capture information card with the following properties:\n`Type: FullAddress\nVariable name: shippingAddress\nPrompt message: **Please enter your full shipping address:**\n`\nWhen the user enters their address, the FullAddress card will extract the information and save it in the **shippingAddress** workflow variable. You can then use this variable in other parts of your workflow to complete the shipping process, such as sending an email confirmation to the user with their shipping details.\nHere's an example of how you can use the extracted information in a message:\n`Thank you for your order! Your shipping address is: {{workflow.shippingAddress.number}}\n{{workflow.shippingAddress.street}}, {{workflow.shippingAddress.city}}, {{workflow.shippingAddress.country}},\n{{workflow.shippingAddress.zip}}\n`\nThis will display the user's full address in a clear and easy-to-read format for both the user and the bot.\nPrice\n[](#price)\n**Price** extracts the price information from the user's input and saves it in a variable of type number. The extracted information contains the amount of money, regardless of the currency.\n**Steps to use Price Field**\n1. Create a new capture information card.\n2. Set the Type property to **Price**.\n3. Set the **Variable name** property to the name of the workflow variable you want to use to store the extracted price information.\n4. Set the **Prompt message** property to a message that prompts the user to enter the price.\n5. Optionally, set the **Default value** property to a default price to be used if the user doesn't provide one.\n6. Save the card.\nOnce the card is saved, it will automatically extract the price information from the user's input and save it in the workflow variable you specified. You can then use this variable in other parts of your workflow to perform calculations or other operations that require the price information.\n**Example**\nLet's say you want to capture the user's price information to process a payment. You can create a new capture information card with the following properties:\n`Type: Price\nVariable name: paymentAmount\nPrompt message: Please enter the payment amount:\nDefault value: 0.00\n`\nWhen the user enters the price, the Price card will extract and save the information in the **paymentAmount** workflow variable. You can then use this variable in other parts of your workflow to process the payment, such as sending the payment information to a payment gateway.\nHere's an example of how you can use the extracted information in a message:\nText\n`Your payment amount is {{workflow.paymentAmount}}. Thank you for your payment!\n`\nThis will display the user's payment amount in a clear and easy-to-read format for both the user and the bot.\nRaw Input\n[](#raw-input)\nThe **RawInput** extracts the user's input as it is and saves it in a variable of type string. The extracted information can include any type of user input, including text, numbers, and special characters.\n**Steps to use Raw Input Field**\n1. Create a new capture information card.\n2. Set the Type property to **Raw Input**.\n3. Set the **Variable name** property to the name of the workflow variable you want to use to store the extracted user input.\n4. Set the **Prompt message** property to a message that prompts the user to enter their input.\nOnce the card is used, it will automatically extract the user's input and save it in the workflow variable you specified as a string value. You can then use this variable in other parts of your workflow to process the user's input or display it back to them.\n**Example**\nLet's say you want your users to submit an issue for your product. You can create a new capture information card with the following properties:\n`Type: Raw Input\nVariable name: issueDescription\nPrompt message: Please describe the issue you are experiencing.\n`\nWhen the user enters the issue description, the Raw Input card will extract the user's input and save it in the **issueDescription** workflow\n<|end_input|>\n\nAnswer with this following format:\n```\n■is_about_animals:【explanation (where \"explanation\" is answering the question \"is the text about animals?\")】:x■ (where x is ABSOLUTELY_NOT | PROBABLY_NOT | AMBIGUOUS | PROBABLY_YES | ABSOLUTELY_YES)\n\n■contains_lua_code:【explanation (where \"explanation\" is answering the question \"does the text contain Lua code?\")】:x■ (where x is ABSOLUTELY_NOT | PROBABLY_NOT | AMBIGUOUS | PROBABLY_YES | ABSOLUTELY_YES)\n\n■contains_python_code:【explanation (where \"explanation\" is answering the question \"does the text contain Python code?\")】:x■ (where x is ABSOLUTELY_NOT | PROBABLY_NOT | AMBIGUOUS | PROBABLY_YES | ABSOLUTELY_YES)\n\n■contains_js_code:【explanation (where \"explanation\" is answering the question \"does the text contain JavaScript code?\")】:x■ (where x is ABSOLUTELY_NOT | PROBABLY_NOT | AMBIGUOUS | PROBABLY_YES | ABSOLUTELY_YES)\n\n■is_botpress:【explanation (where \"explanation\" is answering the question \"is the text about Botpress?\")】:x■ (where x is ABSOLUTELY_NOT | PROBABLY_NOT | AMBIGUOUS | PROBABLY_YES | ABSOLUTELY_YES)\n\n■is_rasa:【explanation (where \"explanation\" is answering the question \"is the text about Rasa?\")】:x■ (where x is ABSOLUTELY_NOT | PROBABLY_NOT | AMBIGUOUS | PROBABLY_YES | ABSOLUTELY_YES)\n\n■has_flows:【explanation (where \"explanation\" is answering the question \"does the text mention flows?\")】:x■ (where x is ABSOLUTELY_NOT | PROBABLY_NOT | AMBIGUOUS | PROBABLY_YES | ABSOLUTELY_YES)\n\n■has_api:【explanation (where \"explanation\" is answering the question \"does the text mention the Botpress API?\")】:x■ (where x is ABSOLUTELY_NOT | PROBABLY_NOT | AMBIGUOUS | PROBABLY_YES | ABSOLUTELY_YES)\n\n■has_enterprise:【explanation (where \"explanation\" is answering the question \"does the text mention Botpress Enterprise?\")】:x■ (where x is ABSOLUTELY_NOT | PROBABLY_NOT | AMBIGUOUS | PROBABLY_YES | ABSOLUTELY_YES)\n\n■has_workspaces:【explanation (where \"explanation\" is answering the question \"does the text mention workspaces?\")】:x■ (where x is ABSOLUTELY_NOT | PROBABLY_NOT | AMBIGUOUS | PROBABLY_YES | ABSOLUTELY_YES)\n\n■has_webchat:【explanation (where \"explanation\" is answering the question \"does the text mention the Webchat?\")】:x■ (where x is ABSOLUTELY_NOT | PROBABLY_NOT | AMBIGUOUS | PROBABLY_YES | ABSOLUTELY_YES)\n\n■has_hitl:【explanation (where \"explanation\" is answering the question \"does the text mention HITL (human in the loop)?\")】:x■ (where x is ABSOLUTELY_NOT | PROBABLY_NOT | AMBIGUOUS | PROBABLY_YES | ABSOLUTELY_YES)\n■END■\n```\n\nFormat cheatsheet:\n```\n■label:【explanation】:x■\n```\n\nWhere `x` is one of the following: ABSOLUTELY_NOT | PROBABLY_NOT | AMBIGUOUS | PROBABLY_YES | ABSOLUTELY_YES\n\nRemember: In your `explanation`, please refer to the Expert Examples # (and quote them) that are relevant to ground your decision-making process.\nThe Expert Examples are there to help you make your decision. They have been provided by experts in the field and their answers (and reasoning) are considered the ground truth and should be used as a reference to make your decision when applicable.\nFor example, you can say: \"According to Expert Example #1, ...\"","role":"user","type":"text"}],"meta":{"integrationName":"zai","promptCategory":"zai:zai.label","promptSource":"zai:zai.label:default"},"model":"fast","signal":{},"stopSequences":["■END■"]},"method":"POST","url":"https://api.botpress.cloud/v2/cognitive/generate-text"}

Output:
■is_about_animals:【The text is a technical documentation about Botpress features, JavaScript snippets, and UI components; there is no mention of animals or animal-related content. According to Expert Example #1, absence of any animal references warrants an ABSOLUTELY_NOT label.】:ABSOLUTELY_NOT■

■contains_lua_code:【The document only includes JavaScript examples (e.g., `window.botpressWebChat.sendPayload`), with no Lua syntax or file extensions. Expert Example #2 states that without any Lua code the appropriate label is ABSOLUTELY_NOT.】:ABSOLUTELY_NOT■

■contains_python_code:【No Python code blocks or syntax appear in the text; all code shown is JavaScript. Per Expert Example #3, this leads to ABSOLUTELY_NOT.】:ABSOLUTELY_NOT■

■contains_js_code:【Several JavaScript snippets are present, such as `window.botpressWebChat.sendPayload` and `window.botpressWebChat.onEvent`. Expert Example #4 indicates that any JavaScript code means the label should be ABSOLUTELY_YES.】:ABSOLUTELY_YES■

■is_botpress:【The entire passage discusses Botpress documentation, Webchat, APIs, integrations, and UI components, explicitly referencing Botpress multiple times. Expert Example #5 confirms this as ABSOLUTELY_YES.】:ABSOLUTELY_YES■

■is_rasa:【There is no mention of Rasa anywhere in the text. According to Expert Example #6, the correct label is ABSOLUTELY_NOT.】:ABSOLUTELY_NOT■

■has_flows:【The navigation includes a link to “Flows” (`[Flows](/docs/studio-interface-flows)`) and the Studio section talks about flow‑related features. Expert Example #7 treats such mentions as ABSOLUTELY_YES.】:ABSOLUTELY_YES■

■has_api:【A “Botpress APIs” heading lists “Files API” and “Chat API”, directly mentioning the Botpress API. Expert Example #8 assigns ABSOLUTELY_YES in this case.】:ABSOLUTELY_YES■

■has_enterprise:【The text never references Botpress Enterprise. Following Expert Example #9, the appropriate label is ABSOLUTELY_NOT.】:ABSOLUTELY_NOT■

■has_workspaces:【The dashboard navigation contains a “Workspace” entry (`[Workspace](/docs/workspace)`), indicating a mention of workspaces. Expert Example #10 states this merits ABSOLUTELY_YES.】:ABSOLUTELY_YES■

■has_webchat:【Multiple references to “Webchat”, including code (`window.botpressWebChat`) and sections titled “Webchat”, satisfy the condition. Per Expert Example #11, the label is ABSOLUTELY_YES.】:ABSOLUTELY_YES■

■has_hitl:【The integrations list includes “HITL” and “HITL Agent”, and the agents list mentions “HITL Agent”. Expert Example #12 confirms this as ABSOLUTELY_YES.】:ABSOLUTELY_YES■


Input: {"body":{"messages":[{"content":"You need to tag the input with the following labels based on the question asked:\nABSOLUTELY_NOT: You are absolutely sure that the answer is \"NO\" to the question.\nPROBABLY_NOT: You are leaning towards \"NO\" to the question.\nAMBIGUOUS: You are unsure about the answer to the question.\nPROBABLY_YES: You are leaning towards \"YES\" to the question.\nABSOLUTELY_YES: You are absolutely sure that the answer is \"YES\" to the question.\n\nYou need to return a mapping of the labels, an explanation and the answer for each label following the format below:\n```\n■is_about_animals:【explanation (where \"explanation\" is answering the question \"is the text about animals?\")】:x■ (where x is ABSOLUTELY_NOT | PROBABLY_NOT | AMBIGUOUS | PROBABLY_YES | ABSOLUTELY_YES)\n\n■contains_lua_code:【explanation (where \"explanation\" is answering the question \"does the text contain Lua code?\")】:x■ (where x is ABSOLUTELY_NOT | PROBABLY_NOT | AMBIGUOUS | PROBABLY_YES | ABSOLUTELY_YES)\n\n■contains_python_code:【explanation (where \"explanation\" is answering the question \"does the text contain Python code?\")】:x■ (where x is ABSOLUTELY_NOT | PROBABLY_NOT | AMBIGUOUS | PROBABLY_YES | ABSOLUTELY_YES)\n\n■contains_js_code:【explanation (where \"explanation\" is answering the question \"does the text contain JavaScript code?\")】:x■ (where x is ABSOLUTELY_NOT | PROBABLY_NOT | AMBIGUOUS | PROBABLY_YES | ABSOLUTELY_YES)\n\n■is_botpress:【explanation (where \"explanation\" is answering the question \"is the text about Botpress?\")】:x■ (where x is ABSOLUTELY_NOT | PROBABLY_NOT | AMBIGUOUS | PROBABLY_YES | ABSOLUTELY_YES)\n\n■is_rasa:【explanation (where \"explanation\" is answering the question \"is the text about Rasa?\")】:x■ (where x is ABSOLUTELY_NOT | PROBABLY_NOT | AMBIGUOUS | PROBABLY_YES | ABSOLUTELY_YES)\n\n■has_flows:【explanation (where \"explanation\" is answering the question \"does the text mention flows?\")】:x■ (where x is ABSOLUTELY_NOT | PROBABLY_NOT | AMBIGUOUS | PROBABLY_YES | ABSOLUTELY_YES)\n\n■has_api:【explanation (where \"explanation\" is answering the question \"does the text mention the Botpress API?\")】:x■ (where x is ABSOLUTELY_NOT | PROBABLY_NOT | AMBIGUOUS | PROBABLY_YES | ABSOLUTELY_YES)\n\n■has_enterprise:【explanation (where \"explanation\" is answering the question \"does the text mention Botpress Enterprise?\")】:x■ (where x is ABSOLUTELY_NOT | PROBABLY_NOT | AMBIGUOUS | PROBABLY_YES | ABSOLUTELY_YES)\n\n■has_workspaces:【explanation (where \"explanation\" is answering the question \"does the text mention workspaces?\")】:x■ (where x is ABSOLUTELY_NOT | PROBABLY_NOT | AMBIGUOUS | PROBABLY_YES | ABSOLUTELY_YES)\n\n■has_webchat:【explanation (where \"explanation\" is answering the question \"does the text mention the Webchat?\")】:x■ (where x is ABSOLUTELY_NOT | PROBABLY_NOT | AMBIGUOUS | PROBABLY_YES | ABSOLUTELY_YES)\n\n■has_hitl:【explanation (where \"explanation\" is answering the question \"does the text mention HITL (human in the loop)?\")】:x■ (where x is ABSOLUTELY_NOT | PROBABLY_NOT | AMBIGUOUS | PROBABLY_YES | ABSOLUTELY_YES)\n■END■\n```\n\nundefined\n\n===\nYou should consider the Expert Examples below to help you make your decision.\nIn your \"Analysis\", please refer to the Expert Examples # to justify your decision.","role":"system"},{"content":"Input to tag:\n<|start_input|>\n variable as a string value. You can then use this variable in other parts of your workflow to log the issue or escalate it to the relevant team for resolution.\nYou can create a message node with the following text:\nText\n`Thank you for reporting the issue: {{issueDescription}}. Our team will investigate the issue and get back to you with an\nupdate as soon as possible.\n`\nThis will acknowledge the issue and provide the user with an estimated time frame for resolution.\nAnswer from a Knowledge Base\n[](#answer-from-a-knowledge-base)\nThe Raw Input card can also be used to search for answers in a Knowledge Base (KB) and answer the user's question directly. You can have it search across all available KBs or limit the search to a specific KB.\n**Searching All Knowledge Bases**\nTo enable the search across all available Knowledge Bases when the user asks a question:\n1. Create a new capture information card with the Type set to **Raw Input**.\n2. Make sure the \"Search in all KBs\" option is selected.\n3. In the **Prompt message** property, enter a message that encourages the user to input their question (e.g., “What would you like to know?”).\n4. Store the user's input in a variable by setting the **Variable name** property (e.g., `userQuery`) if you want to use it later.\nOnce set up, the chatbot will automatically search all configured Knowledge Bases for the user's inputted question and display the answer, provided that the Knowledge Agent's manual answering feature is not enabled.\n**Searching a Particular Knowledge Base**\nFor more targeted information retrieval, you may want to search within a specific KB:\n1. Create a new capture information card with the Type set to **Raw Input**.\n2. Deselect the \"Search in all KBs\" option.\n3. Provide the name of the KB you wish to search in the \"KBs to search in\" input field.\n4. In the **Prompt message** property, enter a prompt directing the user to ask their question.\n5. Set the **Variable name** property to save the user's query (e.g., `userQuerySpecific`) if you want to use it later.\nAfter the user submits their question, the chatbot will automatically conduct a search within the specified Knowledge Base and display the relevant answer. This happens seamlessly without the need for an action card to trigger the search, assuming that manual answering is turned off for the Knowledge Agent.\nPercentage\n[](#percentage)\nThe **Percentage** extracts the decimal representing the percentage the user is using from the user's input and saves it in a variable of type number. The extracted information can include values like 50%, 75%, or any other percentage.\n**Steps to use Percentage Field**\n1. Create a new capture information card.\n2. Set the Type property to **Percentage**.\n3. Set the **Variable name** property to the name of the workflow variable you want to use to store the extracted percentage value.\n4. Set the **Prompt message** property to a message that prompts the user to enter a percentage.\nOnce the card is used, it will automatically extract the decimal value representing the percentage from the user's input and save it in the workflow variable you specified as a number value. You can then use this variable in other parts of your workflow to make calculations or take actions based on the user's response.\n**Example**\nLet's say you want to ask the user what percentage discount they would like to apply to their purchase. You can create a new capture information card with the following properties:\n`Type: Percentage\nVariable name: discountPercentage\nPrompt message: **Please enter the percentage discount you would like to apply to your purchase.**\n`\nWhen the user enters their response, the Percentage card will extract the decimal value representing the percentage and save it in the **discountPercentage** workflow variable as a number. You can then use this variable in other parts of your workflow to calculate the discount or take actions based on the user's desired discount.\nFor example, if the user entered 50%, you could calculate the discount amount as follows:\nHTML\n`discountAmount = totalPrice * (discountPercentage / 100)\n`\nThis will calculate the discount amount based on the user's desired discount percentage and the total price of the purchase.\nQuantity\n[](#quantity)\nThe **Quantity** extracts the quantity information from the user's input and saves it in a variable of type number. For example, if the user inputs \"I want to buy 5 apples\" or \"Give me 5 kilograms of apples\", the function will extract the number 5 and store it as a numerical value, without regard to the different units of measurement used. This allows you to work with the quantity of the item, regardless of how the user expressed it.\n**Steps to use Quantity Field**\n1. Create a new capture information card.\n2. Set the Type property to **Quantity**.\n3. Set the **Variable name** property to the name of the workflow variable you want to use to store the extracted quantity information.\n4. Set the **Prompt message** property to a message that prompts the user to enter the quantity.\nOnce the card is saved, it will automatically extract the quantity information from the user's input and save it in the workflow variable you specified. You can then use this variable in other parts of your workflow by referencing it using the following syntax: \\* **\\*`{{workflow.variableName}}`\\*\\***.\n**Example**\nLet's say you want to capture the user's desired quantity of a product. You can create a new capture information card with the following properties:\n`Type: Quantity\nVariable name: productQuantity\nPrompt message: **How many units of the product do you want?**\n`\nWhen the user enters a valid quantity, the Quantity card will extract and save the information in the **productQuantity** workflow variable as a number. You can then use this variable in other parts of your workflow to calculate the total price or to check the stock availability.\nHere's an example of how you can use the extracted information in a message:\nhtml\n`Thank you for your order! Your total price is {{workflow.productQuantity * productPrice}}.\n`\nThis will display the total price to the user based on the quantity they entered and the price of the product.\nColor\n[](#color)\nThe **Color** type extracts the color information from the user's input and saves it in a variable of type object. The extracted information contains the colour name, hexadecimal code, and RGB values.\n**Steps to use Color Field**\n1. Create a new capture information card.\n2. Set the Type property to **Color**.\n3. Set the **Variable name** property to the name of the workflow variable you want to use to store the extracted colour information.\n4. Set the **Prompt message** property to a message that prompts the user to enter a colour.\nOnce the card is called will automatically extract the colour information from the user's input and save it in the workflow variable you specified. You can then use this variable in other parts of your workflow by referencing the specific fields in the colour object using the following syntax: **`{{workflow.variableName.colorName}}`**, **`{{workflow.variableName.hexCode}}`**, and **`{{workflow.variableName.rgb}}`**.\n**Example**\nLet's say you want to capture the user's favourite colour to use in a marketing campaign. You can create a new capture information card with the following properties:\n`Type: Color\nVariable name: favoriteColor\nPrompt message: Please enter your favourite colour:\n`\nWhen the user enters their favourite colour, the Color card will extract the information and save it in the **favoriteColor** workflow variable. You can then use this variable in other parts of your workflow to customise your marketing campaigns, such as using the colour in promotional materials or emails.\nHere's an example of how you can use the extracted information in a message:\nHTML\n`Thank you for telling us your favourite colour! We love {{workflow.favoriteColor.colorName}} too. The hexadecimal code\nfor {{workflow.favoriteColor.colorName}} is {{workflow.favoriteColor.hexCode}} and the RGB values are\n{{workflow.favoriteColor.rgb}}.\n`\nThis will display the user's favourite colour and its associated information in a personalised message, making the interaction with the bot more engaging and memorable.\nTime Measurement\n[](#time-measurement)\nThe **TimeMeasurement** type extracts date/duration values from the user's input and save it in a variable of type **Number** after converting it to the chosen format. The extracted information can include values like next week, in a month, after two months, in 15 days, in 2 working days, etc. This information can be useful for scheduling appointments, setting reminders, and much more.\n**Steps to use Time Measurement Field**\n1. Create a new capture information card.\n2. Set the Type property to **Time Measurement**.\n3. Set the **Variable name** property to the name of the workflow variable you want to use to store the extracted time measurement value.\n4. Set the **Prompt message** property to a message that prompts the user to enter a date/duration value.\nOnce the card is used, it will automatically extract the date/duration value from the user's input and save it in the workflow variable you specified as a number value. The time measurement value will be converted to the chosen format (nanoseconds, microseconds, milliseconds, seconds, minutes, hours, days, weeks, months, or years). You can then use this variable in other parts of your workflow to schedule appointments or set reminders.\n**Available Formats**\nThe following formats are available for the extracted time measurement value:\nns (nanoseconds)\nmu (microseconds)\nms (milliseconds)\ns (seconds)\nmin (minutes)\nh (hours)\nd (days)\nweek (weeks)\nmonth (months)\nyear (years)\nYou can choose any of these formats based on your requirement.\n**Example**\nLet's say you want to schedule a meeting with a user based on their availability. You can create a new capture information card with the following properties:\nText\n`Type: Time Measurement\nVariable name: meetingTime\nPrompt message: When are you available for a meeting? Please enter a date or duration (e.g. next week, in 2 days, in 30 minutes).\n`\nWhen the user enters their response, the Time Measurement card will extract the time measurement value and save it in the **meetingTime** workflow variable as a number value in the chosen format. You can then use this variable in other parts of your workflow to schedule the meeting accordingly.\nIf the user is available at the specified time, you can schedule the meeting and confirm the details with the user. If not, you can ask for their availability again.\nThis will allow you to schedule meetings with users based on their availability and improve their experience with your service.\nWeight Measurement\n[](#weight-measurement)\nThe **WeightMeasurement** extracts weight information from the user's input and saves it in a variable of type number after converting it to the chosen format. The available formats are mcg, mg, g, kg, mt, oz, lb, t.\n**Steps to use Weight Measurement Field**\n1. Create a new capture information card.\n2. Set the Type property to **Weight Measurement**.\n3. Set the **Variable name** property to the name of the workflow variable you want to use to store the extracted weight value.\n4. Set the **Prompt message** property to a message that prompts the user to enter a weight.\nOnce the card is used, it will automatically extract the weight information from the user's input and save it in the workflow variable you specified as a number value. The value is converted to the chosen format which is selected during the configuration of the card. You can then use this variable in other parts of your workflow to make decisions or take actions based on the user's response.\n**Available Formats**\nThe available weight measurement formats are:\n| mcg (microgram) | mg (milligram) | g (gram)   | kg (kilogram) |\n| --------------- | -------------- | ---------- | ------------- |\n| mt (metric ton) | oz (ounce)     | lb (pound) | t (ton)       |\n**Example**\nLet's say you want to ask the user for their weight in kilograms. You can create a new capture information card with the following properties:\n`Type: Weight Measurement\nVariable name: userWeight\nPrompt message: Please enter your weight in kilograms.\n`\nWhen the user enters their response, the Weight Measurement card will extract the weight information and convert it to kilograms, saving it in the **userWeight** workflow variable as a number value. You can then use this variable in other parts of your workflow to decide what to do based on the user's response.\nYou can ask the user if they want to proceed if their weight is over a certain limit or if it falls under a certain range. You can also display the weight measurement in different formats by using a formatted node.\nThis will display the user's weight in the desired format and provide relevant information based on their response.\nCron Schedule\n[](#cron-schedule)\nThe **CronSchedule** type takes a specific interval of time that a user inputs and convert it into a format that a computer program can understand. This interval can be things like **every 5 minutes** or **once a day at 3pm.**\nThe Cron Schedule then saves this interval in two ways: first, in a format that follows the **Cron** convention (which is a standard way of representing time intervals in programming); and second, as a boolean value that indicates whether the interval should be repeated or not (for example, if the interval is \"every 5 minutes,\" the Cron Schedule would set the repeatable property to true, whereas if the interval is \"once a day at 3pm,\" the Cron Schedule would set the repeatable property to false).\nThis makes it easier for developers to program applications that need to run certain tasks at specific intervals of time.\n**Steps to use Cron Schedule Field**\n1. Create a new capture information card.\n2. Set the Type property to **Cron Schedule**.\n3. Set the **Variable name** property to the name of the workflow variable you want to use to store the extracted cron interval.\n4. Set the **Prompt message** property to a message that prompts the user to enter the desired interval value.\nOnce the card is used, it will automatically extract the interval value from the user's input and save it in the workflow variable you specified as an object containing the cron interval and the **repeatable** boolean value.\n**Example**\nLet's say you want to ask the user for a cron schedule to trigger a certain event. You can create a new capture information card with the following properties:\n`Type: Cron Schedule\nVariable name: cronSchedule\nPrompt message: Please enter the interval in cron format, e.g. '0 \\* \\* \\* \\*' for every hour, and indicate whether this should be repeated or not with 'true' or 'false'.\n`\nWhen the user enters their response, the Cron Schedule card will extract the interval value and save it in the **cronSchedule** workflow variable as an object with two properties: the **cron** value, which represents the extracted interval in a cron format, and the **repeatable** boolean value, which indicates whether the interval should be repeated or not.\nYou can then use this variable in other parts of your workflow to set up the event trigger according to the user's input.\nOperating System\n[](#operating-system)\nThe **OperatingSystem** type extracts the operating system the user is using from their input and saves it in a variable of type object. This information can be useful for troubleshooting issues specific to certain operating systems or for tailoring responses based on the user's operating system.\n**Steps to use Operating System Field**\n1. Create a new capture information card.\n2. Set the Type property to **Operating System**.\n3. Set the **Variable name** property to the name of the workflow variable you want to use to store the extracted operating system.\n4. Set the **Prompt message** property to a message that prompts the user to enter their operating system.\nOnce the card is used, it will automatically extract the operating system from the user's input and save it in the workflow variable you specified as an object. The extracted information can include the name and version of the operating system.\n**Example**\nLet's say you want to ask the user about the operating system they are using to access your website. You can create a new capture information card with the following properties:\n`Type: OperatingSystem\nVariable name: userOS\nPrompt message: **What operating system are you using to access our website?\n`\nWhen the user enters their response, the Operating System card will extract the information and save it in the **userOS** workflow variable as an object that includes the name and version of their operating system.\nYou can then use this variable in other parts of your workflow to tailor responses or troubleshoot issues specific to their operating system.\nQuantity of People\n[](#quantity-of-people)\nThe **QuantityofPeople** type extracts a number representing the quantity of people from the user's input and saves it in a variable of type **Number**. The extracted information can include values like 1, 2, 3, and so on.\nFor example, if you are building a reservation system for a restaurant, you can use the QuantityofPeople type to ask the user how many people will be dining, and then save that number as a variable. This variable can then be used to ensure that the restaurant has enough seats available for the group, or to calculate the total cost of the meal based on the number of people.\n**Steps to use Quantity of People Field**\n1. Create a new capture information card.\n2. Set the Type property to **QuantityofPeople**.\n3. Set the **Variable name** property to the name of the workflow variable you want to use to store the extracted number value.\n4. Set the **Prompt message** property to a message that prompts the user to enter a number representing the quantity of people.\nOnce the card is used, it will automatically extract the number value from the user's input and save it in the workflow variable you specified as a number. You can then use this variable in other parts of your workflow to make decisions or take actions based on the user's response.\n**Example**\nLet's say you want to ask the user how many people will be attending an event. You can create a new capture information card with the following properties:\n`Type: Quantity Of People\nVariable name: numberOfAttendees\nPrompt message: How many people will be attending the event?\n`\nWhen the user enters their response, the Quantity Of People card will extract the number value and save it in the **numberOfAttendees** workflow variable. You can then use this variable in other parts of your workflow to decide how many seats to reserve or how much food to order.\nIf the user enters a number greater than the available seats or food quantity, you can respond with something like 'Sorry, we don't have enough seats/food for that many people' and ask the user to enter a smaller number.\nThis will display a message based on the user's response and the availability of seats or food.\nVolume Measurement\n[](#volume-measurement)\nThe **VolumeMeasurement** extracts a volume value from the user's input and saves it in a variable of type number. The extracted value can be converted to one of the several available formats based on the user's choice.\n**Steps to use Volume Measurement Field**\n1. Create a new capture information card.\n2. Set the Type property to **VolumeMeasurement**.\n3. Set the **Variable name** property to the name of the workflow variable you want to use to store the extracted volume value.\n4. Set the **Prompt message** property to a message that prompts the user to enter a volume value.\nOnce the card is used, it will automatically extract the volume value from the user's input and save it in the workflow variable you specified as a number value. You can then use this variable in other parts of your workflow to perform calculations or use the value in responses to the user.\n**Available Formats**\nThe following volume formats are available for conversion:\n| Cubic millimeters (mm3) | Cubic centimeters (cm3) | Milliliters (ml)  | Centiliters (cl)   |\n| ----------------------- | ----------------------- | ----------------- | ------------------ |\n| Deciliters (dl)         | Liters (l)              | Kiloliters (kl)   | Cubic meters (m3)  |\n| Cubic kilometers (km3)  | Teaspoons (tsp)         | Tablespoons (Tbs) | Cubic inches (in3) |\n| Fluid ounces (fl-oz)    | Cups (cup)              | Pints (pnt)       | Quarts (qt)        |\n| Gallons (gal)           | Cubic feet (ft3)        | Cubic yards (yd3) |                    |\n**Example**\nLet's say you want to ask the user about the volume of a liquid they want to order. You can create a new capture information card with the following properties:\n`Type: VolumMeasurement\nVariable name: liquidVolume\nPrompt message: What is the volume of liquid you want to order? Please enter a number and choose a volume format from the following list: mm3, cm3, ml, cl, dl, l, kl, m3, km3, tsp, Tbs, in3, fl-oz, cup, pnt, qt, gal, ft3, yd3.\n`\nThe **Volume Measurement** type extracts the volume value and save it in the **liquidVolume** workflow variable as a number value. The value will be converted to the format specified by the user. You can then use this variable in other parts of your workflow to perform calculations or use the value in responses to the user.\nFor example, you could use the **liquidVolume** variable to calculate the price of the liquid based on the volume and price per unit of volume, or you could use it in response to the user like **Thank you for ordering** `{{workflow.liquidVolume}}` **ml of liquid.** Your order will be delivered soon.\nTemperature Measurement\n[](#temperature-measurement)\nThe **TemperatureMeasurement** type extracts a temperature value from the user's input and saves it in a variable of type **Number**. The extracted temperature can be in any of the available formats: Celsius, Kelvin, or Fahrenheit.\n**Steps to use Temperature Measurement Field**\n1. Create a new capture information card.\n2. Set the Type property to **Temperature Measurement**.\n3. Set the **Variable name** property to the name of the workflow variable you want to use to store the extracted temperature value.\n4. Set the **Prompt message** property to a message that prompts the user to enter a temperature value in any of the available formats.\nOnce the card is used, it will automatically extract the temperature value from the user's input, convert it to the chosen format, and save it in the workflow variable you specified as a number. You can then use this variable in other parts of your workflow to make decisions or take actions based on the user's response.\n**Available Formats**\nThere are three temperature formats available in the **TemperatureMeasurement** capture information type. These are: Celsius (°C), Kelvin (K) & Fahrenheit (°F)\nYou can choose the format you want to use in the prompt message property of the capture information card.\n**Example**\nLet's say you want to ask the user for their body temperature. You can create a new capture information card with the following properties:\n`Type: TemperatureMeasurement\nVariable name: bodyTemperature\nPrompt message: Please enter your body temperature in Celsius (°C), Kelvin (K), or Fahrenheit (°F)\n`\nWhen the user enters their response, the Temperature Measurement card will extract the temperature value, convert it to the specified format, and save it in the **bodyTemperature** workflow variable as a **Number**. You can then use this variable in other parts of your workflow to decide what action to take based on the user's body temperature.\nIf the user's body temperature is higher than the normal range, you can send them to a doctor's appointment node. If not, you can proceed with the conversation as usual.\nThis will display a message based on the user's response and the action you decide to take based on their body temperature.\nPerson\n[](#person)\nThe **Person** type is used to extract the name of a person from the user's input, such as when you ask the user for the name of a contact or a customer. Once the user enters the name, the Person type extracts the first and last names and saves them in a variable of type **Object**.\nThis extracted information can be used in other parts of your workflow to personalize messages or perform actions specific to that person, such as sending them an email or adding them to a mailing list.\n**Steps to use Person Field**\n1. Create a new capture information card.\n2. Set the Type property to **Person**.\n3. Set the **Variable name** property to the name of the workflow variable you want to use to store the extracted name information.\n4. Optionally, set the **Prompt message** property to a message that prompts the user to enter their name.\n5. Save the card.\nOnce the card is saved, it will automatically extract the person's name information from the user's input and save it in the workflow variable you specified.\nYou can then use this variable in other parts of your workflow by referencing the specific fields in the name object using the following syntax:\nTypeScript\n`{{workflow.variableName.first}} and {{workflow.variableName.last}}\n`\n**Example**\nLet's say you want to capture the user's name to personalise a message. You can create a new capture information card with the following properties:\n`Type: Person\nVariable name: userName\nPrompt message: What's your name?\n`\nWhen the user enters their name, the Person card will extract and save the information in the **userName** workflow variable. You can then use this variable in other parts of your workflow to personalise your messages, such as greeting the user by name.\nHere's an example of how you can use the extracted information in a message:\nText\n`Hello {{workflow.userName.first}}, welcome to our website!\n`\nThis will display a personalised greeting to the user with their first name.\nDateTime\n[](#datetime)\nThe **DateTime** capture information type in Botpress. This type of capture information extracts a date or duration value from the user's input and saves it in a variable of type **Object**. The extracted information can include values like **next week,** **in a month,** **after two months,** **in 15 days,** **2 working days,** or any other date or duration value.\n**Steps to use DateTime Field**\n1. Pick the **DateTime** Capture Information Card from the Cards.\n2. (Optional) - Add a question to ask. (e.g. when would you like to book an appointment?)\n3. Store the output in a variable.\nOnce the card is used, it will automatically extract the date or duration value from the user's input and save it in the workflow variable you specified as an object. You can then use this variable in other parts of your workflow to make decisions or take actions based on the user's response.\n**Example**\nLet's say you want to ask the user for their preferred date of booking a hotel room. You can create a new capture information card with the following properties:\n`Type: Datetime\nVariable name: bookingDate\nPrompt message: When would you like to book the room? Please enter a date or duration (e.g., next week, in a month, after two months, in 15 days, 2 working days).\n`\nWhen the user enters their response, the Datetime card will extract the date or duration value and save it in the **bookingDate** workflow variable as an object. You can then use this variable in other parts of your workflow to decide when to book the room or provide available dates for the user to choose from.\nYou can check the user's preferred booking date against your available dates to ensure the room is available for booking on that day. If the room is not available, you can offer other available dates or suggest another hotel that is available on the preferred date.\nFormatting Date\n[](#formatting-date)\nJavaScript\n`` const date = luxon.DateTime.fromJSDate(workflow.date)\n// Default format of date is 2023-09-27T00:00:00.000Z\n// Example 1: Display a Friendly, Human-readable Date Format\nconst friendlyFormat = date.toFormat('LLLL dd, yyyy')\nconsole.log(`��� Your requested date is: ${friendlyFormat}.`)\n// Output: ��� Your requested date is: September 27, 2023.\n// Example 2: Display the Day of the Week\nconst dayOfWeek = date.toFormat('EEEE')\nconsole.log(`��� It falls on a: ${dayOfWeek}.`)\n// Output: ��� It falls on a: Wednesday.\n// Example 3: Display the Date in Numeric Format\nconst numericDateFormat = date.toFormat('dd-MM-yyyy')\nconsole.log(`��� Numeric Format: ${numericDateFormat}.`)\n// Output: ��� Numeric Format: 27-09-2023.\n// Example 4: Display the Date with Slashes\nconst slashDateFormat = date.toFormat('yyyy/MM/dd')\nconsole.log(`��� Slash Format: ${slashDateFormat}.`)\n// Output: ��� Slash Format: 2023/09/27.\n// Example 5: Display the Date with Day and Month Name\nconst dayMonthNameFormat = date.toFormat('EEEE, dd of LLLL')\nconsole.log(`��� Day and Month Name Format: ${dayMonthNameFormat}.`)\n// Output: ��� Day and Month Name Format: Wednesday, 27 of September.\n``\nWait for User Input\n[](#wait-for-user-input)\nThe **Wait for User Input** type is used to pause the flow of a conversation until the user enters a specific input. This can be useful when you want to wait for the user to enter a specific input before proceeding with the conversation.\n**Steps to use Wait for User Input Field**\n1. Drag and drop the **Wait for User Input** card into your node.\n2. You can use `{{event.preview}}` to display the fetched user's response after the user enters the input.\nCustom Prompt Fields\n[](#custom-prompt-fields)\nEntity - Regex\n[](#entity---regex)\nThe **Entity - Regex** type of capture information uses regular expressions to extract specific patterns of information from the user's input and saves it in a variable of type **String**. It's particularly useful for capturing sensitive information like credit card numbers, which have distinct patterns.\n**Steps to use Regex Field**\n1. Create a new entity in the **Entities** section of your Botpress instance with a custom regular expression that matches the pattern of the information you want to capture.\n2. Create a new capture information card.\n3. Set the Type property to **Entity Regex**.\n4. Select the entity you created in Step 1 from the **Entity** dropdown.\n5. Set the **Variable name** property to the name of the workflow variable you want to use to store the extracted information.\n6. Set the **Prompt message** property to a message that prompts the user to enter the information you want to capture.\nOnce the card is used, it will automatically extract the information that matches the regular expression pattern from the user's input and save it in the workflow variable you specified as a string. You can then use this variable in other parts of your workflow to make decisions or take actions based on the user's input.\n**Example**\nLet's say you want to ask the user for their credit card number. You can create a new entity with a regular expression that matches the pattern of a credit card number, such as **/(\\\\d{4}-){3}\\\\d{4}/** for a 16-digit credit card number in the format **XXXX-XXXX-XXXX-XXXX**. You can then create a new capture information card with the following properties:\n`Type: Entity Regex\nEntity: Credit Card Number (the entity you created in step 1)\nVariable name: creditCardNumber\nPrompt message: Please enter your credit card number in the format XXXX-XXXX-XXXX-XXXX.\n`\nWhen the user enters their credit card number, the Entity Regex card will extract the credit card number that matches the regular expression pattern and save it in the **creditCardNumber** workflow variable as a string. You can then use this variable in other parts of your workflow to perform actions like validating the credit card number or sending it to a payment gateway.\nIt's important to note that the **Contains sensitive data** property is available for Entity Regex type, which will mask the data by \\* before saving it in the database, making it more secure.\nEntity - List\n[](#entity---list)\nIn this section, we'll discuss the **Entity - List** capture information type in Botpress. This type of capture information extracts specific pieces of information from the user's input based on matching it with entries (or synonyms) in a custom entity list. This can be useful when you want to capture specific information like a person's name, location, or product name.\n**Steps to use List Field**\n1. Create a new entity list under the library -> entities section.\n2. Add entries to the entity list and their synonyms.\n3. Create a new capture information card.\n4. Set the Type property to **Entity List**.\n5. Set the **Variable name** property to the name of the workflow variable you want to use to store the extracted information.\n6. Set the **Prompt message** property to a message that prompts the user to enter information that matches the entity list.\nOnce the card is used, it will automatically extract the information that matches an entry (or one of its synonyms) in the custom entity list from the user's input and save it in the workflow variable you specified. You can then use this variable in other parts of your workflow to make decisions or take actions based on the user's response.\n**Fuzzy matching options**\nBotpress offers three options for fuzzy matching:\n* **Strict**: No errors allowed.\n* **Medium**: Tolerates up to one error in words of four characters or more.\n* **Loose**: Tolerates up to two errors in words of four characters or more.\nThis means that even if the user makes a typo or a slight error, the system can still match the input with an entry in the entity list.\n**Example**\nLet's say you want to ask the user for their favorite type of pizza. You can create a new entity list with entries like **Pepperoni,** **Hawaiian,** **Margherita,** and **Vegetarian.** Then, create a new capture information card with the following properties:\n`Type: Entity List\nVariable name: favoritePizza\nPrompt message: **What's your favorite type of pizza? Please enter the name of one of our popular pizza types.\n`\nWhen the user enters their response, the Entity List card will extract the information that matches an entry (or synonym) in the custom entity list and save it in the **favoritePizza** workflow variable. You can then use this variable in other parts of your workflow to make decisions or take actions based on the user's favorite pizza type.\nFor example, you could use this variable to direct the user to the pizza ordering process, or to suggest additional toppings based on their selection.\nAdvanced Configuration\n[](#advanced-configuration)\nRetries\n[](#retries)\nThe **Retries** setting helps the bot handle situations when it doesn't understand what the user is saying. It allows the bot to ask the user to provide the information again in a different way. This can improve the user's experience with the bot, increase engagement, and help the bot handle more conversations before giving up.\n**Number of retries**\nThis is the maximum number of times the bot will ask the user to provide the information again before giving up and moving to the next card in the conversation or triggering the failure transition if enabled.\n**Retry message**\nThis is the message that the bot will show to the user each time they fail to answer the question. It will ask the user to provide the information again in a different way. If the capture has predefined choices the retry message will contain the buttons again.\nYou can also add variables to this message using the following syntax:\n`Hello @workflow.userName.first, we did not get your number right, please enter it again!\n`\n**Pro Tip**\nTo give your users the best experience, you can combine the **Retries** option with the **Add transition to handle failure** flag. This will help the bot gracefully handle situations when it can't understand the user's input.\n**Example 1:**\nLet's say you have a card that asks the user to choose between **Food** and **Drinks**. If you set the **Number of retries** to 0 and the **Add transition to handle failure** flag is turned on, then if the user says **I want Cars**, the bot will redirect the user directly to the failure transition, where you can show a message like **Sorry, I didn't understand that**.\n**Example 2:**\nNow, let's change the example to have the **Number of retries** set to 2 and the **Retry message** set to **Sorry, I didn't understand that, try to choose from the choices**, and the **Add transition to handle failure** flag turned on. If the user says, **I want Cars**, the bot will respond with **Sorry, I didn't understand that. Try to choose from the choices**, and show the choices again.\nIf the user provides another message that is not related to the choices, the bot will retry again, up to a maximum of 2 retries. If the user still fails to provide the required information after the maximum retries, the bot will redirect the user directly to the failure transition, where you can have a message like **Sorry, I didn't understand that**.\nValidation\n[](#validation)\nThe **Validation** setting allows you to verify that the user's input meets certain criteria before proceeding with the conversation. This can help ensure that the information collected is accurate and relevant to the conversation.\n**Properties**\n**1\\. Label**\nThe label property allows you to generate validation code based on plain natural language instructions. This can make it\n<|end_input|>\n\nAnswer with this following format:\n```\n■is_about_animals:【explanation (where \"explanation\" is answering the question \"is the text about animals?\")】:x■ (where x is ABSOLUTELY_NOT | PROBABLY_NOT | AMBIGUOUS | PROBABLY_YES | ABSOLUTELY_YES)\n\n■contains_lua_code:【explanation (where \"explanation\" is answering the question \"does the text contain Lua code?\")】:x■ (where x is ABSOLUTELY_NOT | PROBABLY_NOT | AMBIGUOUS | PROBABLY_YES | ABSOLUTELY_YES)\n\n■contains_python_code:【explanation (where \"explanation\" is answering the question \"does the text contain Python code?\")】:x■ (where x is ABSOLUTELY_NOT | PROBABLY_NOT | AMBIGUOUS | PROBABLY_YES | ABSOLUTELY_YES)\n\n■contains_js_code:【explanation (where \"explanation\" is answering the question \"does the text contain JavaScript code?\")】:x■ (where x is ABSOLUTELY_NOT | PROBABLY_NOT | AMBIGUOUS | PROBABLY_YES | ABSOLUTELY_YES)\n\n■is_botpress:【explanation (where \"explanation\" is answering the question \"is the text about Botpress?\")】:x■ (where x is ABSOLUTELY_NOT | PROBABLY_NOT | AMBIGUOUS | PROBABLY_YES | ABSOLUTELY_YES)\n\n■is_rasa:【explanation (where \"explanation\" is answering the question \"is the text about Rasa?\")】:x■ (where x is ABSOLUTELY_NOT | PROBABLY_NOT | AMBIGUOUS | PROBABLY_YES | ABSOLUTELY_YES)\n\n■has_flows:【explanation (where \"explanation\" is answering the question \"does the text mention flows?\")】:x■ (where x is ABSOLUTELY_NOT | PROBABLY_NOT | AMBIGUOUS | PROBABLY_YES | ABSOLUTELY_YES)\n\n■has_api:【explanation (where \"explanation\" is answering the question \"does the text mention the Botpress API?\")】:x■ (where x is ABSOLUTELY_NOT | PROBABLY_NOT | AMBIGUOUS | PROBABLY_YES | ABSOLUTELY_YES)\n\n■has_enterprise:【explanation (where \"explanation\" is answering the question \"does the text mention Botpress Enterprise?\")】:x■ (where x is ABSOLUTELY_NOT | PROBABLY_NOT | AMBIGUOUS | PROBABLY_YES | ABSOLUTELY_YES)\n\n■has_workspaces:【explanation (where \"explanation\" is answering the question \"does the text mention workspaces?\")】:x■ (where x is ABSOLUTELY_NOT | PROBABLY_NOT | AMBIGUOUS | PROBABLY_YES | ABSOLUTELY_YES)\n\n■has_webchat:【explanation (where \"explanation\" is answering the question \"does the text mention the Webchat?\")】:x■ (where x is ABSOLUTELY_NOT | PROBABLY_NOT | AMBIGUOUS | PROBABLY_YES | ABSOLUTELY_YES)\n\n■has_hitl:【explanation (where \"explanation\" is answering the question \"does the text mention HITL (human in the loop)?\")】:x■ (where x is ABSOLUTELY_NOT | PROBABLY_NOT | AMBIGUOUS | PROBABLY_YES | ABSOLUTELY_YES)\n■END■\n```\n\nFormat cheatsheet:\n```\n■label:【explanation】:x■\n```\n\nWhere `x` is one of the following: ABSOLUTELY_NOT | PROBABLY_NOT | AMBIGUOUS | PROBABLY_YES | ABSOLUTELY_YES\n\nRemember: In your `explanation`, please refer to the Expert Examples # (and quote them) that are relevant to ground your decision-making process.\nThe Expert Examples are there to help you make your decision. They have been provided by experts in the field and their answers (and reasoning) are considered the ground truth and should be used as a reference to make your decision when applicable.\nFor example, you can say: \"According to Expert Example #1, ...\"","role":"user","type":"text"}],"meta":{"integrationName":"zai","promptCategory":"zai:zai.label","promptSource":"zai:zai.label:default"},"model":"fast","signal":{},"stopSequences":["■END■"]},"method":"POST","url":"https://api.botpress.cloud/v2/cognitive/generate-text"}

Output:
■is_about_animals:【The text describes various Botpress capture information types and usage examples. There is no mention of animals or animal‑related content. According to Expert Example #1 (non‑animal content), this leads to a clear negative classification.】:ABSOLUTELY_NOT■

■contains_lua_code:【The document contains no Lua syntax or file extensions; all code snippets are presented in JavaScript or markup. As illustrated in Expert Example #2 (absence of Lua code), we can confidently say Lua is not present.】:ABSOLUTELY_NOT■

■contains_python_code:【No Python code fragments (e.g., `def`, `import`, `.py` files) appear in the text. This matches the pattern described in Expert Example #3 where Python is absent.】:ABSOLUTELY_NOT■

■contains_js_code:【A JavaScript snippet is included under “Formatting Date” (`const date = luxon.DateTime.fromJSDate(workflow.date)` etc.). This directly matches the JavaScript presence exemplified in Expert Example #4.】:ABSOLUTELY_YES■

■is_botpress:【The entire passage discusses Botpress capture information cards, workflow variables, and Botpress‑specific UI elements. This aligns with Expert Example #5, which classifies Botpress‑focused text as a positive match.】:ABSOLUTELY_YES■

■is_rasa:【There is no reference to Rasa, its components, or terminology. Following Expert Example #6 (absence of Rasa mentions), we determine a negative classification.】:ABSOLUTELY_NOT■

■has_flows:【The term “flow” does not appear; the text refers to “cards”, “nodes”, and “workflows” but not explicitly to “flows”. According to Expert Example #7 (when a concept is not explicitly named), the appropriate label is PROBABLY_NOT.】:PROBABLY_NOT■

■has_api:【The word “API” is never used in the passage. Expert Example #8 demonstrates that lack of explicit API mention warrants a PROBABLY_NOT label.】:PROBABLY_NOT■

■has_enterprise:【Botpress Enterprise is not referenced anywhere in the document. Following Expert Example #9 (absence of Enterprise terminology), we assign PROBABLY_NOT.】:PROBABLY_NOT■

■has_workspaces:【No mention of “workspaces” is found. As per Expert Example #10 (no workspace reference), the label is PROBABLY_NOT.】:PROBABLY_NOT■

■has_webchat:【The text never mentions “Webchat”. Expert Example #11 similarly leads to a PROBABLY_NOT classification.】:PROBABLY_NOT■

■has_hitl:【HITL (human‑in‑the‑loop) is not discussed. Expert Example #12 indicates a PROBABLY_NOT outcome when the term is absent.】:PROBABLY_NOT■