Zum Inhalt

Embedded VAPI

Die Embedded VAPI ist nur für IC-Webseiten gedacht, Sie funktioniert nur im Tablet Browser. Sie nutzt keine HTTP-Requests. Eine eingebettete Webseite sendet stattdessen eine Nachricht an das Tablet und erhält die Antwort wieder per postMessage.

Premium-Endpunkte

Alle Embedded-VAPI-Funktionen sind nur mit Premium-Zugriff verfügbar.

Ablauf

Die Webseite sendet den Request an das Parent-Window:

window.parent.postMessage(
    {
        function: 'getPlayerName',
        apiKey: '<API-Key>',
        requestId: 'request-1',
        payload: {},
    },
    '*'
);

Die Antwort kommt als Message zurück:

window.addEventListener('message', (event) => {
    const response = event.data;
    if (!response || response.requestId !== 'request-1') return;

    console.log(response);
});

Request

Feld Typ Pflicht Beschreibung
function string Ja Name der Embedded-VAPI-Funktion
apiKey string Ja API-Key aus dem VNET
requestId string Nein Eigene ID, um Antworten Requests zuzuordnen
payload object Nein Funktionsspezifische Daten

Response

Erfolgreiche Responses haben immer ok: true und enthalten die Nutzdaten in payload.

{
    "function": "getPlayerName",
    "ok": true,
    "requestId": "request-1",
    "payload": {
        "playerName": "Max_Musterbrötchen"
    }
}

Fehlerhafte Responses haben ok: false und enthalten eine Fehlermeldung in error.

{
    "function": "getPlayerName",
    "ok": false,
    "requestId": "request-1",
    "error": "No valid API Key"
}

Funktionen

Spielername

Premium-Endpunkt

Dieser Endpunkt ist nur mit Premium-Zugriff verfügbar.

MESSAGE getPlayerName

Liefert den Charakternamen des Spielers, in dessen Tablet die Webseite geöffnet ist.

Request-Beispiel

window.parent.postMessage(
    {
        function: 'getPlayerName',
        apiKey: '<API-Key>',
        requestId: 'name-1',
        payload: {},
    },
    '*'
);

Response-Beispiel

{
    "function": "getPlayerName",
    "ok": true,
    "requestId": "name-1",
    "payload": {
        "playerName": "Max_Musterbrötchen"
    }
}

Telefonnummern

Premium-Endpunkt

Dieser Endpunkt ist nur mit Premium-Zugriff verfügbar.

MESSAGE getPlayerPhoneNumbers

Liefert die Telefonnummern des Spielers und die aktuell aktive Telefonnummer.

Request-Beispiel

window.parent.postMessage(
    {
        function: 'getPlayerPhoneNumbers',
        apiKey: '<API-Key>',
        requestId: 'phone-1',
        payload: {},
    },
    '*'
);

Response-Beispiel

{
    "function": "getPlayerPhoneNumbers",
    "ok": true,
    "requestId": "phone-1",
    "payload": {
        "phoneNumbers": ["1822-1234567", "1822-7654321"],
        "activeNumber": "1822-1234567"
    }
}

VNET-Mail senden

Premium-Endpunkt

Dieser Endpunkt ist nur mit Premium-Zugriff verfügbar.

MESSAGE sendMailMessage

Sendet eine Nachricht an eine VNET-Mailadresse.

Payload

Feld Typ Pflicht Beschreibung
receiverMail string Ja Zieladresse, zum Beispiel name@statev.de
msg string Ja Nachrichtentext

Request-Beispiel

window.parent.postMessage(
    {
        function: 'sendMailMessage',
        apiKey: '<API-Key>',
        requestId: 'mail-1',
        payload: {
            receiverMail: 'max_brötchenmann@statev.de',
            msg: 'Hallo aus der Embedded VAPI.',
        },
    },
    '*'
);

Response-Beispiel

{
    "function": "sendMailMessage",
    "ok": true,
    "requestId": "mail-1",
    "payload": {
        "message": "send"
    }
}

Fehler-Beispiele

Fehlt receiverMail, antwortet die Funktion aktuell mit einem Fehlerobjekt im Payload:

{
    "function": "sendMailMessage",
    "ok": true,
    "requestId": "mail-1",
    "payload": {
        "error": "No Receiver Mail"
    }
}

Fehlt msg, ist die Response entsprechend:

{
    "function": "sendMailMessage",
    "ok": true,
    "requestId": "mail-1",
    "payload": {
        "error": "No Message"
    }
}

Vollständiges Beispiel

<button id="loadName">Spielername laden</button>
<pre id="output"></pre>

<script>
    const output = document.getElementById('output');
    const pending = new Map();

    function callEmbeddedVapi(functionName, payload = {}) {
        const requestId = `${functionName}-${Date.now()}`;
        pending.set(requestId, functionName);

        window.parent.postMessage(
            {
                function: functionName,
                apiKey: '<API-Key>',
                requestId,
                payload,
            },
            '*'
        );
    }

    window.addEventListener('message', (event) => {
        const response = event.data;
        if (!response || !pending.has(response.requestId)) return;

        pending.delete(response.requestId);
        output.textContent = JSON.stringify(response, null, 2);
    });

    document.getElementById('loadName').addEventListener('click', () => {
        callEmbeddedVapi('getPlayerName');
    });
</script>