Entwicklerdokumentation

Nachrichten

Im Namen eines Gastes eine Unterhaltung mit der Location beginnen – ein serverseitiger Aufruf öffnet einen Thread, den die Location in der Konsole beantwortet.

Ein Gast mit einer Frage – „Ist die Eventfläche am 24. für achtzehn Personen frei?“ – sollte nicht anrufen müssen. Dieser Endpunkt öffnet einen Unterhaltungs-Thread mit der Location; die Location antwortet aus der Konsole, und der Gast erhält die Antwort per E-Mail. Er folgt denselben Schlüssel- und CORS-Regeln wie jede andere Route unter /api/venues/** (CORS und Preflight) – ein veröffentlichbarer Schlüssel mit einem Origin-Header funktioniert wie überall sonst aus dem Browser. Empfohlen bleibt trotzdem der serverseitige Aufruf mit einem geheimen Schlüssel: Die E-Mail-Adresse und der Freitext eines Gasts gehören besser hinter Ihr eigenes Formular mit eigenen Maßnahmen gegen Missbrauch als direkt an einen Schlüssel auf der Seite.

Endpunkte

POST /api/venues/{venueSlug}/messages

Request-Body (Content-Type: application/json)

Feld Erforderlich Bedeutung
guestName ja Bis 120 Zeichen
guestEmail ja Eine gültige E-Mail-Adresse – dorthin geht die Antwort
subject ja Bis 200 Zeichen
body ja Bis 4000 Zeichen

Antwort 202 Accepted – der Thread existiert und die Location wurde benachrichtigt. Der Body enthält die Thread-Id für Ihre eigenen Unterlagen; einen öffentlichen Lese-Endpunkt für Threads gibt es nicht.

{
  "threadId": "f0c5853d-97e9-4744-a0d3-dda85e1f3f3a"
}

Fehler

Status Wann
400 Ein Feld ist leer, keine E-Mail-Adresse oder zu lang (errors.message)
403 Der Tarif der Location enthält keine Gastnachrichten – bieten Sie stattdessen Telefon oder E-Mail der Location aus business-info an
404 Keine Location mit diesem Slug

curl

curl -X POST "https://api.bookdineplay.com/api/venues/your-venue/messages" \
  -H "Authorization: Bearer $BOOKDINEPLAY_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "guestName": "Ada Lovelace", "guestEmail": "ada@example.com", "subject": "Private event on 24 October?", "body": "We are 18 people — is the event area free that evening?" }'

JavaScript

// Node.js auf Ihrem Server – der Schlüssel kommt aus der Umgebung, nie aus der Seite.
const response = await fetch('https://api.bookdineplay.com/api/venues/your-venue/messages', {
  method: 'POST',
  headers: { 'Authorization': `Bearer ${process.env.BOOKDINEPLAY_SECRET_KEY}`, 'Content-Type': 'application/json' },
  body: JSON.stringify({ guestName, guestEmail, subject, body })
});
if (response.status === 403) { /* Nachrichten für diese Location nicht verfügbar */ }

C#

var result = await client.StartConversationAsync("your-venue", new StartConversationRequest(
    "Ada Lovelace", "ada@example.com", "Private event on 24 October?",
    "We are 18 people — is the event area free that evening?"), cancellationToken);
if (result.Status != StartConversationStatus.Sent) { /* NotAvailable, Invalid oder Failed */ }

Die curl- und JavaScript-Beispiele senden einen geheimen Schlüssel und keinen Origin-Header – die empfohlene serverseitige Form. Ein veröffentlichbarer Schlüssel mit Origin-Header wird ebenso angenommen, genau wie bei jeder anderen Route unter /api/venues/**; abgelehnt wird nur ein veröffentlichbarer Schlüssel ohne Origin, mit publishable-key-without-origin (Fehler).

Nächste Schritte

  • .NET-SDKStartConversationAsync meldet das Ergebnis als Status statt zu werfen.
  • Venue – Telefon und E-Mail der Location für den 403-Fall.