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

# BackInStockMail (OrderNow-Service)

> Wie Sie in WEBSALE V8s Käufer per E-Mail benachrichtigen, sobald ein nicht lieferbares Produkt wieder verfügbar ist.

Mit "BackInStockMail" hinterlegt ein Käufer seine Kontaktdaten zu einem Produkt, das gerade nicht lieferbar ist. Verbessert sich der Lieferbarkeitsstatus, verschickt der Shop automatisch eine personalisierte E-Mail mit einem Deep-Link direkt zum Produkt. Besitzt das Produkt abhängige Varianten, führt der Link direkt zur gewünschten Variante.

![Backinstockmail](https://mintcdn.com/websaleag-44ee7ea6/Dgb_SNFMeC9HkKBV/images/backinstockmail.png?fit=max\&auto=format\&n=Dgb_SNFMeC9HkKBV\&q=85\&s=98758ae24a64fbea51b016ede3a5f96e)

Das Feature hieß früher "OrderNow-Service". Der alte Name steckt weiterhin in den technischen Bezeichnern, etwa im Konfigurationsabschnitt `<OrderNowMail>`.

## Wann eine E-Mail verschickt wird

Ausgelöst wird die E-Mail nicht durch einen Zeitplan, sondern durch die Verbesserung des Lieferbarkeitsstatus gegenüber dem Zeitpunkt der Anmeldung.

| Anmeldung erfolgte bei Status | E-Mail geht raus bei |
| - | - |
| rot | gelb oder grün |
| gelb | grün |

Zwischen "rot nicht bestellbar" (red-hard) und "rot bestellbar" (red-soft) wird nicht unterschieden. Beim Wechsel von red-hard auf red-soft wird deshalb keine E-Mail verschickt.

Sinnvoll ist der Service vor allem dann, wenn Sie keinen absehbaren Termin für die Wiederverfügbarkeit nennen können. In diesem Fall sollte das Produkt bei rotem Lagerbestand den Status "rot nicht bestellbar" (red-hard) haben. Anstelle des Warenkorb-Buttons zeigen Sie dann den Button für die BackInStockMail an.

## Voraussetzung

Die dynamische Lagerbestandsverwaltung muss aktiviert sein. Ohne sie kennt der Shop keinen Lieferbarkeitsstatus, auf dessen Änderung er reagieren könnte.

Wegweiser: [Lagerbestand anzeigen](https://dokumentation.websale.de/v8s/lagerbestand/lagerbestand-anzeigen.md)

## Überblick über die Bausteine

Die Funktion besteht aus drei Templates, einer E-Mail und zwei Konfigurationsabschnitten. Verschaffen Sie sich zuerst diesen Überblick, dann ordnen sich die Integrationsschritte von selbst ein.

| Baustein | Zweck | Zuweisung |
| - | - | - |
| Produktdetailansicht `ws_product.htm` | trägt den Button zur Anmeldung | bereits vorhanden |
| Anmeldetemplate | fragt die Kontaktdaten ab | `<Templates>`, Parameter `InventoryRegister` |
| Bestätigungstemplate | bestätigt die Anmeldung | `<Templates>`, Parameter `InventoryRegisterConfirm` |
| E-Mail-Template | die Benachrichtigung selbst | `<OrderNowMail>`, Parameter `Template` |
| Übersichtstemplate (optional) | listet die angemeldeten Produkte | keine, wird per Link geladen |

Wie das Anmeldeformular erscheint, entscheiden Sie danach im Design. Möglich sind eine Weiterleitung auf eine eigene Shopseite, ein Pop-Up beziehungsweise Layer oder ein Bootstrap-Modal. Die technische Integration ist in allen drei Fällen dieselbe.

## Schritt 1: Service aktivieren

Setzen Sie in der Shopkonfiguration `shop.config` im Abschnitt `<OrderNowMail>` den Parameter `Allow` auf `yes`. Fehlt der Abschnitt, legen Sie ihn an. Er enthält später auch die Einstellungen der Benachrichtigungs-E-Mail.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<OrderNowMail>
   Allow             = yes
   ...
</OrderNowMail>
```

Referenz: [Abschnitt OrderNowMail](https://dokumentation.websale.de/v8s/referenz/konfigurationen/shopkonfiguration-shop-config/e-mails.md#ordernowmail)

## Schritt 2: Mindestbestand festlegen (optional)

Ohne diese Angabe verschickt der Shop die Benachrichtigung bereits, wenn ein einziges Stück verfügbar ist. Bei mehreren angemeldeten Käufern ist das Produkt dann sofort wieder vergriffen. Mit einem Mindestbestand verzögern Sie den Versand, bis genügend Ware da ist.

Ergänzen Sie dafür in der `shop.config` im Abschnitt `<Inventory>` den Parameter `OrderableMailStockLimit-Value`.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<Inventory>
   OrderableMailStockLimit-Value      = 10
   ...
</Inventory>
```

Referenz: [Abschnitt Inventory](https://dokumentation.websale.de/v8s/referenz/konfigurationen/shopkonfiguration-shop-config/produkte-katalog-und-suche.md#inventory)

## Schritt 3: E-Mail konfigurieren

Betreff, Absender und das zu verwendende Template stehen ebenfalls im Abschnitt `<OrderNowMail>`.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<OrderNowMail>
   ....
   Subject-Txt       = Ihr Produkt ist wieder verfügbar.
   SenderAddress     = email@ihr-shop.de
   SenderName        = Ihr Shop
   Template          = mail_backinstock.htm
   ...
</OrderNowMail>
```

> [!WARNING]
>
> `SenderAddress` und `Subject-Txt` sind Pflichtangaben. Fehlt eine der beiden oder ist sie leer, bricht der Shop den Versand ab und schreibt einen Fehler ins Log. Der Käufer erhält dann keine E-Mail, ohne dass dies im Shop sichtbar würde.

Referenz: [Abschnitt OrderNowMail](https://dokumentation.websale.de/v8s/referenz/konfigurationen/shopkonfiguration-shop-config/e-mails.md#ordernowmail)

## Schritt 4: E-Mail-Template erstellen

Legen Sie ein Template unter genau dem Namen an, der im Abschnitt `<OrderNowMail>` hinter `Template` steht, und speichern Sie es im Templateverzeichnis des jeweiligen Subshops, also beispielsweise unter `benutzer/templates/<Subshop>/`.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<body>
   ...
   {A-CompleteSalutation}
   ~A-CompleteSalutation~,
   {/A-CompleteSalutation}

   {!A-CompleteSalutation}
   Sehr geehrte Damen und Herren,
   {/!A-CompleteSalutation}
   das Produkt "~PR-Name~" (Produktnummer: ~PR-Number~) steht wieder zur Verfügung und kann bestellt werden.
   Bitte klicken Sie <a href="~PR-DeepLink~">hier</a>
   ...
</body>
```

Die Mail wird immer als HTML-Mail verschickt. Sie müssen dafür nichts ergänzen, der Shop kennzeichnet den Inhalt selbst entsprechend.

### Welche Tags erlaubt sind

Der Inhalt automatisch erzeugter E-Mails hängt davon ab, aus welchem Feature sie stammen. Die BackInStockMail kommt aus dem OrderNow-Modul, also stehen genau die Daten zur Verfügung, die dieses Modul beim Versand mitgibt. Andere Tags bleiben unersetzt im Text stehen.

| Tag | Inhalt |
| - | - |
| [`A-CompleteSalutation`](https://dokumentation.websale.de/v8s/referenz/tags/a-rechnungsadresse#weitere-tags) | vollständige Anrede, beispielsweise "Sehr geehrte Frau Musterfrau" |
| [`A-Salutation`](https://dokumentation.websale.de/v8s/referenz/konfigurationen/shopkonfiguration-shop-config/e-mails#ordernowmail) | nur die Anrede, beispielsweise "Frau" |
| [`A-FirstName`](https://dokumentation.websale.de/v8s/referenz/tags/a-rechnungsadresse) | Vorname |
| [`A-LastName`](https://dokumentation.websale.de/v8s/referenz/konfigurationen/shopkonfiguration-shop-config/e-mails#ordernowmail) | Nachname |
| `A-Email`, [`A-E-Mail`](https://dokumentation.websale.de/v8s/referenz/konfigurationen/shopkonfiguration-shop-config/e-mails#ordernowmail) | E-Mail-Adresse, beide Schreibweisen sind gleichwertig |
| [`PR-Name`](https://dokumentation.websale.de/v8s/referenz/tags/pr/grundlagen-und-produktdaten#die-tags-im-uberblick) | Produktname |
| [`PR-Number`](https://dokumentation.websale.de/v8s/referenz/tags/pr/grundlagen-und-produktdaten#die-tags-im-uberblick) | Produktnummer |
| [`PR-DeepLink`](https://dokumentation.websale.de/v8s/referenz/tags/pr/bilder-und-links#pr-deeplink-gehort-nicht-auf-ein-shoptemplate) | Link direkt zum Produkt, bei abhängigen Varianten zur konkreten Kombination |
| `URL-Template` | Basis-URL des Templateverzeichnisses, für Bild- und CSS-Pfade in der Mail |

Dieselben Tags werden auch im Betreff ersetzt. `Subject-Txt = ~PR-Name~ ist wieder verfügbar` ist damit möglich.

### Eigene Parameter an den Deep-Link hängen

Möchten Sie an `~PR-DeepLink~` eigene Parameter anhängen, legen Sie zuvor im Abschnitt `<OrderNowMail>` die optionalen Parameter `Referer` und `SubReferer` an.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<OrderNowMail>
   ...
   Referer           = backinstock
   SubReferer        = mail
   ...
</OrderNowMail>
```

Der Shop hängt daraus `ref=` und `subref=` an den Link an. Damit endet der Link garantiert auf einen Parameter, und Sie können weitere in der Form `&parameter=wert` anfügen.

`SubReferer` wirkt nur, wenn auch `Referer` gefüllt ist. Steht `Referer` leer, bleibt der Link unverändert.

Materialien: [URL-Parameter](https://dokumentation.websale.de/v8s/domains/grundlagen-domains-und-shop-aufruf.md#url-parameter)

## Schritt 5: Button auf der Produktdetailansicht einbauen

Über die Klammerung [`PR-InventoryState()`](https://dokumentation.websale.de/v8s/referenz/tags/pr/grundlagen-und-produktdaten) steuern Sie, bei welchem Lieferbarkeitsstatus die Anmeldung angeboten wird. Im folgenden Beispiel erscheint bei "rot nicht bestellbar" (red-hard) der Anmeldelink, in allen anderen Fällen der reguläre Warenkorb-Button.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{PR-Inventory}

   {!PR-InventoryState(red-hard)}
      <input type="text" name="~PR-Quantity_input~" value="~PR-Quantity~">
      <input type="submit" value="In den Warenkorb" onclick="return ws_AJAXaddToBasket('productform', '~BT-ProductAddToBasket_Ajax~', '~WS-Charset~')">
   {/!PR-InventoryState(red-hard)}

   {PR-InventoryState(red-hard)}
      Sie haben Interesse an diesem Produkt? Wir informieren Sie gerne unverbindlich via E-Mail, sobald es wieder verfügbar ist.
      Wenn Sie diesen Service nutzen möchten, <a href="~PR-InventoryRegisterLink~">bitte hier klicken.</a>
   {/PR-InventoryState(red-hard)}

{/PR-Inventory}
```

[`~PR-InventoryRegisterLink~`](https://dokumentation.websale.de/v8s/referenz/tags/pr/grundlagen-und-produktdaten) führt auf das Anmeldetemplate aus Schritt 7 und übergibt dabei das Produkt.

## Schritt 6: Templates in der Shopkonfiguration hinterlegen

Zwei Templates werden im Abschnitt `<Templates>` der `shop.config` zugewiesen: eines für die Abfrage der Kontaktdaten, eines für die Bestätigung.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<Templates>
   ...
   InventoryRegister                = ws_inventory_register.htm
   InventoryRegisterConfirm         = ws_inventory_register_confirm.htm
   ...
</Templates>
```

Referenz: [Abschnitt Templates](https://dokumentation.websale.de/v8s/referenz/konfigurationen/shopkonfiguration-shop-config/grundlagen-und-technik.md#templates)

## Schritt 7: Kontaktdaten abfragen

Legen Sie das Template unter dem Namen an, der hinter `InventoryRegister` steht.

Pflichtfeld ist ausschließlich die E-Mail-Adresse, denn nur sie wird für den Versand gebraucht. Alle weiteren Felder sind gemäß EU-Datenschutzgrundverordnung optional.

Ist der Käufer eingeloggt und hat damit der Verwendung seiner Daten zugestimmt, sind die übrigen Felder bereits vorausgefüllt. Meldet er sich anschließend für ein weiteres Produkt an, sind alle Felder gefüllt und er muss nichts erneut eingeben.

Zusätzlich können Sie Produktinformationen einbinden. Im folgenden Beispiel erscheinen Produktname und Preis über dem Formular.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<form action="~FORM-InventoryRegister~" method="post">

   ~MSG-InventoryRegister_Notify~

   {PR-Data}
      Produktname: ~PR-Name~
      Preis: ~PR-Price~ ~WS-CurrencySymbol~
   {/PR-Data}

   Anrede :   ~IR-SalutationList~
   Vorname :   <input type="text" size="30" maxlength="128" name="~IR-FirstName_input~" value="~IR-FirstName~">
   Nachname :   <input type="text" size="30" maxlength="128" name="~IR-LastName_input~" value="~IR-LastName~">
   E-Mail *:   <input type="text" size="30" maxlength="128" name="~IR-Email_input~" value="~IR-Email~">

   <input type="submit" value="absenden">

</form>
```

[`~MSG-InventoryRegister_Notify~`](https://dokumentation.websale.de/v8s/referenz/tags/msg-meldungen#weitere-meldungen) gibt die Meldungen des Shops aus, etwa bei fehlender oder ungültiger E-Mail-Adresse. Ohne dieses Tag bleibt eine abgelehnte Anmeldung für den Käufer unerklärlich.

Die `IR-`Tags treten paarweise auf: `~IR-Feldname_input~` liefert den Feldnamen für das Formular, `~IR-Feldname~` den bereits erfassten Wert.

## Schritt 8: Anmeldung bestätigen

Legen Sie das Template unter dem Namen an, der hinter `InventoryRegisterConfirm` steht. Spezielle Tags braucht es hier nicht, ein bestätigender Text genügt.

```text theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
Vielen Dank für Ihr Interesse an unserem Produkt.
Wir haben Ihre Anmeldung erhalten und werden Sie sofort per E-Mail informieren,
wenn Ihr gewünschtes Produkt wieder in unserem Onlineshop verfügbar ist.
```

## Schritt 9: Benachrichtigungs-E-Mail testen

Der Test läuft in zwei Stufen, weil die Darstellung und die Tag-Ersetzung getrennt geprüft werden.

### Darstellung prüfen

Öffnen Sie das E-Mail-Template im Browser, um zu sehen, ob die CSS-Anweisungen greifen. Hängen Sie dazu an ein Beispielprodukt den Parameter `tpl` mit dem Templatenamen an.

```text theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
https://www.<ihre-domain>.de/<Beispielprodukt>?tpl=mail_backinstock.htm
```

Dieser Aufruf zeigt ausschließlich die Ansicht. Die Tags werden dabei nicht ersetzt, und der Link zum Produkt lässt sich nicht anklicken.

### Funktion prüfen

Legen Sie ein Testprodukt mit dem Lagerbestand an, für den Sie den Service integriert haben. Rufen Sie es auf, füllen Sie das Formular aus und setzen Sie den Lagerbestand anschließend auf "grün". Daraufhin erhalten Sie die Benachrichtigung an die angegebene Adresse, mit ersetzten Tags und aktivem Produktlink.

## Angemeldete Produkte im Shop anzeigen

Optional zeigen Sie dem Käufer eine Liste der Produkte, für die er sich angemeldet hat, samt der Möglichkeit, einzelne Benachrichtigungen wieder abzubestellen.

### Übersichtstemplate anlegen

Legen Sie ein Template mit beliebigem Namen an, beispielsweise `ws_inventory_register_overview.htm`. Eine Zuweisung in der `shop.config` ist nicht nötig, das Template wird über einen Link geladen.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<h1>Benachrichtigung für ausverkaufte Produkte</h1>
<p>Hier finden Sie eine Übersicht der ausverkauften Produkte, bei denen Sie sich für eine Benachrichtigung angemeldet haben,
   wenn sie wieder verfügbar sind.</p>
<p>Möchten Sie diese Information für ein Produkt nicht mehr erhalten, dann können Sie die Benachrichtigung hier deaktivieren.</p>

{CAT-AdvData($InventoryRegister,999)}
   ~DC-FPAdvData_set(ProductsAvailable)~
   {@PR-Data}
      ~PR-Name~
      ...
      {PR-SetParent}
         {CAT-AdvData($SetProducts,999)}
            {@PR-Data}
               ~PR-Name~<br>
               ...
            {/@PR-Data}
         {/CAT-AdvData($SetProducts,999)}
      {/PR-SetParent}
      <a href="~PR-DeleteIRListEntry(ws_inventory_register_overview.htm)~">Produkt löschen</a><br>
      <hr>
   {/@PR-Data}
{/CAT-AdvData($InventoryRegister,999)}

{!DC-FPAdvData(ProductsAvailable)}
   Derzeit haben Sie keine Benachrichtigungen für ausverkaufte Produkte aktiviert.
{/!DC-FPAdvData(ProductsAvailable)}
```

Drei Stellen des Beispiels verdienen eine Erklärung:

* `{[CAT-AdvData](/v8s/referenz/tags/cat/navigation-und-kategoriebaum#die-tags-im-uberblick)($InventoryRegister,999)}` liefert die Anmeldungen als Produktliste, hier bis zu 999 Einträge. Die Schleife `{@[PR-Data](/v8s/referenz/tags/pr/grundlagen-und-produktdaten#die-tags-im-uberblick)}` durchläuft sie.
* Der freie Parameter `DC-FPAdvData` merkt sich, dass die Liste Einträge hatte. Nur so lässt sich unterhalb der Liste ein Text ausgeben, wenn sie leer war, denn die Klammerung selbst ist an dieser Stelle bereits geschlossen.
* `~PR-DeleteIRListEntry(...)~` erzeugt den Abmeldelink. Als Parameter geben Sie das Template an, auf das nach dem Löschen zurückgesprungen wird, hier also die Übersicht selbst.

Der Block `{PR-SetParent}` ist nur für Set-Produkte nötig. Er listet die enthaltenen Unterprodukte auf.

### Link auf die Übersicht setzen

Naheliegend ist das Kundenkonto `ws_user_account.htm`. Da ein Käufer für die Anmeldung aber nicht eingeloggt sein muss, können Sie den Link an beliebiger Stelle platzieren.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
...
{CAT-AdvData($InventoryRegister,999)}
   <a href="~WS-LoadTpl(ws_inventory_register_overview.htm)~">Benachrichtigungen für ausverkaufte Produkte</a>
{/CAT-AdvData($InventoryRegister,999)}
...
```

Die Klammerung sorgt dafür, dass der Link nur erscheint, wenn tatsächlich Anmeldungen vorliegen.

Prüfen Sie zum Abschluss beides: den Versand der BackInStockMail und die Anzeige der angemeldeten Produkte.

## Verwandte Themen

* Wegweiser: [Lagerbestand anzeigen](https://dokumentation.websale.de/v8s/lagerbestand/lagerbestand-anzeigen.md)
* Wegweiser: [Abhängige Varianten anzeigen](https://dokumentation.websale.de/v8s/abhaengige-varianten/abhaengige-varianten-anzeigen.md)


## Related topics

- [BackInStockMail im Modal abfragen](https://dokumentation.websale.de/v8s/anwendungsbeispiele/appex-backinstockmail-modal.md)
- [Lagerbestandsmeldung](https://dokumentation.websale.de/v8s/lagerbestand/lagerbestandsmeldung.md)
- [Ersatzprodukte (Subst-Links)](https://dokumentation.websale.de/v8s/zusatz-produkte/ersatzprodukte-subst-links.md)
- [Lagerbestand anzeigen](https://dokumentation.websale.de/v8s/lagerbestand/lagerbestand-anzeigen.md)
- [E-Mail-Benachrichtigungen: Übersicht](https://dokumentation.websale.de/v8s/e-mails/e-mail-benachrichtigungen-ueberblick.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.