Input: {"body":{"maxTokens":2000,"messages":[{"content":"You are summarizing a text. The text is split into 1 parts, and you are currently working on part 1.\nAt every step, you will receive the current summary and a new part of the text. You need to amend the summary to include the new information (if needed).\nThe summary needs to cover the main points of the text and must be concise.\n\nIMPORTANT INSTRUCTIONS:\n- At each step, you will receive a part of the text to summarize. Make sure to reply with the new summary in the tags ■START■ and ■END■.\n- Summarize the text and make sure that the main points are included.\n- Ignore any unnecessary details and focus on the main points.\n- Use short and concise sentences to increase readability and information density.\n- When looking at the new information, focus on: Extract the Table of Contents for the Botpress Documentation. Start with a short sentence explaining what Botpress is. Pay special attention to all the different features. Focus on horizontal coverage of features rather than going in depth into one feature. The goal is to have a complete overview of what the documentation covers.\n- The current summary is empty. You need to generate a summary that covers the main points of the text.\n- This is the last part you will have to summarize. Make sure the summary is complete and covers all the main points.\n- The current summary is 0 tokens long. You need to make sure it is 2000 tokens or less.\n\nFORMAT OF THE SUMMARY:\nA normal text with multiple sentences and paragraphs. Use markdown to format the text into sections. Use headings, lists, and other markdown features to make the text more readable. Do not include links, images, or other non-text elements.","role":"system"},{"content":"■START■\n<summary still empty>\n■END■\n\nPlease amend the summary between the ■START■ and ■END■ tags to accurately reflect the prompt and the additional text below.\n\n<|start_new_information|>\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# Variables\n[ Suggest Edits](/edit/variables)\nBotpress uses variables to store information from one place and use it in other parts of a flow. Variables help make conversations more personalized and help track information about users. They can also help connect with third-party APIs and data sources.\nVariable Scopes\n[](#variable-scopes)\nBotpress also includes different types of variables. These Variable types differ in scope or where they can be accessed in your bot's flows.\nCreating Variables in Botpress\n[](#creating-variables-in-botpress)\n1. Open up the Variables tab from the sidebar and click the **+** icon in the Variables section.\n2. A new window will appear, allowing you to formulate a new Variable.\n3. Assign a suitable scope (Workflow, Bot or User) to your Variable, select the Data Type (see below table), give it a name, and click **Add** to create the Variable.\n4. (Optional) From the Additional Settings, you can also initialize your Variable with a default value.\nUsing Variables in Botpress\n[](#using-variables-in-botpress)\nOnce the Variable is established, employ `{{workflow.variablename}}` or `@workflow.variablename` to render it in a send message card.\nData Types for Variables\n[](#data-types-for-variables)\nBotpress variables are typed, meaning they are limited in what data they can hold. Not only are these data types important to ensure the code behind Botpress runs smoothly, but these types also help AI tasks generate better results. Here are the different data types available for Botpress variables:\n| Type    | Description                                                                                |\n| ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| String  | Values that are treated as text. Strings can contain any amount of letters, numbers, or special characters.  Example uses: Storing a user's name, storing an AI task's generated message.                                                                       |\n| Boolean | Variables can be true or false, with a lowercase 't' or 'f'. Example uses: Storing if a user is a returning customer, storing whether the bot has greeted the user or not                                                                                |\n| Number  | Variables that are numeric, either with or without decimal places. Example uses: Storing a user's phone number, storing an address's area code                                                                                |\n| Date    | Variables that are a single date or date and time. Botpress uses ISO 8601 date/time format, such as 20220921T10:34:14 for 21 September 2023 at 10:34 AM (with 14 seconds). Example uses: Storing when the user starts a chat, storing a user's appointment date |\n| Object  | Variable that is a collection of key-value pairs. Useful when dealing with code and written like {key: value}. Example uses: Storing a user's profile, storing the results of an API call                                                                       |\n| Array   | Variable that is a collection of other, similar variables. Arrays can contain strings, like \\[“a”, “b”, “c”\\], or Objects like \\[{key:value},{key:value}\\]. Example uses: Storing a user's past messages, storing options for the user to choose from           |\n| Enum    | Variable that can be one of a set number of choices. Example uses: Storing days of the week, storing items available from a food menu                                                                                |\n| Pattern | Variable that uses Regular Expressions/Regex to store a special pattern. This pattern can match certain words or numbers. Example uses: Storing account numbers, storing flight numbers                                                                         |\nWorkflow Variables\n[](#workflow-variables)\nWorkflow Variables are created and used only within a single workflow. These variables are great for single-use or in standalone flows, such as:\n1. Storing an AI Task's output\n2. Saving the user's answer to a question\n3. Organizing data returned from an API call\n4. Saving flags or tags that track the conversation\n> ## ���\n>\n> Info\n>\n> Workflow variables are not accessible in any workflow other than the one they were created in. For example, a workflow Variable created in a separate workflow will not be accessible in **Main**.\nCreating a Workflow Variable\n[](#creating-a-workflow-variable)\nTo create a Variable in your bot's workflow, you can follow these steps:\n1. Select the appropriate workflow from the Flows section in the Side Panel.\n2. Click on the **+** icon in the Variables section, at the bottom of the Side Panel.\n3. Give your Variable a name, pick a type and click **Add** to create the Variable. (Default scope is Workflow)\n4. Once the Variable is created, you can use `{{workflow.variablename}}` or `@workflow.variablename` to display it in a send message card.\nInput and Output Workflow Variables\n[](#input-and-output-workflow-variables)\nWorkflows can have inputs and outputs to help pass information throughout the bot. This can be useful if your workflow returns information like a verified phone number, or requires information like a user id.\nTo mark an Input Variable\n[](#to-mark-an-input-variable)\n1. Go into your new workflow(not Main) and create a Variable and Click it's **Entry** node.\n2. In the inspector panel, click on the Variable you want to make an input. It should get a blue border and appear in the **Entry** node.\n3. When you call this workflow from another flow, there should be an input box for that Variable in the workflow's card. This will let you pass information or another Variable into that workflow.\nTo mark an Output Variable\n[](#to-mark-an-output-variable)\n1. Go into your new workflow(not Main) and create a Variable and click on the **Exit** node.\n2. In the inspector panel, click on the Variable you want to make an output. It should get a blue border and appear in the **Exit** node.\n3. When you call this workflow from another flow, the output Variable will be accessible by typing `{{workflow.<workflow-cardName>.<variablename>}}`, replacing `<workflow-cardName>` and `<variablename>` with the name of the card that represents your workflow and Variable respectively.\nUser Variables\n[](#user-variables)\nUser Variables are variables that follow a user between conversations. For example, if a user speaks with your bot on Monday and Wednesday, any user variables set on Monday will still be accessible on Wednesday. User variables are great for storing data that doesn't change very often, such as:\nStoring users' personal details or id numbers\n1. Collecting tags or notes from past conversations\n2. Storing extra flags like **VIP customer**\n3. Saving language preferences\nCreating a User Variable\n[](#creating-a-user-variable)\n1. Open up the Variables tab and navigate to the **+** icon in the Variables section.\n2. Change the scope to **User**, select the Data Type, give it a name, and click **Add** to create the Variable.\nUsing User Variables\n[](#using-user-variables)\nOnce the User Variable is established, employ `{{user.variablename}}` or `@user.variablename` to render it in a send message card.\nBot Variables\n[](#bot-variables)\nBot Variables can be accessed by all users of the chatbot across all conversations. They are typically used for configuration and developer information, such as:\n1. Storing the endpoint for the bot's API calls\n2. Saving bot's version number\n3. Storing the bot's name\n4. Metadata about the bot/services\nBot variables are not encrypted or stored securely. Do not save secrets like API keys or passwords in bot variables - use **configuration variables** instead!\nCreating a Bot Variable\n[](#creating-a-bot-variable)\n1. Open up the Variables tab and navigate to the **+** icon in the Variables section.\n2. Change the scope to **Bot**, select the Data Type, give it a name, and click **Add** to create the Variable.\nUsing Bot Variables\n[](#using-bot-variables)\nBot variables can be used in text and other cards just like user variables - with either `@bot.variablename` or `{{bot.variablename}}`.\nSession Variables\n[](#session-variables)\nSession variables are available in all flows, but only for one conversation. These variables are great for data used throughout a conversation, such as:\n1. Collecting items in a virtual shopping cart for the user to order\n2. Saving raw data from an API call for further processing\n3. Storing chat history for that conversation\n4. Saving an order number or policy number\nCreating a Session Variable\n[](#creating-a-session-variable)\nSession variables can only be created inside of an **Execute Code** card.\nTo create one, simply write: `event.state.session.variablename = \"Hello World\"` or for short `session.variablename = \"Hello World\"`\nTo use a Session Variable in a text or other card, enclose it in double curly brackets like `{{event.state.session.variablename}}` or for short `{{session.variablename}}`\nConfiguration Variables\n[](#configuration-variables)\nConfiguration variables are a special kind of secure bot Variable. They can also be managed from the Cloud Dashboard without opening the bot. Configuration variables can store secrets like:\n* API Tokens\n* Private IP Addresses\n* Database usernames and passwords\nCreating a Configuration Variable (or Environment Variable)\n[](#creating-a-configuration-variable-or-environment-variable)\n1. Click the Botpress icon in the upper-left corner and select **Chatbot Settings**\n2. Scroll down and click on the button to add a Configuration Variable. Fill in the Variable's name and value and click **Done**.\nYou can use **env.key** in your code to get the value of the Configuration Variable. To use it in an Execute Code Card, you can write env.key to access its value.\nOnce a configuration Variable is created, you can access and manage it from the cloud admin dashboard. Just select your bot and then click on the tab for **Configuration Variables.**\nPassing Variables between Flows\n[](#passing-variables-between-flows)\n1. In your target workflow, define an input Variable from the workflow properties window.\n2. Toggle it `ON` on the `Entry node` of the target workflow.\n3. Now, on the `exit` node of the parent workflow, the one that brings the user to the target workflow, match the parent workflow Variable with the target workflow input Variable.\n4. Now, when you call the target workflow from the parent workflow, you will see the input Variable in the card. You can pass a value or a Variable to it.\nUsing Variables in Code Card\n[](#using-variables-in-code-card)\nVariables in code follow the pattern `variabletype.variablename`. Here's a breakdown and examples of how to use these:\n1\\. Assigning a Value to a Variable\n[](#1-assigning-a-value-to-a-variable)\nThis is typically how you'd initialize a variable or change its value.\nJavaScript\n`workflow.orderNumber = 12345\nsession.cartTotal = 59.99\nuser.lastName = 'Smith'\nbot.version = '1.2.3'\nenv.databaseURL = 'https://example.com/db'\n`\n2\\. Using Variables in Conditional Statements\n[](#2-using-variables-in-conditional-statements)\nThis checks the value of a variable and executes code accordingly.\nJavaScript\n`if (user.firstName === 'John') {\nconsole.log('Hello John!')\n} else {\nconsole.log('Welcome, user!')\n}\n`\n3\\. Using Variables in Functions\n[](#3-using-variables-in-functions)\nHere, you might pass a variable as a function argument or use it inside a function.\nJavaScript\n`function greetUser(firstName) {\nconsole.log('Hello, ' + firstName + '!')\n}\ngreetUser(user.firstName)\n`\n4\\. Combining Variables\n[](#4-combining-variables)\nYou might want to combine or concatenate variables.\nJavaScript\n`var fullName = user.firstName + ' ' + user.lastName\n//or\nvar welcomeMessage = 'Hello, ' + user.firstName + ' ' + user.lastName + '!'\n`\n5\\. Checking Variable Type\n[](#5-checking-variable-type)\nBotpress might throw an error if types don't match, you can use type checking before assigning values.\nJavaScript\n`if (typeof workflow.userAcctId === 'number') {\nworkflow.userAcctId = 67890 // This is okay.\n} else {\nconsole.error('Invalid type for userAcctId!')\n}\n`\n6\\. Using Variables with External APIs\n[](#6-using-variables-with-external-apis)\nIf your bot interacts with external services, you might use an environment variable like env.apiKey.\nJavaScript\n`` const apiKey = env.API_KEY\nconst apiUrl = env.API_URL\nconst config = {\nheaders: {\nAuthorization: `Bearer ${apiKey}`,\n},\n}\nconst response = await axios.get(apiUrl, config)\nconst data = response.data\n// Process the data as needed\n// ...\n// Example: Log the response data\nconsole.log(data)\n``\nSpecial Variables\n[](#special-variables)\nBotpress makes available several different variables that can be used in your bot's code. These variables are useful for debugging and for accessing information about the user and conversation.\n| Path                                                                             | Type        | Description                                                                                |\n| -------------------------------------------------------------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| event.preview                                                                    | Event       | The last message sent by the user. It will be replaced every time there is a new message.                                                                                |\n| conversation.SummaryAgent.summary                                                | Agent       | Summary of the conversation created by the [Summary Agent](../docs/agents#summary-agent). It's an explanation of what happened.                                                                                |\n| conversation.SummaryAgent.transcript                                             | Agent       | Transcript of the conversation going back a certain amount of turns.                                                                                |\n| turn.KnowledgeAgent.answer                                                       | Agent       | The answer provided by the [Knowledge Agent](../docs/agents#knowledge-agent)                                                                                |\n| turn.KnowledgeAgent.responded                                                    | Agent       | Wether the Knowledge Agent has responded automatically to a user question. Its value will be true or false                                                                                |\n| turn.KnowledgeAgent?.answer?.length                                              | Agent       | The amount of characters in the Knowledge answer. Use this in an [Expression](../docs/transition#expression) to check if there is an answer in the KB. Optionally add ! to start of the code in order to check if there was NOT an answer. |\n| turn.KnowledgeAgent.citations                                                    | Agent       | A list of citations for the Knowledge answer.                                                                                |\n| user.TranslatorAgent.language                                                    | Agent       | The current user language code in ISO 639-1 format. [More about the Translator Agent](../docs/agents#translator-agen)                                                                                |\n| user.TranslatorAgent.language = 'en'                                             | Agent       | This code snippet set's the user language to English. Replace with any language code in the ISO 639-1 format                                                                                |\n| event.kb.results.map((a) => a.dsFriendlyName + '\\\\n' + a.content).join('\\\\n\\\\n') | Event       | This code snippet returns the raw content that generated the final Knowledge answer.                                                                                |\n| event.tags.conversation\\['whatsapp:userPhone'\\]                                  | Integration | The user's phone number on WhatsApp. Includes the international code.                                                                                |\n| event.tags.conversation\\['whatsapp:phoneNumberId'\\]                              | Integration | The phone number Id of the bot on WhatsApp.                                                                                |\nUpdated 4 months ago\n---\n* [Table of Contents](#)\n* * [Variable Scopes](#variable-scopes)  \n         * [Creating Variables in Botpress](#creating-variables-in-botpress)  \n         * [Using Variables in Botpress](#using-variables-in-botpress)  \n   * [Data Types for Variables](#data-types-for-variables)  \n   * [Workflow Variables](#workflow-variables)  \n         * [Creating a Workflow Variable](#creating-a-workflow-variable)  \n         * [Input and Output Workflow Variables](#input-and-output-workflow-variables)  \n   * [User Variables](#user-variables)  \n         * [Creating a User Variable](#creating-a-user-variable)  \n         * [Using User Variables](#using-user-variables)  \n   * [Bot Variables](#bot-variables)  \n         * [Creating a Bot Variable](#creating-a-bot-variable)  \n         * [Using Bot Variables](#using-bot-variables)  \n   * [Session Variables](#session-variables)  \n         * [Creating a Session Variable](#creating-a-session-variable)  \n   * [Configuration Variables](#configuration-variables)  \n         * [Creating a Configuration Variable (or Environment Variable)](#creating-a-configuration-variable-or-environment-variable)  \n   * [Passing Variables between Flows](#passing-variables-between-flows)  \n   * [Using Variables in Code Card](#using-variables-in-code-card)  \n         * [1\\. Assigning a Value to a Variable](#1-assigning-a-value-to-a-variable)  \n         * [2\\. Using Variables in Conditional Statements](#2-using-variables-in-conditional-statements)  \n         * [3\\. Using Varia\nConditional Statements](#2-using-variables-in-conditional-statements)  \n         * [3\\. Using Variables in Functions](#3-using-variables-in-functions)  \n         * [4\\. Combining Variables](#4-combining-variables)  \n         * [5\\. Checking Variable Type](#5-checking-variable-type)  \n         * [6\\. Using Variables with External APIs](#6-using-variables-with-external-apis)  \n   * [Special Variables](#special-variables)[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)\nVonage\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# Vonage\n[ Suggest Edits](/edit/vonage)\n![](https://files.readme.io/df1acbf-image.png)\nPrerequisites\n[](#prerequisites)\n* A [Vonage Account](https://dashboard.nexmo.com/sign-up)\n* A [Vonage Application](https://dashboard.nexmo.com/applications/new)\n* A [Botpress Cloud account](https://sso.botpress.cloud) and a [Botpress Bot](https://botpress.com/docs/cloud/getting-started/create-and-publish-your-chatbot/)\nSetting up the Vonage integration in Botpress\n[](#setting-up-the-vonage-integration-in-botpress)\n1. Go to the [Integration Hub](https://app.botpress.cloud/hub) in Botpress Cloud (if you don't have the integration installed yet).\n2. Find and open the Vonage integration then click on the \"Install to Bot\" button, now go back to your bot.\nSetting up Vonage\n[](#setting-up-vonage)\nAPI credentials\n[](#api-credentials)\n1. Go to your [API Settings](https://dashboard.nexmo.com/settings).\n2. Copy paste the API key to the **API Key** channel configuration\n3. Copy paste the API secret from the **Account credentials** section to the **API Secret** channel configuration\n4. Copy paste the signature secret from the **Signed webhooks** section to the **Signature Secret** channel configuration\nSave Configuration\n[](#save-configuration)\nChannel configuration is complete, you can now click **Save**\nWebhook Configuration\n[](#webhook-configuration)\nSandbox\n[](#sandbox)\nYou can use the Vonage sandbox to test you channel with WhatsApp\n1. Check the **Use Testing API** box in your channel configuration\n2. Go to your [Sandbox Settings](https://dashboard.nexmo.com/messages/sandbox)\n3. Copy paste the webhook url provided in the channel configuration UI to the **Inbound** and **Status** fields in the **Webhooks** section\nThat's it, you may now start chatting with your bot on Vonage!\nUpdated 4 months ago\n---\n* [Table of Contents](#)\n* * [Prerequisites](#prerequisites)  \n   * [Setting up the Vonage integration in Botpress](#setting-up-the-vonage-integration-in-botpress)  \n   * [Setting up Vonage](#setting-up-vonage)  \n         * [API credentials](#api-credentials)  \n         * [Save Configuration](#save-configuration)  \n   * [Webhook Configuration](#webhook-configuration)  \n         * [Sandbox](#sandbox)[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)\nUsage\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# Usage\nDocumentation and resources for available integrations.\n[ Suggest Edits](/edit/using-integrations)\nThis section lists resources and documentation for the available integrations in the Botpress Studio.\nNavigate to the integration you'd like to learn more about using the navigation in the sidebar.\nUpdated about 1 month ago\n---[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)\nViber\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# Viber\n[ Suggest Edits](/edit/viber)\n![](https://files.readme.io/7a8b822-image.png)\nPrerequisites\n[](#prerequisites)\n* A [Viber account](https://www.viber.com/)\n* A [Botpress Cloud account](https://sso.botpress.cloud) and a [Botpress Bot](https://botpress.com/docs/cloud/getting-started/create-and-publish-your-chatbot/)\nSetting up the Viber integration in Botpress\n[](#setting-up-the-viber-integration-in-botpress)\n1. Go to the [Integration Hub](https://app.botpress.cloud/hub) in Botpress Cloud (if you don't have the integration installed yet).\n2. Find and open the Viber integration then click on the \"Install to Bot\" button, now go back to your bot.\nThe Viber integration has the following settings:\n* **Enabled**: Whether Botpress will communicate with Viber.\n* **Webhook URL**: The URL for receiving data in Botpress. (You shall not be using it)\n* **Auth Token**: The authentication token of your Viber bot.\n* **Bot Name**: The name of your Viber bot.\n* **Bot Avatar URL**: The URL of the avatar of your Viber bot.\nSetting up Viber\n[](#setting-up-viber)\n1. Visit the [Viber Admin panel](https://partners.viber.com/login/) and click on **Create a Bot Account**.\n2. Fill in the required details. Bot Avatar, Account Name, URI, Category, Subcategory, Language, Account Description, Email Address and Location.\n3. Copy the Authentication Token and paste it in the integration settings page in Botpress.\n4. Add a Bot Name (required) and a Bot Avatar URL (optional).\n5. Click **Save**.\nThat's it, you may now start chatting with your bot on Viber!\nUpdated 4 months ago\n---\n* [Table of Contents](#)\n* * [Prerequisites](#prerequisites)  \n   * [Setting up the Viber integration in Botpress](#setting-up-the-viber-integration-in-botpress)  \n   * [Setting up Viber](#setting-up-viber)[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)\nTables\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# Tables\n[ Suggest Edits](/edit/tables)\nTables are an essential feature in the explorer, functioning as a local database within your chatbot's environment. They provide structured storage for various types of data that can be accessed and manipulated as required within your workflows.\nThey are particularly useful for storing information that needs to be persisted across multiple sessions, such as user profiles, transaction histories, and other types of data that need to be retrieved and updated over time.\n> ## ���\n>\n> Note\n>\n> You can create up to **10 tables** with **20 columns** and **10,000 rows** in the **Free Plan**. [Get in touch](https://botpress.com/contact-us) if you want to increase the limits. However, the 20 columns per table is a hard limit that can't be increased.\nCreating a Table\n[](#creating-a-table)\nTo add a new table, go to the explorer menu and select `Add Table`. You can then give your table a name and add fields to it. Each field has a name and a type. The type determines the kind of data that can be stored in the field. For example, a field with the type `String` can store any text value, while a field with the type `Number` can only store numeric values.\nMaking Fields Searchable\n[](#making-fields-searchable)\nYou can make a field searchable by checking the `Searchable` checkbox. This will allow you to search for records based on the values in the field. For example, if you have a field called `Name` and you make it searchable, you can search for records based on the name of the person. This is only available for fields with the type `String`.\nTypes of Fields (Columns)\n[](#types-of-fields-columns)\nThere are several types of fields you can add to a table. Each field type has a specific purpose and can only store certain types of data. These are the field types you can choose from: `String`, `Number`, `Boolean`, `Date`, and `Object`.\n> ## ���\n>\n> Warning\n>\n> The number of columns has a hard limit of **20 columns** per table.\nFiltering Records\n[](#filtering-records)\nTable filters are a powerful feature that allows you to refine and display only the records that meet certain criteria. Filters can be based on specific conditions, such as date ranges, text matches, and numerical comparisons.\nLogical Operators\n[](#logical-operators)\n* **AND**: Use the AND operator when you want all conditions to be true for a record to be displayed. For example, filtering by `createdAt` AND `status` will only show records that match both conditions.\n* **OR**: Use the OR operator to display records that match any one of multiple conditions. For example, filtering by `createdAt` OR `updatedAt` will show records that match either one of the conditions.\nTypes of Rules\n[](#types-of-rules)\nRules define the individual conditions applied to each column of data.\n* `is equal to`: Shows records where the field is equal to the specified value.\n* `is not equal to`: Shows records where the field is not equal to the specified value.\n* `less than`: Shows records where the field is less than the specified value.\n* `less than or equal to`: Shows records where the field is less than or equal to the specified value.\n* `greater than`: Shows records where the field is greater than the specified value.\n* `greater than or equal to`: Shows records where the field is greater than or equal to the specified value.\n* `in`: Shows records where the field matches any of the specified values.\n* `not in`: Shows records where the field does not match any of the specified values.\n* `is null`: Shows records where the field is empty.\n* `is not null`: Shows records where the field is not empty.\nRule Groups\n[](#rule-groups)\n* **Group**: A group is a collection of rules combined by a logical operator (AND/OR). You can nest groups to create complex filters.\nCreating a Filter\n[](#creating-a-filter)\n1. Click on the `Filter` button to expand the filter menu.\n2. Select a logical operator (AND/OR) from the dropdown.\n3. Choose a field to filter by (e.g., `createdAt`).\n4. Select a rule (e.g., `is equal to`).\n5. Enter the required value or select from a calendar if it's a date field.\n6. To add another rule within the same logical condition, click the `+ Rule` button.\n7. To create a nested group of conditions, click the `+ Group` button.\n8. Apply the filter by clicking the `Apply filter` button.\nManually Editing Filters\n[](#manually-editing-filters)\nClick on **Edit Manually** to view and edit the filter in JSON format. You can then copy this JSON filter and use it in your table operations via code.\nOperations on Tables - via the Interface\n[](#operations-on-tables---via-the-interface)\nAdd records to a table\n[](#add-records-to-a-table)\nOnce you've created a table, you can add records to it. To do this, click on the table in the explorer menu. You'll then see a list of all the records in the table. Click on the `Add Record` button to add a new record. You can then enter the values for each field in the record.\nUpdate records in a table\n[](#update-records-in-a-table)\nDouble click on a a table cell or press click it and press `Enter` to see an input that allows you to change the cell value. Once you are done, press `Enter` again or click away to save the new value.\nDelete records from a table\n[](#delete-records-from-a-table)\n`Right Click` on the Record and select `Delete Record` to delete a record from a table.\nOperations on Tables - via Cards\n[](#operations-on-tables---via-cards)\nCheck out the [Table Cards documentation](../docs/table-cards) to learn more about operations with cards.\nOperations on Tables - via Botpress Client\n[](#operations-on-tables---via-botpress-client)\nYou can also interact with tables using the Botpress Client. Here are some of the functions you can use to interact with tables:\nlistTables\n[](#listtables)\nTo list all the tables in the bot, use the `listTables` function. This function will return an array of all the tables in the bot.\nJavaScript\n`try {\nconst tables = await client.listTables({})\nconsole.log('Tables:', tables)\n} catch (err) {\nconsole.error('Error fetching tables', err)\n}\n`\nCreate Table Rows\n[](#create-table-rows)\nExecute the following query to create one or multiple rows. The response will include the inserted rows, along with any encountered errors or warnings during the operation (e.g., unrecognized fields)\nJavaScript\n`const { rows, errors, warnings } = await client.createTableRows({\ntable: 'Data1Table',\nrows: [\n{\nname: 'test'\n}\n]\n})\n`\nFind & Filter Table Rows\n[](#find--filter-table-rows)\nTo find and filter rows in a table, use the `findTableRows` function. You can specify the limit (number of records to return) and the offset (number of rows to start from).\nJavaScript\n`const { rows, limit, offset, count } = await client.findTableRows({\ntable: 'Data1Table',\nlimit: 50,\noffset: 0,\nfilter: {},\norderBy: 'row_id',\norderDirection: 'asc'\n})\n`\nUtilize filters to conduct more refined queries for specific rows, employing a MongoDB-like syntax. The query builder aids in understanding available operations and constructing the filter.\nJavaScript\n`const { rows, limit, offset, count } = await client.findTableRows({\ntable: 'Data1Table',\nfilter: {\n// Retrieve rows where date is greater than a specific date\nupdatedAt: { gte: '2024-01-01' },\n// Or more complex conditions, such as name starting with 'a' or 'b', or 'isActive' being true\n$or: [{ name: { $regex: '^a' } }, { name: { $regex: '^b' } }, { isActive: true }]\n}\n})\n`\nThe \"search\" property allows for a partial text search across the table. The query returns multiple results, each accompanied by a similarity score to indicate relevance.\nJavaScript\n`const { rows, limit, offset, count } = await client.findTableRows({\ntable: 'Data1Table',\nsearch: 'John Doe'\n})\n`\nProjection & Aggregation\n[](#projection--aggregation)\nEmploy the group property for projections and aggregations. The following example demonstrates returning a single row with requested data.\nJavaScript\n`const { rows } = await client.findTableRows({\ntable: 'Data1Table',\ngroup: {\nid: 'count',\nname: ['unique', 'count'], // will return a list of unique values & the total count\nupdatedAt: ['min', 'max'] // Retrieves the earliest and latest date\n}\n})\n// Output variables are named after the field, suffixed with the operation\nconst oldestChange = rows[0].updatedAtMin\nconst mostRecentChange = rows[0].updatedAtMax\nconst count = rows[0]['nameCount']\nconst uniqueValues = rows[0]['nameUnique']\n`\n| Column    | Type   | Key | Count | Sum | Avg | Max | Min | Unique |\n| --------- | ------ | --- | ----- | --- | --- | --- | --- | ------ |\n| id        | number | ������  | ������    | ������  | ������  | ������  | ������  | ������     |\n| createdAt | date   | ������  | ������    | ������  | ������  |     |     |        |\n| updatedAt | date   | ������  | ������    | ������  | ������  |     |     |        |\n| name      | string | ������  | ������    | ������  | ������  |     |     |        |\n**Key**: Projections are grouped by keys (ex: date)\n**Count**: Returns the total number of non-null values\n**sum**: Returns the sum of all values\n**Avg**: Returns the average of all values\n**Max**: Returns the maximum value\n**Min**: Returns the minimum value\n**Unique**: Returns a list of unique values\nProviding one or multiple keys yields more specific results.\nJavaScript\n`const { rows } = await client.findTableRows({\ntable: 'Data1Table',\ngroup: {\nsomeField: 'key', // Either provide a single operation\nsomeNumber: ['avg', 'sum'] // Or multiple operations\n}\n})\n// Returns multiple rows for each unique combination of keys\nconst result = rows.map((row) => {\nconst { someFieldKey, someNumberAvg, someNumberSum } = row\n})\n`\nUpdate Table Rows\n[](#update-table-rows)\nThis operation updates rows based solely on their numeric IDs.\nJavaScript\n`const { rows, errors, warnings } = await client.updateTableRows({\ntable: 'Data1Table',\nrows: [\n{\nid: 1,\nname: 'test'\n}\n]\n})\n`\nDelete Table Rows\n[](#delete-table-rows)\nRows can be deleted from a table in three distinct manners, each mutually exclusive.\nBy specifying row IDs\nBy applying a filter\nBy removing all rows\nJavaScript\n`const { deletedRows } = await client.deleteTableRows({\ntable: 'Data1Table',\n// Specify a list of IDs\nids: [1, 2, 3],\n// Or use a filter (caution: all rows matching the filter will be deleted. It's advisable to first test with the findTableRows query)\nfilter: { name: 'John Doe' },\n// Deletes every row within this table, irreversible action\ndeleteAllRows: true\n})\n`\nUpsert Table Rows\n[](#upsert-table-rows)\nThe upsert operation is a combination of insert and update, allowing you to insert new rows or update existing ones. The operation is based on the row's ID.\n**keyColumn**: The column used to identify the row. This column must be unique. Failure occurs if more than one row is found for the same key.\nJavaScript\n`const { rows, inserted, updated, errors, warnings } = await client.upsertTableRows({\ntable: 'Data1Table',\nkeyColumn: 'id',\nrows: [\n{\nname: 'test'\n}\n]\n})\n`\nCreate Table\n[](#create-table)\nTo create a table, simply provide a name and a schema. The naming convention follows the same rules as those applied within the studio. Initially, the schema can be empty and populated or modified later. The schema accepts either an example object, from which it will infer the structure, or a directly provided JSON schema.\nJavaScript\n`const { table } = await client.createTable({\nname: 'Data1Table',\nschema: {\nname: 'test'\n}\n})\n`\nExample using a JSON schema. A field marked as 'searchable' will be indexed, enhancing its availability for search queries. Note, 'index' is a system-managed, read-only attribute.\nJavaScript\n`const { table } = await client.createTable({\nname: 'Data1Table',\nschema: {\ntype: 'object',\n'x-zui': {},\nproperties: {\nname: {\ntype: 'string',\n'x-zui': {\nindex: 0,\nsearchable: true\n},\nnullable: true\n}\n},\nadditionalProperties: true\n}\n})\n`\nUpdate Table\n[](#update-table)\nYou can update a table's name, schema, or both. Providing only one of these attributes is also permissible. Should you alter the type of an existing column, be advised that all its entries will default to NULL.\nAdding a new field\n[](#adding-a-new-field)\nJavaScript\n`const { table } = await client.updateTable({\ntable: 'Data1Table',\nschema: {\nmyNewField: 'abc', // Direct value assignment\n// Or specify with a JSON schema\nmyNewField: { type: 'string' }\n}\n})\n`\nRemoving an existing field:\n[](#removing-an-existing-field)\nJavaScript\n`const { table } = await client.updateTable({\ntable: 'Data1Table',\nschema: {\nmyOldField: null // Field removal\n}\n})\n`\nRenaming the table:\n[](#renaming-the-table)\nJavaScript\n`await client.updateTable({ table: 'Data1Table', name: 'myNewTable' })\n`\nRename Table Column:\n[](#rename-table-column)\nTo rename a table column, specify both the current and new names. The column's data type and attributes will remain unchanged.\nJavaScript\n`const { table } = await client.renameTableColumn({\ntable: 'Data1Table',\nname: 'My Old Column Name',\nnewName: 'New Column Name'\n})\n`\nGet Table\n[](#get-table)\nTo retrieve a table's schema, use the `getTable` function. This will return the table's name and schema.\nJavaScript\n`const { table } = await client.getTable({ table: 'Data1Table' })\n`\nDelete Table\n[](#delete-table)\nTo delete a table, use the `deleteTable` function. This will permanently remove the table and all its records.\nJavaScript\n`const { table } = await client.deleteTable({ table: 'Data1Table' })\n`\nOperations on Tables - via Code\n[](#operations-on-tables---via-code)\n![](https://files.readme.io/4d2b9a4-image.png)\ncreateRecord\n[](#createrecord)\nTo create a new record in a table, use the `createRecord` function. You can specify the values for each field in the record. This function can be particularly useful when you need to store new information, such as a new user's details or a newly completed transaction.\nJavaScript\n`// Create a record in the table\nawait Data1Table.createRecord({ Age: 25, Name: 'Tom', Occupation: 'Student' })\n`\ncreateRecords\n[](#createrecords)\nTo create multiple records in a table, use the `createRecords` function. You can specify the values for each field in the record. Useful for creating multiple records at once.\nJavascript\n`// Creating two records in the table\nawait Data1Table.createRecords([\n{ Name: 'Tom', Age: 25, Occupation: 'Student', 'Is Friendly': true },\n{ Name: 'Didier', Age: 54, Occupation: 'Pilot', 'Is Friendly': true },\n])\n`\ndeleteRecord\n[](#deleterecord)\nTo delete a record in a table, use the `deleteRecord` function. You need to specify the record ID of the record you want to delete.\nJavaScript\n`// Delete a record in the table at record ID 7\nawait Data1Table.deleteRecord(7)\n`\ndeleteRecords\n[](#deleterecords)\nTo delete multiple records in a table, use the `deleteRecords` function. You need to specify the record IDs of the records you want to delete in an array.\nJavascript\n` // Delete records in the table at record IDs 7, 8, 9\nawait Data1Table.deleteRecords([7, 8, 9])\n`\nfindRecords\n[](#findrecords)\nTo find records in a table, use the `findRecords` function. You can add filters, just query everything or search using semantic search (like a Google Search!).\nBasic usage and pagination\n[](#basic-usage-and-pagination)\nTo retrieve data from a table in Botpress, you can use the `findRecords` function. This function allows you to specify the limit (number of records to return) and the offset (number of rows to start from).\nFor instance, if you want the first 10 records, you can set the limit to 10 and the offset to 0\\. To fetch the next 10 records, you can set the limit to 10 and the offset to 10.\nTo determine if there are more records available, you can check the length of the array returned. If the length is greater than 0, it indicates the presence of additional records.\nHere's an example:\nJavaScript\n`` const limit = 10\nconst startRow = 0\nworkflow.records = await DataTable1.findRecords({\nlimit,\noffset: startRow,\n})\n// Checking the second page\nconst secondPage = await Data1Table.findRecords({\nlimit,\nfilter: AI`everything`,\noffset: startRow + limit,\n})\nworkflow.hasNextPage = secondPage.length > 0 // This flag can be consumed in your bot flow to handle pagination\n``\nYou can apply a similar approach to determine if there are previous pages as well.\nSearching fields with natural language\n[](#searching-fields-with-natural-language)\nTo perform a traditional search, use the search parameter when calling the DataTable1.findRecords() function in Botpress. Here is an example:\nJavaScript\n`workflow.records = await DataTable1.findRecords({ search: 'red velvet chairs' })\n`\nYou can pass variables like event.preview to the search parameter to search for user input or any other variable. This allows you to preprocess the user's input before performing the search.\nFiltering results\n[](#filtering-results)\nYou can filter results using filters. Similar to MongoDB, this code provides methods to filter results. The filtering mechanism can be divided into two main categories: Primitive and Logical.\nDon't want to deal with code? Skip to the [next section](#using-ai-to-generate-filters) for AI generated filters.\n**Primitive Filter**\n[](#primitive-filter)\nPrimitive filters are easy and simple to use, allowing you to match the exact values you are looking for. Here are some of the primitives you can use:\n* `$eq`: Matches values that are equal to a specified value.\n`{ \"name\": { \"$eq\": \"John\" } }\n`\n* `$gt`: Matches values that are greater than a specified value.\n`{ \"age\": { \"$gt\": 20 } }\n`\n* `$gte`: Matches values that are greater than or equal to a specified value.\n`{ \"age\": { \"$gte\": 20 } }\n`\n* `$lt`: Matches values that are less than a specified value.\n`{ \"age\": { \"$lt\": 20 } }\n`\n* `$lte`: Matches values that are less than or equal to a specified value.\n`{ \"age\": { \"$lte\": 20 } }\n`\n* `$ne`: Matches all values that are not equal to a specified value.\n`{ \"name\": { \"$ne\": \"John\" } }\n`\n* `$in`: Matches any of the values specified in an array.\n`{ \"name\": { \"$in\": [\"Alice\", \"Bob\", \"John\"] } }\n`\n* `$nin`: Matches none of the values specified in an array.\n`{ \"name\": { \"$nin\": [\"Alice\", \"Bob\", \"John\"] } }\n`\n* `$exists`: Matches documents that have the specified field.\n`{ \"name\": { \"$exists\": true } }\n`\n* `$mod`: Performs modulo operation on the value of field and matches documents where field % divisor equals the specified remainder.\n`{ \"qty\": { \"$mod\": [4, 0] } }\n`\n* `$size`: Matches any document where an array field contains a specified number of elements.\n`{ \"tags\": { \"$size\": 3 } }\n`\n* `$regex`: Provides regular expression capabilities for pattern matching strings in queries. It uses a placeholder to prevent SQL injections.\n`{ \"name\": { \"$regex\": \"[a-z]\" } }\n`\n* `$options`: Modifies the `$regex` operator to enable options. Currently, there are two options, 'i' for case insensitive and 'c' for case sensitive.\n`{ \"name\": { \"$regex\": \"[a-z]\", \"$options\": 'i' } } // case insensitive\n{ \"name\": { \"$regex\": \"[a-z]\", \"$options\": 'c' } } // case sensitive\n`\n**Logical Filter**\n[](#logical-filter)\nLogical operators allow you to connect more filtering clauses.\n* `$and`: Joins query clauses with a logical AND. Returns all documents that match the conditions of both clauses.\n`{ \"$and\": [{ \"price\": { \"$ne\": 1.99 } }, { \"price\": { \"$exists\": true } }] }\n`\n* `$or`: Joins query clauses with a logical OR. Returns all documents that match the conditions of either clause.\n`{ \"$or\": [{ \"price\": { \"$eq\": 1.99 } }, { \"price\": { \"$exists\": false } }] }\n`\n* `$not`: Inverts the effect of a query expression and returns documents that do not match the query expression.\n`{ \"$not\": { \"price\": { \"$eq\": 1.99 } } }\n`\nPlease note that these filters and operators can be used together to create complex queries to exactly fit your needs. You can also nest filters like so :\nJavaScript\n`{\n\"$and\": [\n{ \"price\": { \"$lte\": 19.99 }},\n{ \"$or\":  [\n{\"category\": { \"$eq\": \"Shoes\" }},\n{\"category\": { \"$eq\": \"Hats\"}}\n]\n}\n]\n}\n`\nUsing AI to generate filters\n[](#using-ai-to-generate-filters)\nThankfully, Botpress comes with artificial intelligence (AI) capabilities when it comes to filtering records. This means you can provide a human-like query, and the AI will intelligently decipher it and create the right filters for your query.\nThis can significantly simplify the construction of complex queries and reduce the likelihood of human errors in the process.\nJavaScript\n`` const leads = await LeadsTable.findRecords({\nfilter: AI`works either at ${workflow.company} OR is not in IT`,\nlimit: 10,\noffset: 0,\n})\n``\nThe query is written inside the backticks (\\`) that come after \\`filter: AI\\`. The AI expects a query string, and that's why backticks are used.\nRe-using filters (selectors)\n[](#re-using-filters-selectors)\nSelectors are filters that you can re-use. They don't have to be written again and again.\nFor example, you might use the query selector \"People with age greater than 18\" to find all users who are above 18.\n1. Create a query selector in the table and give it a name. (e.g. adults)\n2. Add query as `People with age greater than 18`\n3. use below code to find records and save it in a variable called `adults`\nJavaScript\n`// Find records in the table\nconst data = await Data1Table.findRecords({ selectorName: 'adults' })\nworkflow.adults = data\n`\nDifference between search and AI filters\n[](#difference-between-search-and-ai-filters)\nA standard `Search` in Botpress is employed to identify specific strings like a user's name. It gives precision-based results by matching specific sets of characters.\nOn the other hand, an `AI Filter` broadens the scope and is used primarily for filtering results rather than explicitly searching them. It helps you track down users based on certain criteria, such as age above 25.\nAlthough the AI Filter is not primarily designed for exact string hunting, it's flexible enough to allow it. For instance, you could use it to filter results for `Canada` as a country.\ngetRecord\n[](#getrecord)\nYou can use the `getRecord` function to retrieve a specific record from a table based on a unique identifier. For example, you might use the `getRecord` function to retrieve a user's profile information based on their unique user ID.\nJavascript\n`// 1 is the record ID and User is the variable name\nworkflow.User = data\n`\nupdateRecord\n[](#updaterecord)\nYou can use the `updateRecord` function to modify a specific record in a table. This will be useful when you need to update a specific field in the record. For example, you might use this function to update a user's profile information or to update the status of a transaction.\nJavaScript\n`// Update at record ID 8's Age to 45\nawait Data1Table.updateRecord(8, { Age: 45 })\n`\nup\n<|new_information|>","role":"user","type":"text"}],"meta":{"integrationName":"zai","promptCategory":"zai:summarize","promptSource":"zai:summarize:default"},"model":"fast","signal":{},"stopSequences":["■END■"]},"method":"POST","url":"https://api.botpress.cloud/v2/cognitive/generate-text"}

Output:
■START■
**Botpress Overview**
Botpress is an open‑source platform for building, deploying, and managing conversational AI bots. Its documentation provides a complete, horizontally‑organized overview of all major features.

---

### 1. Getting Started
- **Build, Deploy, Monitor** – Core workflow to create bots, launch them on Botpress Cloud, and track performance.

### 2. Dashboard
- **Workspace** – Home, members, audits, integrations, usage, settings, profile.
- **Bot** – Overview, integrations, webchat, logs, conversations, analytics, events, issues, configuration variables.

### 3. Studio (Bot Designer)
- **Interface** – Nodes, flows, home, knowledge base, tables, agents (summary, personality, policy, translator, knowledge, HITL, vision, analytics).
- **Library & Hooks** – Reusable assets and lifecycle extensions.
- **Integrations & Schemas** – Connect external services, define data structures.
- **Card Hub & Versions** – Manage reusable cards, version control.
- **Chatbot Settings** – Global bot configuration.
- **Utilities** – Find, variables, debugger, emulator, keyboard shortcuts, commands, preferences, import/export.

### 4. Webchat
- **Webchat v1 (deprecated)** – Styling (chatbot button, header, user input, bot info), embedding (React app, React Native, iframe, full‑screen).
- **Webchat v2** – Embedded webchat with custom CSS, React components, webchat client.

### 5. Integrations
- **Messaging Channels** – Asana, HITL, Instagram, Intercom, Line, Messenger, Microsoft Teams, Notion, Slack, Sunshine, Telegram, Trello, Twilio, Viber, Vonage, Webhook, WhatsApp (manual config), Zapier, Zendesk.
- **Building Integrations** – Getting started, adding messaging capabilities, actions & triggers, publishing on Botpress Hub, custom LLMs, live‑agent connections, CLI, SDK, key concepts (architecture, tags, channels, configuration, user, conversations, messages, events, states, actions, definitions, secrets, ZUI).

### 6. Variables
- **Scopes** – Workflow, User, Bot, Session, Configuration (secure).
- **Data Types** – String, Boolean, Number, Date (ISO 8601), Object, Array, Enum, Pattern.
- **Creation & Usage** – UI steps for each scope; access via `{{scope.variable}}` or `@scope.variable`.
- **Workflow Variables** – Local to a workflow; can be marked as inputs/outputs for inter‑workflow passing.
- **User & Bot Variables** – Persistent per‑user or global across all users; Bot variables not for secrets.
- **Session Variables** – Live‑conversation only, created in Execute Code cards.
- **Configuration Variables** – Secure, managed via cloud dashboard; accessed with `env.key`.
- **Passing Variables** – Define inputs on target workflow, map outputs on calling workflow.

### 7. Tables (Local NoSQL Store)
- **Limits** – Up to 10 tables, 20 columns each, 10 000 rows (free plan).
- **Field Types** – String, Number, Boolean, Date, Object; searchable option for strings.
- **Filters & Rules** – Logical (AND/OR) and primitive operators (`$eq`, `$gt`, `$regex`, etc.) with nested groups.
- **CRUD Operations** – Add, update, delete records via UI, table cards, or Botpress Client API.
- **Client API Functions** – `listTables`, `createTableRows`, `findTableRows`, `updateTableRows`, `deleteTableRows`, `upsertTableRows`, `createTable`, `updateTable`, `renameTableColumn`, `getTable`, `deleteTable`.
- **AI‑Generated Filters** – Write natural‑language queries prefixed by `AI\`` to auto‑convert to filter objects.

### 8. Botpress APIs
- **Files API** – Manage file assets.
- **Chat API** – Programmatic interaction with bot conversations.

### 9. Appendix
- **Safety** – Preventing abuse, brand safety framework.
- **Exporting Data** – Raw conversations, conversation history, streaming analytics (hooks), compiled bot analytics.

---

**Key Takeaway** – The Botpress documentation is organized to let developers quickly locate information on every major component: from the visual Studio editor, through webchat embedding options, variable management, and table storage, to integrations, APIs, and operational safety. This horizontal coverage ensures a full overview without needing deep dives into any single feature.