Crear asistentes
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."]
}
}
Asistentes de IA
Crear asistentes
Crea un nuevo asistente de IA con la configuración especificada
POST
/
api
/
user
/
assistant
Crear asistentes
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 de Famulor 1.0 (legado). Esta página se aplica únicamente a Famulor 1.0 (
app.famulor.de) y se conserva por compatibilidad. Para la plataforma actual, usa la referencia de la API de Famulor 2.0.Crea un nuevo asistente de IA con la configuración especificadaEste endpoint te permite crear un nuevo asistente de IA con amplias opciones de configuración.
Modos de motor
La API admite tres modos de motor con diferentes capacidades:| Modo | Descripción | Campos obligatorios |
|---|---|---|
pipeline | Pipeline clásica STT → LLM → TTS | llm_model_id |
multimodal | IA multimodal en tiempo real | multimodal_model_id |
dualplex | ”Brain” multimodal + voz TTS personalizada | multimodal_model_id |
Cuerpo de la solicitud
Campos principales obligatorios
string
requerido
El nombre del asistente (máx. 255 caracteres)
integer
requerido
El ID de voz del asistente. Usa el endpoint Obtener voces con el parámetro de consulta
mode para obtener las voces compatibles con tu modo de motor.integer
requerido
El ID de idioma del asistente. Usa el endpoint Obtener idiomas para obtener los idiomas disponibles.
string
requerido
El tipo de asistente. Opciones:
inbound, outboundstring
requerido
El modo de motor. Opciones:
pipeline, multimodal, dualplexstring
requerido
La zona horaria del asistente (p. ej., “Europe/Berlin”, “America/New_York”)
string
requerido
El primer mensaje que dice el asistente al inicio de la llamada (máx. 200 caracteres)
string
requerido
El prompt del sistema que define el comportamiento y la personalidad del asistente
Campos específicos del modo
integer
El ID del modelo LLM. Obligatorio para el modo
pipeline.Usa el endpoint Obtener modelos para obtener los modelos disponibles.integer
El ID del modelo multimodal. Obligatorio para los modos
multimodal y dualplex.Usa el endpoint Obtener modelos para obtener los modelos multimodales disponibles.integer
ID del modelo LLM de respaldo para llamadas a herramientas en
multimodal/dualplex. Opcional.number
Sensibilidad de la detección de turnos en
multimodal/dualplex (0-1). Predeterminado: automáticoIdiomas secundarios
integer[]
Array de IDs de idiomas adicionales que el asistente puede hablar. El asistente reconoce automáticamente el idioma y cambia en consecuencia.
"secondary_language_ids": [2, 3, 4]
Ajustes de la base de conocimientos
integer
El ID de la base de conocimientos que se debe adjuntar a este asistente
string
Cómo se usa la base de conocimientos. Opciones:
function_call- la IA llama a una función para buscar (obligatorio para multimodal/dualplex)prompt- el conocimiento se inyecta en el prompt (solo pipeline)
Organización
integer
ID de una carpeta en la que colocar este asistente. Debe pertenecer a tu cuenta. Envía
null para dejar el asistente sin categorizar.integer[]
Array de IDs de etiquetas que se aplicarán a este asistente. Cada etiqueta debe pertenecer a tu cuenta.
"label_ids": [3, 5]
Número de teléfono
integer
El ID de un número de teléfono para asignar al asistente. Debe pertenecer a tu cuenta.
En los asistentes
inbound, el número de teléfono no debe ser de tipo caller ID y no debe estar ya asignado a otro asistente inbound.Herramientas personalizadas durante la llamada
integer[]
Array de IDs de herramientas personalizadas durante la llamada que se deben adjuntar. Cada herramienta debe pertenecer a tu cuenta.
"tool_ids": [1, 5, 12]
Herramientas integradas
array
Array de herramientas integradas. Cada herramienta tiene un campo
type y campos específicos de la herramienta. En Actualizar asistente, esto sustituye todas las herramientas integradas existentes: envía un array vacío [] para eliminarlas todas.Mostrar Tipos de herramienta
Mostrar Tipos de herramienta
call_transfer - Transferir la llamada a otro número de teléfono
phone_number(obligatorio): número de teléfono al que transferirdescription: cuándo transferir la llamadacustom: si estrue, la IA puede determinar el número de transferencia de forma dinámicatimezone: zona horaria para la disponibilidad de la transferenciawarm_transfer: enviar un mensaje a quien llama antes de transferir (predeterminado:false)warm_transfer_message: instrucción que indica a la IA qué decir antes de transferir (p. ej., “Indica a quien llama que la llamada se está transfiriendo.”)
supervisor_phone(obligatorio): número de teléfono al que llamar para la transferencia asistida (p. ej., “+14155552001”). Sicustom_sipestá activado, esto es una dirección SIP o una extensión interna en su lugar.outbound_phone_id(obligatorio): ID del número de teléfono usado para llamar al supervisor. Consulta Obtener números de teléfono.description(obligatorio): cuándo transferir; describe cuándo la IA debe iniciar la transferencia asistida (p. ej., “Transfiere la llamada a un supervisor humano cuando quien llama solicite hablar con una persona real.”)custom_sip: actívalo para introducir una dirección SIP personalizada o una extensión interna en lugar de un número de teléfono (predeterminado:false)caller_id_mode: qué número de teléfono ve el supervisor al recibir la llamada. Opciones:outbound_number(predeterminado; muestra el número de teléfono saliente),customer_number(muestra el número de quien llama),custom(muestra un número personalizado)custom_caller_id: número de teléfono personalizado que se muestra al supervisor. Solo se usa cuandocaller_id_modeescustom.hold_music: audio que se reproduce a quien llama mientras espera. Opciones:hold_music(predeterminado; reproduce la música de espera predeterminada),none(silencio, sin música)hold_music_volume: nivel de volumen de la música de espera, 0-100 (predeterminado:80)hold_message: mensaje que se dice a quien llama antes de ponerlo en espera (predeterminado: “Por favor, espera mientras te conecto con un supervisor.”)summary_instructions: instrucciones sobre cómo debe informar la IA al supervisor sobre la llamada (predeterminado: “Presenta la conversación desde tu perspectiva:\n- QUIÉN llama (nombre, empresa si se menciona)\n- POR QUÉ ha llamado (su objetivo o problema)\n- POR QUÉ se necesita una persona en este momento\n\nSé breve (2-3 frases).”)briefing_initial_message: Primer mensaje opcional después de que el supervisor responde y habla primero. Si está vacío, las instrucciones de resumen determinan el inicio; solo se utiliza una introducción genérica localizada cuando estas también están vacías. Aceptar el resumen no autoriza la conexión.connected_message: mensaje que se dice a quien llama después de conectar con el supervisor (predeterminado: “Ya estás conectado con un supervisor. Te dejo con él.”)
description: cuándo debe la IA finalizar la llamada
tones: secuencia opcional que se enviará (0-9,*,#oA-D; 1–32 caracteres). Omítela para que el asistente elija los tonos durante la llamada.description: cuándo usar la entrada DTMF (para navegación por IVR)
timeout: tiempo total de recopilación en segundos, 5–120 (predeterminado:30)stop_key: tecla de envío:#(predeterminado) o*. El modo exacto requiere la cantidad fija;until_stopacepta la tecla tras el mínimo.digit_mode:exactpara una cantidad fija ountil_stoppara enviar tras el mínimo. Sin configuración se usauntil_stop; una cantidad guardada sin modo sigue siendo exacta.min_digits: mínimo en modountil_stop, 1–32 (predeterminado 1), sin superar el máximo.max_digits: cantidad exacta o máximo, 1–32. Predeterminado 16 conexactexplícito; 32 sin configuración.
calcom_api_key(obligatorio): tu clave de API de Cal.comcalcom_event_slug(obligatorio): el slug del tipo de evento de Cal.comcalcom_team_slug: slug del equipo si el evento pertenece a un equipo de Cal.comcalcom_endpoint: región de la API de Cal.com. Opciones:us(predeterminado;https://api.cal.com),eu(https://api.cal.eu),custom(usacalcom_custom_endpoint)calcom_custom_endpoint: URL base personalizada de la API de Cal.com. Solo se usa cuandocalcom_endpointescustom(p. ej.,https://my-calcom-instance.com).calcom_booking_fields: array de campos de reserva personalizados para el evento. Cada campo tiene:slug(obligatorio),type(obligatorio, p. ej. “text”, “email”, “phone”, “select”),label(obligatorio),required(predeterminado:false),options(array de opciones para campos select)description: cuándo ofrecer la programación
assistant_id(obligatorio): ID del asistente de destino. Debe pertenecer a tu cuenta y no puede ser el asistente que se está actualizando (no se permite la autotransferencia).description: cuándo transferir (máx. 500 caracteres, predeterminado: “Transfiere la conversación a este asistente cuando corresponda.”)message_before_transfer: mensaje opcional que dice la IA antes de cambiar al asistente de destino (máx. 500 caracteres).speak_transfer_greeting: si estrue, el asistente de destino dice su mensaje inicial configurado después de completar la transferencia (predeterminado:true) Si false, el asistente de destino continúa la solicitud actual con el contexto transferido, sin repetir el saludo inicial.
"tools": [
{
"type": "dtmf_input",
"description": "Navegar por el IVR cuando sea necesario"
},
{
"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"
}
]
Cuando enumeras los asistentes, cada herramienta configurada se devuelve como
{ "type": "...", "data": { ... } }, con los mismos nombres de campo anidados bajo data (no en el nivel superior).Ajustes de voz y TTS
boolean
predeterminado:"true"
Si la síntesis de voz emocional (TTS) está habilitada
number
predeterminado:"0.70"
Estabilidad de la voz (0-1). Más alto = más consistente
number
predeterminado:"0.50"
Similitud de voz (0-1). Más alto = más cercano al original
number
predeterminado:"1.00"
Multiplicador de velocidad de habla (0.7-1.2)
number
predeterminado:"0.10"
Temperatura del LLM (0-1). Más bajo = más determinista
integer
ID del proveedor de TTS personalizado. Si no se indica, se selecciona automáticamente según el idioma. Consulta Obtener proveedores de síntesis de voz.
integer
ID del proveedor de STT personalizado. Si no se indica, se selecciona automáticamente según el idioma. Solo para
pipeline. Consulta Obtener proveedores de transcripción.Ajustes de comportamiento de la llamada
boolean
predeterminado:"true"
Si se permiten las interrupciones de quien llama.
No se puede desactivar en
multimodal y dualplex.boolean
predeterminado:"false"
Si se deben usar frases de relleno en audio durante el procesamiento (p. ej., “eh”, “un momento”).
Solo disponible en el modo
pipeline.object
Perfiles de frases de relleno personalizados por categoría. Si no se especifica, se usan los valores predeterminados según el idioma. Cada categoría es un array de frases cortas.
positive: frases de relleno para respuestas afirmativas (p. ej., “¡Genial!”, “¡Perfecto!”)negative: frases de relleno para respuestas negativas o neutras (p. ej., “Mmm.”, “Ajá.”)question: frases de relleno mientras se procesa una pregunta (p. ej., “Buena pregunta.”, “Un momento.”)neutral: frases de relleno para confirmaciones neutras (p. ej., “Vale.”, “Entendido.”)
"filler_config": {
"positive": ["Great!", "Perfect!", "Very good!"],
"negative": ["Hmm.", "Understood.", "Okay."],
"question": ["Good question.", "One moment.", "Let me check."],
"neutral": ["Okay.", "Understood.", "Noted."]
}
boolean
predeterminado:"false"
Si la llamada debe grabarse
boolean
predeterminado:"true"
Si se debe habilitar la cancelación de ruido
boolean
predeterminado:"false"
Si es
true, el asistente espera a que quien llama hable primeroAjustes de tiempo
integer
predeterminado:"600"
Duración máxima de la llamada en segundos (20-1200)
integer
predeterminado:"40"
Duración máxima del silencio antes del reenganche, en segundos (1-360)
integer
Silencio máximo justo después de iniciar la llamada antes de finalizarla (1-120 segundos). Opcional.
integer
predeterminado:"30"
Tiempo máximo de timbre antes de cancelar (1-60 segundos)
Ajustes de reenganche
integer
predeterminado:"30"
Intervalo de reenganche en segundos (7-600)
string
Prompt personalizado para los mensajes de reenganche (máx. 1000 caracteres)Ejemplo:
"¿Sigues ahí? ¿Tienes alguna otra pregunta?"Ajustes de buzón de voz
boolean
predeterminado:"true"
Si se debe finalizar la llamada al detectar un buzón de voz
string
Mensaje que se deja en el buzón de voz (máx. 1000 caracteres)
Detección de fin de turno
string
predeterminado:"vad"
Tipo de detección de actividad de voz. Opciones:
vad, ainumber
predeterminado:"0.5"
Sensibilidad de fin de turno (0-5)
number
predeterminado:"0.5"
Sensibilidad a la interrupción (0-5)
integer
Número mínimo de palabras antes de permitir la interrupción (0-10). Defínelo para activarlo.
Sonido ambiental
string
Sonido ambiental de fondo. Opciones:
off, office, city, forest, crowded_room, cafe, naturenumber
predeterminado:"0.5"
Volumen del sonido ambiental (0-1)
Configuración del webhook
boolean
predeterminado:"false"
Si las notificaciones de webhook están habilitadas
string
La URL del webhook para las notificaciones posteriores a la llamada. Obligatoria si
is_webhook_active es true.boolean
predeterminado:"true"
Si se deben enviar webhooks solo para las llamadas completadas (no para las fallidas o sin respuesta)
boolean
predeterminado:"true"
Si se debe incluir la URL de la grabación en el payload del webhook
Evaluación posterior a la llamada
boolean
predeterminado:"true"
Si la evaluación de IA posterior a la llamada está habilitada
array
Definición del esquema para la extracción de datos posteriores a la llamada
Mostrar Propiedades de post_call_schema
Mostrar Propiedades 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
Pares clave-valor de variables personalizadas que se pueden usar en los prompts mediante
{{variable_name}}"variables": {
"company_name": "Acme GmbH",
"product": "Premium Widget",
"support_email": "support@acme.com"
}
Ajustes de fin de conversación
integer
predeterminado:"30"
Minutos de inactividad del chat antes de considerar que la conversación ha finalizado (1–1440)
boolean
predeterminado:"false"
Si la conversación se puede reiniciar después de finalizar por inactividad
string
URL del webhook que se invoca cuando una conversación de chat finaliza por inactividad. Independiente del webhook de llamadas.
Ejemplos de solicitud
Asistente en modo 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": "Navegar por el IVR cuando sea necesario"},
{
"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?"
}
Asistente en modo 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
}
Asistente en modo 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
}
Respuesta
string
Mensaje de éxito que confirma la creación del asistente
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."]
}
}
Notas
- Todos los campos obligatorios deben proporcionarse para que la creación se realice correctamente
- Usa el endpoint Obtener voces con el parámetro de consulta
modepara obtener las voces compatibles - Para
multimodal/dualplex,knowledgebase_modedebe establecerse enfunction_call - Para
multimodal/dualplex,allow_interruptionsestá siempre habilitado fillerssolo está disponible en el modopipeline- Los asistentes nuevos se crean con el estado
inactivede forma predeterminada