# Client-seitige Aktionen im Browser des Besuchers

> Führe eine Aktion im Browser des Besuchers aus: mit einem JavaScript-Handler über IntoChatActions oder einem Endpunkt, der die Sitzung des Besuchers nutzt.

Eine client-seitige Aktion läuft auf der Seite, in die dein Agent eingebunden ist, nicht auf den Servern von intoCHAT. Damit erreichst du, was nur der Browser des Besuchers erreicht: einen Endpunkt deiner Website, der die Login-Sitzung des Besuchers braucht, oder Daten und Funktionen auf der Seite selbst.

## Wann was passt

| Du willst aufrufen | Verwende |
| --- | --- |
| Eine öffentliche API oder eine, die deinen geheimen Schlüssel braucht | Eine [server-seitige API-Aktion](/de/docs/api-actions) |
| Einen Endpunkt auf deiner eigenen Domain, der die Cookies des Besuchers nutzt | Eine client-seitige Aktion, ohne zusätzlichen Code |
| Etwas auf der Seite, etwa den Warenkorb in JavaScript oder einen Dialog | Eine client-seitige Aktion mit registriertem Handler |
| Nichts: Besucher sollen nur eine deiner Seiten öffnen | Einen [eigenen Button](/de/docs/custom-buttons) |

## Einrichten

1. Lege die Aktion im Tab **Actions** an, wie unter [Eigene API-Aktionen](/de/docs/api-actions) beschrieben: URL, Eingaben und **When to use**.
2. Wähle in Schritt **3. When the AI should use it** die Option **Client-side action**.
3. Speichere die Aktion.

> Die Anfrage wird im Browser des Besuchers zusammengesetzt, er kann also alles darin sehen. Die Zugangsdaten aus dem Tab **Authentication** werden bewusst nicht mitgeschickt. Braucht der Endpunkt deinen geheimen Schlüssel, mach eine server-seitige Aktion daraus.

## So läuft ein Aufruf ab

Ruft der Agent eine client-seitige Aktion auf, gibt das Chat-Widget den Aufruf an das Embed-Script auf deiner Seite weiter:

1. Hat deine Seite unter dem Namen der Aktion einen Handler registriert, läuft dieser, und sein Rückgabewert geht an den Agenten.
2. Sonst ruft deine Seite die URL der Aktion von deiner eigenen Domain aus auf, mit den Cookies des Besuchers.

Jeder Aufruf hat 20 Sekunden Zeit. Danach meldet das Widget dem Agenten einen Fehler. Die Aktion braucht auch dann eine gültige öffentliche URL, wenn du nur einen Handler nutzt; ist ein Handler registriert, wird diese URL nicht aufgerufen.

## Handler registrieren

Der Name des Handlers ist der Name der Aktion, in dem jedes Zeichen außer Buchstaben, Ziffern, `_` und `-` durch `_` ersetzt ist. Aus „Get cart“ wird also `Get_cart`. Der Editor zeigt den genauen Namen in seinem Codebeispiel.

`window.IntoChatActions` steht bereit, sobald das Script des Snippets gelaufen ist, noch bevor das Chat-Widget selbst geladen hat. Handler werden erst gesucht, wenn der Agent die Aktion aufruft. Ob du vor oder nach dem Laden des Widgets registrierst, macht also keinen Unterschied. Füge irgendwo nach dem Snippet ein Script ein:

```html
<script src="https://www.intochat.ai/api/embed.js" data-chatbot-id="YOUR_AGENT_ID"></script>
<script>
  window.IntoChatActions.register("Get_cart", async function (args) {
    // args: die Eingaben, die der Agent ausgefüllt hat.
    // Gib etwas JSON-Serialisierbares zurück. Der Agent sieht es.
    return { items: window.myStore.cart.items };
  });
</script>
```

Code, der vor dem Snippet laufen kann, legt stattdessen Paare `[name, handler]` in `window.IntoChatActionsQueue` ab; das Embed-Script registriert sie beim Laden. Die meisten Seiten brauchen das nicht. Mit mehreren Agenten auf einer Seite teilen sich alle dieselben Handler.

Der Handler bekommt die Eingaben, die der Agent ausgefüllt hat, als `args`. Wirft er einen Fehler, geht dessen Meldung als fehlgeschlagener Aufruf an den Agenten. `IntoChatActions.unregister(name)` entfernt einen Handler, `IntoChatActions.registered()` listet die registrierten Namen auf.

## Testen

**Send test request** im Editor läuft von den Servern von intoCHAT aus. Der Test prüft, ob die URL antwortet, und zeigt die Form der Antwort, sieht aber weder die Sitzungen deiner Besucher noch Handler auf deiner Seite. Im **Playground** gibt es keine Seite von dir um den Chat herum, daher ruft das Widget die URL selbst auf, ohne Cookies oder Handler deiner Website. Teste Handler und sitzungsbasierte Endpunkte auf einer Seite deiner Website, auf der das Widget installiert ist.

> Client-seitige Aktionen brauchen die Chat-Bubble, die das Embed-Script auf deiner Seite einfügt. Bei einer Inline-Einbettung per iframe gibt es kein Embed-Script auf der Seite, das antwortet, daher schlägt ein Aufruf nach 20 Sekunden fehl.
