# Kassan avaaminen

> `book()`-metodi avaa yhden tapahtuman kassan ja hyväksyy kutsukohtaiset ohitukset sekä asiakaskontekstin, jonka voit välittää omiin järjestelmiisi.

`book()` on kassan avaava metodi. Kaikki muu asiakkaassa joko määrittää sen asetuksia tai seuraa sitä.

```js
entase.book(eventID);
entase.book(eventID, options);
```

`eventID` on myytävän aikataulutetun tapahtuman tunniste. Se on sama tunniste, jota käytetään tapahtumasi jako- ja upotuskoodissa.

Kutsu palautuu välittömästi – se avaa paneelin tai ikkunan eikä odota, että kävijä viimeistelee varauksen. Reagoi seuraaviin tapahtumiin [tapahtumien](/developers/js-client/events.md) avulla.

## Asetukset

| Nimi | Tyyppi | Oletus | Kuvaus |
|---|---|---|---|
| `checkoutMode` | merkkijono | instanssin arvo | Vain tälle varaukselle `'pane'` tai `'popup'`. |
| `clientContext` | objekti | `null` | Mielivaltainen data, joka välitetään kassalle, kun se on valmis. Katso alta. |
| `collectConsent` | totuusarvo | instanssin arvo | Kysytäänkö kävijää hyväksymään ehtoilmoitus. |
| `backdrop` | totuusarvo | instanssin arvo | Himmennetäänkö kassan takana oleva sivu. |
| `backdropColor` | merkkijono | instanssin arvo | Himmennetyn alueen väri. |
| `pane` | objekti | instanssin arvo | Upotetun paneelin `{ width, height }`. |
| `popup` | objekti | instanssin arvo | Ponnahdusikkunan `{ width, height }`. |

Kaikki pois jättämäsi asetukset palautuvat instanssia luotaessa määritettyihin arvoihin, joten kutsukohtaiset asetukset täydentävät asetuksia eivätkä korvaa niitä.

```js
entase.book('EVENT_ID', {
  pane: { width: '60vw' },
  backdrop: false,
  clientContext: { source: 'homepage-hero' }
});
```

## Asiakaskonteksti

`clientContext` on itse määrittelemäsi objekti. Asiakas säilyttää sitä, kunnes kassa ilmoittaa olevansa valmis, ja välittää sen sitten kassalle. Sen avulla voit välittää kassasessioon tietoja, jotka vain sivusi tietää – mitä painiketta napsautettiin, minkä kampanjan kautta kävijä saapui, sisäinen asiakasviite.

Konteksti tallennetaan tapahtumatunnistekohtaisesti, joten kahden eri tapahtuman varaaminen samalta sivulta pitää niiden kontekstit erillään.

Älä laita siihen mitään arkaluonteista. Se kulkee selaimen kautta kassalle ja on kaikkien sivua tarkastelevien nähtävissä.

## Useiden tapahtumien avaaminen yhdeltä sivulta

Yksi instanssi käsittelee minkä tahansa määrän tapahtumia. Luo se kerran ja anna sille eri tunniste joka kerta:

```js
const entase = new Entase({ pk: 'YOUR_PUBLISHABLE_KEY' });

document.querySelectorAll('[data-event-id]').forEach(button => {
  button.addEventListener('click', () => {
    entase.book(button.dataset.eventId, {
      clientContext: { source: button.dataset.source }
    });
  });
});
```

## Kun asiakas on tuhottu

Jos kutsut `book()`-metodia instanssissa, jonka olet jo tuhonnut, konsoliin kirjataan virhe eikä mitään avata. Tämä on tarkoituksellista – tuhottu instanssi ei enää kuuntele kassan viestejä, joten sen avaamaa ikkunaa ei voisi sulkea tai seurata. Luo sen sijaan uusi instanssi.

## Kassan sulkeminen

Kävijä sulkee kassan itse: Escape-näppäimellä tai napsauttamalla himmennettyä aluetta paneelitilassa, tai ponnahdusikkunatilassa ikkunan säätimillä. Kassa sulkeutuu myös itse, kun varaus valmistuu.

Sitä ei voi sulkea koodistasi julkisella metodilla. Jos haluat tietää, milloin se sulkeutui, kuuntele `checkout.closed`-tapahtumaa.
