Mettre à jour un assistant
curl --request PUT \
--url https://app.famulor.de/api/user/assistant/{id} \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"voice_id": 123,
"language_id": 123,
"type": "<string>",
"mode": "<string>",
"timezone": "<string>",
"initial_message": "<string>",
"system_prompt": "<string>",
"llm_model_id": 123,
"multimodal_model_id": 123,
"chat_llm_fallback_id": 123,
"turn_detection_threshold": 123,
"secondary_language_ids": [
123
],
"knowledgebase_id": 123,
"knowledgebase_mode": "<string>",
"folder_id": 123,
"label_ids": [
123
],
"phone_number_id": 123,
"tool_ids": [
123
],
"tools": [
{}
],
"tts_emotion_enabled": true,
"voice_stability": 123,
"voice_similarity": 123,
"speech_speed": 123,
"llm_temperature": 123,
"synthesizer_provider_id": 123,
"transcriber_provider_id": 123,
"allow_interruptions": true,
"fillers": true,
"filler_config": {},
"record": true,
"enable_noise_cancellation": true,
"wait_for_customer": true,
"max_duration": 123,
"max_silence_duration": 123,
"max_initial_silence_duration": 123,
"ringing_time": 123,
"reengagement_interval": 123,
"reengagement_prompt": "<string>",
"end_call_on_voicemail": true,
"voice_mail_message": "<string>",
"endpoint_type": "<string>",
"endpoint_sensitivity": 123,
"interrupt_sensitivity": 123,
"min_interrupt_words": 123,
"ambient_sound": "<string>",
"ambient_sound_volume": 123,
"is_webhook_active": true,
"webhook_url": "<string>",
"send_webhook_only_on_completed": true,
"include_recording_in_webhook": true,
"post_call_evaluation": true,
"post_call_schema": [
{
"name": "<string>",
"type": "<string>",
"description": "<string>"
}
],
"variables": {}
}
'import requests
url = "https://app.famulor.de/api/user/assistant/{id}"
payload = {
"name": "<string>",
"voice_id": 123,
"language_id": 123,
"type": "<string>",
"mode": "<string>",
"timezone": "<string>",
"initial_message": "<string>",
"system_prompt": "<string>",
"llm_model_id": 123,
"multimodal_model_id": 123,
"chat_llm_fallback_id": 123,
"turn_detection_threshold": 123,
"secondary_language_ids": [123],
"knowledgebase_id": 123,
"knowledgebase_mode": "<string>",
"folder_id": 123,
"label_ids": [123],
"phone_number_id": 123,
"tool_ids": [123],
"tools": [{}],
"tts_emotion_enabled": True,
"voice_stability": 123,
"voice_similarity": 123,
"speech_speed": 123,
"llm_temperature": 123,
"synthesizer_provider_id": 123,
"transcriber_provider_id": 123,
"allow_interruptions": True,
"fillers": True,
"filler_config": {},
"record": True,
"enable_noise_cancellation": True,
"wait_for_customer": True,
"max_duration": 123,
"max_silence_duration": 123,
"max_initial_silence_duration": 123,
"ringing_time": 123,
"reengagement_interval": 123,
"reengagement_prompt": "<string>",
"end_call_on_voicemail": True,
"voice_mail_message": "<string>",
"endpoint_type": "<string>",
"endpoint_sensitivity": 123,
"interrupt_sensitivity": 123,
"min_interrupt_words": 123,
"ambient_sound": "<string>",
"ambient_sound_volume": 123,
"is_webhook_active": True,
"webhook_url": "<string>",
"send_webhook_only_on_completed": True,
"include_recording_in_webhook": True,
"post_call_evaluation": True,
"post_call_schema": [
{
"name": "<string>",
"type": "<string>",
"description": "<string>"
}
],
"variables": {}
}
headers = {"Content-Type": "application/json"}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
voice_id: 123,
language_id: 123,
type: '<string>',
mode: '<string>',
timezone: '<string>',
initial_message: '<string>',
system_prompt: '<string>',
llm_model_id: 123,
multimodal_model_id: 123,
chat_llm_fallback_id: 123,
turn_detection_threshold: 123,
secondary_language_ids: [123],
knowledgebase_id: 123,
knowledgebase_mode: '<string>',
folder_id: 123,
label_ids: [123],
phone_number_id: 123,
tool_ids: [123],
tools: [{}],
tts_emotion_enabled: true,
voice_stability: 123,
voice_similarity: 123,
speech_speed: 123,
llm_temperature: 123,
synthesizer_provider_id: 123,
transcriber_provider_id: 123,
allow_interruptions: true,
fillers: true,
filler_config: {},
record: true,
enable_noise_cancellation: true,
wait_for_customer: true,
max_duration: 123,
max_silence_duration: 123,
max_initial_silence_duration: 123,
ringing_time: 123,
reengagement_interval: 123,
reengagement_prompt: '<string>',
end_call_on_voicemail: true,
voice_mail_message: '<string>',
endpoint_type: '<string>',
endpoint_sensitivity: 123,
interrupt_sensitivity: 123,
min_interrupt_words: 123,
ambient_sound: '<string>',
ambient_sound_volume: 123,
is_webhook_active: true,
webhook_url: '<string>',
send_webhook_only_on_completed: true,
include_recording_in_webhook: true,
post_call_evaluation: true,
post_call_schema: [{name: '<string>', type: '<string>', description: '<string>'}],
variables: {}
})
};
fetch('https://app.famulor.de/api/user/assistant/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?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>',
'voice_id' => 123,
'language_id' => 123,
'type' => '<string>',
'mode' => '<string>',
'timezone' => '<string>',
'initial_message' => '<string>',
'system_prompt' => '<string>',
'llm_model_id' => 123,
'multimodal_model_id' => 123,
'chat_llm_fallback_id' => 123,
'turn_detection_threshold' => 123,
'secondary_language_ids' => [
123
],
'knowledgebase_id' => 123,
'knowledgebase_mode' => '<string>',
'folder_id' => 123,
'label_ids' => [
123
],
'phone_number_id' => 123,
'tool_ids' => [
123
],
'tools' => [
[
]
],
'tts_emotion_enabled' => true,
'voice_stability' => 123,
'voice_similarity' => 123,
'speech_speed' => 123,
'llm_temperature' => 123,
'synthesizer_provider_id' => 123,
'transcriber_provider_id' => 123,
'allow_interruptions' => true,
'fillers' => true,
'filler_config' => [
],
'record' => true,
'enable_noise_cancellation' => true,
'wait_for_customer' => true,
'max_duration' => 123,
'max_silence_duration' => 123,
'max_initial_silence_duration' => 123,
'ringing_time' => 123,
'reengagement_interval' => 123,
'reengagement_prompt' => '<string>',
'end_call_on_voicemail' => true,
'voice_mail_message' => '<string>',
'endpoint_type' => '<string>',
'endpoint_sensitivity' => 123,
'interrupt_sensitivity' => 123,
'min_interrupt_words' => 123,
'ambient_sound' => '<string>',
'ambient_sound_volume' => 123,
'is_webhook_active' => true,
'webhook_url' => '<string>',
'send_webhook_only_on_completed' => true,
'include_recording_in_webhook' => true,
'post_call_evaluation' => true,
'post_call_schema' => [
[
'name' => '<string>',
'type' => '<string>',
'description' => '<string>'
]
],
'variables' => [
]
]),
CURLOPT_HTTPHEADER => [
"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 \"voice_id\": 123,\n \"language_id\": 123,\n \"type\": \"<string>\",\n \"mode\": \"<string>\",\n \"timezone\": \"<string>\",\n \"initial_message\": \"<string>\",\n \"system_prompt\": \"<string>\",\n \"llm_model_id\": 123,\n \"multimodal_model_id\": 123,\n \"chat_llm_fallback_id\": 123,\n \"turn_detection_threshold\": 123,\n \"secondary_language_ids\": [\n 123\n ],\n \"knowledgebase_id\": 123,\n \"knowledgebase_mode\": \"<string>\",\n \"folder_id\": 123,\n \"label_ids\": [\n 123\n ],\n \"phone_number_id\": 123,\n \"tool_ids\": [\n 123\n ],\n \"tools\": [\n {}\n ],\n \"tts_emotion_enabled\": true,\n \"voice_stability\": 123,\n \"voice_similarity\": 123,\n \"speech_speed\": 123,\n \"llm_temperature\": 123,\n \"synthesizer_provider_id\": 123,\n \"transcriber_provider_id\": 123,\n \"allow_interruptions\": true,\n \"fillers\": true,\n \"filler_config\": {},\n \"record\": true,\n \"enable_noise_cancellation\": true,\n \"wait_for_customer\": true,\n \"max_duration\": 123,\n \"max_silence_duration\": 123,\n \"max_initial_silence_duration\": 123,\n \"ringing_time\": 123,\n \"reengagement_interval\": 123,\n \"reengagement_prompt\": \"<string>\",\n \"end_call_on_voicemail\": true,\n \"voice_mail_message\": \"<string>\",\n \"endpoint_type\": \"<string>\",\n \"endpoint_sensitivity\": 123,\n \"interrupt_sensitivity\": 123,\n \"min_interrupt_words\": 123,\n \"ambient_sound\": \"<string>\",\n \"ambient_sound_volume\": 123,\n \"is_webhook_active\": true,\n \"webhook_url\": \"<string>\",\n \"send_webhook_only_on_completed\": true,\n \"include_recording_in_webhook\": true,\n \"post_call_evaluation\": true,\n \"post_call_schema\": [\n {\n \"name\": \"<string>\",\n \"type\": \"<string>\",\n \"description\": \"<string>\"\n }\n ],\n \"variables\": {}\n}")
req, _ := http.NewRequest("PUT", url, payload)
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))
}HttpResponse<String> response = Unirest.put("https://app.famulor.de/api/user/assistant/{id}")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"voice_id\": 123,\n \"language_id\": 123,\n \"type\": \"<string>\",\n \"mode\": \"<string>\",\n \"timezone\": \"<string>\",\n \"initial_message\": \"<string>\",\n \"system_prompt\": \"<string>\",\n \"llm_model_id\": 123,\n \"multimodal_model_id\": 123,\n \"chat_llm_fallback_id\": 123,\n \"turn_detection_threshold\": 123,\n \"secondary_language_ids\": [\n 123\n ],\n \"knowledgebase_id\": 123,\n \"knowledgebase_mode\": \"<string>\",\n \"folder_id\": 123,\n \"label_ids\": [\n 123\n ],\n \"phone_number_id\": 123,\n \"tool_ids\": [\n 123\n ],\n \"tools\": [\n {}\n ],\n \"tts_emotion_enabled\": true,\n \"voice_stability\": 123,\n \"voice_similarity\": 123,\n \"speech_speed\": 123,\n \"llm_temperature\": 123,\n \"synthesizer_provider_id\": 123,\n \"transcriber_provider_id\": 123,\n \"allow_interruptions\": true,\n \"fillers\": true,\n \"filler_config\": {},\n \"record\": true,\n \"enable_noise_cancellation\": true,\n \"wait_for_customer\": true,\n \"max_duration\": 123,\n \"max_silence_duration\": 123,\n \"max_initial_silence_duration\": 123,\n \"ringing_time\": 123,\n \"reengagement_interval\": 123,\n \"reengagement_prompt\": \"<string>\",\n \"end_call_on_voicemail\": true,\n \"voice_mail_message\": \"<string>\",\n \"endpoint_type\": \"<string>\",\n \"endpoint_sensitivity\": 123,\n \"interrupt_sensitivity\": 123,\n \"min_interrupt_words\": 123,\n \"ambient_sound\": \"<string>\",\n \"ambient_sound_volume\": 123,\n \"is_webhook_active\": true,\n \"webhook_url\": \"<string>\",\n \"send_webhook_only_on_completed\": true,\n \"include_recording_in_webhook\": true,\n \"post_call_evaluation\": true,\n \"post_call_schema\": [\n {\n \"name\": \"<string>\",\n \"type\": \"<string>\",\n \"description\": \"<string>\"\n }\n ],\n \"variables\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.famulor.de/api/user/assistant/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"voice_id\": 123,\n \"language_id\": 123,\n \"type\": \"<string>\",\n \"mode\": \"<string>\",\n \"timezone\": \"<string>\",\n \"initial_message\": \"<string>\",\n \"system_prompt\": \"<string>\",\n \"llm_model_id\": 123,\n \"multimodal_model_id\": 123,\n \"chat_llm_fallback_id\": 123,\n \"turn_detection_threshold\": 123,\n \"secondary_language_ids\": [\n 123\n ],\n \"knowledgebase_id\": 123,\n \"knowledgebase_mode\": \"<string>\",\n \"folder_id\": 123,\n \"label_ids\": [\n 123\n ],\n \"phone_number_id\": 123,\n \"tool_ids\": [\n 123\n ],\n \"tools\": [\n {}\n ],\n \"tts_emotion_enabled\": true,\n \"voice_stability\": 123,\n \"voice_similarity\": 123,\n \"speech_speed\": 123,\n \"llm_temperature\": 123,\n \"synthesizer_provider_id\": 123,\n \"transcriber_provider_id\": 123,\n \"allow_interruptions\": true,\n \"fillers\": true,\n \"filler_config\": {},\n \"record\": true,\n \"enable_noise_cancellation\": true,\n \"wait_for_customer\": true,\n \"max_duration\": 123,\n \"max_silence_duration\": 123,\n \"max_initial_silence_duration\": 123,\n \"ringing_time\": 123,\n \"reengagement_interval\": 123,\n \"reengagement_prompt\": \"<string>\",\n \"end_call_on_voicemail\": true,\n \"voice_mail_message\": \"<string>\",\n \"endpoint_type\": \"<string>\",\n \"endpoint_sensitivity\": 123,\n \"interrupt_sensitivity\": 123,\n \"min_interrupt_words\": 123,\n \"ambient_sound\": \"<string>\",\n \"ambient_sound_volume\": 123,\n \"is_webhook_active\": true,\n \"webhook_url\": \"<string>\",\n \"send_webhook_only_on_completed\": true,\n \"include_recording_in_webhook\": true,\n \"post_call_evaluation\": true,\n \"post_call_schema\": [\n {\n \"name\": \"<string>\",\n \"type\": \"<string>\",\n \"description\": \"<string>\"\n }\n ],\n \"variables\": {}\n}"
response = http.request(request)
puts response.read_body{
"message": "Assistant updated successfully",
"data": {
"id": 789,
"name": "Updated Sales Assistant",
"status": "active",
"type": "outbound",
"mode": "pipeline"
}
}
{
"message": "Assistant not found"
}
{
"message": "Validation failed",
"errors": {
"speech_speed": ["Speech speed must be between 0.7 and 1.2."],
"voice_id": ["The selected voice is not compatible with the selected engine type."],
"allow_interruptions": ["Interruptions cannot be disabled in multimodal or dualplex mode."]
}
}
Assistants IA
Mettre à jour un assistant
Mettre à jour la configuration d’un assistant IA existant
PUT
/
api
/
user
/
assistant
/
{id}
Mettre à jour un assistant
curl --request PUT \
--url https://app.famulor.de/api/user/assistant/{id} \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"voice_id": 123,
"language_id": 123,
"type": "<string>",
"mode": "<string>",
"timezone": "<string>",
"initial_message": "<string>",
"system_prompt": "<string>",
"llm_model_id": 123,
"multimodal_model_id": 123,
"chat_llm_fallback_id": 123,
"turn_detection_threshold": 123,
"secondary_language_ids": [
123
],
"knowledgebase_id": 123,
"knowledgebase_mode": "<string>",
"folder_id": 123,
"label_ids": [
123
],
"phone_number_id": 123,
"tool_ids": [
123
],
"tools": [
{}
],
"tts_emotion_enabled": true,
"voice_stability": 123,
"voice_similarity": 123,
"speech_speed": 123,
"llm_temperature": 123,
"synthesizer_provider_id": 123,
"transcriber_provider_id": 123,
"allow_interruptions": true,
"fillers": true,
"filler_config": {},
"record": true,
"enable_noise_cancellation": true,
"wait_for_customer": true,
"max_duration": 123,
"max_silence_duration": 123,
"max_initial_silence_duration": 123,
"ringing_time": 123,
"reengagement_interval": 123,
"reengagement_prompt": "<string>",
"end_call_on_voicemail": true,
"voice_mail_message": "<string>",
"endpoint_type": "<string>",
"endpoint_sensitivity": 123,
"interrupt_sensitivity": 123,
"min_interrupt_words": 123,
"ambient_sound": "<string>",
"ambient_sound_volume": 123,
"is_webhook_active": true,
"webhook_url": "<string>",
"send_webhook_only_on_completed": true,
"include_recording_in_webhook": true,
"post_call_evaluation": true,
"post_call_schema": [
{
"name": "<string>",
"type": "<string>",
"description": "<string>"
}
],
"variables": {}
}
'import requests
url = "https://app.famulor.de/api/user/assistant/{id}"
payload = {
"name": "<string>",
"voice_id": 123,
"language_id": 123,
"type": "<string>",
"mode": "<string>",
"timezone": "<string>",
"initial_message": "<string>",
"system_prompt": "<string>",
"llm_model_id": 123,
"multimodal_model_id": 123,
"chat_llm_fallback_id": 123,
"turn_detection_threshold": 123,
"secondary_language_ids": [123],
"knowledgebase_id": 123,
"knowledgebase_mode": "<string>",
"folder_id": 123,
"label_ids": [123],
"phone_number_id": 123,
"tool_ids": [123],
"tools": [{}],
"tts_emotion_enabled": True,
"voice_stability": 123,
"voice_similarity": 123,
"speech_speed": 123,
"llm_temperature": 123,
"synthesizer_provider_id": 123,
"transcriber_provider_id": 123,
"allow_interruptions": True,
"fillers": True,
"filler_config": {},
"record": True,
"enable_noise_cancellation": True,
"wait_for_customer": True,
"max_duration": 123,
"max_silence_duration": 123,
"max_initial_silence_duration": 123,
"ringing_time": 123,
"reengagement_interval": 123,
"reengagement_prompt": "<string>",
"end_call_on_voicemail": True,
"voice_mail_message": "<string>",
"endpoint_type": "<string>",
"endpoint_sensitivity": 123,
"interrupt_sensitivity": 123,
"min_interrupt_words": 123,
"ambient_sound": "<string>",
"ambient_sound_volume": 123,
"is_webhook_active": True,
"webhook_url": "<string>",
"send_webhook_only_on_completed": True,
"include_recording_in_webhook": True,
"post_call_evaluation": True,
"post_call_schema": [
{
"name": "<string>",
"type": "<string>",
"description": "<string>"
}
],
"variables": {}
}
headers = {"Content-Type": "application/json"}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
voice_id: 123,
language_id: 123,
type: '<string>',
mode: '<string>',
timezone: '<string>',
initial_message: '<string>',
system_prompt: '<string>',
llm_model_id: 123,
multimodal_model_id: 123,
chat_llm_fallback_id: 123,
turn_detection_threshold: 123,
secondary_language_ids: [123],
knowledgebase_id: 123,
knowledgebase_mode: '<string>',
folder_id: 123,
label_ids: [123],
phone_number_id: 123,
tool_ids: [123],
tools: [{}],
tts_emotion_enabled: true,
voice_stability: 123,
voice_similarity: 123,
speech_speed: 123,
llm_temperature: 123,
synthesizer_provider_id: 123,
transcriber_provider_id: 123,
allow_interruptions: true,
fillers: true,
filler_config: {},
record: true,
enable_noise_cancellation: true,
wait_for_customer: true,
max_duration: 123,
max_silence_duration: 123,
max_initial_silence_duration: 123,
ringing_time: 123,
reengagement_interval: 123,
reengagement_prompt: '<string>',
end_call_on_voicemail: true,
voice_mail_message: '<string>',
endpoint_type: '<string>',
endpoint_sensitivity: 123,
interrupt_sensitivity: 123,
min_interrupt_words: 123,
ambient_sound: '<string>',
ambient_sound_volume: 123,
is_webhook_active: true,
webhook_url: '<string>',
send_webhook_only_on_completed: true,
include_recording_in_webhook: true,
post_call_evaluation: true,
post_call_schema: [{name: '<string>', type: '<string>', description: '<string>'}],
variables: {}
})
};
fetch('https://app.famulor.de/api/user/assistant/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?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>',
'voice_id' => 123,
'language_id' => 123,
'type' => '<string>',
'mode' => '<string>',
'timezone' => '<string>',
'initial_message' => '<string>',
'system_prompt' => '<string>',
'llm_model_id' => 123,
'multimodal_model_id' => 123,
'chat_llm_fallback_id' => 123,
'turn_detection_threshold' => 123,
'secondary_language_ids' => [
123
],
'knowledgebase_id' => 123,
'knowledgebase_mode' => '<string>',
'folder_id' => 123,
'label_ids' => [
123
],
'phone_number_id' => 123,
'tool_ids' => [
123
],
'tools' => [
[
]
],
'tts_emotion_enabled' => true,
'voice_stability' => 123,
'voice_similarity' => 123,
'speech_speed' => 123,
'llm_temperature' => 123,
'synthesizer_provider_id' => 123,
'transcriber_provider_id' => 123,
'allow_interruptions' => true,
'fillers' => true,
'filler_config' => [
],
'record' => true,
'enable_noise_cancellation' => true,
'wait_for_customer' => true,
'max_duration' => 123,
'max_silence_duration' => 123,
'max_initial_silence_duration' => 123,
'ringing_time' => 123,
'reengagement_interval' => 123,
'reengagement_prompt' => '<string>',
'end_call_on_voicemail' => true,
'voice_mail_message' => '<string>',
'endpoint_type' => '<string>',
'endpoint_sensitivity' => 123,
'interrupt_sensitivity' => 123,
'min_interrupt_words' => 123,
'ambient_sound' => '<string>',
'ambient_sound_volume' => 123,
'is_webhook_active' => true,
'webhook_url' => '<string>',
'send_webhook_only_on_completed' => true,
'include_recording_in_webhook' => true,
'post_call_evaluation' => true,
'post_call_schema' => [
[
'name' => '<string>',
'type' => '<string>',
'description' => '<string>'
]
],
'variables' => [
]
]),
CURLOPT_HTTPHEADER => [
"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 \"voice_id\": 123,\n \"language_id\": 123,\n \"type\": \"<string>\",\n \"mode\": \"<string>\",\n \"timezone\": \"<string>\",\n \"initial_message\": \"<string>\",\n \"system_prompt\": \"<string>\",\n \"llm_model_id\": 123,\n \"multimodal_model_id\": 123,\n \"chat_llm_fallback_id\": 123,\n \"turn_detection_threshold\": 123,\n \"secondary_language_ids\": [\n 123\n ],\n \"knowledgebase_id\": 123,\n \"knowledgebase_mode\": \"<string>\",\n \"folder_id\": 123,\n \"label_ids\": [\n 123\n ],\n \"phone_number_id\": 123,\n \"tool_ids\": [\n 123\n ],\n \"tools\": [\n {}\n ],\n \"tts_emotion_enabled\": true,\n \"voice_stability\": 123,\n \"voice_similarity\": 123,\n \"speech_speed\": 123,\n \"llm_temperature\": 123,\n \"synthesizer_provider_id\": 123,\n \"transcriber_provider_id\": 123,\n \"allow_interruptions\": true,\n \"fillers\": true,\n \"filler_config\": {},\n \"record\": true,\n \"enable_noise_cancellation\": true,\n \"wait_for_customer\": true,\n \"max_duration\": 123,\n \"max_silence_duration\": 123,\n \"max_initial_silence_duration\": 123,\n \"ringing_time\": 123,\n \"reengagement_interval\": 123,\n \"reengagement_prompt\": \"<string>\",\n \"end_call_on_voicemail\": true,\n \"voice_mail_message\": \"<string>\",\n \"endpoint_type\": \"<string>\",\n \"endpoint_sensitivity\": 123,\n \"interrupt_sensitivity\": 123,\n \"min_interrupt_words\": 123,\n \"ambient_sound\": \"<string>\",\n \"ambient_sound_volume\": 123,\n \"is_webhook_active\": true,\n \"webhook_url\": \"<string>\",\n \"send_webhook_only_on_completed\": true,\n \"include_recording_in_webhook\": true,\n \"post_call_evaluation\": true,\n \"post_call_schema\": [\n {\n \"name\": \"<string>\",\n \"type\": \"<string>\",\n \"description\": \"<string>\"\n }\n ],\n \"variables\": {}\n}")
req, _ := http.NewRequest("PUT", url, payload)
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))
}HttpResponse<String> response = Unirest.put("https://app.famulor.de/api/user/assistant/{id}")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"voice_id\": 123,\n \"language_id\": 123,\n \"type\": \"<string>\",\n \"mode\": \"<string>\",\n \"timezone\": \"<string>\",\n \"initial_message\": \"<string>\",\n \"system_prompt\": \"<string>\",\n \"llm_model_id\": 123,\n \"multimodal_model_id\": 123,\n \"chat_llm_fallback_id\": 123,\n \"turn_detection_threshold\": 123,\n \"secondary_language_ids\": [\n 123\n ],\n \"knowledgebase_id\": 123,\n \"knowledgebase_mode\": \"<string>\",\n \"folder_id\": 123,\n \"label_ids\": [\n 123\n ],\n \"phone_number_id\": 123,\n \"tool_ids\": [\n 123\n ],\n \"tools\": [\n {}\n ],\n \"tts_emotion_enabled\": true,\n \"voice_stability\": 123,\n \"voice_similarity\": 123,\n \"speech_speed\": 123,\n \"llm_temperature\": 123,\n \"synthesizer_provider_id\": 123,\n \"transcriber_provider_id\": 123,\n \"allow_interruptions\": true,\n \"fillers\": true,\n \"filler_config\": {},\n \"record\": true,\n \"enable_noise_cancellation\": true,\n \"wait_for_customer\": true,\n \"max_duration\": 123,\n \"max_silence_duration\": 123,\n \"max_initial_silence_duration\": 123,\n \"ringing_time\": 123,\n \"reengagement_interval\": 123,\n \"reengagement_prompt\": \"<string>\",\n \"end_call_on_voicemail\": true,\n \"voice_mail_message\": \"<string>\",\n \"endpoint_type\": \"<string>\",\n \"endpoint_sensitivity\": 123,\n \"interrupt_sensitivity\": 123,\n \"min_interrupt_words\": 123,\n \"ambient_sound\": \"<string>\",\n \"ambient_sound_volume\": 123,\n \"is_webhook_active\": true,\n \"webhook_url\": \"<string>\",\n \"send_webhook_only_on_completed\": true,\n \"include_recording_in_webhook\": true,\n \"post_call_evaluation\": true,\n \"post_call_schema\": [\n {\n \"name\": \"<string>\",\n \"type\": \"<string>\",\n \"description\": \"<string>\"\n }\n ],\n \"variables\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.famulor.de/api/user/assistant/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"voice_id\": 123,\n \"language_id\": 123,\n \"type\": \"<string>\",\n \"mode\": \"<string>\",\n \"timezone\": \"<string>\",\n \"initial_message\": \"<string>\",\n \"system_prompt\": \"<string>\",\n \"llm_model_id\": 123,\n \"multimodal_model_id\": 123,\n \"chat_llm_fallback_id\": 123,\n \"turn_detection_threshold\": 123,\n \"secondary_language_ids\": [\n 123\n ],\n \"knowledgebase_id\": 123,\n \"knowledgebase_mode\": \"<string>\",\n \"folder_id\": 123,\n \"label_ids\": [\n 123\n ],\n \"phone_number_id\": 123,\n \"tool_ids\": [\n 123\n ],\n \"tools\": [\n {}\n ],\n \"tts_emotion_enabled\": true,\n \"voice_stability\": 123,\n \"voice_similarity\": 123,\n \"speech_speed\": 123,\n \"llm_temperature\": 123,\n \"synthesizer_provider_id\": 123,\n \"transcriber_provider_id\": 123,\n \"allow_interruptions\": true,\n \"fillers\": true,\n \"filler_config\": {},\n \"record\": true,\n \"enable_noise_cancellation\": true,\n \"wait_for_customer\": true,\n \"max_duration\": 123,\n \"max_silence_duration\": 123,\n \"max_initial_silence_duration\": 123,\n \"ringing_time\": 123,\n \"reengagement_interval\": 123,\n \"reengagement_prompt\": \"<string>\",\n \"end_call_on_voicemail\": true,\n \"voice_mail_message\": \"<string>\",\n \"endpoint_type\": \"<string>\",\n \"endpoint_sensitivity\": 123,\n \"interrupt_sensitivity\": 123,\n \"min_interrupt_words\": 123,\n \"ambient_sound\": \"<string>\",\n \"ambient_sound_volume\": 123,\n \"is_webhook_active\": true,\n \"webhook_url\": \"<string>\",\n \"send_webhook_only_on_completed\": true,\n \"include_recording_in_webhook\": true,\n \"post_call_evaluation\": true,\n \"post_call_schema\": [\n {\n \"name\": \"<string>\",\n \"type\": \"<string>\",\n \"description\": \"<string>\"\n }\n ],\n \"variables\": {}\n}"
response = http.request(request)
puts response.read_body{
"message": "Assistant updated successfully",
"data": {
"id": 789,
"name": "Updated Sales Assistant",
"status": "active",
"type": "outbound",
"mode": "pipeline"
}
}
{
"message": "Assistant not found"
}
{
"message": "Validation failed",
"errors": {
"speech_speed": ["Speech speed must be between 0.7 and 1.2."],
"voice_id": ["The selected voice is not compatible with the selected engine type."],
"allow_interruptions": ["Interruptions cannot be disabled in multimodal or dualplex mode."]
}
}
API Famulor 1.0 (héritée). Cette page concerne uniquement Famulor 1.0 (
app.famulor.de) et est conservée pour la compatibilité. Pour la plateforme actuelle, consultez la référence API Famulor 2.0.Paramètre de chemin
integer
requis
L’identifiant unique de l’assistant à mettre à jour
Corps de la requête
Champs principaux
string
Le nom de l’assistant (255 caractères max.)
integer
L’ID de la voix à utiliser pour l’assistant. Utilisez le point de terminaison Récupérer les voix avec le paramètre
mode pour obtenir les voix compatibles avec votre mode de moteur.integer
L’ID de la langue de l’assistant. Utilisez le point de terminaison Récupérer les langues pour obtenir les langues disponibles.
string
Le type d’assistant. Options :
inbound, outboundstring
Le mode du moteur. Options :
pipeline, multimodal, dualplexChanger le mode réinitialise les paramètres spécifiques au mode aux valeurs par défaut du nouveau mode.
string
Le fuseau horaire de l’assistant (par ex. « Europe/Berlin », « America/New_York »)
string
Le message initial que l’assistant prononcera au début de l’appel (200 caractères max.)
string
Le prompt système définissant le comportement et la personnalité de l’assistant
Champs spécifiques au mode
integer
L’ID du modèle LLM à utiliser. Applicable uniquement en mode
pipeline.Utilisez le point de terminaison Récupérer les modèles pour obtenir les modèles disponibles.integer
L’ID du modèle multimodal. Applicable uniquement en modes
multimodal et dualplex.Utilisez le point de terminaison Récupérer les modèles pour obtenir les modèles multimodaux disponibles.integer
ID du modèle LLM de secours pour les appels d’outils en modes multimodal/dualplex. Définissez sur
null pour le supprimer.number
Sensibilité de la détection de tour de parole pour les modes multimodal/dualplex (0 à 1). Définissez sur
null pour l’automatique.Langues secondaires
integer[]
Tableau d’ID de langues supplémentaires que l’assistant peut parler. Remplace les langues secondaires existantes. Envoyez un tableau vide
[] pour supprimer toutes les langues secondaires."secondary_language_ids": [2, 3, 4]
Paramètres de la base de connaissances
integer
L’ID de la base de connaissances à lier. Définissez sur
null pour la supprimer.string
Comment utiliser la base de connaissances. Options :
function_call- L’IA appelle une fonction pour effectuer une recherche (requis pour multimodal/dualplex)prompt- Les connaissances sont injectées dans le prompt (pipeline uniquement)
Organisation
integer
ID d’un dossier dans lequel déplacer cet assistant. Doit appartenir à votre compte. Définissez sur
null pour le rendre non catégorisé. Omettez pour laisser le dossier inchangé.integer[]
Tableau d’ID d’étiquettes pour cet assistant. Chaque étiquette doit appartenir à votre compte. Lorsqu’il est fourni, ce champ remplace les étiquettes actuelles de l’assistant. Omettez pour laisser les étiquettes inchangées ; envoyez
[] pour toutes les supprimer."label_ids": [3, 5]
Numéro de téléphone
integer
L’ID d’un numéro de téléphone à attribuer. Définissez sur
null pour désattribuer. Doit appartenir à votre compte.Pour les assistants
inbound, le numéro de téléphone ne peut pas être de type identifiant d’appelant et ne doit pas déjà être attribué à un autre assistant entrant.Outils personnalisés en cours d’appel
integer[]
Tableau d’ID d’outils personnalisés en cours d’appel à synchroniser. Remplace toutes les attributions d’outils existantes. Envoyez un tableau vide
[] pour supprimer tous les outils. Chaque outil doit appartenir à votre compte."tool_ids": [1, 5, 12]
Outils intégrés
array
Tableau d’outils intégrés. Remplace tous les outils intégrés existants. Envoyez un tableau vide
[] pour supprimer tous les outils.Afficher Types d’outils
Afficher Types d’outils
call_transfer - Transférer l’appel vers un autre numéro de téléphone
phone_number(obligatoire) : numéro de téléphone vers lequel transférerdescription: quand transférer l’appelcustom: sitrue, l’IA peut déterminer dynamiquement le numéro de transferttimezone: fuseau horaire de disponibilité du transfertwarm_transfer: envoyer un message au client avant le transfert (par défaut :false)warm_transfer_message: prompt indiquant à l’IA quoi dire avant le transfert (par ex. « Indique au client que l’appel est en cours de transfert. »)
supervisor_phone(obligatoire) : numéro de téléphone à composer pour le transfert accompagné (par ex. « +14155552001 »). Sicustom_sipest activé, il s’agit à la place d’une adresse SIP ou d’un poste interne.outbound_phone_id(obligatoire) : ID du numéro de téléphone utilisé pour appeler le superviseur. Voir Récupérer les numéros de téléphone.description(obligatoire) : quand transférer — décrit le moment où l’IA doit lancer le transfert accompagné (par ex. « Transfère l’appel vers un superviseur humain lorsque le client demande à parler à une vraie personne. »)custom_sip: activez pour saisir une adresse SIP personnalisée ou un poste interne au lieu d’un numéro de téléphone (par défaut :false)caller_id_mode: quel numéro de téléphone le superviseur voit en recevant l’appel. Options :outbound_number(par défaut — affiche le numéro de téléphone sortant),customer_number(affiche le numéro de l’appelant),custom(affiche un numéro personnalisé)custom_caller_id: numéro de téléphone personnalisé affiché au superviseur. Utilisé uniquement lorsquecaller_id_modevautcustom.hold_music: audio joué à l’appelant pendant l’attente. Options :hold_music(par défaut — joue la musique d’attente par défaut),none(silence, sans musique)hold_music_volume: niveau de volume de la musique d’attente, de 0 à 100 (par défaut :80)hold_message: message prononcé à l’appelant avant de le mettre en attente (par défaut : « Veuillez patienter pendant que je vous mets en relation avec un superviseur. »)summary_instructions: instructions sur la façon dont l’IA doit briefer le superviseur au sujet de l’appel (par défaut : « Présente la conversation de ton point de vue :\n- QUI appelle (nom, entreprise si mentionnée)\n- POURQUOI il/elle a appelé (son objectif ou problème)\n- POURQUOI un humain est nécessaire à ce stade\n\nReste bref (2 à 3 phrases). »)briefing_initial_message: Premier message facultatif après que le superviseur a décroché et parlé en premier. Si le champ est vide, les instructions de résumé déterminent l’introduction ; une introduction générique localisée n’est utilisée que si ces instructions sont également vides. Accepter le briefing ne vaut pas accord pour connecter l’appel.connected_message: message prononcé à l’appelant une fois le superviseur connecté (par défaut : « Vous êtes maintenant en relation avec un superviseur. Je vous laisse échanger. »)
description: quand l’IA doit terminer l’appel
tones: séquence facultative à envoyer (0-9,*,#ouA-D; 1 à 32 caractères). Omettez-la pour laisser l’assistant choisir les tonalités pendant l’appel.description: quand utiliser la saisie DTMF (pour la navigation dans un SVI)
timeout: durée totale de collecte en secondes, de 5 à 120 (par défaut :30)stop_key: touche de soumission :#(défaut) ou*. Le mode exact exige le nombre fixe ;until_stopaccepte la touche après le minimum.digit_mode:exactpour un nombre fixe ouuntil_stoppour soumettre après le minimum. Sans configuration :until_stop; un nombre enregistré sans mode reste exact.min_digits: minimum en modeuntil_stop, de 1 à 32 (défaut 1), sans dépasser le maximum.max_digits: nombre exact ou maximum, de 1 à 32. Défaut 16 avecexactexplicite, sinon 32 sans configuration.
calcom_api_key(obligatoire) : votre clé API Cal.comcalcom_event_slug(obligatoire) : le slug du type d’événement Cal.comcalcom_team_slug: slug de l’équipe si l’événement appartient à une équipe Cal.comcalcom_endpoint: région de l’API Cal.com. Options :us(par défaut —https://api.cal.com),eu(https://api.cal.eu),custom(utilisecalcom_custom_endpoint)calcom_custom_endpoint: URL de base personnalisée de l’API Cal.com. Utilisé uniquement lorsquecalcom_endpointvautcustom(par ex.https://my-calcom-instance.com).calcom_booking_fields: tableau de champs de réservation personnalisés pour l’événement. Chaque champ comporte :slug(obligatoire),type(obligatoire, par ex. « text », « email », « phone », « select »),label(obligatoire),required(par défaut :false),options(tableau d’options pour les champs de type select)description: quand proposer la prise de rendez-vous
assistant_id(obligatoire) : ID de l’assistant cible. Doit appartenir à votre compte et ne peut pas être l’assistant en cours de mise à jour (pas d’auto-transfert).description: quand transférer (500 caractères max., par défaut : « Transfère la conversation vers cet assistant si approprié. »)message_before_transfer: message optionnel que l’IA prononce avant de basculer vers l’assistant cible (500 caractères max.).speak_transfer_greeting: sitrue, l’assistant cible prononce son message initial configuré une fois le transfert terminé (par défaut :true) Si false, l’assistant cible poursuit la demande en cours à partir du contexte transmis, sans répéter son accueil.
"tools": [
{
"type": "dtmf_input",
"description": "Naviguer dans le SVI si nécessaire"
},
{
"type": "warm_call_transfer",
"supervisor_phone": "+1234567890",
"outbound_phone_id": 7,
"description": "Transfer the call to a human supervisor when the customer requests to speak with a real person.",
"custom_sip": false,
"caller_id_mode": "outbound_number",
"hold_music": "hold_music",
"hold_music_volume": 80,
"hold_message": "Please hold while I connect you with a supervisor.",
"summary_instructions": "Introduce the conversation from your perspective:\n- WHO is calling (name, company if mentioned)\n- WHY they called (their goal or problem)\n- WHY a human is needed at this point\n\nKeep it brief (2-3 sentences).",
"briefing_initial_message": "Hello! I have a caller on the line who needs your assistance. May I brief you on the situation?",
"connected_message": "You are now connected with a supervisor. I'll leave you to it."
},
{
"type": "collect_keypad",
"timeout": 5,
"stop_key": "#"
},
{
"type": "assistant_transfer",
"assistant_id": 14765,
"description": "Transfer to the Support Assistant when the customer needs technical help.",
"message_before_transfer": "Sure — let me transfer you to our support specialist.",
"speak_transfer_greeting": true
},
{
"type": "end_call",
"description": "End call when done"
}
]
Lorsque vous listez les assistants, chaque outil configuré est renvoyé sous la forme
{ "type": "...", "data": { ... } }, avec les mêmes noms de champs imbriqués sous data (et non au premier niveau).Paramètres vocaux et TTS
boolean
Indique si la synthèse vocale émotionnelle est activée
number
Paramètre de stabilité de la voix (0 à 1). Plus élevé = voix plus constante
number
Paramètre de similarité de la voix (0 à 1). Plus élevé = plus proche de la voix d’origine
number
Multiplicateur de vitesse de parole (0,7 à 1,2)
number
Paramètre de température du LLM (0 à 1). Plus bas = plus déterministe
integer
ID du fournisseur TTS personnalisé. Définissez sur
null pour utiliser la voix par défaut du système. Voir Récupérer les fournisseurs de synthèse vocale.integer
ID du fournisseur STT personnalisé. Mode pipeline uniquement. Définissez sur
null pour utiliser la voix par défaut du système. Voir Récupérer les fournisseurs de transcription.Paramètres de comportement d’appel
boolean
Indique si les interruptions par l’appelant sont autorisées.
Ne peut pas être désactivé en modes
multimodal et dualplex.boolean
Indique si l’audio de remplissage doit être utilisé pendant le traitement.
Disponible uniquement en mode
pipeline.object
Profils de remplissage personnalisés par catégorie. Remplace la configuration de remplissage existante. Chaque catégorie est un tableau de phrases courtes.
positive: remplissages pour les réponses affirmativesnegative: remplissages pour les réponses négatives/neutresquestion: remplissages lors du traitement d’une questionneutral: remplissages pour les confirmations neutres
"filler_config": {
"positive": ["Great!", "Perfect!"],
"negative": ["Hmm.", "Understood."],
"question": ["Good question.", "One moment."],
"neutral": ["Okay.", "Noted."]
}
boolean
Indique si l’appel doit être enregistré
boolean
Indique si la suppression du bruit doit être activée
boolean
Si
true, l’assistant attend que le client parle en premierParamètres de temporisation
integer
Durée maximale de l’appel en secondes (20 à 1200)
integer
Durée maximale de silence avant relance en secondes (1 à 360)
integer
Silence maximal au début de l’appel avant la fin de l’appel (1 à 120 secondes). Définissez sur
null pour désactiver.integer
Durée maximale de sonnerie avant abandon (1 à 60 secondes)
Paramètres de relance
integer
Intervalle de relance en secondes (7 à 600)
string
Prompt personnalisé pour les messages de relance (1000 caractères max.). Définissez sur
null pour utiliser la valeur par défaut.Paramètres de messagerie vocale
boolean
Indique s’il faut terminer l’appel lorsqu’une messagerie vocale est détectée
string
Message à laisser sur la messagerie vocale avant de raccrocher (1000 caractères max.). Définissez sur
null pour désactiver.Détection de fin de parole
string
Type de détection d’activité vocale. Options :
vad, ainumber
Niveau de sensibilité de fin de parole (0 à 5)
number
Niveau de sensibilité aux interruptions (0 à 5)
integer
Nombre minimum de mots avant que l’interruption soit autorisée (0 à 10). Définissez sur
null pour désactiver.Son d’ambiance
string
Son d’ambiance de fond. Options :
off, office, city, forest, crowded_room, cafe, naturenumber
Volume du son d’ambiance (0 à 1)
Configuration du webhook
boolean
Indique si les notifications webhook sont activées
string
L’URL du webhook pour les notifications post-appel. Définissez sur
null pour la supprimer.boolean
Indique si les webhooks doivent être envoyés uniquement pour les appels terminés avec succès (pas en cas d’échec/absence de réponse)
boolean
Indique si l’URL de l’enregistrement doit être incluse dans la charge utile du webhook
Évaluation post-appel
boolean
Indique si l’évaluation post-appel basée sur l’IA est activée
array
Définition de schéma pour l’extraction des données post-appel. Remplace le schéma existant.
Variables
object
Paires clé-valeur pour les variables personnalisées. Remplace toutes les variables existantes.
"variables": {
"company_name": "Acme Corp",
"product": "Premium Widget"
}
Exemples de requêtes
Mettre à jour les paramètres de base
{
"name": "Updated Assistant Name",
"initial_message": "Hello! How can I help you today?",
"max_duration": 900
}
Basculer en mode multimodal
{
"mode": "multimodal",
"voice_id": 41,
"multimodal_model_id": 1,
"chat_llm_fallback_id": 2,
"knowledgebase_mode": "function_call"
}
Mettre à jour les outils et la base de connaissances
{
"tool_ids": [1, 5, 12],
"knowledgebase_id": 3,
"knowledgebase_mode": "prompt"
}
Mettre à jour la relance et la messagerie vocale
{
"reengagement_interval": 15,
"reengagement_prompt": "Are you still there? I'm here to help.",
"end_call_on_voicemail": true,
"voice_mail_message": "Hello, please call us back at your earliest convenience."
}
Supprimer des paramètres optionnels
{
"phone_number_id": null,
"webhook_url": null,
"tool_ids": [],
"secondary_language_ids": []
}
Réponse
string
Message de succès confirmant la mise à jour de l’assistant
object
{
"message": "Assistant updated successfully",
"data": {
"id": 789,
"name": "Updated Sales Assistant",
"status": "active",
"type": "outbound",
"mode": "pipeline"
}
}
{
"message": "Assistant not found"
}
{
"message": "Validation failed",
"errors": {
"speech_speed": ["Speech speed must be between 0.7 and 1.2."],
"voice_id": ["The selected voice is not compatible with the selected engine type."],
"allow_interruptions": ["Interruptions cannot be disabled in multimodal or dualplex mode."]
}
}
Remarques
- Seuls les champs fournis dans le corps de la requête seront mis à jour
- Pour supprimer des champs optionnels, définissez-les explicitement sur
null - Pour vider des tableaux (outils, langues secondaires), envoyez un tableau vide
[] - L’assistant doit appartenir à l’utilisateur authentifié
- Utilisez le point de terminaison Récupérer les voix avec le paramètre
modepour obtenir les voix compatibles - Pour les modes multimodal/dualplex,
knowledgebase_modedoit être défini surfunction_call - En modes multimodal/dualplex, les interruptions (
allow_interruptions) ne peuvent pas être désactivées - Changer de mode réinitialise les paramètres spécifiques au mode (modèle LLM, modèle multimodal, fournisseurs)