> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ouraicalling.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Mettre à jour un assistant

> Mettre à jour la configuration d’un assistant IA existant

<Warning>
  **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](/fr/api-reference/introduction).
</Warning>

Ce point de terminaison vous permet de mettre à jour la configuration d’un assistant IA existant. Tous les champs sont optionnels – seuls les champs fournis seront mis à jour. Pour une description détaillée des champs et des options, consultez [Créer un assistant](/fr/api-v1/assistants/create).

### Paramètre de chemin

<ParamField path="id" type="integer" required>
  L’identifiant unique de l’assistant à mettre à jour
</ParamField>

### Corps de la requête

#### Champs principaux

<ParamField body="name" type="string">
  Le nom de l’assistant (255 caractères max.)
</ParamField>

<ParamField body="voice_id" type="integer">
  L’ID de la voix à utiliser pour l’assistant. Utilisez le point de terminaison [Récupérer les voix](/fr/api-v1/assistants/voices) avec le paramètre `mode` pour obtenir les voix compatibles avec votre mode de moteur.
</ParamField>

<ParamField body="language_id" type="integer">
  L’ID de la langue de l’assistant. Utilisez le point de terminaison [Récupérer les langues](/fr/api-v1/assistants/languages) pour obtenir les langues disponibles.
</ParamField>

<ParamField body="type" type="string">
  Le type d’assistant. Options : `inbound`, `outbound`
</ParamField>

<ParamField body="mode" type="string">
  Le mode du moteur. Options : `pipeline`, `multimodal`, `dualplex`

  <Warning>
    Changer le mode réinitialise les paramètres spécifiques au mode aux valeurs par défaut du nouveau mode.
  </Warning>
</ParamField>

<ParamField body="timezone" type="string">
  Le fuseau horaire de l’assistant (par ex. « Europe/Berlin », « America/New\_York »)
</ParamField>

<ParamField body="initial_message" type="string">
  Le message initial que l’assistant prononcera au début de l’appel (200 caractères max.)
</ParamField>

<ParamField body="system_prompt" type="string">
  Le prompt système définissant le comportement et la personnalité de l’assistant
</ParamField>

#### Champs spécifiques au mode

<ParamField body="llm_model_id" type="integer">
  L’ID du modèle LLM à utiliser. Applicable uniquement en mode `pipeline`.

  Utilisez le point de terminaison [Récupérer les modèles](/fr/api-v1/assistants/models) pour obtenir les modèles disponibles.
</ParamField>

<ParamField body="multimodal_model_id" type="integer">
  L’ID du modèle multimodal. Applicable uniquement en modes `multimodal` et `dualplex`.

  Utilisez le point de terminaison [Récupérer les modèles](/fr/api-v1/assistants/models) pour obtenir les modèles multimodaux disponibles.
</ParamField>

<ParamField body="chat_llm_fallback_id" type="integer">
  ID du modèle LLM de secours pour les appels d’outils en modes multimodal/dualplex. Définissez sur `null` pour le supprimer.
</ParamField>

<ParamField body="turn_detection_threshold" type="number">
  Sensibilité de la détection de tour de parole pour les modes multimodal/dualplex (0 à 1). Définissez sur `null` pour l’automatique.
</ParamField>

#### Langues secondaires

<ParamField body="secondary_language_ids" type="integer[]">
  Tableau d’ID de langues supplémentaires que l’assistant peut parler. Remplace les langues secondaires existantes. Envoyez un tableau vide `[]` pour supprimer toutes les langues secondaires.

  ```json theme={null} theme={null}
  "secondary_language_ids": [2, 3, 4]
  ```
</ParamField>

#### Paramètres de la base de connaissances

<ParamField body="knowledgebase_id" type="integer">
  L’ID de la base de connaissances à lier. Définissez sur `null` pour la supprimer.
</ParamField>

<ParamField body="knowledgebase_mode" type="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)
</ParamField>

#### Organisation

<ParamField body="folder_id" type="integer">
  ID d’un [dossier](/fr/api-v1/folders/create) dans lequel déplacer cet assistant. Doit appartenir à votre compte. Définissez sur `null` pour le rendre non catégorisé. Omettez pour laisser le dossier inchangé.
</ParamField>

<ParamField body="label_ids" type="integer[]">
  Tableau d’ID d’[étiquettes](/fr/api-v1/labels/create) pour cet assistant. Chaque étiquette doit appartenir à votre compte. Lorsqu’il est fourni, ce champ **remplace** les étiquettes actuelles de l’assistant. Omettez pour laisser les étiquettes inchangées ; envoyez `[]` pour toutes les supprimer.

  ```json theme={null} theme={null}
  "label_ids": [3, 5]
  ```
</ParamField>

#### Numéro de téléphone

<ParamField body="phone_number_id" type="integer">
  L’ID d’un numéro de téléphone à attribuer. Définissez sur `null` pour désattribuer. Doit appartenir à votre compte.

  <Warning>
    Pour les assistants `inbound`, le numéro de téléphone ne peut pas être de type identifiant d’appelant et ne doit pas déjà être attribué à un autre assistant entrant.
  </Warning>
</ParamField>

#### Outils personnalisés en cours d’appel

<ParamField body="tool_ids" type="integer[]">
  Tableau d’ID d’outils personnalisés en cours d’appel à synchroniser. **Remplace toutes les attributions d’outils existantes.** Envoyez un tableau vide `[]` pour supprimer tous les outils. Chaque outil doit appartenir à votre compte.

  ```json theme={null} theme={null}
  "tool_ids": [1, 5, 12]
  ```
</ParamField>

#### Outils intégrés

<ParamField body="tools" type="array">
  Tableau d’outils intégrés. **Remplace tous les outils intégrés existants.** Envoyez un tableau vide `[]` pour supprimer tous les outils.

  <Expandable title="Types d’outils">
    **call\_transfer** - Transférer l’appel vers un autre numéro de téléphone

    * `phone_number` (obligatoire) : numéro de téléphone vers lequel transférer
    * `description` : quand transférer l’appel
    * `custom` : si `true`, l’IA peut déterminer dynamiquement le numéro de transfert
    * `timezone` : fuseau horaire de disponibilité du transfert
    * `warm_transfer` : envoyer un message au client avant le transfert (par défaut : `false`)
    * `warm_transfer_message` : prompt indiquant à l’IA quoi dire avant le transfert (par ex. « Indique au client que l’appel est en cours de transfert. »)

    **warm\_call\_transfer** - Transfert accompagné avec briefing du superviseur

    * `supervisor_phone` (obligatoire) : numéro de téléphone à composer pour le transfert accompagné (par ex. « +14155552001 »). Si `custom_sip` est activé, il s’agit à la place d’une adresse SIP ou d’un poste interne.
    * `outbound_phone_id` (obligatoire) : ID du numéro de téléphone utilisé pour appeler le superviseur. Voir [Récupérer les numéros de téléphone](/fr/api-v1/assistants/phone-numbers).
    * `description` (obligatoire) : quand transférer — décrit le moment où l’IA doit lancer le transfert accompagné (par ex. « Transfère l’appel vers un superviseur humain lorsque le client demande à parler à une vraie personne. »)
    * `custom_sip` : activez pour saisir une adresse SIP personnalisée ou un poste interne au lieu d’un numéro de téléphone (par défaut : `false`)
    * `caller_id_mode` : quel numéro de téléphone le superviseur voit en recevant l’appel. Options : `outbound_number` (par défaut — affiche le numéro de téléphone sortant), `customer_number` (affiche le numéro de l’appelant), `custom` (affiche un numéro personnalisé)
    * `custom_caller_id` : numéro de téléphone personnalisé affiché au superviseur. Utilisé uniquement lorsque `caller_id_mode` vaut `custom`.
    * `hold_music` : audio joué à l’appelant pendant l’attente. Options : `hold_music` (par défaut — joue la musique d’attente par défaut), `none` (silence, sans musique)
    * `hold_music_volume` : niveau de volume de la musique d’attente, de 0 à 100 (par défaut : `80`)
    * `hold_message` : message prononcé à l’appelant avant de le mettre en attente (par défaut : « Veuillez patienter pendant que je vous mets en relation avec un superviseur. »)
    * `summary_instructions` : instructions sur la façon dont l’IA doit briefer le superviseur au sujet de l’appel (par défaut : « Présente la conversation de ton point de vue :\n- QUI appelle (nom, entreprise si mentionnée)\n- POURQUOI il/elle a appelé (son objectif ou problème)\n- POURQUOI un humain est nécessaire à ce stade\n\nReste bref (2 à 3 phrases). »)
    * `briefing_initial_message` : le premier message que l’IA dit au superviseur lorsqu’il/elle répond (par défaut : « Bonjour ! J’ai un appelant en ligne qui a besoin de votre aide. Puis-je vous exposer la situation ? »)
    * `connected_message` : message prononcé à l’appelant une fois le superviseur connecté (par défaut : « Vous êtes maintenant en relation avec un superviseur. Je vous laisse échanger. »)

    **end\_call** - Terminer l’appel de manière programmatique

    * `description` : quand l’IA doit terminer l’appel

    **dtmf\_input** - Envoyer des tonalités DTMF (saisie au clavier)

    * `description` : quand utiliser la saisie DTMF (pour la navigation dans un SVI)

    **collect\_keypad** - Collecter la saisie au clavier de l’appelant

    * `timeout` : secondes à attendre la saisie, de 1 à 30 (par défaut : `5`)
    * `stop_key` : touche qui termine la saisie. Options : `#` (par défaut), `*`

    **calendar\_integration** - Planifier des rendez-vous via Cal.com

    * `calcom_api_key` (obligatoire) : votre clé API Cal.com
    * `calcom_event_slug` (obligatoire) : le slug du type d’événement Cal.com
    * `calcom_team_slug` : slug de l’équipe si l’événement appartient à une équipe Cal.com
    * `calcom_endpoint` : région de l’API Cal.com. Options : `us` (par défaut — `https://api.cal.com`), `eu` (`https://api.cal.eu`), `custom` (utilise `calcom_custom_endpoint`)
    * `calcom_custom_endpoint` : URL de base personnalisée de l’API Cal.com. Utilisé uniquement lorsque `calcom_endpoint` vaut `custom` (par ex. `https://my-calcom-instance.com`).
    * `calcom_booking_fields` : tableau de champs de réservation personnalisés pour l’événement. Chaque champ comporte : `slug` (obligatoire), `type` (obligatoire, par ex. « text », « email », « phone », « select »), `label` (obligatoire), `required` (par défaut : `false`), `options` (tableau d’options pour les champs de type select)
    * `description` : quand proposer la prise de rendez-vous

    **assistant\_transfer** - Transmettre la conversation à un autre assistant IA en cours d’appel (bascule la voix, le LLM et le STT vers l’assistant cible)

    * `assistant_id` (obligatoire) : ID de l’assistant cible. Doit appartenir à votre compte et ne peut pas être l’assistant en cours de mise à jour (pas d’auto-transfert).
    * `description` : quand transférer (500 caractères max., par défaut : « Transfère la conversation vers cet assistant si approprié. »)
    * `message_before_transfer` : message optionnel que l’IA prononce avant de basculer vers l’assistant cible (500 caractères max.).
    * `speak_transfer_greeting` : si `true`, l’assistant cible prononce son message initial configuré une fois le transfert terminé (par défaut : `true`)
  </Expandable>

  ```json theme={null} theme={null}
  "tools": [
    {
      "type": "dtmf_input",
      "description": "Navigate IVR when needed"
    },
    {
      "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"
    }
  ]
  ```

  <Note>
    Lorsque vous [listez les assistants](/fr/api-v1/assistants/list), chaque outil configuré est renvoyé sous la forme `{ "type": "...", "data": { ... } }`, avec les mêmes noms de champs imbriqués sous `data` (et non au premier niveau).
  </Note>
</ParamField>

#### Paramètres vocaux et TTS

<ParamField body="tts_emotion_enabled" type="boolean">
  Indique si la synthèse vocale émotionnelle est activée
</ParamField>

<ParamField body="voice_stability" type="number">
  Paramètre de stabilité de la voix (0 à 1). Plus élevé = voix plus constante
</ParamField>

<ParamField body="voice_similarity" type="number">
  Paramètre de similarité de la voix (0 à 1). Plus élevé = plus proche de la voix d’origine
</ParamField>

<ParamField body="speech_speed" type="number">
  Multiplicateur de vitesse de parole (0,7 à 1,2)
</ParamField>

<ParamField body="llm_temperature" type="number">
  Paramètre de température du LLM (0 à 1). Plus bas = plus déterministe
</ParamField>

<ParamField body="synthesizer_provider_id" type="integer">
  ID du fournisseur TTS personnalisé. Définissez sur `null` pour utiliser la voix par défaut du système. Voir [Récupérer les fournisseurs de synthèse vocale](/fr/api-v1/assistants/synthesizer-providers).
</ParamField>

<ParamField body="transcriber_provider_id" type="integer">
  ID du fournisseur STT personnalisé. Mode pipeline uniquement. Définissez sur `null` pour utiliser la voix par défaut du système. Voir [Récupérer les fournisseurs de transcription](/fr/api-v1/assistants/transcriber-providers).
</ParamField>

#### Paramètres de comportement d’appel

<ParamField body="allow_interruptions" type="boolean">
  Indique si les interruptions par l’appelant sont autorisées.

  <Warning>Ne peut pas être désactivé en modes `multimodal` et `dualplex`.</Warning>
</ParamField>

<ParamField body="fillers" type="boolean">
  Indique si l’audio de remplissage doit être utilisé pendant le traitement.

  <Warning>Disponible uniquement en mode `pipeline`.</Warning>
</ParamField>

<ParamField body="filler_config" type="object">
  Profils de remplissage personnalisés par catégorie. Remplace la configuration de remplissage existante. Chaque catégorie est un tableau de phrases courtes.

  * `positive` : remplissages pour les réponses affirmatives
  * `negative` : remplissages pour les réponses négatives/neutres
  * `question` : remplissages lors du traitement d’une question
  * `neutral` : remplissages pour les confirmations neutres

  ```json theme={null} theme={null}
  "filler_config": {
    "positive": ["Great!", "Perfect!"],
    "negative": ["Hmm.", "Understood."],
    "question": ["Good question.", "One moment."],
    "neutral": ["Okay.", "Noted."]
  }
  ```
</ParamField>

<ParamField body="record" type="boolean">
  Indique si l’appel doit être enregistré
</ParamField>

<ParamField body="enable_noise_cancellation" type="boolean">
  Indique si la suppression du bruit doit être activée
</ParamField>

<ParamField body="wait_for_customer" type="boolean">
  Si `true`, l’assistant attend que le client parle en premier
</ParamField>

#### Paramètres de temporisation

<ParamField body="max_duration" type="integer">
  Durée maximale de l’appel en secondes (20 à 1200)
</ParamField>

<ParamField body="max_silence_duration" type="integer">
  Durée maximale de silence avant relance en secondes (1 à 360)
</ParamField>

<ParamField body="max_initial_silence_duration" type="integer">
  Silence maximal au début de l’appel avant la fin de l’appel (1 à 120 secondes). Définissez sur `null` pour désactiver.
</ParamField>

<ParamField body="ringing_time" type="integer">
  Durée maximale de sonnerie avant abandon (1 à 60 secondes)
</ParamField>

#### Paramètres de relance

<ParamField body="reengagement_interval" type="integer">
  Intervalle de relance en secondes (7 à 600)
</ParamField>

<ParamField body="reengagement_prompt" type="string">
  Prompt personnalisé pour les messages de relance (1000 caractères max.). Définissez sur `null` pour utiliser la valeur par défaut.
</ParamField>

#### Paramètres de messagerie vocale

<ParamField body="end_call_on_voicemail" type="boolean">
  Indique s’il faut terminer l’appel lorsqu’une messagerie vocale est détectée
</ParamField>

<ParamField body="voice_mail_message" type="string">
  Message à laisser sur la messagerie vocale avant de raccrocher (1000 caractères max.). Définissez sur `null` pour désactiver.
</ParamField>

#### Détection de fin de parole

<ParamField body="endpoint_type" type="string">
  Type de détection d’activité vocale. Options : `vad`, `ai`
</ParamField>

<ParamField body="endpoint_sensitivity" type="number">
  Niveau de sensibilité de fin de parole (0 à 5)
</ParamField>

<ParamField body="interrupt_sensitivity" type="number">
  Niveau de sensibilité aux interruptions (0 à 5)
</ParamField>

<ParamField body="min_interrupt_words" type="integer">
  Nombre minimum de mots avant que l’interruption soit autorisée (0 à 10). Définissez sur `null` pour désactiver.
</ParamField>

#### Son d’ambiance

<ParamField body="ambient_sound" type="string">
  Son d’ambiance de fond. Options : `off`, `office`, `city`, `forest`, `crowded_room`, `cafe`, `nature`
</ParamField>

<ParamField body="ambient_sound_volume" type="number">
  Volume du son d’ambiance (0 à 1)
</ParamField>

#### Configuration du webhook

<ParamField body="is_webhook_active" type="boolean">
  Indique si les notifications webhook sont activées
</ParamField>

<ParamField body="webhook_url" type="string">
  L’URL du webhook pour les notifications post-appel. Définissez sur `null` pour la supprimer.
</ParamField>

<ParamField body="send_webhook_only_on_completed" type="boolean">
  Indique si les webhooks doivent être envoyés uniquement pour les appels terminés avec succès (pas en cas d’échec/absence de réponse)
</ParamField>

<ParamField body="include_recording_in_webhook" type="boolean">
  Indique si l’URL de l’enregistrement doit être incluse dans la charge utile du webhook
</ParamField>

#### Évaluation post-appel

<ParamField body="post_call_evaluation" type="boolean">
  Indique si l’évaluation post-appel basée sur l’IA est activée
</ParamField>

<ParamField body="post_call_schema" type="array">
  Définition de schéma pour l’extraction des données post-appel. Remplace le schéma existant.

  <Expandable title="Propriétés de post_call_schema">
    <ParamField body="name" type="string" required>
      Nom du champ (3 à 16 caractères, minuscules, alphanumériques et underscores uniquement)
    </ParamField>

    <ParamField body="type" type="string" required>
      Type de donnée. Options : `string`, `number`, `bool`
    </ParamField>

    <ParamField body="description" type="string" required>
      Description de ce que représente ce champ (3 à 255 caractères)
    </ParamField>
  </Expandable>
</ParamField>

#### Variables

<ParamField body="variables" type="object">
  Paires clé-valeur pour les variables personnalisées. **Remplace toutes les variables existantes.**

  ```json theme={null} theme={null}
  "variables": {
    "company_name": "Acme Corp",
    "product": "Premium Widget"
  }
  ```
</ParamField>

***

## Exemples de requêtes

### Mettre à jour les paramètres de base

```json theme={null} theme={null}
{
  "name": "Updated Assistant Name",
  "initial_message": "Hello! How can I help you today?",
  "max_duration": 900
}
```

### Basculer en mode multimodal

```json theme={null} theme={null}
{
  "mode": "multimodal",
  "voice_id": 41,
  "multimodal_model_id": 1,
  "chat_llm_fallback_id": 2,
  "knowledgebase_mode": "function_call"
}
```

### Mettre à jour les outils et la base de connaissances

```json theme={null} theme={null}
{
  "tool_ids": [1, 5, 12],
  "knowledgebase_id": 3,
  "knowledgebase_mode": "prompt"
}
```

### Mettre à jour la relance et la messagerie vocale

```json theme={null} theme={null}
{
  "reengagement_interval": 15,
  "reengagement_prompt": "Are you still there? I'm here to help.",
  "end_call_on_voicemail": true,
  "voice_mail_message": "Hello, please call us back at your earliest convenience."
}
```

### Supprimer des paramètres optionnels

```json theme={null} theme={null}
{
  "phone_number_id": null,
  "webhook_url": null,
  "tool_ids": [],
  "secondary_language_ids": []
}
```

***

## Réponse

<ResponseField name="message" type="string">
  Message de succès confirmant la mise à jour de l’assistant
</ResponseField>

<ResponseField name="data" type="object">
  <Expandable title="Propriétés">
    <ResponseField name="id" type="integer">
      L’ID unique de l’assistant mis à jour
    </ResponseField>

    <ResponseField name="name" type="string">
      Le nom de l’assistant
    </ResponseField>

    <ResponseField name="status" type="string">
      Le statut actuel de l’assistant
    </ResponseField>

    <ResponseField name="type" type="string">
      Le type (`inbound` ou `outbound`)
    </ResponseField>

    <ResponseField name="mode" type="string">
      Le mode du moteur (`pipeline`, `multimodal` ou `dualplex`)
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseExample>
  ```json 200 Success theme={null} theme={null}
  {
    "message": "Assistant updated successfully",
    "data": {
      "id": 789,
      "name": "Updated Sales Assistant",
      "status": "active",
      "type": "outbound",
      "mode": "pipeline"
    }
  }
  ```

  ```json 404 Not Found theme={null} theme={null}
  {
    "message": "Assistant not found"
  }
  ```

  ```json 422 Validation Error theme={null} theme={null}
  {
    "message": "Validation failed",
    "errors": {
      "speech_speed": ["Speech speed must be between 0.7 and 1.2."],
      "voice_id": ["The selected voice is not compatible with the selected engine type."],
      "allow_interruptions": ["Interruptions cannot be disabled in multimodal or dualplex mode."]
    }
  }
  ```
</ResponseExample>

***

## Remarques

* Seuls les champs fournis dans le corps de la requête seront mis à jour
* Pour supprimer des champs optionnels, définissez-les explicitement sur `null`
* Pour vider des tableaux (outils, langues secondaires), envoyez un tableau vide `[]`
* L’assistant doit appartenir à l’utilisateur authentifié
* Utilisez le point de terminaison [Récupérer les voix](/fr/api-v1/assistants/voices) avec le paramètre `mode` pour obtenir les voix compatibles
* Pour les modes multimodal/dualplex, `knowledgebase_mode` doit être défini sur `function_call`
* En modes multimodal/dualplex, les interruptions (`allow_interruptions`) ne peuvent pas être désactivées
* Changer de mode réinitialise les paramètres spécifiques au mode (modèle LLM, modèle multimodal, fournisseurs)
