> ## 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.

# TAF- (Tell-A-Friend)

> Bestandskunden empfehlen Produkte über einen persönlichen Link weiter. Die vier TAF-Tags erzeugen diesen Link und zeigen im Shop an, ob der Besucher geworben wurde. Mit Konfiguration, Prüfkette und Übergabe an die Warenwirtschaft.

Ein angemeldeter Bestandskunde bekommt im Shop einen persönlichen Empfehlungslink. Gibt er diesen Link weiter und bestellt der Empfänger daraufhin, dann stehen in den Bestelldaten der Werbende und der Geworbene nebeneinander. Was daraus wird, also Treuepunkte, Prämien oder Geschenke, entscheidet die Warenwirtschaft.

Das Shopsystem übernimmt dabei genau drei Aufgaben: es erzeugt den Empfehlungslink, es merkt sich den Werbenden in der Sitzung und auf Wunsch im Cookie, und es schreibt die Empfehlungsinformation in die Bestelldaten. Es vergibt selbst keine Prämien, führt keine Statistik und verschickt keine Einladungsmails.

## So läuft eine Empfehlung ab

1. Der Bestandskunde meldet sich an und ruft eine Seite auf, auf der Sie den Empfehlungslink eingebaut haben. Das Shopsystem verschlüsselt seine Kennung und hängt sie als URL-Parameter an den Link.
2. Er gibt den Link weiter, über welchen Kanal auch immer.
3. Der Empfänger ruft den Link auf. Das Shopsystem entschlüsselt den Parameter, prüft ihn und merkt sich den Werbenden in der Sitzung.
4. Der Empfänger bestellt. In die Bestelldaten kommen die Kennung und die Kundennummer des Werbenden.
5. Die Warenwirtschaft liest die Bestellung und startet ihren eigenen Freundschaftswerbung-Prozess.

Die Funktion steht ab Release-Version 82 zur Verfügung und muss nicht freigeschaltet werden. Die Übergabe an eine Warenwirtschaft oder ein ERP-System lässt sich jedoch nicht über den WSP Manager abbilden, dafür ist ein Connector-Modul nötig. Ohne dieses Modul erzeugt der Shop zwar Links und erkennt Werbende, die Information bleibt aber in den Bestelldaten liegen. Wenden Sie sich für das Connector-Modul an Ihren WEBSALE Ansprechpartner.

## Shopkonfiguration

Tragen Sie den Abschnitt `TellAFriend` in die Shopkonfiguration shop.config ein. Die folgenden Werte entsprechen den Standardwerten.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<TellAFriend>
   Allow            = yes
   AttributionModel = last-touch
   CookieDays       = 0
</TellAFriend>
```

| Parameter | Bedeutung | Werte |
| - | - | - |
| `Allow` | Steuert, ob die Werber-Informationen in die Bestelldaten geschrieben werden. Bei `no` unterbleibt der Eintrag vollständig. | `yes`, `no`. Standard `yes` |
| `AttributionModel` | Bestimmt, welcher Werbende gilt, wenn mehrere Empfehlungslinks in einer Sitzung aufgerufen werden. `last-touch` lässt den zuletzt aufgerufenen Link gewinnen, `first-touch` behält den ersten Werbenden und verwirft spätere Links. | `last-touch`, `first-touch`. Standard `last-touch` |
| `CookieDays` | Lebensdauer des Cookies in Tagen. Bei `0` gilt die Zuordnung nur für die laufende Sitzung. Bei einem Wert größer `0` wird der Werbende auch bei einem späteren Besuch noch erkannt. | Ganzzahl. Standard `0` |

> [!WARNING]
>
> `Allow` wirkt ausschließlich auf das Schreiben der Bestelldaten. Bei `Allow = no` erzeugt das Shopsystem weiterhin Empfehlungslinks, erkennt Werbende und beantwortet alle `TAF-`Tags wie gewohnt. Nur die beiden Zeilen in der Bestellung fehlen. Wenn Sie die Funktion im Shop vollständig abschalten wollen, entfernen Sie zusätzlich den Empfehlungslink aus den Templates.

### Cookie und Einwilligung

Setzen Sie `CookieDays` auf einen Wert größer `0`, dann registrieren Sie den Cookie im Abschnitt `AgreementCookies` der Shopkonfiguration shop.config als WEBSALE-Service.

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

Ohne vorliegende Einwilligung schreibt das Shopsystem den Cookie nicht und liest ihn auch nicht aus. Die Zuordnung des Werbenden funktioniert dann weiterhin, aber nur innerhalb der laufenden Sitzung. Erteilt der Besucher die Einwilligung später im selben Besuch, wird der Cookie nachträglich geschrieben.

Referenz: [Abschnitt TellAFriend, Abschnitt AgreementCookies](https://dokumentation.websale.de/v8s/referenz/konfigurationen/shopkonfiguration-shop-config/externe-dienste-und-schnittstellen.md#tellafriend)

## Den Empfehlungslink im Template erzeugen

Der Empfehlungslink ist ein gewöhnlicher Shop-Link mit einem zusätzlichen Parameter. Den Parameternamen liefert `TAF-Name`, den verschlüsselten Wert `TAF-Value`. Zusammengebaut wird beides mit den `DC-CustomLink`-Tags.

Weil nur angemeldete Kunden empfehlen können, gehört der Link in eine Klammerung mit `ST-LoggedIn`. Das folgende Beispiel hängt den Link an die Produktdetailansicht ws\_product.htm.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{PR-Data}
   ...
   {ST-LoggedIn}
      ~DC-CustomLink_SetLink($PR-Link$)~
      ~DC-CustomLink_AppendParameter($TAF-Name$,$TAF-Value$)~

      <a href="~DC-CustomLink~">Dieses Produkt weiterempfehlen</a>
   {/ST-LoggedIn}
   ...
{/PR-Data}
```

Der fertige Link sieht dann so aus:

```text theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
https://www.ihrshop.de/ws_product.htm?...&taf=4f3a1c...e9b2
```

Die Klammerung `{TAF-Value}` greift genau dann, wenn ein Kunde angemeldet ist, und ist damit an dieser Stelle gleichbedeutend mit `{ST-LoggedIn}`. Sie können den Block statt mit `ST-LoggedIn` auch mit `TAF-Value` klammern, wenn das im Template besser liest. Beides zugleich ist nicht nötig.

> [!WARNING]
>
> Der Empfehlungslink funktioniert nur in dem Shop, in dem er erzeugt wurde. Die Shopkennung steckt verschlüsselt im Parameter und wird beim Aufruf gegen den aufgerufenen Shop geprüft. Ein Link aus dem deutschen Shop greift in einem anderen Shop der Mall nicht.

Referenz: [PR-Data, ST-LoggedIn, DC-CustomLink\_SetLink(), DC-CustomLink\_AppendParameter(), DC-CustomLink](https://dokumentation.websale.de/v8s/referenz/tags/pr/grundlagen-und-produktdaten.md#die-tags-im-uberblick)

## Was beim Aufruf des Empfehlungslinks passiert

Das Shopsystem nimmt den Parameter `taf` aus der URL entgegen und prüft ihn in mehreren Schritten, bevor es den Werbenden in die Sitzung schreibt.

| Prüfung | Der Link greift nicht, wenn … |
| - | - |
| Attribution | `AttributionModel = first-touch` konfiguriert ist und bereits ein Werbender in der Sitzung steht |
| Zeichenvorrat und Länge | der Parameterwert andere Zeichen als Hexadezimalziffern und Bindestrich enthält oder zu lang ist |
| Entschlüsselung | der Wert nicht entschlüsselbar ist, etwa weil er beim Weitergeben abgeschnitten oder verändert wurde |
| Shop-Bindung | der Link in einem anderen Shop erzeugt wurde |
| Eigenwerbung | der angemeldete Besucher selbst der Werbende ist |
| Kundenkonto | das Kundenkonto des Werbenden nicht mehr existiert oder nicht mehr aktiv ist |

> [!WARNING]
>
> Alle diese Fälle werden stillschweigend verworfen. Es gibt keine Fehlermeldung und keinen Hinweis im Template, der Besucher landet einfach auf einer Seite ohne Werbenden. Im Log erscheint ein Eintrag der Stufe Info. Zur Kontrolle beim Testen eines Links verwenden Sie `TAF-UserIndex`.

Der Fall Eigenwerbung wird zweimal geprüft: beim Aufruf des Links und noch einmal unmittelbar vor dem Schreiben der Bestellung. Damit ist auch der Weg abgedeckt, dass jemand seinen eigenen Link abmeldet aufruft und sich erst danach anmeldet.

### Woher der Werbende stammt

Das Shopsystem sucht den Werbenden zuerst im URL-Parameter. Steht dort nichts, liest es den Cookie aus, und zwar nur dann, wenn in der Sitzung noch kein Werbender steht und die Einwilligung vorliegt. Der Cookie wird nur erneuert, wenn der Wert aus der URL kam und `CookieDays` größer `0` ist.

Die Kundennummer des Werbenden steht nicht im Link. Im verschlüsselten Parameter stecken die Shopkennung, die interne Kundenkennung und ein Zeitstempel. Die Kundennummer holt das Shopsystem aus dem Kundenkonto, sobald sie gebraucht wird.

### Wie lange die Zuordnung gilt

Ein erkannter Werbender gilt für genau eine Bestellung. Nach einer erfolgreichen Bestellung setzt das Shopsystem die Zuordnung zurück und löscht den Cookie, auch wenn `CookieDays` eine längere Lebensdauer vorsieht. Ein zweiter Einkauf zählt also nicht noch einmal auf denselben Werbenden ein, solange nicht erneut ein Empfehlungslink aufgerufen wird.

## Die Bestelldaten

Steht `Allow = yes` und ist ein Werbender erkannt, dann schreibt das Shopsystem zwei zusätzliche Zeilen in den Abschnitt `Order` der Bestelldaten.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<Order>
   ...
   TellAFriend_UserIndex      = 48213
   TellAFriend_CustomerNumber = K-100043
   ...
</Order>
```

| Feld | Inhalt |
| - | - |
| `TellAFriend_UserIndex` | die interne Kundenkennung des Werbenden im Shopsystem |
| `TellAFriend_CustomerNumber` | die Kundennummer des Werbenden aus dem Kundenkonto |

Beide Zeilen erscheinen immer gemeinsam oder gar nicht. Ist kein Werbender erkannt, fehlen sie vollständig, es werden keine leeren Felder geschrieben. Ihre Warenwirtschaft prüft deshalb auf das Vorhandensein des Feldes und nicht auf einen leeren Wert.

## TAF-Name

Liefert den Namen des URL-Parameters, über den die verschlüsselte Empfehlungsinformation übergeben wird. Der Wert ist fest und lautet `taf`.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{ST-LoggedIn}
   ~DC-CustomLink_SetLink($PR-Link$)~
   ~DC-CustomLink_AppendParameter($TAF-Name$,$TAF-Value$)~

   <a href="~DC-CustomLink~">Dieses Produkt weiterempfehlen</a>
{/ST-LoggedIn}
```

Verwenden Sie `TAF-Name`, statt `taf` fest in das Template zu schreiben. Ändert sich der Parametername in einer künftigen Version des Shopsystems, dann ziehen Ihre Templates automatisch mit.

| Verwendbar als | Einzel-Tag | Bereichs-Tag | negatives Bereichs-Tag | Schleifen-Tag |
| - | - | - | - | - |
| `TAF-Name` | ja | – | – | – |

Zulässig in allen Templates.

## TAF-Value

Liefert den verschlüsselten Wert, der hinter dem Parameternamen im Empfehlungslink steht. Darin stecken die Shopkennung, die interne Kundenkennung des angemeldeten Kunden und ein Zeitstempel. Der Wert ist hexadezimal kodiert und damit ohne weitere Kodierung in einer URL verwendbar.

Als Klammerung greift das Tag, wenn ein Kunde angemeldet ist.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{TAF-Value}
   ~DC-CustomLink_SetLink($PR-Link$)~
   ~DC-CustomLink_AppendParameter($TAF-Name$,$TAF-Value$)~

   <a href="~DC-CustomLink~">Dieses Produkt weiterempfehlen</a>
{/TAF-Value}

{!TAF-Value}
   <p>Melden Sie sich an, um dieses Produkt weiterzuempfehlen.</p>
{/!TAF-Value}
```

Der verschlüsselte Wert wird einmal je Sitzung erzeugt und danach wiederverwendet. Alle Empfehlungslinks einer Sitzung tragen deshalb denselben Wert, unabhängig davon, auf welche Seite sie zeigen. Nach einer Abmeldung beginnt eine neue Sitzung und damit ein neuer Wert.

> [!WARNING]
>
> Schlägt die Verschlüsselung fehl, dann gibt das Einzel-Tag nichts aus und meldet keinen Fehler. Im Template entsteht dann ein Link mit leerem Parameter, der beim Aufruf verworfen wird. Prüfen Sie beim Einrichten einen erzeugten Link daraufhin, dass hinter `taf=` tatsächlich ein Wert steht.

| Verwendbar als | Einzel-Tag | Bereichs-Tag | negatives Bereichs-Tag | Schleifen-Tag |
| - | - | - | - | - |
| `TAF-Value` | ja | ja | ja | – |

Zulässig in allen Templates.

## TAF-IsSet

Greift, wenn in der laufenden Sitzung ein Werbender erkannt wurde, der Besucher den Shop also über einen gültigen Empfehlungslink betreten hat. Damit blenden Sie Hinweise ein, die nur für Geworbene gelten.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{TAF-IsSet}
   <p>Sie wurden empfohlen. Ihre Prämie wird nach der Bestellung gutgeschrieben.</p>
{/TAF-IsSet}

{!TAF-IsSet}
   <p>Noch keine Empfehlung hinterlegt.</p>
{/!TAF-IsSet}
```

> [!WARNING]
>
> `TAF-IsSet` ist ausschließlich eine Klammerung. Als Einzel-Tag `~TAF-IsSet~` meldet das Shopsystem ein ungültiges Tag.

| Verwendbar als | Einzel-Tag | Bereichs-Tag | negatives Bereichs-Tag | Schleifen-Tag |
| - | - | - | - | - |
| `TAF-IsSet` | – | ja | ja | – |

Zulässig in allen Templates.

## TAF-UserIndex

Gibt die interne Kundenkennung des Werbenden aus. Als Klammerung greift das Tag, wenn ein Werbender gesetzt ist, und verhält sich damit wie `TAF-IsSet`.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{TAF-UserIndex}
   <!-- Werbender: ~TAF-UserIndex~ -->
{/TAF-UserIndex}

{!TAF-UserIndex}
   <!-- Kein Werbender in der Sitzung -->
{/!TAF-UserIndex}
```

Das Tag ist für die Fehlersuche gedacht. Über die ausgegebene Kennung lässt sich beim Testen eines Empfehlungslinks feststellen, ob der richtige Werbende erkannt wurde, und der Kunde in der Warenwirtschaft nachschlagen. Für die Besucher des Shops hat die Zahl keine Bedeutung, geben Sie sie deshalb nur im Kommentar oder auf einer internen Testseite aus.

| Verwendbar als | Einzel-Tag | Bereichs-Tag | negatives Bereichs-Tag | Schleifen-Tag |
| - | - | - | - | - |
| `TAF-UserIndex` | ja | ja | ja | – |

Zulässig in allen Templates.

## Die Tags im Überblick

| Tag | Einzel-Tag | Bereichs-Tag | negatives Bereichs-Tag | Schleifen-Tag |
| - | - | - | - | - |
| `TAF-Name` | ja | – | – | – |
| `TAF-Value` | ja | ja | ja | – |
| `TAF-IsSet` | – | ja | ja | – |
| `TAF-UserIndex` | ja | ja | ja | – |

## Fehlersuche

| Beobachtung | Mögliche Ursache |
| - | - |
| Der Link enthält kein `taf=` | Der Kunde ist nicht angemeldet. `TAF-Value` liefert nur für angemeldete Kunden einen Wert. |
| Hinter `taf=` steht nichts | Die Verschlüsselung ist fehlgeschlagen. Das Tag gibt in diesem Fall stillschweigend nichts aus. |
| `TAF-IsSet` greift nicht | Eine der Prüfungen beim Aufruf hat den Link verworfen. Die Tabelle im Abschnitt zum Aufruf des Empfehlungslinks nennt die Fälle. |
| `TAF-IsSet` greift beim eigenen Link nicht | Eigenwerbung wird abgewiesen. Testen Sie mit einem zweiten Kundenkonto oder abgemeldet. |
| Nach einem zweiten Link steht noch der erste Werbende | `AttributionModel = first-touch` ist konfiguriert. |
| Nach einem Neustart des Browsers ist der Werbende weg | `CookieDays = 0`, oder die Einwilligung für den Cookie liegt nicht vor. |
| Nach einer Bestellung ist der Werbende weg | Das ist so vorgesehen. Die Zuordnung gilt für genau eine Bestellung. |
| Die Bestelldaten enthalten keine TAF-Felder | `Allow = no`, oder es war kein Werbender erkannt. |


## Related topics

- [DC- (Vergleiche und weitere Tags)](https://dokumentation.websale.de/v8s/referenz/tags/dc/vergleiche.md)
- [Externe Dienste und Schnittstellen](https://dokumentation.websale.de/v8s/referenz/konfigurationen/shopkonfiguration-shop-config/externe-dienste-und-schnittstellen.md)
- [Verwendete Cookies](https://dokumentation.websale.de/v8s/referenz/verwendete-cookies.md)
- [Materialien Einwilligung zur Datenverarbeitung](https://dokumentation.websale.de/v8s/materialien/materialien-einwilligung-zur-datenverarbeitung.md)
- [FRIENDLYCAPTCHAV1- (Friendly Captcha)](https://dokumentation.websale.de/v8s/referenz/tags/friendlycaptchav1.md)


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