Assistenten aktualisieren
curl --request PUT \
--url https://app.famulor.de/api/user/assistant/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"type": "<string>"
}
'const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({name: '<string>', type: '<string>'})
};
fetch('https://app.famulor.de/api/user/assistant/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://app.famulor.de/api/user/assistant/{id}"
payload = {
"name": "<string>",
"type": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.famulor.de/api/user/assistant/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'type' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.famulor.de/api/user/assistant/{id}"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"type\": \"<string>\"\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"message": "Assistent erfolgreich aktualisiert",
"data": {
"id": 789,
"name": "Aktualisierter Sales-Assistent",
"status": "active",
"type": "outbound",
"mode": "pipeline"
}
}
{
"message": "Assistent nicht gefunden"
}
{
"message": "Validierung fehlgeschlagen",
"errors": {
"speech_speed": ["Die Sprechgeschwindigkeit muss zwischen 0,7 und 1,2 liegen."],
"voice_id": ["Die gewählte Stimme ist nicht mit dem gewählten Engine-Typ kompatibel."],
"allow_interruptions": ["Unterbrechungen können im multimodalen oder Dualplex-Modus nicht deaktiviert werden."]
}
}
Assistenten aktualisieren
Die Konfiguration eines bestehenden KI-Assistenten aktualisieren
PUT
/
api
/
user
/
assistant
/
{id}
Assistenten aktualisieren
curl --request PUT \
--url https://app.famulor.de/api/user/assistant/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"type": "<string>"
}
'const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({name: '<string>', type: '<string>'})
};
fetch('https://app.famulor.de/api/user/assistant/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://app.famulor.de/api/user/assistant/{id}"
payload = {
"name": "<string>",
"type": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.famulor.de/api/user/assistant/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'type' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.famulor.de/api/user/assistant/{id}"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"type\": \"<string>\"\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"message": "Assistent erfolgreich aktualisiert",
"data": {
"id": 789,
"name": "Aktualisierter Sales-Assistent",
"status": "active",
"type": "outbound",
"mode": "pipeline"
}
}
{
"message": "Assistent nicht gefunden"
}
{
"message": "Validierung fehlgeschlagen",
"errors": {
"speech_speed": ["Die Sprechgeschwindigkeit muss zwischen 0,7 und 1,2 liegen."],
"voice_id": ["Die gewählte Stimme ist nicht mit dem gewählten Engine-Typ kompatibel."],
"allow_interruptions": ["Unterbrechungen können im multimodalen oder Dualplex-Modus nicht deaktiviert werden."]
}
}
Dieser Endpunkt ermöglicht es dir, die Konfiguration eines bestehenden KI-Assistenten zu aktualisieren. Alle Felder sind optional – es werden nur die angegebenen Felder aktualisiert. Für ausführliche Feldbeschreibungen und Optionen siehe Assistent erstellen.
Path Parameter
integer
erforderlich
Die eindeutige Kennung des zu aktualisierenden Assistenten
Request Body
Kernfelder
string
Der Name des Assistenten (max. 255 Zeichen)
integer
Die zu verwendende Stimmen-ID für den Assistenten. Verwende den Endpunkt Stimmen abrufen mit dem Parameter
mode, um kompatible Stimmen für deinen Engine-Modus zu erhalten.integer
Die Sprach-ID für den Assistenten. Verwende den Endpunkt Sprachen abrufen, um verfügbare Sprachen zu erhalten.
string
Der Assistenten-Typ. Optionen:
inbound, outboundstring
Der Engine-Modus. Optionen:
pipeline, multimodal, dualplexDas Ändern des Modus setzt modusspezifische Einstellungen auf die Standardwerte für den neuen Modus zurück.
string
Die Zeitzone für den Assistenten (z. B. “Europe/Berlin”, “America/New_York”)
string
Die erste Nachricht, die der Assistent beim Anrufstart sprechen wird (max. 200 Zeichen)
string
Der System-Prompt, der das Verhalten und die Persönlichkeit des Assistenten definiert
Modusspezifische Felder
integer
Die zu verwendende LLM-Modell-ID. Gilt nur für den Modus
pipeline.Verwende den Endpunkt Modelle abrufen, um verfügbare Modelle zu erhalten.integer
Die multimodale Modell-ID. Gilt nur für die Modi
multimodal und dualplex.Verwende den Endpunkt Modelle abrufen, um verfügbare multimodale Modelle zu erhalten.integer
Fallback-LLM-Modell-ID für Tool-Aufrufe in den Modi multimodal/dualplex. Auf
null setzen zum Entfernen.number
Empfindlichkeit der Sprecherwechselerkennung für multimodal/dualplex Modi (0-1). Auf
null setzen für Automatik.Sekundärsprachen
integer[]
Array mit zusätzlichen Sprach-IDs, die der Assistent sprechen kann. Ersetzt bestehende Sekundärsprachen. Übergib ein leeres Array
[], um alle Sekundärsprachen zu entfernen."secondary_language_ids": [2, 3, 4]
Knowledgebase-Einstellungen
integer
Die ID der zu verknüpfenden Knowledgebase. Auf
null setzen zum Entfernen.string
Wie die Knowledgebase verwendet werden soll. Optionen:
function_call- KI ruft eine Funktion zur Suche auf (erforderlich für multimodal/dualplex)prompt- Wissen wird in den Prompt injiziert (nur pipeline)
Organisation
integer
ID eines Ordners, in den dieser Assistent verschoben werden soll. Muss zu deinem Konto gehören. Auf
null setzen, um ihn unkategorisiert zu machen. Weglassen, um den Ordner unverändert zu lassen.integer[]
Array von Label-IDs für diesen Assistenten. Jedes Label muss zu deinem Konto gehören. Wenn angegeben, ersetzt dies die aktuellen Labels des Assistenten. Weglassen, um Labels unverändert zu lassen;
[] senden, um alle Labels zu entfernen."label_ids": [3, 5]
Telefonnummer
integer
Die ID einer zuzuweisenden Telefonnummer. Auf
null setzen zum Aufheben der Zuweisung. Muss zu deinem Konto gehören.Für
inbound Assistenten kann die Telefonnummer kein Caller-ID-Typ sein und darf nicht bereits einem anderen Inbound-Assistenten zugewiesen sein.Benutzerdefinierte Mid-Call Tools
integer[]
Array von benutzerdefinierten Mid-Call Tool-IDs zur Synchronisierung. Ersetzt alle bestehenden Tool-Zuweisungen. Übergib ein leeres Array
[], um alle Tools zu entfernen. Jedes Tool muss zu deinem Konto gehören."tool_ids": [1, 5, 12]
Integrierte Tools
array
Array von integrierten Tools. Ersetzt alle bestehenden integrierten Tools. Übergib ein leeres Array
[], um alle Tools zu entfernen.Anzeigen Tool-Typen
Anzeigen Tool-Typen
call_transfer - Den Anruf an eine andere Telefonnummer weiterleiten
phone_number(erforderlich): Telefonnummer für die Weiterleitungdescription: Wann der Anruf weitergeleitet werden sollcustom: Wenn true, kann die KI die Weiterleitungsnummer dynamisch bestimmentimezone: Zeitzone für die Erreichbarkeit der Weiterleitungwarm_transfer: Nachricht an den Kunden vor der Weiterleitung senden (Standard:false)warm_transfer_message: Prompt, was die KI vor der Weiterleitung sagen soll (z. B. „Sagen Sie dem Kunden, dass der Anruf weitergeleitet wird.“)
supervisor_phone(erforderlich): Telefonnummer für den Warm-Transfer (z. B. „+14155552001“). Bei aktiviertemcustom_sipstattdessen SIP-Adresse oder interne Durchwahl.outbound_phone_id(erforderlich): ID der Telefonnummer, mit der der Supervisor angerufen wird. Siehe Telefonnummern abrufen.description(erforderlich): Wann transferieren — beschreibt, wann die KI den Warm-Transfer auslösen soll (z. B. „An einen menschlichen Supervisor weiterleiten, wenn der Kunde mit einer echten Person sprechen möchte.“)custom_sip: Eigene SIP-Adresse oder interne Durchwahl statt Telefonnummer (Standard:false)caller_id_mode: Welche Nummer der Supervisor beim Anruf sieht. Optionen:outbound_number(Standard — Outbound-Nummer),customer_number(Anrufernummer),custom(eigene Nummer)custom_caller_id: Eigene Nummer für den Supervisor. Nur beicaller_id_mode: custom.hold_music: Audio während des Wartens. Optionen:hold_music(Standard — Standard-Wartemusik),none(Stille)hold_music_volume: Lautstärke der Wartemusik, 0–100 (Standard:80)hold_message: Ansage an den Anrufer vor dem Halten (Standard: „Bitte warten Sie, während ich Sie mit einem Supervisor verbinde.“)summary_instructions: Anweisung, wie die KI den Supervisor briefen soll (Standard: „Stellen Sie das Gespräch aus Ihrer Sicht vor:\n- WER ruft an (Name, Firma falls erwähnt)\n- WARUM sie angerufen haben (Ziel oder Problem)\n- WARUM jetzt ein Mensch nötig ist\n\nHalten Sie es kurz (2-3 Sätze).“)briefing_initial_message: Erste Nachricht der KI an den Supervisor (Standard: „Hallo! Ich habe einen Anrufer in der Leitung, der Ihre Hilfe braucht. Darf ich Sie kurz einweisen?“)connected_message: Ansage an den Anrufer nach Verbindung mit dem Supervisor (Standard: „Sie sind jetzt mit einem Supervisor verbunden. Ich überlasse Sie ihm.“)
description: Wann die KI den Anruf beenden soll
description: Wann DTMF-Eingabe verwendet werden soll (z. B. IVR-Navigation)
timeout: Sekunden bis zur Eingabe, 1–30 (Standard:5)stop_key: Taste zum Beenden. Optionen:#(Standard),*
calcom_api_key(erforderlich): Dein Cal.com API-Schlüsselcalcom_event_slug(erforderlich): Event-Typ-Slug von Cal.comcalcom_team_slug: Team-Slug, wenn der Event zu einem Cal.com-Team gehörtcalcom_endpoint: Cal.com API-Region. Optionen:us(Standard —https://api.cal.com),eu(https://api.cal.eu),custom(nutztcalcom_custom_endpoint)calcom_custom_endpoint: Eigene Cal.com API-Basis-URL. Nur beicalcom_endpoint: custom(z. B.https://my-calcom-instance.com).calcom_booking_fields: Array benutzerdefinierter Buchungsfelder. Pro Feld:slug(erforderlich),type(erforderlich, z. B. „text“, „email“, „phone“, „select“),label(erforderlich),required(Standard:false),options(Optionen für Select-Felder)description: Wann Terminbuchung angeboten werden soll
assistant_id(erforderlich): ID des Ziel-Assistenten. Muss zu deinem Konto gehören und darf nicht der aktualisierte Assistent selbst sein (kein Self-Transfer).description: Wann transferiert werden soll (max. 500 Zeichen, Standard: „Übergeben Sie das Gespräch an diesen Assistenten, wenn es passend ist.“)message_before_transfer: Optionale Nachricht, die die KI vor dem Wechsel spricht (max. 500 Zeichen).speak_transfer_greeting: Wenn true, spricht der Ziel-Assistent nach dem Transfer seine konfigurierte Erstnachricht (Standard:true)
"tools": [
{
"type": "dtmf_input",
"description": "IVR bei Bedarf navigieren"
},
{
"type": "warm_call_transfer",
"supervisor_phone": "+1234567890",
"outbound_phone_id": 7,
"description": "An einen menschlichen Supervisor weiterleiten, wenn der Kunde mit einer echten Person sprechen möchte.",
"custom_sip": false,
"caller_id_mode": "outbound_number",
"hold_music": "hold_music",
"hold_music_volume": 80,
"hold_message": "Bitte warten Sie, während ich Sie mit einem Supervisor verbinde.",
"summary_instructions": "Stellen Sie das Gespräch aus Ihrer Sicht vor:\n- WER ruft an (Name, Firma falls erwähnt)\n- WARUM sie angerufen haben (Ziel oder Problem)\n- WARUM jetzt ein Mensch nötig ist\n\nHalten Sie es kurz (2-3 Sätze).",
"briefing_initial_message": "Hallo! Ich habe einen Anrufer in der Leitung, der Ihre Hilfe braucht. Darf ich Sie kurz einweisen?",
"connected_message": "Sie sind jetzt mit einem Supervisor verbunden. Ich überlasse Sie ihm."
},
{
"type": "collect_keypad",
"timeout": 5,
"stop_key": "#"
},
{
"type": "assistant_transfer",
"assistant_id": 14765,
"description": "An den Support-Assistenten übergeben, wenn der Kunde technische Hilfe braucht.",
"message_before_transfer": "Gerne — ich verbinde Sie mit unserem Support-Spezialisten.",
"speak_transfer_greeting": true
},
{
"type": "end_call",
"description": "Anruf beenden wenn fertig"
}
]
In der Assistenten-Liste wird jedes konfigurierte Tool als
{ "type": "...", "data": { ... } } zurückgegeben — dieselben Feldnamen wie im Request, aber unter data verschachtelt (nicht top-level).Sprach- und TTS-Einstellungen
boolean
Ob emotionale Text-to-Speech-Synthese aktiviert werden soll
number
Stimm-Stabilität-Einstellung (0-1). Höher = konsistentere Stimme
number
Stimm-Ähnlichkeit-Einstellung (0-1). Höher = näher an der Originalstimme
number
Sprechgeschwindigkeits-Multiplikator (0.7-1.2)
number
LLM-Temperatur-Einstellung (0-1). Niedriger = deterministischer
integer
Benutzerdefinierte TTS-Provider-ID. Auf
null setzen, um den Sprachstandard zu verwenden. Siehe Synthesizer-Provider abrufen.integer
Benutzerdefinierte STT-Provider-ID. Nur Pipeline-Modus. Auf
null setzen, um den Sprachstandard zu verwenden. Siehe Transcriber-Provider abrufen.Anrufverhalten-Einstellungen
boolean
Ob Unterbrechungen durch den Anrufer erlaubt werden sollen.
Kann für die Modi
multimodal und dualplex nicht deaktiviert werden.boolean
Ob Füller-Audio während der Verarbeitung verwendet werden soll.
Nur für den Modus
pipeline verfügbar.object
Benutzerdefinierte Füller-Profile pro Kategorie. Ersetzt die bestehende Füller-Konfiguration. Jede Kategorie ist ein Array kurzer Phrasen.
positive: Füller für zustimmende Antwortennegative: Füller für ablehnende/neutrale Antwortenquestion: Füller beim Verarbeiten einer Frageneutral: Füller für neutrale Bestätigungen
"filler_config": {
"positive": ["Super!", "Perfekt!"],
"negative": ["Hmm.", "Verstehe."],
"question": ["Gute Frage.", "Einen Moment."],
"neutral": ["Ok.", "Notiert."]
}
boolean
Ob der Anruf aufgezeichnet werden soll
boolean
Ob Geräuschunterdrückung aktiviert werden soll
boolean
Wenn wahr, wartet der Assistent darauf, dass der Kunde zuerst spricht
Timing-Einstellungen
integer
Maximale Anrufdauer in Sekunden (20-1200)
integer
Maximale Dauer der Stille vor erneutem Engagement in Sekunden (1-360)
integer
Maximale Stille zu Beginn des Anrufs vor dem Beenden (1-120 Sekunden). Auf
null setzen zum Deaktivieren.integer
Maximale Klingelzeit vor dem Abbruch (1-60 Sekunden)
Re-Engagement-Einstellungen
integer
Intervall für erneutes Engagement in Sekunden (7-600)
string
Benutzerdefinierter Prompt für Re-Engagement-Nachrichten (max. 1000 Zeichen). Auf
null setzen, um den Standard zu verwenden.Voicemail-Einstellungen
boolean
Ob der Anruf beendet werden soll, wenn eine Mailbox erkannt wird
string
Nachricht, die auf der Mailbox hinterlassen werden soll, bevor aufgelegt wird (max. 1000 Zeichen). Auf
null setzen zum Deaktivieren.Endpunkterkennung
string
Typ der Sprachaktivitätserkennung. Optionen:
vad, ainumber
Endpunkt-Sensibilitätslevel (0-5)
number
Unterbrechungs-Sensibilitätslevel (0-5)
integer
Mindestanzahl an Wörtern, bevor eine Unterbrechung zulässig ist (0-10). Auf
null setzen zum Deaktivieren.Ambiente-Sound
string
Hintergrund-Ambiente-Sound. Optionen:
off, office, city, forest, crowded_room, cafe, naturenumber
Lautstärke des Ambiente-Sounds (0-1)
Webhook-Konfiguration
boolean
Ob Webhook-Benachrichtigungen aktiviert sind
string
Die Webhook-URL für Post-Call-Benachrichtigungen. Auf
null setzen zum Entfernen.boolean
Ob Webhooks nur bei erfolgreich abgeschlossenen Anrufen gesendet werden sollen (nicht bei fehlgeschlagenen/keine-Antwort)
boolean
Ob die Aufzeichnungs-URL in der Webhook-Payload enthalten sein soll
Post-Call-Evaluation
boolean
Ob die KI-basierte Post-Call-Evaluation aktiviert werden soll
array
Schema-Definition für die Extraktion von Post-Call-Daten. Ersetzt das bestehende Schema.
Variablen
object
Schlüssel-Wert-Paare für benutzerdefinierte Variablen. Ersetzt alle bestehenden Variablen.
"variables": {
"company_name": "Acme Corp",
"product": "Premium Widget"
}
Beispiel-Requests
Grundlegende Einstellungen aktualisieren
{
"name": "Aktualisierter Assistenten-Name",
"initial_message": "Hallo! Wie kann ich Ihnen heute helfen?",
"max_duration": 900
}
In multimodalen Modus wechseln
{
"mode": "multimodal",
"voice_id": 41,
"multimodal_model_id": 1,
"chat_llm_fallback_id": 2,
"knowledgebase_mode": "function_call"
}
Tools und Knowledgebase aktualisieren
{
"tool_ids": [1, 5, 12],
"knowledgebase_id": 3,
"knowledgebase_mode": "prompt"
}
Re-Engagement und Voicemail aktualisieren
{
"reengagement_interval": 15,
"reengagement_prompt": "Sind Sie noch da? Ich bin hier, um zu helfen.",
"end_call_on_voicemail": true,
"voice_mail_message": "Hallo, bitte rufen Sie uns bei Gelegenheit zurück."
}
Optionale Einstellungen entfernen
{
"phone_number_id": null,
"webhook_url": null,
"tool_ids": [],
"secondary_language_ids": []
}
Antwort
string
Erfolgsmeldung zur Bestätigung der Assistenten-Aktualisierung
object
{
"message": "Assistent erfolgreich aktualisiert",
"data": {
"id": 789,
"name": "Aktualisierter Sales-Assistent",
"status": "active",
"type": "outbound",
"mode": "pipeline"
}
}
{
"message": "Assistent nicht gefunden"
}
{
"message": "Validierung fehlgeschlagen",
"errors": {
"speech_speed": ["Die Sprechgeschwindigkeit muss zwischen 0,7 und 1,2 liegen."],
"voice_id": ["Die gewählte Stimme ist nicht mit dem gewählten Engine-Typ kompatibel."],
"allow_interruptions": ["Unterbrechungen können im multimodalen oder Dualplex-Modus nicht deaktiviert werden."]
}
}
Hinweise
- Nur die Felder, die du im Request Body angibst, werden aktualisiert
- Um optionale Felder zu entfernen, setze diese explizit auf
null - Um Arrays zu leeren (Tools, Sekundärsprachen), übergib ein leeres Array
[] - Der Assistent muss dem authentifizierten Benutzer gehören
- Verwende den Endpunkt Stimmen abrufen mit dem Parameter
mode, um kompatible Stimmen zu erhalten - Für multimodal/dualplex Modi muss
knowledgebase_modeauffunction_callgesetzt sein - In den Modi multimodal/dualplex können Unterbrechungen (
allow_interruptions) nicht deaktiviert werden - Ein Moduswechsel setzt modusspezifische Einstellungen (LLM-Modell, multimodales Modell, Provider) zurück