Zum Hauptinhalt springen
telli calendar integrations Wir bieten flexible Kalender-Integrationsoptionen, um Termine effizient über unser System zu verwalten.

In der telli-App

Um einen Kalender mit deinem Agenten zu verbinden, navigiere zu den Einstellungen deines Agenten und finde den Abschnitt Kalender-Integration. Wähle deinen bevorzugten Integrationstyp aus dem Dropdown-Menü. Calendar integration in the telli app

Native Integrationen

Wir bieten integrierte Integrationen mit beliebten Kalenderdiensten:
Wenn du Calendly verbindest, kannst du Buchungsfelder konfigurieren, um die benutzerdefinierten Fragen deines Calendly-Eventtyps bei der Buchung automatisch auszufüllen. Jedes Buchungsfeld ordnet eine Calendly-Frage einer Wertquelle zu.

Werttypen

TypBeschreibungBeispiel
KonstanteEin fester Wert, immer gleichMarkenname, Firmenname
KontakteigenschaftWird aus den Kontaktdaten aufgelöst. Falls nicht verfügbar, fragt der Agent den Anrufer danachTelefonnummer, E-Mail, Vorname
SystemvariableWird aus internen Systemdaten über einen Pfadausdruck aufgelöstKontakt-ID, Zeitzone
LLM-ParameterWird vom Agenten während des Gesprächs erfragtTermingrund, bevorzugte Sprache

So funktioniert es

  1. Gehe in den Agenten-Einstellungen zu Kalender-Integration und wähle Calendly
  2. Verbinde dein Calendly-Konto mit einem API-Key und wähle einen Eventtyp
  3. Klicke auf das Einstellungs-Icon neben dem ausgewählten Calendly-Eventtyp, um die Buchungsfelder zu konfigurieren
  4. Wähle den Werttyp und konfiguriere die Zuordnung
Der Agent löst diese Felder automatisch bei der Terminbuchung auf. Kontakteigenschaften und Konstanten werden ohne zusätzliches Gespräch ausgefüllt, während LLM-Parameter den Agenten veranlassen, die Informationen vom Anrufer zu erfragen.
Jede erforderliche benutzerdefinierte Frage deines Calendly-Eventtyps muss ein entsprechendes Buchungsfeld konfiguriert haben, sonst schlägt die Buchung fehl. Optionale Fragen ohne Zuordnung werden einfach übersprungen.
Folge diesen Schritten, um die Hubspot-Integration zu aktivieren:Um deinen Hubspot-Kalender zu verbinden, benötigst du zwei Informationen:
  • Meeting-Link-Slug
  • Access Token
  1. Stelle sicher, dass du das Meetings Scheduler-Tool von Hubspot verwendest
  2. Gehe zu Meetings Scheduler (Menü -> Library -> Meetings Scheduler)
  3. Wähle das Meeting, das du erstellt hast (z. B. Demo) und wähle Copy link
  4. Teile den Meeting-Link mit telli (der letzte Teil des Links ist der Meeting-Link-Slug)

Private App erstellen

  1. Erstelle eine Private App, indem du der offiziellen Anleitung folgst
  2. Wähle im Tab Scopes die folgenden Scopes:
    • crm.objects.contacts.write
    • crm.schemas.contacts.write
    • scheduler.meetings.meeting-link.read
    • tickets
  3. Erstelle ein Access Token und teile es mit telli

Eigene Integrationen

Die Termin-API ermöglicht es dir, dein bestehendes Kalender- oder Terminsystem mit telli-Agenten zu verbinden und so eine nahtlose Terminplanung für deine Kunden zu ermöglichen.

Überblick

Technische Umsetzung

Du musst zwei einfache Endpoints implementieren, die telli aufruft: Hinweis: Beide Endpoints erhalten contact_details mit den vom Kunden bereitgestellten Kontaktinformationen (Name, E-Mail, Telefon), die für die Terminbuchung und -bestätigung verwendet werden können.

Verfügbare Slots abrufen

Dieser Endpoint gibt eine Liste verfügbarer Terminslots zurück.
POST /available

// Request Example
{
    "contact_id": "telli contact identifier",
    "external_contact_id": "your contact identifier",
    "contact_details": {
        "foobar": "baz",
    }
}

// Response Example
{
    "available": [
        {
            "start_iso": "2024-01-01T10:00:00.000",
            "end_iso": "2024-01-01T10:30:00.000",
        },
        {
            "start_iso": "2024-01-01T11:00:00.000",
            "end_iso": "2024-01-01T11:30:00.000",
        }
    ]
}

Termin buchen

Dieser Endpoint wickelt die eigentliche Buchung eines ausgewählten Zeitslots ab.
POST /book

// Request Example
{
    "contact_id": "telli contact identifier",
    "external_contact_id": "your contact identifier",
    "start_iso": "2024-01-01T10:00:00.000",
    "contact_details": {
        "foobar": "baz",
    }
}

// Successful Response Example
{
    "status": "success"
}

// Failed Response Example
{
    "status": "failed",
    "reason": "Appointment slot is no longer available"
}

Beispiel-Gesprächsablauf

Customer: "Hi, I need to schedule an appointment."

Agent: "I'll help you with that. Let me check the available slots...
       I see the following options:
       - Monday, Jan 1st at 10:00 AM (30 minutes)
       - Monday, Jan 1st at 11:00 AM (30 minutes)
       Which time works better for you?"

Customer: "I'll take the 10 AM slot."

Agent: "Great! I've booked your appointment for Monday, January 1st at 10:00 AM.
       You're all set!"

Hinweise zur Implementierung

  • Alle Zeiten sollten in UTC im ISO 8601-Format angegeben werden (z. B. “2024-01-01T10:00:00.000Z”)
  • Wir verwenden die start_iso-Zeit als Identifier für den Slot
  • Antworten sollten immer HTTP 200 zurückgeben, wobei Erfolg/Fehler im Antwort-Body angegeben wird
  • Stelle sicher, dass deine Endpoints von den telli-Servern erreichbar sind

Sicherheit (optional, aber empfohlen)

Um eine sichere Kommunikation zu gewährleisten, werden alle Anfragen von telli an deine Kalender-Endpoints mit HMAC-Signaturen authentifiziert.
Request-Authentifizierung
Jede Anfrage enthält einen x-telli-signature-Header mit einer HMAC-SHA256-Signatur. Du solltest diese Signatur verifizieren, bevor du Anfragen verarbeitest.
const crypto = require("crypto");

function verifyRequest(payload, signature, apiKey) {
 const expectedSignature = crypto
    .createHmac("sha256", apiKey)
    .update(JSON.stringify(payload))
    .digest("hex");

  return signature === expectedSignature;
}
const express = require("express");
const app = express();

app.use(express.json());

const API_KEY = "your_api_key"; // The API key provided by telli

app.post("/available", (req, res) => {
  const signature = req.headers["x-telli-signature"];

  if (!verifyRequest(req.body, signature, API_KEY)) {
    return res.status(401).send("Invalid signature");
  }

  // Process the request
  // ... your logic here
});

app.post("/book", (req, res) => {
  const signature = req.headers["x-telli-signature"];

  if (!verifyRequest(req.body, signature, API_KEY)) {
    return res.status(401).send("Invalid signature");
  }

  // Process the booking
  // ... your logic here
});