# Front end

> You're reading the Mindset v3 documentation. v3 is no longer sold; this is reference for existing customers. Mindset 4 docs are at /docs.

Embedding an agent, Front-end script

> **Tip:** This page provides a guide for embedding a Mindset agent in a **Multiple Page Application**.
>
> If you want to embed a Mindset agent in a **Single Page Application** (e.g., React, Vue, Angular), we recommend reading the current page in order to understand the main concepts and then checking the [Sample code for embedding an agent in a Single Page Application](https://docs4.mindset.ai/v3/deploy/sdk2/sdk2-best-practices)

## Front-end script

There are 3 steps to follow in your Front-end code in order to embed a Mindset agent:

**1. Add the `mindset-sdk2.js` script**

```javascript
<script src="MINDSET-SDK-URL/mindset-sdk2.js"></script>
```

> **Warning:** Replace `MINDSET-SDK-URL` with the URL provided by Mindset AI.

**2. Add the `<mindset-agent>` HTML tag**

```javascript
<mindset-agent 
    agentUid='YOUR-AGENT-UID'
    style='width: 100%; height: 600px; display: block; background-color: rgb(255, 255, 255); overflow: hidden; border-radius: 12px;'>
</mindset-agent>
```

> **Warning:** Replace `YOUR-AGENT-UID` with the AgentUid you want to embed

**3. Call the `mindset.init()` method with your configuration**

```javascript
<script>
   mindset.init({
    appUid: "YOUR-APP-UID",
    enableVoice: 'true'
    })
</script>
```

> **Warning:** Replace `YOUR-APP-UID` with yours

> **Danger:**
>
> - In the case that your agent uses the **anonymous access**, you have to whitelist URLs in your Agent Management Studio. (For example you can whitelist `http://localhost` while your are testing your code locally)
> - In case your agent uses the **authenticated access**, you have to set the `fetchAuthentication` param in the `Mindset.init()` method. (See above [The fetchAuthentication method](https://docs4.mindset.ai/v3/deploy/sdk2/front-end#the-fetchauthentication-method) for more details)

## Parameters required for your configuration

In order to get your configuration parameters, you either contact the Mindset AI team or you can directly go on your Agents Management Studio dashboard listing your live agents.
For each of those agents you will be able to display the full deployment instructions with your specific configuration parameters already displayed:

- Sample live agent deployment instructions:

![Sample live agent deployment instructions](https://docs4.mindset.ai/v3/assets/images/FrontEnd-agent-deployintstructions.png)

*Sample live agent deployment instructions*

- You can also ask directly Mindset for the required parameters:

| Parameter           | Description                                                                                                                            |
| :------------------ | :------------------------------------------------------------------------------------------------------------------------------------- |
| **MINDSET-SDK-URL** | This will be provided by the Mindset AI team.                                                                                          |
| **YOUR-APP-UID**    | Your appUid is provided by mindset.                                                                                                    |
| **YOUR-AGENT-UID**  | The agent Uid you want the user chat with. You can find that Agent Uid in the setting of the agent in the **Agent Management Portal**. |

## The fetchAuthentication method

In case your agent uses the **authenticated access**, you have to set the `fetchAuthentication` param in the `Mindset.init()` method and provide a method which will be in charge of fetching the `authToken` from your [**Back-end authentication script**](https://docs4.mindset.ai/v3/deploy/sdk2/back-end)

Let's say your front-end method is named `getAuthToken`, you then have to set the `fetchAuthentication` param as follows:

```javascript
<script>
   mindset.init({
    fetchAuthentication: getAuthToken,
    appUid: "YOUR-APP-UID",
    enableVoice: 'true'
    })
</script>
```

Below an example of a such method (which basically just fetch the response from your back-end script) to include in your front-end code:

#### Sample fetchAuthentication method

```javascript
<script>

    async function getAuthToken() {
        const userAuthTokenServerUrl = `YOUR-BACKEND-API-RETURNING-AUTHTOKEN`
        // e.g. https://mycompany-backend/api/getusertoken

        try {
            const headers = {
                "accept": "application/json",
                "Content-Type": "application/json"
            };
            const response = await fetch(userAuthTokenServerUrl, {
                method: 'POST',
                headers: headers
            });
            if (!response.ok) {
                throw new Error(`HTTP error! status: ${response.status}`);
            }
            const responseData = await response.json();
            return responseData.authToken;
        } catch (error) {
            console.log('Error fetching auth token:', error);
            throw error;
        }
    }

</script>
```

## Front-end page full example

### With anonymous access

#### Sample HTML page embedding an agent:

```javascript
<html>
    <head>
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <script src="MINDSET-SERVER-URL/mindset-sdk2.js"></script>

        <script>
            mindset.init({
                appUid: "YOUR-APP-UID",
                enableVoice: 'true'
                })
        </script>   
    </head>

    <body>
        <div class="main-container">
            <h1>Mindset Embedded Agent</h1>
        
            <mindset-agent 
                agentUid='YOUR-AGENT-UID'
                style='width: 100%; height: 600px; display: block; background-color: rgb(255, 255, 255); overflow: hidden; border-radius: 12px;'>
            </mindset-agent>
        </div> 
    </body>
</html>
```

### With authenticated access

#### Sample HTML page embedding an agent including the fetchAuthentication method

```javascript
<html>
    <head>
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <script src="MINDSET-SERVER-URL/mindset-sdk2.js"></script>

        <script>
            async function getAuthToken() {
                const userAuthTokenServerUrl = `YOUR-BACKEND-API-RETURNING-AUTHTOKEN` 
                // e.g. https://mycompany-backend/api/getusertoken/${currentUserId}

                try {
                    const headers = {
                        "accept": "application/json",
                        "Content-Type": "application/json"
                    };
                    const response = await fetch(userAuthTokenServerUrl, {
                        method: 'POST',
                        headers: headers
                    });
                    if (!response.ok) {
                        throw new Error(`HTTP error! status: ${response.status}`);
                    }
                    const responseData = await response.json();
                    return responseData.authToken;
                } catch (error) {
                    console.log('Error fetching auth token:', error);
                    throw error;
                }
            }

            mindset.init({
                fetchAuthentication: getAuthToken, 
                appUid: "YOUR-APP-UID",
                enableVoice: 'true'
                })
        </script>   
    </head>

    <body>
        <div class="main-container">
            <h1>Mindset Embedded Agent</h1>
        
            <mindset-agent 
                agentUid='YOUR-AGENT-UID'
                style='width: 100%; height: 600px; display: block; background-color: rgb(255, 255, 255); overflow: hidden; border-radius: 12px;'>
            </mindset-agent>
        </div> 
    </body>
</html>
```

## Customizing the agent UI colors

There is a default **Theme color palette** for the agent UI, but you can customize it by passing a `theme` parameter to the `mindset.init()` method.

Please read the [Agent UI color theme documentation](https://docs4.mindset.ai/v3/deploy/sdk2/agent-color-theme) for more details about the available options.

## Customizing the agent Font

There is a default **Font** for the agent UI, but you can customize it by passing a `customFontTheme` parameter to the `mindset.init()` method.

Please read the [Agent Fonts customization documentation](https://docs4.mindset.ai/v3/deploy/sdk2/fonts-customization) for more details about the available options.

## Flexible agent UI

The `<mindset-agent>` tag can be wrapped in any `<Div>` element of your page.

But if you prefer to have a more flexible UI for your agent and you need to let the agent Ui always visible anywhere but without being intrusive, there is the option to enable the **Flexible agent UI** mode.

Please read the [Flexible Agent UI documentation](https://docs4.mindset.ai/v3/deploy/sdk2/flexible-ui) for more details.
