Zur WebsiteZum Dashboard
Themen

JavaScript und Ereignisse

Auf Käufe reagieren, Daten lesen und die Ticketauswahl selbst bauen, mit der JavaScript-Schnittstelle der Bausteine.

Für die Bausteine brauchst du kein JavaScript. Es hilft dir, wenn du auf einen Kauf reagieren oder einen Teil ganz selbst bauen willst. Das Script stellt dafür window.TickySmart bereit.

Ereignisse

Jeder Schritt meldet sich als Ereignis auf document. So zählst du Käufe in deinem eigenen Analyse-Werkzeug:

document.addEventListener("tickysmart:purchase", (event) => {
  const { transactionId, value, currency, items } = event.detail;
  gtag("event", "purchase", { transaction_id: transactionId, value, currency, items });
});
EreignisWann
tickysmart:view_item_listDie Eventliste ist da
tickysmart:view_itemEine Ticketauswahl ist da
tickysmart:checkoutTickets sind reserviert, die Kasse öffnet
tickysmart:add_to_cart, tickysmart:begin_checkoutDie Kasse wird angezeigt
tickysmart:add_payment_infoDer Käufer schickt das Formular ab
tickysmart:purchaseBezahlt. Kommt je Bestellung und Gerät nur einmal
tickysmart:localeDie Sprache hat gewechselt

Die Angaben in event.detail folgen dem E-Commerce-Schema von Google Analytics 4: currency, value, items, beim Kauf dazu transactionId.

Einstellungen beim Start

Statt der Attribute am Script kannst du alles auch hier angeben:

await TickySmart("ts_pk_live_…", {
  locale: "de",
  urls: { event: "/programm/{slug}", order: "/kasse?ts_order={id}" },
  partner: "stadtwerke",
  messages: { "shop.checkout": "Jetzt kaufen" },
  stripeAppearance: { theme: "flat" },
});

Daten lesen

const shop = await TickySmart("ts_pk_live_…");
const info = await shop.info.load();
const events = await shop.events.load();
const calendar = await shop.calendar("2027-03-01", "2027-03-31", null).load();

const event = shop.event("sommerfest");
await event.data.load();
// view() braucht Shop und Event, deshalb oben erst shop.info.load()
console.log(event.view().title, event.view().tickets);

Ticketauswahl selbst bauen

Die Auswahl läuft über dasselbe Objekt wie die Bausteine. Du kannst also eine eigene Oberfläche bauen und trotzdem ts-cart-total oder ts-cart-button weiter nutzen:

const event = shop.event("sommerfest");
await Promise.all([shop.info.load(), event.data.load()]);
event.subscribe(() => {
  const selection = event.selection();
  document.querySelector("#summe").textContent = selection.total;
});

event.setDate(dateId);
event.setQuantity(ticketId, 2);
await event.applyCode("SOMMER");
const order = await event.reserve(); // führt zur Kasse, Fehler stehen in event.state.error

Die Beträge sind ganze Zahlen in der kleinsten Einheit der Währung, also Cent bei Euro und ganze Yen bei Yen.

Kasse selbst bauen

const order = shop.order(orderId);
await order.load();
order.setValues({ email, firstName, lastName, acceptTerms: true });
await order.applyVoucher("7YQ9-C6V5-MACA");
await order.submit();
console.log(order.state.order, order.state.invalid, order.state.code);

ts-payment zeigt danach die Zahlung. Kartendaten dürfen nur in die Felder des Anbieters, diesen Teil kannst du also nicht ersetzen.

Texte

Die Namen der Texte sind dieselben wie in der Oberfläche von TickySmart. Die häufigsten:

NameText
shop.checkoutZur Kasse
shop.totalSumme
shop.soldOutAusverkauft
shop.freePriceKostenlos
shop.priceFromab

Alle Namen einer Sprache stehen in der Datei https://embed.tickysmart.io/elements/v1/de.js.