Skip to main content
Integrierte Tools sind vorgefertigte Aktionen, die der Assistent während eines laufenden Gesprächs aufrufen kann. Anders als ein Flow brauchen sie keinen Graphen – erstelle ein wiederverwendbares Workspace-Tool, beschreibe, wann es laufen soll, und weise es einem oder mehreren Assistenten zu. Sie sind ein zusätzlicher zweiter Pfad neben Flow-Nodes. Jedes integrierte Tool ist defensiv gebaut: Ein falsch konfiguriertes Tool protokolliert ein builtin_tool_error-Anrufereignis, und der Assistent spricht einfach weiter mit dem Anrufer – ein kaputtes Tool bringt nie den ganzen Anruf zum Absturz. Bei Messaging (Telegram, Slack, Messenger, Teams, Discord, Google Chat, X) und automatischen E-Mail-Antworten laufen dieselben textsicheren integrierten Tools im Next.js-Antwortpfad (auch API/MCP/Wissensdatenbank/Kalender). Reine Sprach-Tools (end_call, Weiterleitungen, DTMF/Tastenfeld, Zahlungskarte) sind dort nicht registriert.

Die eigenständigen Tools

Die Tastenfeld-Erfassung ist an den Flow gebunden: Füge dazu einen Collect-Node im Flow Builder hinzu – dort kann der Worker den DTMF-Status und die Übergänge sicher selbst verwalten. Kalenderaktionen kommen von den Integrationen. Die alten eigenständigen Konfigurationen dtmf_input, collect_keypad und calendar_integration bleiben nur zur abwärtskompatiblen Anzeige erhalten und können nicht mehr als neue, wiederverwendbare Tools angelegt werden.

Ein Tool aktivieren

Öffne Tools, erstelle ein integriertes Tool, fülle die Felder aus und weise es einem Assistenten zu. Der erforderliche Name ist der exakte Funktionsname, der dem Modell zur Verfügung steht, während die Beschreibung dem Modell sagt, wann es das Tool nutzen soll. Aufrufe werden in der Runs-Ansicht dem wiederverwendbaren Tool zugeordnet.

Anruf beenden

Keine weitere Konfiguration außer der Beschreibung. Das Modell muss die Anfrage erst abschließen und sich verabschieden, bevor es die Funktion aufruft; der Worker markiert den Anruf danach als beendet und legt auf.

Anrufweiterleitung (kalt)

  • Telefonnummer – das feste Ziel.
  • KI kann die Zielnummer dynamisch bestimmen – macht das Ziel stattdessen zu einem Funktionsargument.
  • Warm-Transfer-Nachricht – optionale, nicht unterbrechbare Ansage vor der kalten Weiterleitung.

Warme Anrufweiterleitung

Stellt den Anrufer in die Warteschleife und ruft zuerst einen Kollegen an:
  • Supervisor-Telefon – wer angerufen wird; dabei wird der konfigurierte ausgehende Trunk des Workspace genutzt.
  • Wartemusik – an oder aus, plus eine optionale gesprochene Wartenachricht.
  • BriefingZusammenfassungs-Anweisungen (wie der Anruf für den Kollegen zusammengefasst wird) und ein Briefing-Opener, der dem Kollegen vorgesprochen wird; beide unterstützen {{variables}}.
  • Klingel-Timeout und Fallback – das Gespräch fortsetzen, beenden oder kalt weiterleiten, falls der Rückfrageanruf fehlschlägt.

Übergabe an Assistent (KI→KI)

Übergibt die laufende Sitzung an einen anderen Assistenten im selben Workspace, ohne aufzulegen:
  • Zielassistent (assistant_id) – erforderlich; muss zum Workspace gehören.
  • Nachricht vor der Übergabe – optionale, nicht unterbrechbare Zeile, die vor der Übergabe gesprochen wird.
  • Übergabe-Begrüßung sprechen – wenn aktiv (Standard), läuft nach dem Wechsel die erste Nachricht bzw. Begrüßung des Zielassistenten.
  • Beschreibung – erforderlich: Sag dem Modell, wann es übergeben soll (z. B. Preisfragen → Vertriebsassistent).
Das Modell kann einen kurzen reason und eine conversation_summary mitgeben, damit der übernehmende Assistent den Kontext behält. Der Worker baut STT/LLM/TTS (oder Realtime) für das Ziel neu auf, ruft session.update_agent auf und schreibt die Anrufereignisse assistant_transfer bzw. assistant_transfer_failed. Ein Anruf kann maximal drei Mal übergeben werden (Schutz vor Endlosschleifen). Eine Übergabe an denselben Assistenten wird abgelehnt.

SMS senden

Der Assistent formuliert den Text selbst aus dem Gesprächsverlauf und verschickt ihn während des Anrufs:
  • Empfänger (sms_to_mode) – caller (Standard: die eigene Nummer des Anrufers) oder custom mit einer festen benutzerdefinierten Nummer (sms_custom_number, E.164, z. B. +491701234567).
Typischer Einsatz: eine Bestätigung, eine Adresse oder einen Zahlungslink per SMS schicken, während das Telefonat noch läuft.

E-Mail senden

Das E-Mail-Tool trennt Empfängererfassung, Absenderidentität, Inhalt und Signatur, damit jeder Teil dort, wo nötig, deterministisch bleibt:
  • Empfänger (email_to_mode) – ask nutzt einen eigenen E-Mail-Erfassungs-Workflow, der undeutlich gesprochene Adressen normalisiert und explizit bestätigen lässt; fixed verwendet email_fixed_to. Fehlerhafte oder aus Sprache erkannte Adressen werden beim Versand nie erraten.
  • Absender (email_sender_mode) – auto versucht zuerst die verifizierte SendGrid-Adresse des Assistenten, dann Workspace-/Reseller-SMTP und zuletzt die Plattform-Mail. Alternativ wählst du explizit Workspace-SMTP, Plattform-Mail oder eine verifizierte Adresse aus GET /api/v1/email-senders. Eine explizite Auswahl schlägt im Fehlerfall klar fehl, statt stillschweigend auf etwas anderes auszuweichen.
  • Anzeigename (email_from_name) – optionale Überschreibung pro Tool.
  • Inhalt (email_content_mode) – llm lässt das Modell Betreff und Text aus dem Gespräch schreiben; fixed verschickt immer den konfigurierten, festen Text; template löst {{call_variables}} auf und blockiert den Versand, wenn ein Wert fehlt.
  • Signatur (email_signature_mode) – Workspace-Standard (mit {agent_name} / {{assistant_name}}), eine individuelle Signatur pro Tool oder keine. Sie wird einmalig vom Anwendungscode angehängt und nicht vom Modell improvisiert.
  • Zustellstatus – ein erfolgreiches Tool-Ergebnis heißt nur, dass der SMTP-Anbieter die Nachricht angenommen hat – nicht, dass sie im Posteingang angekommen ist. Bekannte SendGrid-Bounces, -Blocks und -Spam-Sperren werden vor dem Versand geprüft und dem Assistenten als Zustellfehler zurückgemeldet.
Der unumkehrbare Versand deaktiviert Unterbrechungen, überträgt die Anruf-ID in den E-Mail-Verlauf und nutzt einen Idempotenzschlüssel, damit ein wiederholter Funktionsaufruf nicht versehentlich eine zweite Nachricht erzeugt.

Geschäftszeiten

Lässt den Assistenten ehrlich beantworten, wenn jemand fragt „Habt ihr gerade geöffnet?” – und sich außerhalb der Öffnungszeiten entsprechend anders verhalten:
  • Geschäftszeiten (business_hours) – ein Wochenplan mit einem oder mehreren Zeitfenstern pro Wochentag ({"mon": [["09:00", "17:00"]], ...} – im gleichen Format wie die Anruffenster von Kampagnen).
  • Hinweis (hours_note) – ein optionaler Freitext-Hinweis, der zusammen mit dem Ergebnis zurückgegeben wird (z. B. „An Feiertagen geschlossen”).
Geprüft wird in der Zeitzone des Assistenten (die Zeitzone einer Kampagne überschreibt sie pro Anruf) – „geöffnet” heißt also immer lokal geöffnet.

Rückruf planen

Der Assistent vereinbart mit dem Anrufer einen Rückruftermin; die Plattform speichert ihn, und ein Cron-Job wählt den Rückruf automatisch, sobald er fällig ist:
  • Rückrufnummer (callback_to_mode) – caller (Standard: den Anrufer unter seiner eigenen Nummer zurückrufen) oder custom mit einer festen benutzerdefinierten Nummer (callback_custom_number, E.164).
  • Max. Tage im Voraus (max_days_ahead) – wie weit in der Zukunft ein Rückruf gebucht werden darf (1–365 Tage).
Zur Laufzeit verlangt die Funktion eine exakte ISO-8601-Zeit und ein positives Bestätigungs-Flag. Vergangene Termine und Termine jenseits des konfigurierten Limits werden abgelehnt; der Worker setzt niemals stillschweigend 30 Minuten als Standard an oder korrigiert die Wahl des Anrufers eigenmächtig.

Zahlungskarte erfassen

Aktiviert Zahlungskarte-Collect-Nodes im Flow Builder. Das ist keine vom LLM aufrufbare Aktion – sie schaltet den Flow-Node frei und legt fest, welches Stripe-Konto die Payment Method erhält.
  1. Hinterlege deinen Stripe Secret Key unter Tools → App Store → Stripe.
  2. Erstelle ein integriertes Tool vom Typ collect_payment_card und wähle das Stripe-Konto (stripe_connection_id) aus.
  3. Weise das Tool einem Assistenten zu.
  4. Füge im Flow einen Collect-Node vom Typ Zahlungskarte hinzu.
Während des Anrufs erfasst der Agent die Kartendaten sicher; die Plattform legt mit deinem Secret Key eine Stripe Payment Method in deinem Stripe-Konto an. Gespeichert werden nur card_last4, card_brand und stripe_payment_method_id – niemals die vollständige Kartennummer oder der CVV. Setzt das Plan-Feature Zahlungskarten erfassen voraus. Wird pro erfolgreicher Erfassung abgerechnet (siehe Credit-Einstellungen). Ohne verbundenen Stripe Secret Key zeigt das Tool-Formular einen Hinweis, zuerst einen zu hinterlegen – für Kartendaten von Kunden gibt es keinen Plattform-Fallback.

Anrufvariable setzen

Lässt den Assistenten während des Anrufs einen Wert speichern (zum Beispiel den Firmennamen des Anrufers), damit spätere Tools, E-Mails, Flow-Bedingungen und der Post-Call-Webhook ihn nutzen können:
  • Erlaubte Keys (allowed_keys) – optionale Allowlist im snake_case-Format. Leer = jeder gültige Key außer den reservierten Plattform-Keys (assistant_name, direction, call_id, date, time, datetime, weekday).
  • Beschreibung – sag dem Modell, wann gespeichert werden soll (z. B. nachdem der Anrufer sein Unternehmen genannt hat).
Das Tool schreibt in die Variablen-Map des laufenden Anrufs und gibt {"updated":{"key":"value"}} zurück, damit das Modell den gespeicherten Wert über das Tool-Ergebnis erfährt. Es schreibt den System-Prompt nicht mitten im Anruf um (Realtime-Modelle würden das ohnehin ignorieren). Ein leerer String löscht einen Key.

System-Tool: get_current_time

Unabhängig von den konfigurierbaren Tools oben hat jeder Assistent immer das System-Tool get_current_time – ohne Konfiguration, und es lässt sich nicht deaktivieren. Das Modell ruft es auf, sobald das aktuelle Datum oder die Uhrzeit relevant ist (etwa um „morgen um 3” aufzulösen, eine Frist zu prüfen oder einen Termin zu buchen). Die zurückgegebene Zeit ist auf die Zeitzone des Assistenten lokalisiert (assistants.timezone, ein IANA-Bezeichner wie Europe/Berlin). Bei Kampagnenanrufen überschreibt die Zeitzone der Kampagne sie pro Anruf (meta.timezone ?? assistant.timezone) – siehe Zeitzone.

API & MCP

Integrierte Tools liegen im builtin_tools-Array des Assistenten (aus Kompatibilitätsgründen wird auch tools akzeptiert). Setze sie über die öffentliche API:
Denselben Feldvertrag nutzen der Editor, die REST-API und MCP. GET /api/v1/email-senders und das MCP-Tool list_email_senders legen den secrets-freien Absenderkatalog offen; siehe die API-Referenz.