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

# Fragebogen-Integration

> RxScale-Fragebögen in Ihren Onlineshop einbetten und Einreichungen verarbeiten

# Fragebogen-Integration

RxScale bietet einbettbare medizinische Fragebögen, die Patienteninformationen für ärztliche Konsultationen erfassen. Diese Fragebögen können über das RxScale Admin Tool erstellt und angepasst werden.

## Installation

Auf der Detailseite des Fragebogens im Admin Tool finden Sie ein Installationsskript. Fragebogen-Releases sind versioniert, sodass Sie neue Versionen sicher testen können.

Fügen Sie Folgendes zu Ihrer Seite hinzu:

```html theme={null}
<!-- Placeholder for the questionnaire -->
<div id="rxscale_questionnaire"></div>

<!-- Assign your questionnaire UID -->
<script>
  window.rxscale_questionnaire_uid = "YOUR_QUESTIONNAIRE_UID";
</script>

<!-- Main JS for rendering -->
<script defer src="https://snippets.rxscale.com/v2.7/index.js"></script>

<!-- Default styling -->
<link href="https://snippets.rxscale.com/v2.7/index.css" rel="stylesheet" />

<!-- Optional: Custom styling -->
<link href="https://customizations.rxscale.com/YOUR_QUESTIONNAIRE_UID/css/customization.css" rel="stylesheet" />
```

<Note>
  Ersetzen Sie `YOUR_QUESTIONNAIRE_UID` durch die UID von der Detailseite Ihres Fragebogens im Admin Tool.
</Note>

RxScale rendert den Fragebogen automatisch und reagiert auf den konfigurierten Typ:

* **Product Recommender** — Zeigt einen Empfehlungsablauf basierend auf den Antworten des Patienten an
* **Direct To Cart** — Leitet den Benutzer nach Abschluss zum Warenkorb weiter (sofern nicht anders konfiguriert)

## Event Hooks

RxScale unterstützt optionale JavaScript-Hooks, die bei bestimmten Ereignissen ausgelöst werden. Diese Hooks sind unabhängig und modular.

### Window Event Handler

Nach einer erfolgreichen Fragebogen-Einreichung ruft RxScale einen Callback namens `rxscaleQuestionnaireCompleted` auf:

```javascript theme={null}
window.rxscaleQuestionnaireCompleted = ({ submissionId }) => {
  // Custom logic, e.g., redirect or analytics
};
```

### DataLayer (Google Tag Manager)

RxScale überträgt strukturierte Events in das `dataLayer`-Objekt für die Google Tag Manager-Integration. Events werden bei Seitenübergängen und nach Abschluss des Fragebogens ausgelöst.

Verfügbare Variablen:

* `nextStep` — Kennung des nächsten Schritts
* `previousStep` — Kennung des vorherigen Schritts
* `stepName` — Name des aktuellen Schritts
* `questionnaireVersion` — Fragebogen-Version
* `questionnaireName` — Fragebogen-Name
* `questionnaireId` — Fragebogen-UID

### Klaviyo-Integration

<Note>
  Das Klaviyo-Snippet muss auf Ihrer Webseite installiert sein, damit diese Integration funktioniert.
</Note>

Wenn ein Benutzer einen Fragebogen beantwortet, können seine Antwortdaten ein Klaviyo-Profil identifizieren oder ein Event über das vorhandene Klaviyo-SDK auf Ihrer Seite auslösen.

### Helium-Integration

<Note>
  Das Helium-Snippet muss auf Ihrer Webseite installiert sein, damit diese Integration funktioniert.
</Note>

Benutzerantworten können ein Helium-Konto identifizieren oder erstellen und Funktionen wie das Vorausfüllen von Anmeldefeldern basierend auf zuvor eingereichten Antworten ermöglichen.

## Einreichungen mit Bestellungen verknüpfen

Um eine Fragebogen-Einreichung mit einer Shopify-Bestellung zu verknüpfen, fügen Sie identifizierende Metadaten in die Bestellung ein. Die erforderlichen Informationen können auf Bestellebene oder innerhalb jeder Bestellposition gespeichert werden.

### Erforderliche Eigenschaften

| Eigenschaft                       | Erforderlich für   | Beschreibung                                 |
| --------------------------------- | ------------------ | -------------------------------------------- |
| `_anamnesis_uid`                  | RxScale-Fragebögen | Verknüpft die Einreichung mit der Bestellung |
| `_external_submission_identifier` | Externe Anbieter   | Ihre externe Einreichungs-ID                 |
| `_external_provider_uid`          | Externe Anbieter   | Ihre externe Anbieter-UID                    |

<Warning>
  Die Eigenschaftsnamen müssen **exakt** übereinstimmen. RxScale vergleicht sie Zeichen für Zeichen und unterscheidet zwischen Groß- und Kleinschreibung. `_anamnesis_uid` (und jeder andere Schlüssel oben) muss daher genau wie angegeben geschrieben werden — keine Tippfehler, keine abweichende Groß-/Kleinschreibung, keine führenden oder nachfolgenden Leerzeichen und kein fehlender oder zusätzlicher Unterstrich. Stimmt ein Name nicht exakt überein, ignoriert RxScale ihn stillschweigend und die Einreichung wird **nicht** mit der Bestellung verknüpft.
</Warning>

<Warning>
  Wenn sowohl Eigenschaften auf Bestellebene als auch auf Positionsebene vorhanden sind, hat die **Eigenschaft auf Positionsebene Vorrang**.
</Warning>

### Beispiel: RxScale-Fragebogen

```javascript theme={null}
fetch('/cart/update.js', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    attributes: {
      _anamnesis_uid: "SUBMISSION_UID"
    }
  })
});
```

### Beispiel: Externer Fragebogen-Anbieter

```javascript theme={null}
fetch('/cart/update.js', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    attributes: {
      _external_submission_identifier: "YOUR_EXTERNAL_ID",
      _external_provider_uid: "YOUR_PROVIDER_UID"
    }
  })
});
```

<Tip>
  Das Speichern von `_anamnesis_uid` auf Bestellebene ermöglicht es Shopify, Bestellungen bei Bedarf zu duplizieren (z. B. über die Nachbestellfunktion).
</Tip>

## Apothekenauswahl

Um eine ausgewählte Apotheke mit einer Einreichung zu verknüpfen, senden Sie die Apothekeninformationen an die RxScale-API:

```javascript theme={null}
fetch(`https://api.rxscale.com/api/v3-1/anamnesis/${anamnesis_uid}/attributes/pharmacy`, {
  method: 'PUT',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    key: "pharmacy_email",
    value: pharmacyEmail,    // empty string if pharmacy uses API integration
    pharmacy_uid: pharmacyUid
  })
});
```

<Note>
  Wenn die ausgewählte Apotheke Daten über eine API-Integration erhält (keine E-Mail), übergeben Sie einen leeren String für das Feld `value`.
</Note>

## Patientenstatus-Prüfung

Prüfen Sie nach dem Shopify-Login, wann ein Patient zuletzt eine Anamnese unterzeichnet hat, anhand seiner Kunden-ID:

```javascript theme={null}
const response = await fetch(
  "https://api.rxscale.com/api/v0/patient/intent" +
  "?shop_customer_id=CUSTOMER_ID" +
  "&shop_identifier=YOUR_SHOP" +
  "&intent=INTENT_NAME"
);
const data = await response.json();
console.log(data.return_code);
```

<Note>
  Der Fragebogen muss im Admin Tool mit dem Intent getaggt sein, damit dies funktioniert.
</Note>

### Rückgabecodes

| Code  | Bedeutung                                                                               |
| ----- | --------------------------------------------------------------------------------------- |
| `100` | Keine vorherige Einreichung, oder letzte unterzeichnete Einreichung älter als 24 Monate |
| `200` | Letzte unterzeichnete Einreichung liegt zwischen 12 und 24 Monaten zurück               |
| `300` | Letzte unterzeichnete Einreichung liegt innerhalb der letzten 12 Monate                 |

Beispielantwort:

```json theme={null}
{
  "return_code": 300
}
```

## Akquise-Funnel-Auswertung

Das Admin-Tool stellt einen Fragebogen-**Akquise-Funnel** bereit — eingereicht → Bestellung aufgegeben → Bestellung abgeschlossen —, der misst, wie anonyme Fragebogeneinreichungen zu Bestellungen konvertieren. Eine Einreichung wird über die daraus entstandene Bestellposition mit einer Bestellung verknüpft.

<Warning>
  Fragebogeneinreichungen, die bereits einem Patienten zugeordnet sind, werden vom Funnel **ausgeschlossen**. Sie stellen bestehende Patienten und keine Neuakquise dar; ihre Einbeziehung würde die Konversionsraten verfälschen. Es werden nur anonyme Akquise-Einreichungen gezählt, und der Funnel wird auf Organisationsebene ausgewiesen (Akquise-Einreichungen sind erst nach Aufgabe einer Bestellung an einen einzelnen Shop gebunden).
</Warning>
