diff --git a/modules/ROOT/pages/abac_rls-variables.adoc b/modules/ROOT/pages/abac_rls-variables.adoc index 9675e314e..13155c0cf 100644 --- a/modules/ROOT/pages/abac_rls-variables.adoc +++ b/modules/ROOT/pages/abac_rls-variables.adoc @@ -109,7 +109,7 @@ To define RLS rules with variables for a Table: . Navigate to the Data workspace and click the Table for which to define RLS rules. . Click *Row security* and then click *+ Add row security*. -. In the *Row Security Editor*, define the rules. To reference the formula variable in the rule, use the `ts_var` function. For example, If you want to limit user access to data of a specific region, you can create a region-specific variable, `region = ts_var('region_var')`, and assign values in the token request. +. In the *Row Security Editor*, define the rules. To reference the formula variable in the rule, use the `ts_var` function. For example, If you want to limit user access to data of a specific region, you can create a region-specific variable, `region = ts_var(region_var)`, and assign values in the token request. === RLS rule with a single variable reference @@ -117,7 +117,7 @@ To define RLS rules with variables for a Table: In this formula example, `country` refers to the "country" column in the data table, and `country_var` is the variable. ---- -country = ts_var('country_var') +country = ts_var(country_var) ---- If `country_var` is assigned a single value, the user is permitted to view only rows where the `country` column matches that value. @@ -130,20 +130,20 @@ The RLS rules support the `AND` operator, which means that you can combine multi The following rule restricts data access to rows if the `country` column in the data table matches the value assigned to `country_var` and the `Department` column matches the value assigned to `department_var` for that user. ---- -country = ts_var('country_var') AND Department = ts_var('department_var') +country = ts_var(country_var) AND Department = ts_var(department_var) ---- The rule in this example restricts data access to rows where the `region` column in the table matches the value assigned to `region_var` and the `product` column matches the value assigned to `product_var`. ---- -region = ts_var('region_var') AND product = ts_var('product_var') +region = ts_var(region_var) AND product = ts_var(product_var) ---- === Allow all rule with a TS_WILDCARD_ALL variable In this example, `customer` represents the column `customer` in the table and `customer_var` represents variable. If the value of the customer_var variable is set to `TS_WILDCARD_ALL`, the user can access all customers in the column. ---- -customer = ts_var('customer_var') +customer = ts_var(customer_var) ---- === Group override rule with variable-based check @@ -152,7 +152,7 @@ In any security formula you build, you may want a clause that gives access to al In this example, users can access data if they are in the "data developers" group, or if the `Department` column matches the value assigned to their `department_var` variable. ---- -'data developers' in ts_groups OR Department = ts_var('department_var') +'data developers' in ts_groups OR Department = ts_var(department_var) ---- ==== Variables with numeric and Date data types @@ -160,13 +160,13 @@ In this example, users can access data if they are in the "data developers" grou The following rule enforces a numeric threshold and restricts access to rows where the Revenue value is less than or equal to the value provided by the `revenue_cap_var` variable. ---- -Revenue <= to_double(ts_var('revenue_cap_var')) +Revenue <= to_double(ts_var(revenue_cap_var)) ---- The following rule restricts access to rows where the `date_column` is within the range defined by the `start_date_var` and `end_date_var` variables. Only rows with dates greater than or equal to the start date and less than or equal to the end date specified for these variables will be visible for the user. ---- -(date_column >= ts_var('start_date_var')) AND (date_column <= ts_var('end_date_var')) +(date_column >= ts_var(start_date_var)) AND (date_column <= ts_var(end_date_var)) ---- == Create an ABAC token request with variable attributes diff --git a/modules/ROOT/pages/about-rest-apis.adoc b/modules/ROOT/pages/about-rest-apis.adoc index 608f729d1..4a8ae977e 100644 --- a/modules/ROOT/pages/about-rest-apis.adoc +++ b/modules/ROOT/pages/about-rest-apis.adoc @@ -26,11 +26,20 @@ ThoughtSpot users with Developer or Administrator privileges can access the REST * To try out the xref:rest-api-v1.adoc[REST API v1 endpoints], click **REST Playground v1**. + * To access the xref:rest-api-v2.adoc[REST API v2 Playground], click **REST Playground v2.0**. +== Rate limits for API requests +To ensure API stability, optimize resource usage, and maintain service quality for all users, ThoughtSpot limits the number of public API requests allowed per client to prevent excessive requests from reaching application servers. + +By default, on instances running 26.2.0.cl and later, a global rate limit of 100 requests per second per client IP is enforced at the cluster level for all public APIs. This limit is applied per client IP across all public APIs combined, not per endpoint. If a client IP exceeds this combined rate limit, a burst of 10 additional API requests is allowed before rejecting the requests with the 'HTTP 429: Too Many Requests' error. + +For async status endpoints such as `/api/rest/2.0/metadata/tml/async/status`, up to 100 requests per minute per client IP are allowed, with a burst of 100 requests before requests are rejected with an HTTP 429 error. + +These rate limits are enforced by default on all ThoughtSpot instances. Currently, rate limits are applied at the cluster level; Org-level rate limits are not supported. + +ThoughtSpot administrators can monitor logs, add or update rate limits via TSCLI, and adjust these settings for different environments (dev or prod) as required. + == API endpoints For a complete list of API endpoints and information about how to make an API call to these endpoints, see the following reference pages: * xref:rest-api-reference.adoc[REST API v1 Reference] * xref:rest-api-v2-reference.adoc[REST API v2.0 Reference] -//// - diff --git a/modules/ROOT/pages/embed-ai-analytics.adoc b/modules/ROOT/pages/embed-ai-analytics.adoc index 1641ce495..d71a0f6a8 100644 --- a/modules/ROOT/pages/embed-ai-analytics.adoc +++ b/modules/ROOT/pages/embed-ai-analytics.adoc @@ -6,70 +6,287 @@ :page-pageid: embed-ai-search-analytics :page-description: To embed ThoughtSpot Spotter and conversational analytics experience in your app, you can use the `SpotterEmbed` or `SpotterAgentEmbed` SDK library. -ThoughtSpot Spotter provides an interactive AI-powered Search and conversational analytics experience for its application users. With ThoughtSpot Spotter, users can query data in plain language, ask follow-up questions, and get insights directly from their data. ThoughtSpot also provides an agentic version of Spotter for a more advanced experience with context-based conversations and responses for deeper analysis. +Spotter provides an interactive AI-powered search and conversational analytics experience for ThoughtSpot application users. It empowers users to ask questions in natural language, analyzes data, and generates business-ready insights instantly. -== Embed components -ThoughtSpot provides two distinct SDK libraries to embed Spotter capabilities in your app: +ThoughtSpot supports Spotter Classic, Spotter Agent (Spotter 2), and Spotter 3 experience modes, with new features and capabilities introduced in each new version. + +ThoughtSpot supports three Spotter Classic, Spotter Agent (Spotter 2), and Spotter 3 experience modes. Spotter 3 supports several new features, agentic analytics, and provides an enhanced user experience. + +[width="100%" cols="2,4"] +[options="header"] +|==== +|Version| Supported features +|Spotter 3 [tag purpleBackground]#Early Access# +a| Spotter 3 is the latest and most advanced version of Spotter. + +**Key features and user experience**: + +In addition to the Spotter Classic and Spotter 2 capabilities, Spotter 3 supports the following features and enhancements to improve the AI search and analytics experience: + +* Is fully data-aware and capable of understanding data models and schema +* Supports advanced analysis +* Supports automatic discovery and selection of data models based on user prompts. +* Supports quick search and deep research modes +* Supports saving chats and accessing chat history +* Supports third-party MCP connectors + +__Available from 26.2.0.cl and later. To enable Spotter 3 on your instance, contact your ThoughtSpot administrator__. + +**When to use**: + +Use this version if you want to include advanced AI search, research and analytics capabilities in your ThoughtSpot embedded app. + +|Spotter 2 a|Also known as *Spotter Agent*, it's the second version of Spotter with the following capabilities: + +**Key features and user experience**: + + +* Agentic AI analytics experience +* Context-aware analysis +* Why questions for in-depth analysis +* Coaching in conversations +* Data model instructions and guidance + +__Available when the Spotter 2 experience is enabled on the instance__. + +**When to use**: + +Use this version if you want to include agentic analytics and richer insights in your ThoughtSpot embedded app. + +|Spotter Classic a| The early version of Spotter. + +**Key features and user experience**: + + +* Quick search with queries in natural language format + +* Visualization generation + +__Available if the Spotter Classic version is enabled on the instance__. + +**When to use**: + +You can use this version if your ThoughtSpot embedded app needs only metadata-level insights and does not require or support agentic workflows. +|| +|==== + +== SDK library for embedding Spotter +ThoughtSpot provides the following Visual Embed SDK libraries for embedding Spotter capabilities in your app: * xref:embed-spotter.adoc[`SpotterEmbed`] + -To embed the full Spotter interface with a conversation panel that allows natural language queries, data source selection, and interactions with AI-generated Answers, use the `SpotterEmbed` component. -For more information, see xref:embed-spotter.adoc[Embed Spotter]. +Use this SDK component to xref:embed-spotter.adoc[embed the full Spotter experience] in your app. The features in a Spotter embed vary based on the Spotter version. + * xref:embed-spotter-agent.adoc[`SpotterAgentEmbed`] + -The Spotter Agent embedding, also known as `bodyless` embedding, allows you to integrate natural language data search and analysis into your own applications or chatbot. Unlike the standard Spotter embed, which provides a ready-made search bar and interface, the `SpotterAgentEmbed` component is designed for deeper customization, allowing full control over user experience and workflow of embedded analytics. It allows you to build your own UI or agent experience, route user questions to ThoughtSpot, and receive structured answers and visualizations. +Also known as `bodyless` embedding, `SpotterAgentEmbed` allows you to integrate Spotter capabilities into your own applications or chatbot, route user questions to ThoughtSpot, and receive structured answers and visualizations. Unlike the full Spotter experience, the "bodyless" embed includes only a prompt panel with no additional buttons or selectors. + +== Feature status and availability in embed mode +[width="100%" cols="7,7"] +[options="header"] +|==== +|Feature |Supported version, feature availability, and SDK controls +|https://docs.thoughtspot.com/cloud/latest/spotter-getting-started#_how_to_use_spotter[Spotter search and prompt panel for conversational analytics, window=_blank] + +For quick search with queries in natural language format, and generating visualizations. + +|**Supported Spotter version**: + +[tag greenBackground tick]#✓# Spotter 3 + +[tag greenBackground tick]#✓# Spotter 2 + +[tag greenBackground tick]#✓# Spotter Classic + +**Feature status**: Generally Available (GA) on all ThoughtSpot Cloud instances. + + +**Required settings**: Spotter feature must be enabled at the instance level. + +**Embed SDK component**: If you want to embed the full Spotter experience, use `SpotterEmbed`. + +To embed only the Spotter search bar with no additional features or standard Spotter user experience, use `SpotterAgentEmbed`. + + +**Default state in embed**: Enabled by default if the ThoughtSpot instance has Spotter experience enabled. + + +|link:https://docs.thoughtspot.com/cloud/latest/spotter-localization[Localization support, window=_blank] + + +Locale settings and language support for Spotter queries and responses. + +|**Supported Spotter version** + +[tag greenBackground tick]#✓# Spotter 3 + +[tag greenBackground tick]#✓# Spotter 2 + +[tag greenBackground tick]#✓# Spotter Classic + +**Feature status**: GA. Available on all ThoughtSpot Cloud instances with Spotter feature enabled. + + +**Embed SDK component**: Use `SpotterEmbed`. The SDK also supports configuring locale settings for `SpotterAgentEmbed`. + + +**Required settings**: Locale settings can be configured at the user level in the UI or via REST API. + +**Default state in embed**: By default, the locale settings configured at the instance level will be used. To override the locale settings in your embed, use the xref:locale-setting.adoc#_set_locale_in_the_sdk[locale property in the SDK]. + +|xref:embed-spotter.adoc#_optional_settings_for_spotter_3[New chat interface] + + +The updated chat interface that provides a more intuitive and interactive analytics experience. + +|**Supported Spotter version**: + +[tag greenBackground tick]#✓# Spotter 3 + +[tag redBackground tick]#x# Spotter 2 + +[tag redBackground tick]#x# Spotter Classic + +**Feature status**: Early Access. Available by default on instances that have Spotter 3 enabled. + + +**Required settings**: Spotter 3 must be enabled at the instance level. + + +**Embed SDK component**: Use `SpotterEmbed`. + + +**Default state in embed**: Disabled by default. To enable this feature, set `updatedSpotterChatPrompt` to `true` in the SDK. + +|Thinking and reasoning UX + + +The thinking and reasoning UX in Spotter conversations shows step-by-step reasoning, planning, and analysis process as it works through a complex question. + +|**Supported Spotter version**: + +[tag greenBackground tick]#✓# Spotter 3 + +[tag greenBackground tick]#✓# Spotter 2 + +[tag redBackground tick]#x# Spotter Classic + + +**Feature status**: Early Access. Enabled by default on instances with Spotter 2 or Spotter 3 enabled. +**Required settings**: Spotter 2 or Spotter 3 experience must be enabled at the instance level. + + +**Embed SDK component**: Use `SpotterEmbed`. + + +**Default state in embed**: Enabled by default if the feature is enabled at the instance level. + +|link:https://docs.thoughtspot.com/cloud/latest/spotter-coach-conversation[Spotter coaching within conversation sessions, window=_blank] + +The coaching workflow in Spotter conversations. + +|**Supported Spotter version**: + +[tag greenBackground tick]#✓# Spotter 3 + +[tag greenBackground tick]#✓# Spotter 2 + +[tag redBackground tick]#x# Spotter Classic + + +**Feature status**: GA in 26.2.0.cl and disabled by default. + +**Embed SDK component**: Use `SpotterEmbed`. + +**Required settings**: Requires Spotter 2 or Spotter 3 experience to be enabled at the instance level. +**Default state in embed**: Enabled by default in 26.2.0.cl and later versions. Developers can use the `Action.InConversationTraining` action ID to control the visibility of this feature in their embeds. + +|link:https://docs.thoughtspot.com/cloud/latest/data-model-instructions[Data model instructions, window=_blank] + + +Global rules that provide data model guidance to the Spotter system and direct how Spotter should interpret queries and construct responses for user prompts. +|**Supported Spotter version**: + +[tag greenBackground tick]#✓# Spotter 3 + +[tag greenBackground tick]#✓# Spotter 2 + +[tag redBackground tick]#x# Spotter Classic + + +**Feature status**: GA. Enabled by default on ThoughtSpot instances with 26.2.0.cl release version or later. + +**Required settings**: Spotter 2 or Spotter 3 experience must be enabled at the instance level. + + +**Embed SDK component**: Use `SpotterEmbed` + + +**Default state in embed**: Enabled by default. + +|link:https://docs.thoughtspot.com/cloud/latest/spotter-research-mode[Deep Research and analysis mode, window=_blank] + + +Ability to autonomously perform an in-depth and multi-step analysis on a user's question. + + +|**Supported Spotter version**: + +[tag greenBackground tick]#✓# Spotter 3 + +[tag redBackground tick]#x# Spotter 2 + +[tag redBackground tick]#x# Spotter Classic + +**Feature status**: GA. Enabled by default on instances with Spotter 3 enabled. + +**Required settings**: Spotter 3 experience must be enabled at the instance level. + + +**Embed SDK component**: Use `SpotterEmbed` + + +**Default state in embed**: Available by default if Spotter 3 is enabled on the instance. ThoughtSpot embedded app users can select the deep research mode in the Spotter interface. + +|link:https://docs.thoughtspot.com/cloud/latest/spotter-advanced-analysis[Advanced analysis, window=_blank] + + +Ability to function as a data-aware analyst, derive context data model, and perform complex research in Research mode for accurate analysis and deeper insights. Supports forecasting, correlation, and query-on-query analysis. + +|**Supported Spotter version**: + +[tag greenBackground tick]#✓# Spotter 3 + +[tag redBackground tick]#x# Spotter 2 + +[tag redBackground tick]#x# Spotter Classic + +**Feature status**: Early Access. Enabled by default if Spotter 3 is enabled on the instance. + +**Required settings**: Spotter 3 experience must be enabled on the instance. + +**Embed SDK component**: Use `SpotterEmbed`. + + +**Default state in embed**: Available by default if Spotter 3 experience is enabled on the instance. + +|link:https://docs.thoughtspot.com/cloud/latest/spotter-why[Why questions, window=_blank] + +Ability to ask questions to automatically generate explanations and identify key drivers behind changes in a metric using change analysis and AI-generated summaries. + +|**Supported Spotter version** + +[tag greenBackground tick]#✓# Spotter 3 + +[tag greenBackground tick]#✓# Spotter 2 + +[tag redBackground tick]#x# Spotter Classic + +**Feature status**: Early Access. Disabled by default. + +**Required settings**: Spotter 2 or Spotter 3 experience must be enabled on the instance. + +**Embed SDK component**: Use `SpotterEmbed` + + +**Default state in embed mode**: Disabled by default. If the feature is enabled on the instance, it will be available in the embed mode. + + +|link:https://docs.thoughtspot.com/cloud/latest/spotter-auto-mode[Auto mode, window=_blank] + +Automatic data sources discovery and Model selection by Spotter. + +|**Supported Spotter version**: + + +[tag greenBackground tick]#✓# Spotter 3 + +[tag redBackground tick]#x# Spotter 2 + +[tag redBackground tick]#x# Spotter Classic + +**Feature status**: Early Access. Disabled by default. + +**Required settings**: Spotter 3 experience and the *Auto-mode* feature must be enabled at the instance level. + + +**Embed SDK component**: Use `SpotterEmbed`. + + +**Default state in embed**: Disabled by default. To enable this feature, set the `worksheetId` attribute to `_spotter_data_source_discovery_id` in the SDK. When the Auto mode is enabled, the *Preview data* option in the conversation panel is hidden. + +|link:https://docs.thoughtspot.com/cloud/latest/spotter-conversation-history[Chat history, window=_blank] + + +Saves Spotter conversations and allows reloading chat history with past conversations. -[NOTE] -==== -* The `ConversationEmbed` and `BodylessConversation` components are deprecated and replaced with `SpotterEmbed` and `SpotterAgentEmbed` respectively in Visual Embed SDK v1.38.0 and later. -* If you are embedding the full ThoughtSpot experience in your app via `AppEmbed`, you must set the search bar mode on the home page to `aiAnswer` to view Spotter components. For more information, see xref:full-app-customize.adoc#_include_spotter_interface[Customize full application embedding]. -==== +|**Supported Spotter version**: + +[tag greenBackground tick]#✓# Spotter 3 + +[tag redBackground tick]#x# Spotter 2 + +[tag redBackground tick]#x# Spotter Classic -== Spotter embed and Spotted Agent embed comparison +**Feature status**: Early Access. Enabled by default if Spotter 3 is enabled on the instance. -[width="100%" cols="7,5,5"] -[options='header'] +**Required settings**: Spotter 3 experience and the *Chat history* feature must be enabled at the instance level. + -|===== -| -| Spotter embed -| Spotter Agent embed (Bodyless/Agent) +**Embed SDK component**: Use `SpotterEmbed`. + -|Use case -|Use this method to integrate the built-in AI search and conversation analytics interface in your app. -|Use this method to embed Spotter Search capabilities in your chatbot, virtual agent or an app with your own interface elements and user-experience. +**Default state in embed**: Disabled by default. To enable this feature in the embed mode, set `enablePastConversationsSidebar` to `true` in the SDK. -| Embedding component -| Use `SpotterEmbed` component in the Visual Embed SDK library -| Use `SpotterAgentEmbed` component in the Visual Embed SDK library +|link:https://docs.thoughtspot.com/cloud/latest/spotter-connectors-use[Third-party connectors and MCP tools, window=_blank] + +Third-party tools and services that Spotter can connect to and interact with via Model Context Protocol (MCP). -| Data context -a| * Supported data object is Model + - * Allows data source selection -a| * Supported data object is Model - * Data source is passed in the code. No explicit selection is allowed unless the embedding application UI allows it. +|**Supported Spotter version**: + -| Customization -| The SDK provides several props, object properties, CSS and text customization options for branding and styling, event handlers for host and embed app interaction, and menu action configuration -| The SDK provides limited customization options as the UI/UX controlled by host application. +[tag greenBackground tick]#✓# Spotter 3 + +[tag redBackground tick]#x# Spotter 2 + +[tag redBackground tick]#x# Spotter Classic -| Sample Questions -| The SDK provides the ability to show or hide sample questions via `hideSampleQuestions`. -| Not applicable -|===== +**Feature status**: Early Access. Enabled by default if Spotter 3 is enabled on the instance. -== Customization options in the SDK +**Required settings**: Spotter 3 experience and Spotter connectors feature must be enabled on the instance. For connectors to be available in the embed mode, ThoughtSpot administrators must configure Spotter connectors. -Visual Embed SDK provides several configuration settings and controls for customizing Spotter embed view: +**Embed SDK component**: Use `SpotterEmbed`. + -* Configuration properties that enable or disable features. -For more information, see xref:SpotterEmbedViewConfig.adoc[SpotterEmbedViewConfig] and xref:SpotterAgentEmbedViewConfig.adoc[SpotterAgentEmbedConfig] -* The action customization framework to show or hide actions in the embedded view + -For more information, see xref:Action.adoc[Action] and xref:embed-action-ref.adoc[Action IDs in the SDK] -* Event handlers for host and embed app interaction + -For more information, see xref:EmbedEvent.adoc[Embed events], xref:HostEvent.adoc[Host events], and xref:embed-events.adoc[Events and app interactions] -* Style customization framework for customizing styles, text strings, and icons + -See xref:css-customization.adoc[style customization framework] +**Default state in embed**: Visible by default if the `updatedSpotterChatPrompt` attribute is set to `true`. We do not recommend using this feature in your production environment. You can hide this option using the CSS selectors. For more information, see xref:embed-spotter.adoc#_mcp_connectors_and_resource_selection_icon[MCP connectors in Spotter embedding]. +|| +|==== +== Related information -== Additional resources -* link:https://docs.thoughtspot.com/cloud/latest/spotter[Spotter Documentation] -* link:https://docs.thoughtspot.com/cloud/latest/spotter-agent[Spotter Agent Documentation] +* For more information about Spotter versions and capabilities, see link:https://docs.thoughtspot.com/cloud/latest/spotter[ThoughtSpot Product Documentation, window=_blank]. +* For information about how to embed Spotter and customize the Spotter interface, see xref:embed-spotter.adoc[Embed Spotter] and xref:SpotterEmbedViewConfig.adoc[SpotterEmbedViewConfig]. +* For information about bodyless embedding, see xref:embed-spotter-agent.adoc[Embed Spotter Agent] and xref:SpotterAgentEmbedViewConfig.adoc[SpotterAgentEmbedConfig]. +* For information about the action customization framework to show or hide actions in the embedded view, see xref:Action.adoc[Action] and xref:embed-action-ref.adoc[Action IDs in the SDK]. +* For information about event hooks see xref:embed-events.adoc[Events and app interactions], xref:EmbedEvent.adoc[Embed events], and xref:HostEvent.adoc[Host events]. +* For information about customization style and CSS variables, see xref:css-customization.adoc[style customization framework]. diff --git a/modules/ROOT/pages/embed-spotter-agent.adoc b/modules/ROOT/pages/embed-spotter-agent.adoc index d8d53c6eb..3dbd95cf8 100644 --- a/modules/ROOT/pages/embed-spotter-agent.adoc +++ b/modules/ROOT/pages/embed-spotter-agent.adoc @@ -18,7 +18,7 @@ Before you begin, check the following: == Import the SDK package -Import the `SpotterEmbed` SDK library to your application environment: +Import the `SpotterAgentEmbed` SDK library to your application environment: **npm** [source,JavaScript] diff --git a/modules/ROOT/pages/embed-spotter.adoc b/modules/ROOT/pages/embed-spotter.adoc index 14cc8120b..54f2c9202 100644 --- a/modules/ROOT/pages/embed-spotter.adoc +++ b/modules/ROOT/pages/embed-spotter.adoc @@ -1,23 +1,22 @@ = Embed Spotter :toc: true -:toclevels: 3 +:toclevels: 2 :page-title: Embed Spotter :page-pageid: embed-spotter :page-description: You can use the SpotterEmbed SDK library to embed Conversational analytics experience in your application. -To embed the full Spotter interface with a conversation panel that allows natural language queries, data source selection, and interactions with AI generated Answers, use the `SpotterEmbed` component. +You can embed the full Spotter experience in your applications using the `SpotterEmbed` component in the Visual Embed SDK. Using the customization settings available in the SDK for each Spotter version, you can configure the Spotter interface to suit the needs of your embedding application. == Before you begin -Before you begin, check the following: +To embed Spotter, you need the following access and setup: -* You have a ThoughtSpot instance with Spotter and Spotter Agent enabled. -* Your host application domain is added to ThoughtSpot CSP and CORS allowlists. -* You have access to the latest version of the Visual Embed SDK or at least v1.33.1. +* Access to a ThoughtSpot instance with the Spotter feature. If you want a specific version of Spotter enabled, work with your ThoughtSpot administrator to enable the xref:embed-ai-analytics.adoc#_feature_status_and_availability_in_embed_mode[required features and settings] on your instance. +* Your host application domain is added to xref:security-settings.adoc[ThoughtSpot CSP and CORS allowlists]. +* Your application project has access to the xref:api-changelog.adoc[latest version of the Visual Embed SDK]. == Import the SDK package - Import the `SpotterEmbed` SDK library to your application environment: **npm** @@ -28,6 +27,8 @@ import { AuthType, init, prefetch, + EmbedEvent, + HostEvent } from '@thoughtspot/visual-embed-sdk'; ---- @@ -41,6 +42,8 @@ from '@thoughtspot/visual-embed-sdk'; AuthType, init, prefetch, + EmbedEvent, + HostEvent } from 'https://cdn.jsdelivr.net/npm/@thoughtspot/visual-embed-sdk/dist/index.js'; ---- @@ -50,154 +53,200 @@ from 'https://cdn.jsdelivr.net/npm/@thoughtspot/visual-embed-sdk/dist/index.js'; To initialize the SDK, the following information is required: * `thoughtSpotHost` + -The hostname of your ThoughtSpot application instance. See xref:faqs.adoc#tsHostName[FAQs] to know how to find the hostname of your application instance. +The xref:faqs.adoc#tsHostName[hostname] of your ThoughtSpot application instance. * `authType` + -Authentication type. ThoughtSpot supports a variety of Authentication types. For testing purposes, you can use `AuthType.None`. For other authentication options, see xref:embed-authentication.adoc[Authentication]. +Authentication type. For testing purposes, you can use `AuthType.None`. For information about other authentication options, see xref:embed-authentication.adoc[Authentication]. [source,JavaScript] ---- init({ thoughtSpotHost: 'https://your-thoughtspot-host', // Replace with your ThoughtSpot application URL - authType: AuthType.None, + authType: AuthType.None, // Use the appropriate AuthType for your setup }); ---- == Create an instance of the SpotterEmbed object -Create an instance of the `SpotterEmbed` object and specify the data source ID. Optionally, you can specify the search query string to generate a chart or table at load time. +Create an instance of the `SpotterEmbed` object. + +If you are embedding the Spotter Classic or Spotter 2 experience, the data source ID is required. If Spotter 3 experience is enabled on your instance, you can either specify the data source ID or enable the *Auto mode* to allow Spotter to automatically discover and select data sources. + +[IMPORTANT] +==== +Auto mode is disabled by default on ThoughtSpot Embedded instances. To enable this feature on your instance, contact ThoughtSpot Support. +==== [source,JavaScript] ---- -const conversation = new SpotterEmbed(document.getElementById('ts-embed'), { +const spotterEmbed= new SpotterEmbed(document.getElementById('ts-embed'), { frameParams: { width: '100%', height: '100%', }, - worksheetId: '<%=datasourceGUID%>', // ID of the data source object to query data - searchOptions: { - searchQuery: 'sales by region', // Optional: initial search query string to pass on load - }, + worksheetId: '<%=datasourceGUID%>', //ID of the data source object. To use the Auto mode, set the ID to '_spotter_data_source_discovery_id', + //... other attributes }); ---- -[#configControls] -=== Configuration controls for embed view (Optional) - -The embed package for Spotter includes the additional configuration flags to customize the Spotter interface. -For example, you can hide or disable data source selection using the `hideSourceSelection` and `disableSourceSelection` + -parameters. Disables data source selection panel for embed users when set to `true`. -You can also set locale preference for Spotter interactions using the `locale` property. - -The following code sample sets the locale to English (United Kingdom) and enables viewing Spotter feature limitations. +=== Customize your embed (Optional) +The SDK provides configuration settings to customize the embedded Spotter interface. +For example, you can hide sample questions or disable data source selection using the `hideSampleQuestions` and `disableSourceSelection` parameters. [source,JavaScript] ---- const conversation = new SpotterEmbed(document.getElementById('ts-embed'), { - frameParams: { - width: '100%', - height: '100%', - }, - worksheetId: '<%=datasourceGUID%>', // ID of the data source object to query data - searchOptions: { - searchQuery: 'sales by region', // Optional: initial search query string to pass on load - }, - locale: 'en-GB', - showSpotterLimitations: true, + //...other embed configuration attributes + hideSampleQuestions: true, + disableSourceSelection: true }); ---- +For more information and examples, see xref:embed-spotter.adoc#configControls[Customizing embedded Spotter interface]. -For a complete list of Spotter embed view configuration settings, see xref:SpotterEmbedViewConfig.adoc[SDK reference Documentation]. +=== Register event listeners -== Customize your embed view -To customize your embedded Spotter views, the following options are available with the Visual Embed SDK: +To listen to the events emitted by the embedded ThoughtSpot component, register xref:embed-events.adoc#embed-events[embed event] handlers. -* Control the xref:embed-spotter.adoc#spotterMenuActions[visibility of menu actions in the embedded view] -* xref:embed-spotter.adoc#_customize_styles_and_interface_elements[Customize styles and interface elements] -* xref:embed-spotter.adoc#_customize_app_interactions_with_events[Customize app interactions] +The following example shows how to register xref:EmbedEvent.adoc#_init[EmbedEvent.Init] and xref:EmbedEvent.adoc#_load[EmbedEvent.Load] listeners. -[#spotterMenuActions] -=== Customize menu actions and elements +[source,JavaScript] +---- +// Register event listeners +spotterEmbed.on(EmbedEvent.Init, showLoader); // Show loader when initialization starts +spotterEmbed.on(EmbedEvent.Load, hideLoader); // Hide loader when embed is fully loaded +---- -The SDK provides action IDs to disable, show, or hide the following elements and menu actions via `disabledActions`, `visibleActions`, or `hiddenActions` array. +To trigger actions on the embedded interface, use the xref:HostEvent.adoc[Host events]. -The following menu actions are available by default in the embedded Spotter interface: +The following examples shows the host event to reset a Spotter conversation session: -* *Preview data* and *Reset* actions on the conversation panel -* The edit and delete icons on the prompt panel -* *Pin*, *Save*, *Download*, *Modify* on Spotter-generated Answers -* Spotter feedback widget and chart switcher icon on Spotter-generated Answers +[source,JavaScript] +---- +// Example: Add a host event to reset the Spotter conversation +document.getElementById('resetBtn').addEventListener('click', () => { + spotterEmbed.trigger(HostEvent.ResetSpotterConversation); +}); +---- -The following example shows how to disable actions and menu elements using xref:embed-actions.adoc[`disabledActions`] array: +=== Render the embedded object [source,JavaScript] ---- - // Show these actions - visibleActions: [Action.Pin,Action.Save,Action.Edit,Action.PreviewDataSpotter,Action.ResetSpotterChat,Action.SpotterFeedback,Action.EditPreviousPrompt,Action.DeletePreviousPrompt], - // Disable these actions - disabledActions:[Action.PreviewDataSpotter,Action.Edit], - disabledActionReason: "Contact your administrator to enable this feature" +spotterEmbed.render(); ---- -For a complete list of supported actions, see xref:embed-action-ref.adoc#_spotter[Spotter menu actions]. +=== Verify your embed -=== Customize styles and interface elements -To customize the look and feel of the Spotter interface, use the xref:css-customization.adoc[CSS customization framework] in the SDK. The `customizations` object allows you to add xref:customize-css-styles.adoc[custom CSS definitions], xref:customize-text-strings.adoc[text strings], and xref:customize-icons.adoc[icons]. +* Load the embedded object. +** If the embedding is successful, you'll see the Spotter page. +** Initiate a chat session, ask a question, and view the results. +** If you see a blank screen: +*** Verify that your embed code has the correct ThoughtSpot host URL. Ensure that your ThoughtSpot instance is accessible. +*** Verify whether the authentication credentials used in your code are valid. +* Verify whether the customization settings are applied. -==== Override icons -To override the icons, you must first identify the icon ID, create an SVG file to replace this icon, and add the SVG hosting URL to your embed customization code. +[#configControls] +== Customizing embedded Spotter interface +When you embed Spotter, you'll notice that the embedded component loads an initial page with a prompt interface. The look and feel of this page vary depending on the Spotter version used for embedding. -The most common icon ID to override is `rd-icon-spotter`, the default Spotter icon. +=== Spotter Classic and Spotter 2 experience +If you have embedded Spotter Classic or Spotter 2, the initial page includes a prompt bar for user input, a data source selector, and the UI options to preview data and reset a Spotter session. -The following example uses the link:https://github.com/thoughtspot/custom-css-demo/blob/main/alternate-spotter-icon.svg[alternate-spotter-icon.svg, window=_blank] file hosted on `\https://cdn.jsdelivr.net/` to override the Spotter icon. +[.widthAuto] +[.bordered] +image::./images/spotter-embed-legacy.png[Spotter embed] + +=== Spotter 3 experience +In Spotter 3 embedding, you can load the page with a pre-selected data source or use the *Auto mode* to allow Spotter to automatically discover and select a relevant data model for user queries. + +**Default view**: + +[.widthAuto] +[.bordered] +image::./images/spotter3-legacy-interface.png[Spotter 3 interface] + +**With Auto mode enabled**: + +[.widthAuto] +[.bordered] +image::./images/spotter3-leagcy-interface-automode.png[Spotter 3 interface] + +[NOTE] +==== +When Auto mode is enabled, **Preview data** and **Data Model instructions** options will not be available. +==== + +==== Optional settings for Spotter 3 + +Spotter 3 experience is available with a new prompt interface that includes additional features and user elements to enrich your Spotter experience. You can include the *Chat history* panel to allow your users to access the chat history from their previous sessions. + +To enable new chat interface and chat history features, set the `updatedSpotterChatPrompt` and `enablePastConversationsSidebar` attributes to `true`, as shown in this example: [source,JavaScript] ---- - init({ - //... - customizations: { - // Specify the SVG hosting URL to overide the icon, for example Spotter (`rd-icon-spotter`) icon - iconSpriteUrl: "https://cdn.jsdelivr.net/gh/thoughtspot/custom-css-demo/alternate-spotter-icon.svg" - } - }); +const spotterEmbed = new SpotterEmbed(document.getElementById('ts-embed'), { + // ...other embed configuration attributes + + // Enable the updated Spotter chat prompt experience. + updatedSpotterChatPrompt: true, + + // Enable the sidebar for accessing past Spotter conversations + enablePastConversationsSidebar: true +}); ---- +The following figure shows UI elements and functions available in the new chat prompt and chat history panel: + +[.widthAuto] +[.bordered] +image::./images/spotter3-new-interface.png[Spotter 3 new interface] + +==== MCP connectors and resource selection icon +A Connector is an external MCP server or tool, such as Google Drive, Slack, Notion, Confluence/Jira, which can be used as a data source in Spotter sessions. ThoughtSpot administrators can configure connectors to enable Spotter users to include both structured and unstructured data in their conversation sessions. + +If the new prompt interface in Spotter 3 is enabled, the Spotter page displays the *MCP Connectors* menu along with a '\+' icon in the prompt panel. Your application users can connect to a tool pre-configured by your ThoughtSpot administrator directly from the Spotter 3 prompt interface using the '+' icon and add resources to their conversation context. + [NOTE] ==== -When customizing icons, ensure that the SVG hosting server is added to the CSP allowlist on the *Develop* > *Security Settings* page. For more information, see xref:customize-icons.adoc#_update_allowlists_in_security_settings_page[Customize icons]. +The MCP connector module and the '+' icon are displayed by default if the new prompt interface is enabled in your embed. However, we do not recommend using this feature in your production environments. ==== -==== Customize text strings -To replace text strings, you can use the `stringsIDs` and `strings` properties in the content customization object. - -The following example shows how to replace "Spotter" and other text strings on the Spotter interface. +Currently, the Visual Embed SDK does not provide any attributes or action IDs to hide these elements. As a workaround, you can use the CSS selectors to hide these elements: [source,JavaScript] ---- -// Initialize the SDK with custom text string replacements init({ - // ... - customizations: { - content: { - // Use the strings object to replace the visible UI text with custom labels. - strings: { - // Change all instances of "Liveboard" to "Dashboard" - "Liveboard": "Dashboard", - // Change all instances of "Answer" to "Reports" - "Answer": "Reports", - // Change all instances of "Spotter" to "dataAnlyzer" - "Spotter": "dataAnlyzer", - // Change all instances of "Search" to "Analyze" - "Search": "Analyze", - } + thoughtSpotHost: 'https://your-thoughtspot-host', // URL of your ThoughtSpot instance + authType: AuthType.None, // Authentication type; use appropriate AuthType for your environment + customizations: { + style: { + customCSS: { + rules_UNSTABLE: { + // Hide the MCP connectors module in the Spotter prompt panel + ".button-module__buttonWrapper.chat-connector-resources-module__addConnectorResourceButton": { + "display": "none !important" + }, + // Hide the add resources (+) icon in the Spotter prompt panel + "button.button-module__button.button-module__buttonWithIcon.button-module__tertiary.button-module__sizeM.button-module__backgroundLight.button-module__both": { + "display": "none !important" + } } + } } + }, + // ...other configuration attributes }); ---- +=== Customizing styles and interface elements +The visual Embed SDK provides a comprehensive style customization framework for overriding icons, text strings, and the appearance of UI elements. + +The `customizations` object allows you to add custom CSS definitions, replace text strings, and override icons. If your customization framework uses external sources or hosting servers, ensure they are added to the CSP allowlist. For more information, see the xref:css-customization.adoc[CSS customization framework], xref:customize-text-strings.adoc[Customize text strings], and xref:customize-icons.adoc[Customize icons] sections. + [#SpotterCSS] -==== Customize styles +=== Customize using CSS variables +You can customize the background color of the conversation and prompt panels, button elements, and the components of the charts generated by Spotter using xref:customize-css-styles.adoc[CSS variables]. -There are several CSS variables available for customizing Spotter interface. You can customize the background color of the conversation and prompt panels, button elements, and the components of the charts generated by Spotter. +If Theme Builder is enabled on your ThoughtSpot instance, you can find the variables for Spotter customization by navigating to *Develop* > *Customizations* > *Theme Builder* in the ThoughtSpot UI and downloading the CSS variables. [source,JavaScript] ---- @@ -219,97 +268,217 @@ init({ }, ---- -For more information about CSS variables for style customization, see xref:customize-css-styles.adoc#_spotter_interface[Spotter interface customization]. +==== Customizing text strings +To replace text strings, you can use the `stringsIDs` and `strings` properties in the content customization object. -== Customize app interactions with events +The following example shows how to replace "Spotter" and other text strings on the Spotter interface. -To listen to the events emitted by the embedded ThoughtSpot component, register xref:embed-events.adoc#embed-events[embed event] handlers. +[source,JavaScript] +---- +// Initialize the SDK with custom text string replacements +init({ + // ... + customizations: { + content: { + // Use the strings object to replace the visible UI text with custom labels. + strings: { + // Change all instances of "Preview data" to "Show data" + "Preview data": "Show data", + // Change all instances of "Spotter" to "dataAnlyzer" + "Spotter": "dataAnlyzer", + } + } + } +}); +---- -The following example shows how to register xref:EmbedEvent.adoc#_init[EmbedEvent.Init] and xref:EmbedEvent.adoc#_load[EmbedEvent.Load] listeners. +=== Customizing the Spotter icon +To override an icon, you must find ID of the icon, create an SVG file to replace this icon, and add the SVG hosting URL to your embed customization code. The most common icon to override is the default Spotter icon and its icon ID is `rd-icon-spotter`. + +The following example uses the link:https://github.com/thoughtspot/custom-css-demo/blob/main/alternate-spotter-icon.svg[alternate-spotter-icon.svg, window=_blank] file hosted on `\https://cdn.jsdelivr.net/` to override the Spotter icon. [source,JavaScript] ---- - conversation.on(EmbedEvent.Init, showLoader) - conversation.on(EmbedEvent.Load, hideLoader) + init({ + //... + customizations: { + // Specify the SVG hosting URL to overide the icon, for example Spotter (`rd-icon-spotter`) icon + iconSpriteUrl: "https://cdn.jsdelivr.net/gh/thoughtspot/custom-css-demo/alternate-spotter-icon.svg" + } + }); ---- -Similarly, to trigger actions on the embedded ThoughtSpot interface, use xref:HostEvent.adoc[Host events]. +The following figures show the customized Spotter icon: +[.widthAuto] +[.bordered] +image::./images/spotter-icon-customization.png[Spotter icon customization] -== Render the embedded object +=== Hiding Spotter icon and ThoughtSpot branding in the reasoning interface +If you want to hide the Spotter icon from the prompt response page and reasoning interface, or if you want to remove ThoughtSpot branding, you can use the CSS rules with selectors, as shown in this example: [source,JavaScript] ---- -conversation.render(); +init({ + //... embed configuration attributes + customizations: { + style: { + customCSS: { + rules_UNSTABLE: { + // Hide the Spotter icon in the tool call card under reasoning + "svg.chat-module__spotterIcon.icon-module__iconStyle.icon-module__xxl.icon-module__white": { + "display": "none !important" + }, + // Control the visibility for the ThoughtSpot text in the tool call card under reasoning + // Hide the element completely if MCP connectors are enabled, since the text-indent works for ThoughtSpot text only + ".collapsible-item-response-module__title": { + "text-indent": "-89px", + "overflow": "hidden", + "margin-left": "-24px" + }, + // Hide the ThoughtSpot (or Connector) icon in the tool call card under reasoning + ".collapsible-item-response-module__customIconWrapper": { + "display": "none" + }, + }, + }, + }, + } +}); ---- -== Code sample +[#spotterMenuActions] +=== Customizing menu actions and elements + +The SDK provides action IDs to disable, show, or hide the following elements and menu actions via `disabledActions`, `visibleActions`, or `hiddenActions` array. + +For example, you can hide the *Preview data**, *Reset* in the prompt panel, or *Pin*, *Download*, and other actions from in Spotter-generated response. + +The following code sample disables actions and menu elements using xref:embed-actions.adoc[`disabledActions`] array: [source,JavaScript] ---- -import { SpotterEmbed, AuthType, init } from '@thoughtspot/visual-embed-sdk'; + // Hide these actions + hiddenActions: [Action.Pin,Action.ResetSpotterChat,Action.DeletePreviousPrompt], + // Disable actions + disabledActions:[Action.PreviewDataSpotter,Action.Edit], + disabledActionReason: "Contact your administrator to enable this feature" +---- +For a comprehensive list of supported actions, see xref:Action.adoc[Spotter menu actions]. -// Initialize the SDK + +== Code samples + +**Code sample for embedding Spotter Classic and Spotter 2 experience** + +[source,JavaScript] +---- +import { + SpotterEmbed, + AuthType, + init, + EmbedEvent, + HostEvent +} from '@thoughtspot/visual-embed-sdk'; +// Initialize the ThoughtSpot Visual Embed SDK with your ThoughtSpot URL and authentication type. init({ - thoughtSpotHost: 'https://your-thoughtspot-host', // Replace with your ThoughtSpot application URL - authType: AuthType.None, // Use the appropriate AuthType for your setup + thoughtSpotHost: 'https://your-thoughtspot-host', // Replace with your ThoughtSpot application URL + authType: AuthType.None, // Use the appropriate AuthType for your setup }); -// Find the container element in your HTML +//Define event handler to show a loading indicator when the embed is initializing. +function showLoader() { + // Show loading indicator +} + +// Define event handler to hide the loading indicator when the embed has loaded. +function hideLoader() { + // Hide loading indicator +} + +// Find the container element in your HTML where the SpotterEmbed will be rendered. const container = document.getElementById('ts-embed'); if (container) { - // Create and render SpotterEmbed - const spotterEmbed = new SpotterEmbed(container, { - frameParams: { - height: '600px', - width: '100%', - }, - worksheetId: 'your-worksheet-id', // ID of the data source object (Model) to query data - searchOptions: { - searchQuery: 'Sales by year', // Optional: initial search query string to populate on load - }, - // Add more configuration options as needed - // Add event listeners as needed - onInit: () => console.log('Spotter initialized'), - onLoad: () => console.log('Spotter loaded'), + // Create and configure the SpotterEmbed + const spotterEmbed = new SpotterEmbed(container, { + frameParams: { + height: '100%', // Set the height of the embedded frame + width: '100%', // Set the width of the embedded frame + }, + worksheetId: 'your-worksheet-id', // ID of the data source object to query data from + //... other configuration attributes }); - spotterEmbed.render(); + // Register event listeners + spotterEmbed.on(EmbedEvent.Init, showLoader); // Show loader when initialization starts + spotterEmbed.on(EmbedEvent.Load, hideLoader); // Hide loader when embed is fully loaded + + // Render the SpotterEmbed in the container. + spotterEmbed.render(); + // Example: Add a host event to reset the Spotter conversation + document.getElementById('resetBtn').addEventListener('click', () => { + spotterEmbed.trigger(HostEvent.ResetSpotterConversation); + }); +} ---- -== Test your embed +**Code sample for embedding Spotter 3 experience** -* Build your app and load the embedded object. +[source,JavaScript] +---- +import { + SpotterEmbed, + AuthType, + init, + EmbedEvent, + HostEvent +} from '@thoughtspot/visual-embed-sdk'; +// Initialize the ThoughtSpot Visual Embed SDK with your ThoughtSpot URL and authentication type. +init({ + thoughtSpotHost: 'https://your-thoughtspot-host', // Replace with your ThoughtSpot application URL + authType: AuthType.None, // Use the appropriate AuthType for your setup +}); -** If the embedding is successful, you'll see the Spotter page with a conversation panel. -+ -[.widthAuto] -[.bordered] -image::./images/converseEmbed_default.png[Spotter embed] +//Define event handler to show a loading indicator when the embed is initializing. +function showLoader() { + // Show loading indicator +} -** Add a query, click the prompt button, and view the results. -+ -[.widthAuto] -[.bordered] -image::./images/converseEmbed-with-query.png[Spotter embed] +// Define event handler to hide the loading indicator when the embed has loaded. +function hideLoader() { + // Hide loading indicator +} -** If you see a blank screen: -*** Check if your code has the correct ThoughtSpot host URL. Ensure that your instance is accessible. -*** Check if the authentication credentials in your code are valid +// Find the container element in your HTML where the SpotterEmbed will be rendered. +const container = document.getElementById('ts-embed'); +if (container) { + // Create and configure the SpotterEmbed + const spotterEmbed = new SpotterEmbed(container, { + frameParams: { + height: '100%', // Set the height of the embedded frame + width: '100%', // Set the width of the embedded frame + }, + worksheetId: 'your-worksheet-id', // ID of the data source object to query data from. For automatic model discovery and selection (Auto mode), specify '_spotter_data_source_discovery_id' + updatedSpotterChatPrompt: true, // Enable new chat interface + enablePastConversationsSidebar: true, // Enable chat history + //... other configuration attributes + }); -* Verify the customized objects and elements. + -The following figures show the customized Spotter icon and text: -+ -[.widthAuto] -[.bordered] -image::./images/spotter-icon-customization.png[Spotter icon customization] + // Register event listeners + spotterEmbed.on(EmbedEvent.Init, showLoader); // Show loader when initialization starts + spotterEmbed.on(EmbedEvent.Load, hideLoader); // Hide loader when embed is fully loaded -+ -[.widthAuto] -[.bordered] -image::./images/spotter-text-customization.png[Spotter customization] + // Render the SpotterEmbed in the container. + spotterEmbed.render(); + // Example: Add a host event to reset the Spotter conversation + document.getElementById('resetBtn').addEventListener('click', () => { + spotterEmbed.trigger(HostEvent.ResetSpotterConversation); + }); +} +---- == Additional resources -* link:https://docs.thoughtspot.com/cloud/latest/spotter[Spotter Documentation] +* xref:embed-ai-analytics.adoc[Spotter features and embedding options] * link:https://developers.thoughtspot.com/docs/Class_SpotterEmbed[SpotterEmbed classes and methods] * link:https://developers.thoughtspot.com/docs/Interface_SpotterEmbedViewConfig[Configuration options for Spotter interface customization] * link:https://github.com/thoughtspot/developer-examples/tree/main/visual-embed/spotter/spotter-embed[Developer examples, window=_blank] +* link:https://docs.thoughtspot.com/cloud/latest/spotter[Spotter Product Documentation] diff --git a/modules/ROOT/pages/full-app-customize.adoc b/modules/ROOT/pages/full-app-customize.adoc index 8fb5f3670..a63084aa0 100644 --- a/modules/ROOT/pages/full-app-customize.adoc +++ b/modules/ROOT/pages/full-app-customize.adoc @@ -46,33 +46,22 @@ A dynamic left navigation menu that adjusts its contents according to the applic |===== -- -//// -[width="100%", cols="2,8,8,8"] -[options='header'] -|===== -||V1 (Legacy) |V2 experience |V3 experience - -|Navigation style a|* Top navigation bar for application menu. + -* Separate left navigation panels only for specific application context, such as *Data*, *Admin* and *Develop* modules a| -* Persona-based app selector on the top navigation bar + -* A separate left navigation panel for each persona-based application context a| -* Sliding left navigation panel -* Persona-based tabs on the left panel to switch between application context. -* Separate left navigation panel for each application context. -|Home page experience| Basic | Modular and customizable home page | Modular -|Enablement| The default, legacy ThoughtSpot UI. a| Disabled by default. + -Can be enabled by setting `modularHomeExperience: true` in the Visual Embed SDK a| Disabled by default. + -Can be enabled by setting the `discoveryExperience` properties in the Visual Embed SDK. -|Migration considerations| If you want to continue using the classic experience, no migration is required. -If you plan to switch to the new navigation and modular home page experience, ThoughtSpot recommends migrating to the new v3 experience. -| The v2 navigation experience can be enabled by setting `modularHomeExperience` to `true` in the Visual Embed SDK. However, the new v3 experience with left navigation panel provides an improved experience and more customizable components for home page, therefore, we recommend using the v3 experience. -If you are already on v2 experience and want to switch to the new v3 experience, contact ThoughtSpot Support to enable this feature on your instance. -Once enabled, configure the `discoveryExperience` properties and customize your home page experience as per your embedding requirements. -|Contact ThoughtSpot Support to enable the v3 experience on your ThoughtSpot instance. -Once enabled, configure the `discoveryExperience` properties and customize your home page experience as per your embedding application requirements. -|||| -|===== -//// + +**V3 navigation and home page experience** +[.bordered] +[.widthAuto] +image::./images/v3-experience.png[V3 UI experience] + +**V2 navigation and home page experience** +[.bordered] +[.widthAuto] +image::./images/v2-experience.png[V2 UI experience] + +**V1 Classic experience** +[.bordered] +[.widthAuto] +image::./images/v1-experience.png[Classic experience] + == Customize the embedded application UI for your users @@ -194,13 +183,15 @@ const embed = new AppEmbed("#embed", { After you enable the V3 experience: * Ensure the UI shows the V3 navigation and home page. + +//// + The following figure shows the user interface with the V3 experience: + [.bordered] [.widthAuto] image::./images/new-nav3.png[New home page] - +//// * Verify that all the customization settings are applied correctly. * If you have set up custom routes for navigation within your embedded app, verify navigation workflows and check for breaking changes. diff --git a/modules/ROOT/pages/mobile-embed-android.adoc b/modules/ROOT/pages/mobile-embed-android.adoc index 153fbc0c3..b7a3a6ad4 100644 --- a/modules/ROOT/pages/mobile-embed-android.adoc +++ b/modules/ROOT/pages/mobile-embed-android.adoc @@ -13,7 +13,6 @@ Your application developers can embed a ThoughtSpot Liveboard in your native And Before you begin, ensure that your development environment has the following setup: * Access to a ThoughtSpot instance with administrator and developer privileges. + -Ensure that your host app embedding ThoughtSpot is added to the xref:security-settings.adoc[CSP and CORS allowlists] in ThoughtSpot. * Access to the Liveboard object that you want to embed. * Android Studio is installed. + diff --git a/modules/ROOT/pages/mobile-embed-qs-flutter.adoc b/modules/ROOT/pages/mobile-embed-qs-flutter.adoc index 926b091d8..2a8306a72 100644 --- a/modules/ROOT/pages/mobile-embed-qs-flutter.adoc +++ b/modules/ROOT/pages/mobile-embed-qs-flutter.adoc @@ -18,7 +18,6 @@ Before you begin, check if your setup has the following: * A Flutter application project setup. For information about creating a Flutter app, see link:https://docs.flutter.dev/reference/create-new-app[Flutter documentation, window=_blank]. * Access to a ThoughtSpot instance with administrator and developer privileges. + -Ensure that your host app embedding ThoughtSpot is added to the xref:security-settings.adoc[CSP and CORS allowlists] in ThoughtSpot. * Access to the Liveboard object that you want to embed. == Get started with embedding diff --git a/modules/ROOT/pages/mobile-embed-qs-swift.adoc b/modules/ROOT/pages/mobile-embed-qs-swift.adoc index 63f3c3ff8..105fe8e4c 100644 --- a/modules/ROOT/pages/mobile-embed-qs-swift.adoc +++ b/modules/ROOT/pages/mobile-embed-qs-swift.adoc @@ -14,7 +14,6 @@ Before you begin, ensure that your development setup includes the following: * Xcode 13 or later is installed. For information about Xcode and SwiftUI, see link:https://developer.apple.com/documentation/Xcode[Xcode documentation, window=_blank]. * iOS 14.0 or later is installed on your device to test your embed. * Access to a ThoughtSpot instance with administrator and developer privileges. + -Ensure that your host app embedding ThoughtSpot is added to the xref:security-settings.adoc[CSP and CORS allowlists] in ThoughtSpot. * Access to the Liveboard object that you want to embed. == Install the Swift Embed Package diff --git a/modules/ROOT/pages/mobile-embed.adoc b/modules/ROOT/pages/mobile-embed.adoc index dfcdfa3b1..7d22aa27a 100644 --- a/modules/ROOT/pages/mobile-embed.adoc +++ b/modules/ROOT/pages/mobile-embed.adoc @@ -18,15 +18,7 @@ Allows developers to embed ThoughtSpot content in an iOS native app. Allows developers to embed ThoughtSpot content in an Android native app. == Authentication and security settings -Currently, Mobile Embed SDKs support only cookieless authentication (`AuthType.TrustedAuthCookieless`) method to authenticate embed users. To handle authentication, you may have to token provider function or use your backend app to fetch a token for trusted authentication. For more information, see the Mobile Embed SDK quickstart guides. - -You must also add your embedding app domain to the following allowlists on the **Develop** > **Customizations** > **Security Settings** page in the ThoughtSpot UI. - -* CSP visual embed hosts -* Permitted iFrame domains -* CORS whitelisted domains - -For information about how to add your domains to CSP and CORS allowlists, see xref:security-settings.adoc[Security Settings]. +Currently, Mobile Embed SDKs support only cookieless authentication (`AuthType.TrustedAuthCookieless`) method to authenticate embed users. To handle authentication, you may have to token provider function or use your backend app to fetch a token for trusted authentication. For more information, see the respective Mobile Embed SDK quickstart guides. == Mobile embed customization diff --git a/modules/ROOT/pages/mobilesdk-quick-start.adoc b/modules/ROOT/pages/mobilesdk-quick-start.adoc index 68508c237..1d8935f6e 100644 --- a/modules/ROOT/pages/mobilesdk-quick-start.adoc +++ b/modules/ROOT/pages/mobilesdk-quick-start.adoc @@ -17,7 +17,6 @@ Before you begin, check the following: * link:https://docs.npmjs.com/downloading-and-installing-node-js-and-npm[NPM and Node.js are installed, window=_blank] on your system. * Your link:https://reactnative.dev/docs/environment-setup[React Native environment, window=_blank] is set up. * You can access a ThoughtSpot instance with administrator and developer credentials. + -Ensure that your host app embedding ThoughtSpot is added to the xref:security-settings.adoc[CSP and CORS allowlists] in ThoughtSpot. * You have access to the Liveboard object that you want to embed * If you are using Expo to build your application: @@ -410,7 +409,6 @@ Additionally, you can add a listener for `EmbedEvent.Error` and verify the logs. * In case of rendering issues, adjust the frame size constraints and rerun your app. * Check if your custom CSS specifications are applied correctly. - == Known limitations For information about supported features and known limitations, see xref:mobile-embed.adoc#_known_limitations[Mobile embed limitations]. diff --git a/modules/ROOT/pages/pendo-integration.adoc b/modules/ROOT/pages/pendo-integration.adoc index 94d40dd0b..d08c3afd2 100644 --- a/modules/ROOT/pages/pendo-integration.adoc +++ b/modules/ROOT/pages/pendo-integration.adoc @@ -177,7 +177,7 @@ To validate and test Pendo integration in your embed: image::./images/pendo-dev-console.png[Dev console verification] -- . If your integration script includes validation checks with `pendo.validateEnvironment()`, you can verify the logs in the console to confirm if the script is executed successfully and initializes as expected. You can also enable debug logs by adding `logLevel: LogLevel.DEBUG` to your `init` code. + -For more information about `pendo.validateEnvironment()`, see the "Verify the installation" section in the link:https://support.pendo.io/hc/en-us/articles/360046272771-Developer-s-guide-to-implementing-Pendo-using-the-install-script[Pendo Documentation, window=_blank] or refer to the link:https://github.com/thoughtspot/developer-examples/blob/524ef13121fcae4756a951648e3e6dc4bb29aa26/visual-embed/pendo-integration/pendoIntegrationScript.js#L108[sample script provided by ThoughtSpot, window=_blank]. + +For more information about `pendo.validateEnvironment()`, see the "Verify the installation" section in the link:https://support.pendo.io/hc/en-us/articles/360046272771-Developer-s-guide-to-implementing-Pendo-using-the-install-script[Pendo Documentation, window=_blank] or refer to the link:https://github.com/thoughtspot/developer-examples/blob/main/visual-embed/pendo-integration/pendoIntegrationScript.js[sample script provided by ThoughtSpot, window=_blank]. . Log in to Pendo to create a sample guide for your ThoughtSpot application instance. . In the ThoughtSpot UI, verify if the Pendo guide is published. + @@ -203,7 +203,7 @@ If the variables are not available: == Additional resources -* link:https://github.com/thoughtspot/developer-examples/blob/524ef13121fcae4756a951648e3e6dc4bb29aa26/visual-embed/pendo-integration/pendoIntegrationScript.js[ThoughtSpot Developer examples GitHub repository, window=_blank] +* link:https://github.com/thoughtspot/developer-examples/tree/main/visual-embed/pendo-integration[ThoughtSpot Developer examples GitHub repository, window=_blank] * link:https://www.pendo.io/resources/getting-started-with-pendo/[Pendo Getting Started Guide] * link:https://support.pendo.io/hc/en-us/articles/360046272771-Developer-s-guide-to-implementing-Pendo-using-the-install-script[Pendo Documentation, window=_blank] * link:https://codesandbox.io/p/devbox/optimistic-mcclintock-lw2qq8[Code sandbox, window=_blank] diff --git a/modules/ROOT/pages/publishing-overview.adoc b/modules/ROOT/pages/publishing-overview.adoc index b82b057f2..6f4284ffa 100644 --- a/modules/ROOT/pages/publishing-overview.adoc +++ b/modules/ROOT/pages/publishing-overview.adoc @@ -77,8 +77,6 @@ Note the following feature limitations in the beta version: * Only ThoughtSpot administrators with access to all Orgs can publish objects. * Objects can be published only from the Primary Org to other Orgs. * In the target Orgs, published objects are available in read-only mode. The original object in the Primary Org remains editable only by the cluster administrator. -* Spotter functionality is not supported for published objects. -* Search data indexing is disabled for published tables. * Git integration is not supported for published objects. [NOTE] diff --git a/modules/ROOT/pages/security-api.adoc b/modules/ROOT/pages/security-api.adoc index 5a4adb304..b703b5852 100644 --- a/modules/ROOT/pages/security-api.adoc +++ b/modules/ROOT/pages/security-api.adoc @@ -125,7 +125,16 @@ Response code [#shareviz] == Share a visualization with another user or user group -If you want to share a specific visualization from a Liveboard with another user or user group, use the `/tspublic/v1/security/shareviz` API. This API lets you share the visualization with specific user IDs and provide read-only access. +If you want to share a specific visualization from a Liveboard with another user or user group, use the `/tspublic/v1/security/shareviz` API. + +[IMPORTANT] +==== +* Sharing a visualization implicitly shares the entire Liveboard with the recipient. +* If email notifications for object sharing are enabled, a notification with a link to the shared visualization will be sent to the recipient’s email address. Although this link opens the shared visualization, recipients can also access other visualizations in the Liveboard. +* The `/tspublic/v1/security/shareviz` API endpoint provides only read-only access to the shared visualization. +==== + + === Resource URL ---- diff --git a/modules/ROOT/pages/security-settings.adoc b/modules/ROOT/pages/security-settings.adoc index 050132cc0..2a0848166 100644 --- a/modules/ROOT/pages/security-settings.adoc +++ b/modules/ROOT/pages/security-settings.adoc @@ -6,7 +6,6 @@ :page-pageid: security-settings :page-description: Security settings for embedding - The **Security Settings** page in ThoughtSpot UI allows administrators and developers to configure allowlists for Content Security Policy (CSP) and Cross-origin Resource Sharing (CORS), authentication attributes, and access control settings. == Overview diff --git a/modules/ROOT/pages/selective-user-access.adoc b/modules/ROOT/pages/selective-user-access.adoc index 42cccbf41..a6ce63cb8 100644 --- a/modules/ROOT/pages/selective-user-access.adoc +++ b/modules/ROOT/pages/selective-user-access.adoc @@ -75,7 +75,7 @@ If *Block non-embed full app access* is turned on in *All Orgs*, it will be appl For ThoughtSpot releases 10.5.0.cl or earlier, if you have embedded ThoughtSpot using Visual Embed SDK v1.22.0 or later, the `blockNonEmbedFullAppAccess` property in the SDK is set to `true` by default. Due to this, your application users cannot access or navigate to the ThoughtSpot application experience outside the context of your app. -You can turn on the selective user access feature by going to *Admin* > *Early access features* > *Selective User Access* and editing the status to *Enabled*. +You can turn on the selective user access feature by going to *Admin settings* > *Application Settings* > *Administration* > *Selective User Access* and editing the status to *Enabled*. The selective user access granted through the *Security Settings* overrides the `blockNonEmbedFullAppAccess` SDK settings. It is highly recommended that you switch to selective user access for better security and uninterrupted operations. Support for the SDK `blockNonEmbedFullAppAccess` will end soon. diff --git a/modules/ROOT/pages/whats-new.adoc b/modules/ROOT/pages/whats-new.adoc index 668820047..bdf0d4100 100644 --- a/modules/ROOT/pages/whats-new.adoc +++ b/modules/ROOT/pages/whats-new.adoc @@ -10,6 +10,16 @@ This page lists new features, enhancements, and deprecated functionality in Thou == Version 26.2.0.cl +=== Spotter enhancements +You can now embed Spotter 3 experience, which introduces several new capabilities, agentic analytics, and enhanced user experience. Spotter 3 is Early Access feature and disabled by default on ThoughtSpot embedded instances. + +For more information, see xref:embed-ai-analytics.adoc[Embed AI Search and Analytics] and xref:embed-spotter.adoc[Spotter embedding documentation]. + +=== Rate limits for REST APIs +To prevent excessive requests from reaching application servers and to ensure API stability and service quality for REST API users, ThoughtSpot enforces rate limits on public API requests per client IP. These limits are applied globally at the cluster level for all public API requests, including calls to both REST API v1 and v2 endpoints. Administrators can adjust these limits for their ThoughtSpot deployments as needed. + +For more information, see xref:about-rest-apis.adoc#_rate_limits_for_api_requests[Rate limits for REST APIs]. + === Security Settings through APIs The security settings for ensuring data security and a seamless embedded user experience can now be done through REST APIs v2. Administrators and developers can configure allowlists for: diff --git a/src/configs/doc-configs.js b/src/configs/doc-configs.js index 783645484..14c512026 100644 --- a/src/configs/doc-configs.js +++ b/src/configs/doc-configs.js @@ -34,36 +34,12 @@ module.exports = { DEV: 'dev', }, VERSION_DROPDOWN: [ + { - label: '10.15.0.cl', + label: '26.2.0.cl', link: ' ', subLabel: 'Cloud (Latest)', }, - { - label: '10.14.0.cl', - link: '10.14.0.cl', - subLabel: 'Cloud', - iframeUrl: 'https://developer-docs-10-14-0-cl.vercel.app/docs/', - }, - { - label: '10.13.0.cl', - link: '10.13.0.cl', - subLabel: 'Cloud', - iframeUrl: 'https://developer-docs-10-13-0-cl.vercel.app/docs/', - }, - { - label: '10.10.0.sw', - link: '10.10.0.sw', - subLabel: 'Software (Latest)', - iframeUrl: 'https://visual-embed-sdk-10-10.vercel.app/docs/', - }, - { - label: '10.1.0.sw', - link: '10.1.0.sw', - subLabel: 'Software', - iframeUrl: 'https://visual-embed-sdk-10-1.vercel.app/docs/', - }, - ], CUSTOM_PAGE_ID: { API_PLAYGROUND: 'restV2-playground', diff --git a/src/intl/en.json b/src/intl/en.json index 5ba29665c..1e395a360 100644 --- a/src/intl/en.json +++ b/src/intl/en.json @@ -13,7 +13,7 @@ "CODE_COPY_BTN_HOVER_TEXT": "Copy to clipboard", "CODE_COPY_BTN_AFTER_CLICK_TEXT": "Copied!", "RIGHT_NAV_SIDERBAR_TITLE": "On this page", - "COPYRIGHT_TEXT": "© 2025 ThoughtSpot Inc. All Rights Reserved.", + "COPYRIGHT_TEXT": "© 2026 ThoughtSpot Inc. All Rights Reserved.", "KEYWORD_NOT_FOUND_MSG": "Sorry. We could not find a match for", "HEADER_BANNER_MAIN": "ThoughtSpot Embedded Documentation", "SEARCH_HINT_1": "Press", diff --git a/static/doc-images/images/spotter-embed-legacy.png b/static/doc-images/images/spotter-embed-legacy.png new file mode 100644 index 000000000..45fe13945 Binary files /dev/null and b/static/doc-images/images/spotter-embed-legacy.png differ diff --git a/static/doc-images/images/spotter3-leagcy-interface-automode.png b/static/doc-images/images/spotter3-leagcy-interface-automode.png new file mode 100644 index 000000000..3e05cf10b Binary files /dev/null and b/static/doc-images/images/spotter3-leagcy-interface-automode.png differ diff --git a/static/doc-images/images/spotter3-legacy-interface.png b/static/doc-images/images/spotter3-legacy-interface.png new file mode 100644 index 000000000..581f1aaeb Binary files /dev/null and b/static/doc-images/images/spotter3-legacy-interface.png differ diff --git a/static/doc-images/images/spotter3-new-interface.png b/static/doc-images/images/spotter3-new-interface.png new file mode 100644 index 000000000..cd9b1676b Binary files /dev/null and b/static/doc-images/images/spotter3-new-interface.png differ diff --git a/static/doc-images/images/spotter3-new-interface_auto-mode.png b/static/doc-images/images/spotter3-new-interface_auto-mode.png new file mode 100644 index 000000000..b8ce7a452 Binary files /dev/null and b/static/doc-images/images/spotter3-new-interface_auto-mode.png differ diff --git a/static/doc-images/images/v1-experience.png b/static/doc-images/images/v1-experience.png new file mode 100644 index 000000000..9777eb044 Binary files /dev/null and b/static/doc-images/images/v1-experience.png differ diff --git a/static/doc-images/images/v2-experience.png b/static/doc-images/images/v2-experience.png new file mode 100644 index 000000000..00c403ad6 Binary files /dev/null and b/static/doc-images/images/v2-experience.png differ diff --git a/static/doc-images/images/v3-experience.png b/static/doc-images/images/v3-experience.png new file mode 100644 index 000000000..3f988376c Binary files /dev/null and b/static/doc-images/images/v3-experience.png differ