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 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\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 discusses Botpress integration steps, UI elements, and code snippets; there is no mention of animals at all.】:ABSOLUTELY_NOT■

■contains_lua_code:【All code examples are presented in JavaScript (e.g., `try { … } catch (err) { … }`); no Lua syntax appears.】:ABSOLUTELY_NOT■

■contains_python_code:【The document contains only JavaScript snippets; no Python code is present.】:ABSOLUTELY_NOT■

■contains_js_code:【Multiple code blocks use JavaScript syntax (e.g., `const tables = await client.listTables({})`, `await Data1Table.createRecord({ … })`).】:ABSOLUTELY_YES■

■is_botpress:【The entire passage is from Botpress documentation, repeatedly referencing Botpress branding, navigation, and features.】:ABSOLUTELY_YES■

■is_rasa:【There is no reference to Rasa anywhere in the text.】:ABSOLUTELY_NOT■

■has_flows:【The navigation tree includes “Flows” under Studio, and the word “flows” is used throughout the documentation.】:ABSOLUTELY_YES■

■has_api:【A dedicated “Botpress APIs” section lists “Files API”, “Chat API”, and numerous code examples call API functions such as `client.listTables`.】:ABSOLUTELY_YES■

■has_enterprise:【The term “Enterprise” does not appear in the provided excerpt.】:ABSOLUTELY_NOT■

■has_workspaces:【The sidebar menu contains a “Workspace” entry, and the text refers to workspace‑related pages.】:ABSOLUTELY_YES■

■has_webchat:【Multiple sections titled “Webchat”, “Webchat v1”, “Webchat v2”, and code examples for the Webchat client are included.】:ABSOLUTELY_YES■

■has_hitl:【The navigation and integration list include “HITL” (human‑in‑the‑loop) and several references to the HITL agent.】: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\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# Slack\n[ Suggest Edits](/edit/slack)\n![](https://files.readme.io/94da470-image.png)\nPrerequisites\n[](#prerequisites)\n* A [Slack App](https://api.slack.com/apps) to connect your bot to Slack.\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/)\nCreate a Slack App\n[](#create-a-slack-app)\nIf you don't have a Slack app already, follow the steps below to create one:\n1. Go to [this link](https://api.slack.com/apps?new%5Fapp=1).\n2. Select **from scratch**.\n3. Enter a name for your app.\n4. Select the workspace you want to connect your bot to.\n5. Click **Create App**.\nEt voilà! You have created a Slack app.\nSetting up the Slack integration in Botpress\n[](#setting-up-the-slack-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 Slack integration then click on the \"Install to Bot\" button, now go back to your bot.\nThe Slack integration has the following settings:\n* **Enabled**: Whether Botpress will communicate with Slack\n* **Webhook URL**: The URL for receiving data in Botpress\n* **Bot Token**: The token used to authenticate requests made to Slack\n* **Signing Secret**: The secret used to verify the requests\n* **Bot Name**: The name of the bot that will be displayed in Slack\n* **Bot Avatar URL**: The URL to the bot's avatar that will be displayed in Slack\nSetting up Slack\n[](#setting-up-slack)\nBot Token\n[](#bot-token)\n1. In the left sidebar, click on **Features** \\> **OAuth & Permissions**\n2. Scroll down to the **Scope** \\> **Bot Token Scopes** section, click **Add an OAuth Scope**. Select both `chat:write` and `chat:write.customize` options from the list.\n3. Scroll up and click the **Install to Workspace** button in the **OAuth Tokens for Your Workspace** section\n4. In the next screen, your app will request access to your Slack workspace. Click **Allow**.\n5. In the **OAuth & Permissions > OAuth Tokens for Your Workspace** section, copy the **Bot User OAuth Token**.\n6. Copy the token and paste it in the **Bot Token** input in Botpress.\nSigning Secret\n[](#signing-secret)\nThe signing secret is used to verify webhook requests\n1. In the left sidebar of the app details page, click on **Settings** \\> **Basic Information**\n2. Scroll down to **App Credentials** section. Next to **Signing Secret**, click **Show** to reveal the secret.\n3. Copy the secret to the **Signing Secret** input in Botpress.\nSave Configuration\n[](#save-configuration)\nChannel configuration is complete, you can now click **Save**. It is important you save your configuration before configuring the webhooks, otherwise Slack will be unable to validate the webhook url\nImportant: Do not activate the toggle or authorize Slack before saving. After saving, the toggle can be activated, but do not synchronize yet.\nWebhook Configuration\n[](#webhook-configuration)\nEvents Webhook\n[](#events-webhook)\nSlack sends regular events such as messages to the event webhook\n1. In the left sidebar, click on **Features** \\> **Event Subscriptions**\n2. Turn on events by click the On/Off button\n3. Copy paste the webhook url provided in the channel configuration UI to the **Request URL** field\n4. Under **Subscribe to bot event**, add `message.im` and `message.channels`\n5. Click the **Save Changes** button. Make sure your Slack channel configuration is saved before doing this step, otherwise webhook validation will fail\n6. A yellow banner will be displayed at the top of the screen. Click the **reinstall your app** link\n7. In the next screen, your app will request access to your Slack workspace. Click **Allow**.\nInteractivity Webhook\n[](#interactivity-webhook)\nSlack sends \"interactive\" events such as reactions to message to the interactivity webhook\n1. In the left sidebar, click on **Features** \\> **Interactivity & Shortcuts**\n2. Turn on interactivity by click the On/Off button\n3. Copy paste the webhook url provided in the channel configuration UI to the **Request URL** field\n4. Click the **Save Changes** button\nInstall App\n[](#install-app)\nAdd App to Workspace\n[](#add-app-to-workspace)\nYour Slack app needs to be added to your workspace to allow Slack users to communicate with it:\n1. In the left sidebar, click on **Features** \\> **App Home**\n2. Scroll down and in the **Show Tabs > Messages Tab** section, tick **Allow users to send Slash commands and messages from the messages tab**\n3. In Slack, under the **Apps** section of the sidebar, click the **\\+ Add apps** button. In the search bar, type the name of your Slack app. Click on your Slack app in the search results.\nThat's it, you may now start chatting with your bot on Slack!\nTips\n[](#tips)\n* To get the Slack conversation ID, you can read the following variable:\n`{{ event.tags.conversation[\"slack:id\"] }}`.\n* To get the Slack conversation thread ID (if it is a thread), you can read the following variable:\n`{{ event.tags.conversation[\"slack:thread\"] }}`.\n* To get the Slack user ID, you can read the following variable:\n`{{ event.tags.user[\"slack:id\"] }}`.\n* To get the Slack message ID, you can read the following variable:\n`{{ event.tags.message[\"slack:id\"] }}`.\nSlack actions in Botpress Studio\n[](#slack-actions-in-botpress-studio)\nStarting a Conversation Proactively\n[](#starting-a-conversation-proactively)\nTo start a conversation with a user proactively, you need to know the user's Slack ID.\n1. In Studio, add the **Start DM Conversation** card to your flow.\n2. Pass the user's Slack ID in the `Slack User Id` input.\n3. You can store the result of the action in a variable.\nRetrieve a Message\n[](#retrieve-a-message)\nTo retrieve a message from Slack, you need to know the `timestamp` and the `channel` of the message.\n1. In Studio, add the **Retrieve Message** card to your flow.\n2. Pass the timestamp of the message in the `Timestamp` input.\n3. Pass the channel of the message in the `Channel` input.\n4. You can store the result of the action in a variable.\nAdd Reaction to message\n[](#add-reaction-to-message)\nTo add a reaction on a Slack message, you need to know the `message Id` and the `reaction name`.\n1. In Studio, add the **Add Reaction** card to your flow.\n2. Pass the message Id in the `Message Id` input.\n3. Pass the reaction name in the `Reaction Name` input. (see [Slack documentation](https://slack.com/help/articles/202931348-Use-emoji-and-reactions) for more informations on emojis/reactions)\nSynchronize Members\n[](#synchronize-members)\nThis action will synchronize the members of a Slack workspace with Botpress users.\nIn Studio, add the **Sync Members** card to your flow.\nReaction Added trigger\n[](#reaction-added-trigger)\nYou can use the **Reaction Added** trigger to make actions when a reaction is added to a Slack message.\nGet Slack Profile\n[](#get-slack-profile)\nYou can add the below code in an Execute Code card to allow the bot to retrieve the sender's Display Name or E-mail. You can add other properties as per your needs, all you need is to pass your bot's token in the first line. This can add more personalization and customization to your bot.\nJavaScript\n`` const botToken = ''\nconst userInfoUrl = 'https://slack.com/api/users.profile.get?user=' + event.tags.user['slack:id']\n// Query Slack API\nawait axios({ method: 'get', url: userInfoUrl, headers: { Authorization: 'Bearer ' + botToken } })\n.then((response) => {\nconsole.log(response.data)\nuser.userFullName = response.data.profile.display_name\nuser.email = response.data.profile.email\n})\n.catch(function (error) {\nif (error.response) {\n// The request was made and the server responded with a status code\n// that falls out of the range of 2xx\nconsole.log(error.response.data)\nconsole.log(error.response.status)\nconsole.log(error.response.headers)\n} else if (error.request) {\n// The request was made but no response was received\n// `error.request` is an instance of XMLHttpRequest in the browser and an instance of\n// http.ClientRequest in node.js\nconsole.log(error.request)\n} else {\n// Something happened in setting up the request that triggered an Error\nconsole.log('Error', error.message)\n}\nconsole.log(error.config)\n})\n``\nUpdated about 1 month ago\n---\n* [Table of Contents](#)\n* * [Prerequisites](#prerequisites)  \n   * [Create a Slack App](#create-a-slack-app)  \n   * [Setting up the Slack integration in Botpress](#setting-up-the-slack-integration-in-botpress)  \n   * [Setting up Slack](#setting-up-slack)  \n         * [Bot Token](#bot-token)  \n         * [Signing Secret](#signing-secret)  \n         * [Save Configuration](#save-configuration)  \n   * [Webhook Configuration](#webhook-configuration)  \n         * [Events Webhook](#events-webhook)  \n         * [Interactivity Webhook](#interactivity-webhook)  \n   * [Install App](#install-app)  \n         * [Add App to Workspace](#add-app-to-workspace)  \n   * [Tips](#tips)  \n   * [Slack actions in Botpress Studio](#slack-actions-in-botpress-studio)  \n         * [Starting a Conversation Proactively](#starting-a-conversation-proactively)  \n         * [Retrieve a Message](#retrieve-a-message)  \n         * [Add Reaction to message](#add-reaction-to-message)  \n         * [Synchronize Members](#synchronize-members)  \n         * [Reaction Added trigger](#reaction-added-trigger)  \n         * [Get Slack Profile](#get-slack-profile)[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)\nFlows\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# Flows\nMenu to manage different conversational flows that dictate how your bot interacts with users.\n[ Suggest Edits](/edit/studio-interface-flows)\nIn the Flows panel, each flow represents a specific part of the conversation logic or interaction path the bot will follow when handling a conversation or performing a task. Each flow represents a unique interaction pathway, determining how the bot responds to specific user inputs and scenarios. By configuring these flows, you can control the bot's behaviour, ensuring it provides a consistent and user-friendly experience across various situations.\nFlows in the menu\n[](#flows-in-the-menu)\nMain\n[](#main)\nThe \"Main\" flow is the primary conversation flow that your bot follows during standard interactions. It is the default pathway that guides the user through the core functionalities of the bot. This flow should be configured to handle general queries, initial greetings, intent recognition, and primary navigation through the bot's features. Set up the main flow to start when the bot is initiated and guide the user through typical use cases or services provided by the bot.\nError\n[](#error)\nThe \"Error\" flow is triggered when the bot encounters a problem, such as an unrecognized command, invalid input, or a processing failure. Configure this flow to manage unexpected situations gracefully. The bot should inform the user of the error and offer options for recovery, such as retrying the action or redirecting to the main flow. Include helpful error messages and potential solutions to guide the user back to a valid conversation path.\nTimeout\n[](#timeout)\nThe \"Timeout\" flow is activated when there is a prolonged period of inactivity from the user. This flow handles idle sessions by either prompting the user or ending the conversation. Use this flow to re-engage the user after a period of silence or to gracefully conclude the conversation if the user is unresponsive. Set a timeout duration and specify actions such as sending a reminder message, asking if the user needs more help, or automatically closing the session.\nConversation End\n[](#conversation-end)\nThe \"Conversation End\" flow manages how the bot concludes interactions. This includes wrapping up the conversation, providing summaries, or offering follow-up actions. Configure this flow to ensure the conversation ends positively. The bot might thank the user, provide a summary of the conversation, or suggest next steps. Include a polite closing message, potential follow-up options like a survey or re-engagement link, and any necessary final actions.\n---\nManaging flows\n[](#managing-flows)\nYou can manage your bot's flows from this menu. Here's a breakdown of the configuration and management options available to you.\nAdd Workflow\n[](#add-workflow)\nThis adds a new workflow to your bot.\nAdd Folder\n[](#add-folder)\nThis creates a new folder in this menu. You can store flows, tables, and knowledge bases in a folder.\nAdd Knowledge Base\n[](#add-knowledge-base)\nThis creates a new Knowledge Base.\nAdd Table\n[](#add-table)\nThis creates a new Table.\nUpdated about 1 month ago\n---\n* [Table of Contents](#)\n* * [Flows in the menu](#flows-in-the-menu)  \n         * [Main](#main)  \n         * [Error](#error)  \n         * [Timeout](#timeout)  \n         * [Conversation End](#conversation-end)  \n   * [Managing flows](#managing-flows)  \n         * [Add Workflow](#add-workflow)  \n         * [Add Folder](#add-folder)  \n         * [Add Knowledge Base](#add-knowledge-base)  \n         * [Add Table](#add-table)[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)\nTelegram\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](\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 setting up a Slack integration for Botpress, listing APIs, configuration steps, and UI elements. There is no mention of animals or animal‑related topics.】:ABSOLUTELY_NOT■

■contains_lua_code:【The document contains no Lua syntax (e.g., `function`, `end`, or Lua‑style tables). All code snippets are in JavaScript.】:ABSOLUTELY_NOT■

■contains_python_code:【The only code shown is JavaScript (e.g., `const botToken = ''`, `await axios...`). No Python constructs such as `def`, `import`, or indentation‑based blocks appear.】:ABSOLUTELY_NOT■

■contains_js_code:【A JavaScript code block is explicitly included near the end (“JavaScript ``` const botToken = '' … ```”). This confirms the presence of JavaScript code.】:ABSOLUTELY_YES■

■is_botpress:【The entire passage is about Botpress – it discusses Botpress Cloud, Botpress Studio, Botpress integrations, flows, API references, and provides Botpress‑specific UI instructions.】:ABSOLUTELY_YES■

■is_rasa:【There is no reference to Rasa anywhere in the text; all platform references are to Botpress.】:ABSOLUTELY_NOT■

■has_flows:【The term “flows” appears repeatedly (e.g., “Flows”, “manage flows”, “Main flow”, “Error flow”, “Timeout flow”). The document explains how to add and manage flows.】:ABSOLUTELY_YES■

■has_api:【The opening section lists “Files API” and “Chat API”, and later mentions “Botpress API” when describing exporting data. Hence the Botpress API is definitely mentioned.】:ABSOLUTELY_YES■

■has_enterprise:【The text never mentions “Enterprise” or “Botpress Enterprise”. It only refers to Botpress Cloud, Hub, and Studio.】:ABSOLUTELY_NOT■

■has_workspaces:【Multiple occurrences of the word “workspace” are present (e.g., “Slack workspace”, “Botpress workspace”, “Add App to Workspace”). Thus workspaces are mentioned.】:ABSOLUTELY_YES■

■has_webchat:【The document contains a dedicated “Webchat” section, references to “Webchat v1”, “Webchat v2”, and links such as “Webchat → Webflow”.】:ABSOLUTELY_YES■

■has_hitl:【The term “HITL” (human‑in‑the‑loop) appears in the integrations list and in the “HITL Agent” entry, indicating that HITL is referenced.】:ABSOLUTELY_YES■