Créer un assistant
curl --request POST \
--url https://app.famulor.de/api/user/assistant \
--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": {},
"conversation_inactivity_timeout": 123,
"conversation_ended_retrigger": true,
"conversation_ended_webhook_url": "<string>"
}
'import requests
url = "https://app.famulor.de/api/user/assistant"
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": {},
"conversation_inactivity_timeout": 123,
"conversation_ended_retrigger": True,
"conversation_ended_webhook_url": "<string>"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
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: {},
conversation_inactivity_timeout: 123,
conversation_ended_retrigger: true,
conversation_ended_webhook_url: '<string>'
})
};
fetch('https://app.famulor.de/api/user/assistant', 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",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
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' => [
],
'conversation_inactivity_timeout' => 123,
'conversation_ended_retrigger' => true,
'conversation_ended_webhook_url' => '<string>'
]),
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"
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 \"conversation_inactivity_timeout\": 123,\n \"conversation_ended_retrigger\": true,\n \"conversation_ended_webhook_url\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", 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.post("https://app.famulor.de/api/user/assistant")
.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 \"conversation_inactivity_timeout\": 123,\n \"conversation_ended_retrigger\": true,\n \"conversation_ended_webhook_url\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.famulor.de/api/user/assistant")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.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 \"conversation_inactivity_timeout\": 123,\n \"conversation_ended_retrigger\": true,\n \"conversation_ended_webhook_url\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"message": "Assistant created successfully",
"data": {
"id": 789,
"name": "Sales Assistant",
"status": "inactive",
"type": "outbound",
"mode": "pipeline"
}
}
{
"message": "Validation failed",
"errors": {
"name": ["The name field is required."],
"voice_id": ["The selected voice is not compatible with the chosen engine type."],
"knowledgebase_mode": ["Only function_call mode is available for multimodal assistants."]
}
}
Assistants IA
Créer un assistant
Créer un nouvel assistant IA avec la configuration spécifiée
POST
/
api
/
user
/
assistant
Créer un assistant
curl --request POST \
--url https://app.famulor.de/api/user/assistant \
--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": {},
"conversation_inactivity_timeout": 123,
"conversation_ended_retrigger": true,
"conversation_ended_webhook_url": "<string>"
}
'import requests
url = "https://app.famulor.de/api/user/assistant"
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": {},
"conversation_inactivity_timeout": 123,
"conversation_ended_retrigger": True,
"conversation_ended_webhook_url": "<string>"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
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: {},
conversation_inactivity_timeout: 123,
conversation_ended_retrigger: true,
conversation_ended_webhook_url: '<string>'
})
};
fetch('https://app.famulor.de/api/user/assistant', 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",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
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' => [
],
'conversation_inactivity_timeout' => 123,
'conversation_ended_retrigger' => true,
'conversation_ended_webhook_url' => '<string>'
]),
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"
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 \"conversation_inactivity_timeout\": 123,\n \"conversation_ended_retrigger\": true,\n \"conversation_ended_webhook_url\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", 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.post("https://app.famulor.de/api/user/assistant")
.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 \"conversation_inactivity_timeout\": 123,\n \"conversation_ended_retrigger\": true,\n \"conversation_ended_webhook_url\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.famulor.de/api/user/assistant")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.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 \"conversation_inactivity_timeout\": 123,\n \"conversation_ended_retrigger\": true,\n \"conversation_ended_webhook_url\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"message": "Assistant created successfully",
"data": {
"id": 789,
"name": "Sales Assistant",
"status": "inactive",
"type": "outbound",
"mode": "pipeline"
}
}
{
"message": "Validation failed",
"errors": {
"name": ["The name field is required."],
"voice_id": ["The selected voice is not compatible with the chosen engine type."],
"knowledgebase_mode": ["Only function_call mode is available for multimodal assistants."]
}
}
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.Créer un nouvel assistant IA avec la configuration spécifiéeCe point de terminaison vous permet de créer un nouvel assistant IA avec des options de configuration complètes.
Modes du moteur
L’API prend en charge trois modes de moteur aux capacités différentes :| Mode | Description | Champs requis |
|---|---|---|
pipeline | Pipeline classique STT → LLM → TTS | llm_model_id |
multimodal | IA multimodale en temps réel | multimodal_model_id |
dualplex | « Cerveau » multimodal + voix TTS personnalisée | multimodal_model_id |
Corps de la requête
Champs principaux requis
string
requis
Le nom de l’assistant (255 caractères maximum)
integer
requis
L’ID de la voix pour l’assistant. Utilisez le point de terminaison Récupérer les voix avec le paramètre de requête
mode pour obtenir les voix compatibles avec votre mode de moteur.integer
requis
L’ID de la langue pour l’assistant. Utilisez le point de terminaison Récupérer les langues pour obtenir les langues disponibles.
string
requis
Le type d’assistant. Options :
inbound, outboundstring
requis
Le mode du moteur. Options :
pipeline, multimodal, dualplexstring
requis
Le fuseau horaire de l’assistant (par ex. « Europe/Berlin », « America/New_York »)
string
requis
Le premier message que l’assistant prononce au début de l’appel (200 caractères maximum)
string
requis
Le prompt système qui définit le comportement et la personnalité de l’assistant
Champs spécifiques au mode
integer
L’ID du modèle LLM. Requis pour le 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. Requis pour les 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 repli pour les appels d’outils en
multimodal/dualplex. Facultatif.number
Sensibilité de la détection de tour de parole en
multimodal/dualplex (0-1). Par défaut : autoLangues secondaires
integer[]
Tableau d’ID de langues supplémentaires que l’assistant peut parler. L’assistant reconnaît automatiquement la langue et bascule en conséquence.
"secondary_language_ids": [2, 3, 4]
Paramètres de la base de connaissances
integer
L’ID de la base de connaissances à associer à cet assistant
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 placer cet assistant. Doit appartenir à votre compte. Envoyez
null pour laisser l’assistant non classé.integer[]
Tableau d’ID d’étiquette à appliquer à cet assistant. Chaque étiquette doit appartenir à votre compte.
"label_ids": [3, 5]
Numéro de téléphone
integer
L’ID d’un numéro de téléphone à attribuer à l’assistant. Doit appartenir à votre compte.
Pour les assistants
inbound, le numéro de téléphone ne doit pas être de type identifiant d’appelant et ne doit pas déjà être attribué à un autre assistant inbound.Outils mid-call personnalisés
integer[]
Tableau d’ID des outils mid-call personnalisés à associer. Chaque outil doit appartenir à votre compte.
"tool_ids": [1, 5, 12]
Outils intégrés
array
Tableau d’outils intégrés. Chaque outil possède un champ
type et des champs spécifiques à l’outil. Lors de Mettre à jour un assistant, ceci remplace tous les outils intégrés existants — transmettez 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(requis) : 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 pour la 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. « Informez le client que l’appel est en cours de transfert. »)
supervisor_phone(requis) : 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(requis) : 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(requis) : quand transférer — décrit dans quel cas l’IA doit lancer le transfert accompagné (par ex. « Transférez l’appel à 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 à la place 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 à la réception de l’appel. Options :outbound_number(par défaut — affiche le numéro 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 diffusé à l’appelant pendant la mise en attente. Options :hold_music(par défaut — joue la musique d’attente par défaut),none(silence, pas de musique)hold_music_volume: niveau de volume de la musique d’attente, 0 à 100 (par défaut :80)hold_message: message prononcé à l’appelant avant sa mise en attente (par défaut : « Please hold while I connect you with a supervisor. »)summary_instructions: instructions sur la façon dont l’IA doit briefer le superviseur au sujet de l’appel (par défaut : « 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: 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 : « You are now connected with a supervisor. I’ll leave you to it. »)
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(requis) : votre clé API Cal.comcalcom_event_slug(requis) : 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ée 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(requis),type(requis, par ex. « text », « email », « phone », « select »),label(requis),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(requis) : 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 maximum, par défaut : « Transfer the conversation to this assistant when appropriate. »)message_before_transfer: message facultatif que l’IA prononce avant de basculer vers l’assistant cible (500 caractères maximum).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 lister les assistants, chaque outil configuré est renvoyé sous la forme
{ "type": "...", "data": { ... } }, avec les mêmes noms de champs imbriqués sous data (pas au niveau racine).Paramètres de voix et TTS
boolean
défaut:"true"
Indique si la synthèse vocale émotionnelle est activée
number
défaut:"0.70"
Stabilité de la voix (0-1). Plus élevé = plus constant
number
défaut:"0.50"
Similarité de la voix (0-1). Plus élevé = plus proche de l’originale
number
défaut:"1.00"
Multiplicateur de vitesse d’élocution (0.7-1.2)
number
défaut:"0.10"
Température du LLM (0-1). Plus faible = plus déterministe
integer
ID du fournisseur TTS personnalisé. Si non défini, sélectionné automatiquement selon la langue. Voir Récupérer les fournisseurs de synthèse vocale.
integer
ID du fournisseur STT personnalisé. Si non défini, sélectionné automatiquement selon la langue. Uniquement pour
pipeline. Voir Récupérer les fournisseurs de transcription.Paramètres de comportement d’appel
boolean
défaut:"true"
Indique si les interruptions de l’appelant sont autorisées.
Ne peut pas être désactivé pour
multimodal et dualplex.boolean
défaut:"false"
Indique si un audio de remplissage doit être utilisé pendant le traitement (par ex. « euh », « un instant »).
Disponible uniquement en mode
pipeline.object
Profils de remplissage personnalisés par catégorie. Si non spécifié, des valeurs par défaut selon la langue sont utilisées. Chaque catégorie est un tableau de phrases courtes.
positive: formules pour les réponses affirmatives (par ex. « Super ! », « Parfait ! »)negative: formules pour les réponses négatives/neutres (par ex. « Hum. », « Mhm. »)question: formules pendant le traitement d’une question (par ex. « Bonne question. », « Un instant. »)neutral: formules pour les accusés de réception neutres (par ex. « D’accord. », « Compris. »)
"filler_config": {
"positive": ["Great!", "Perfect!", "Very good!"],
"negative": ["Hmm.", "Understood.", "Okay."],
"question": ["Good question.", "One moment.", "Let me check."],
"neutral": ["Okay.", "Understood.", "Noted."]
}
boolean
défaut:"false"
Indique si l’appel doit être enregistré
boolean
défaut:"true"
Indique si la suppression du bruit doit être activée
boolean
défaut:"false"
Si
true, l’assistant attend que le client parle en premierParamètres de durée
integer
défaut:"600"
Durée maximale de l’appel en secondes (20-1200)
integer
défaut:"40"
Durée maximale de silence avant relance, en secondes (1-360)
integer
Silence maximal juste après le début de l’appel avant fin d’appel (1 à 120 secondes). Facultatif.
integer
défaut:"30"
Durée maximale de sonnerie avant annulation (1 à 60 secondes)
Paramètres de relance
integer
défaut:"30"
Intervalle de relance en secondes (7-600)
string
Prompt personnalisé pour les messages de relance (1000 caractères maximum)Exemple :
"Are you still there? Do you have any other questions?"Paramètres de messagerie vocale
boolean
défaut:"true"
Indique s’il faut terminer l’appel en cas de détection d’une messagerie vocale
string
Message à laisser sur la messagerie vocale (1000 caractères maximum)
Détection de tour de parole
string
défaut:"vad"
Type de détection d’activité vocale. Options :
vad, ainumber
défaut:"0.5"
Sensibilité de détection de fin de tour (0-5)
number
défaut:"0.5"
Sensibilité aux interruptions (0-5)
integer
Nombre minimum de mots avant que l’interruption soit autorisée (0-10). À définir pour activer.
Son d’ambiance
string
Son d’ambiance de fond. Options :
off, office, city, forest, crowded_room, cafe, naturenumber
défaut:"0.5"
Volume du son d’ambiance (0-1)
Configuration du webhook
boolean
défaut:"false"
Indique si les notifications webhook sont activées
string
L’URL du webhook pour les notifications post-appel. Requis si
is_webhook_active vaut true.boolean
défaut:"true"
Indique s’il faut envoyer des webhooks uniquement pour les appels terminés (pas pour les échecs/sans réponse)
boolean
défaut:"true"
Indique s’il faut inclure l’URL de l’enregistrement dans le payload du webhook
Évaluation post-appel
boolean
défaut:"true"
Indique si l’évaluation post-appel par IA est activée
array
Définition de schéma pour l’extraction des données post-appel
Afficher Propriétés de post_call_schema
Afficher Propriétés de post_call_schema
"post_call_schema": [
{"name": "status", "type": "bool", "description": "Whether the call objective was met"},
{"name": "summary", "type": "string", "description": "Brief summary of the call"}
]
Variables
object
Paires clé-valeur de variables personnalisées utilisables dans les prompts via
{{variable_name}}"variables": {
"company_name": "Acme GmbH",
"product": "Premium Widget",
"support_email": "support@acme.com"
}
Paramètres de fin de conversation
integer
défaut:"30"
Minutes d’inactivité du chat avant que la conversation soit considérée comme terminée (1 à 1440)
boolean
défaut:"false"
Indique si la conversation peut redémarrer après une fin par inactivité
string
URL du webhook appelée lorsqu’une conversation de chat se termine par inactivité. Distincte du webhook d’appel.
Exemples de requêtes
Assistant en mode pipeline
{
"name": "Sales Assistant",
"voice_id": 1,
"language_id": 1,
"type": "outbound",
"mode": "pipeline",
"timezone": "Europe/Berlin",
"initial_message": "Hello! How can I assist you today?",
"system_prompt": "You are a professional sales assistant...",
"llm_model_id": 2,
"secondary_language_ids": [2, 3],
"knowledgebase_id": 1,
"knowledgebase_mode": "prompt",
"fillers": true,
"filler_config": {
"positive": ["Great!", "Perfect!", "Very good!"],
"negative": ["Hmm.", "Understood."],
"question": ["Good question.", "One moment."],
"neutral": ["Okay.", "Noted.", "Understood."]
},
"tool_ids": [1, 5],
"tools": [
{"type": "dtmf_input", "description": "Naviguer dans le SVI si nécessaire"},
{
"type": "warm_call_transfer",
"supervisor_phone": "+1234567891",
"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 the customer is satisfied"}
],
"reengagement_interval": 20,
"reengagement_prompt": "Are you still there?"
}
Assistant en mode multimodal
{
"name": "Support Bot",
"voice_id": 41,
"language_id": 1,
"type": "inbound",
"mode": "multimodal",
"timezone": "America/New_York",
"initial_message": "Hi! Welcome to support.",
"system_prompt": "You are a helpful support agent...",
"multimodal_model_id": 1,
"chat_llm_fallback_id": 2,
"turn_detection_threshold": 0.7,
"knowledgebase_id": 1,
"knowledgebase_mode": "function_call",
"tts_emotion_enabled": false
}
Assistant en mode dualplex
{
"name": "Premium Agent",
"voice_id": 1,
"language_id": 2,
"type": "outbound",
"mode": "dualplex",
"timezone": "Europe/Berlin",
"initial_message": "Good day!",
"system_prompt": "You are a professional assistant...",
"multimodal_model_id": 4,
"chat_llm_fallback_id": 2,
"secondary_language_ids": [1, 3],
"knowledgebase_id": 1,
"knowledgebase_mode": "function_call",
"ambient_sound": "office",
"ambient_sound_volume": 0.3
}
Réponse
string
Message de succès confirmant la création de l’assistant
object
{
"message": "Assistant created successfully",
"data": {
"id": 789,
"name": "Sales Assistant",
"status": "inactive",
"type": "outbound",
"mode": "pipeline"
}
}
{
"message": "Validation failed",
"errors": {
"name": ["The name field is required."],
"voice_id": ["The selected voice is not compatible with the chosen engine type."],
"knowledgebase_mode": ["Only function_call mode is available for multimodal assistants."]
}
}
Remarques
- Tous les champs requis doivent être fournis pour que la création réussisse
- Utilisez le point de terminaison Récupérer les voix avec le paramètre de requête
modepour obtenir les voix compatibles - Pour
multimodal/dualplex,knowledgebase_modedoit être défini surfunction_call - Pour
multimodal/dualplex,allow_interruptionsest toujours activé fillersn’est disponible qu’en modepipeline- Les nouveaux assistants sont créés avec le statut
inactivepar défaut