> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sleak.chat/llms.txt
> Use this file to discover all available pages before exploring further.

# Custom Fields

> Geef contextinformatie door aan je agent via custom fields voor gepersonaliseerde gesprekken

<Info>
  **Technische implementatie**

  Implementatie van deze feature vereist basis-kennis in web development. Laat dit bij voorkeur over aan een ontwikkelaar. Hulp nodig? [Neem contact op](mailto:support@sleak.chat) met ons support team.
</Info>

Met custom fields kun je automatisch context over de bezoeker doorgeven aan je Sleak agent. Denk aan naam, e-mailadres, ordernummer, of andere relevante informatie die je al hebt.

De custom field data wordt **beschikbaar voor de AI agents in chats**, is daarnaast ook **zichtbaar in de chat inbox** en ten slotte beschikbaar via de **Sleak API en webhooks**.

## Voordelen van custom fields

* **Meer context**: Agent heeft toegang tot relevante info, wat de gesprekskwaliteit bevordert
* **Personalisatie**: Gesprekken starten met "Hoi \[naam]" in plaats van generieke begroetingen
* **Minder storend voor gebruiker**: Agent kan direct helpen zonder eerst gegevens te vragen
* **Integraties**: Gebruik gegevens voor acties zoals orderstatus opzoeken

***

## Implementatie

Custom fields kun je configureren via je [Sleak dashboard](https://dashboard.sleak.chat/integraties?tab=custom-fields). De implementatie kan op twee manieren:

| Methode                | Beschrijving                                                     | Voordelen                                           | Nadelen                          |
| ---------------------- | ---------------------------------------------------------------- | --------------------------------------------------- | -------------------------------- |
| **Omgeving met login** | Haal gegevens op uit de sessie of account van de ingelogde klant | Meest betrouwbaar, vaak ook meer data beschikbaar   | Vereist ingelogde gebruikers     |
| **Cookie-gebaseerd**   | Sla gegevens op in cookies na bijvoorbeeld een aankoop           | Werkt voor alle bezoekers, eenvoudige implementatie | Werkt niet op meerdere apparaten |

Waar de data ook vandaan komt - Custom fields verstuur je via JavaScript nadat de Sleak widget is geladen:

```javascript wrap theme={null}
window.addEventListener('sleakCustomFieldsHandlerInitialized', function (event) {
  console.log(event);
  
  // Voorbeeld data - vervang met echte data uit je applicatie
  const userData = {
    naam: 'John Doe',
    email: 'john@mymail.com',
    telefoonnummer: '0031612341234',
    ordernummer: 'ORD-29485'
  };

  // Verstuur de custom fields naar Sleak
  window.sleakPushCustomFields(userData);
});
```

<Warning>
  Vervang de voorbeelddata met echte data uit je applicatie. Gebruik dynamische data in plaats van statische waardes.
</Warning>

***

## Voorbeelden van implementatie scenario's

### Scenario 1: Ingelogde gebruikers

Voor websites waar gebruikers inloggen:

```javascript wrap theme={null}
window.addEventListener('sleakCustomFieldsHandlerInitialized', function (event) {
  // Haal gebruikersdata op uit je sessie/API
  const currentUser = getCurrentUser(); // Je eigen functie
  
  if (currentUser) {
    window.sleakPushCustomFields({
      naam: currentUser.fullName,
      email: currentUser.email,
      klant_id: currentUser.id,
      membership_level: currentUser.membershipLevel
    });
  }
});
```

### Scenario 2: E-commerce met order context

Voor webshops waar bezoekers een specifieke order bekijken:

```javascript wrap theme={null}
window.addEventListener('sleakCustomFieldsHandlerInitialized', function (event) {
  // Haal ordernummer op uit URL of DOM
  const orderNumber = getOrderFromUrl(); // Je eigen functie
  const customerEmail = getEmailFromOrder(orderNumber); // Je eigen functie
  
  if (orderNumber) {
    window.sleakPushCustomFields({
      ordernummer: orderNumber,
      email: customerEmail,
      order_status: 'in_behandeling'
    });
  }
});
```

### Scenario 3: Delayed data loading

Wanneer de benodigde data pas later beschikbaar is:

```javascript wrap theme={null}
// Custom fields handler
let customFieldsReady = false;

window.addEventListener('sleakCustomFieldsHandlerInitialized', function (event) {
  customFieldsReady = true;
  sendCustomFieldsIfReady();
});

// Je eigen data loading
window.addEventListener('userDataLoaded', function (event) {
  sendCustomFieldsIfReady();
});

function sendCustomFieldsIfReady() {
  if (customFieldsReady && window.userDataAvailable) {
    window.sleakPushCustomFields(window.currentUserData);
  }
}
```

***

## Testen en debuggen

### Test in development

Je kunt de custom fields functionaliteit testen door het event handmatig te triggeren:

```javascript wrap theme={null}
// Test de custom fields handler
window.dispatchEvent(new CustomEvent('sleakCustomFieldsHandlerInitialized'));
```

### Debug tips

* Open de browser console om te zien of events correct gefired worden
* Controleer of `window.sleakPushCustomFields` beschikbaar is
* Verifieer in je Sleak dashboard of de custom fields aankomen

***

## Veelgestelde vragen

<AccordionGroup>
  <Accordion title="Wanneer worden custom fields verstuurd?">
    Custom fields worden verstuurd zodra `sleakPushCustomFields()` wordt aangeroepen. Dit kan voor, tijdens, of na het starten van een gesprek.
  </Accordion>

  <Accordion title="Kan ik custom fields updaten tijdens een gesprek?">
    Ja, je kunt `sleakPushCustomFields()` meerdere keren aanroepen om de context bij te werken tijdens het gesprek.
  </Accordion>

  <Accordion title="Welke datatypen worden ondersteund?">
    String, Number, en Boolean waardes worden ondersteund. Complexere objecten worden automatisch geconverteerd naar strings.
  </Accordion>

  <Accordion title="Zijn custom fields zichtbaar voor de bezoeker?">
    Nee, custom fields zijn alleen zichtbaar voor de agent en in je Sleak dashboard. De bezoeker ziet deze informatie niet.
  </Accordion>
</AccordionGroup>
