> ## 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.

# Outils intégrés

> Configurez des actions fiables en cours d'appel : terminez ou transférez un appel, envoyez des SMS ou des e-mails, vérifiez les heures d'ouverture et planifiez un rappel confirmé

Les outils intégrés sont des actions prêtes à l'emploi que l'assistant peut appeler pendant une conversation en direct. Contrairement à un flow, ils ne nécessitent aucun graphe : créez un outil réutilisable au niveau de l'espace de travail, décrivez *quand* il doit s'exécuter, puis attribuez-le à un ou plusieurs assistants. Il s'agit d'un **second chemin additif**, à côté des [nœuds de flow](/flow-builder/overview).

Chaque outil intégré est défensif : un outil mal configuré consigne un événement d'appel `builtin_tool_error`, et l'assistant continue de parler à l'appelant — un outil défectueux ne fait jamais planter un appel.

Sur les réponses automatiques **messagerie** (Telegram, Slack, Messenger, Teams, Discord, Google Chat, X) et **e-mail**, ces mêmes outils intégrés compatibles texte s'exécutent dans le chemin de réponse Next.js (API/MCP/base de connaissances/calendrier également). Les types réservés à la voix (`end_call`, transferts, DTMF/clavier, carte de paiement) n'y sont pas enregistrés.

## Les outils autonomes

| Outil                                                       | Ce qu'il fait                                                                                                                                                                                                                                 |
| ----------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Fin d'appel** (`end_call`)                                | Raccroche une fois que l'assistant a terminé sa tâche et dit au revoir.                                                                                                                                                                       |
| **Transfert d'appel** (`call_transfer`)                     | Transfert à froid (SIP REFER) vers un numéro de téléphone.                                                                                                                                                                                    |
| **Transfert d'appel accompagné** (`warm_call_transfer`)     | Met l'appelant en attente, appelle un collègue, le briefe, puis réunit les deux interlocuteurs.                                                                                                                                               |
| **Transfert vers un assistant** (`assistant_transfer`)      | Transfère l'appel en direct à un autre assistant IA du même espace de travail (IA → IA).                                                                                                                                                      |
| **Envoyer un SMS** (`send_sms`)                             | L'assistant rédige un SMS en cours d'appel et l'envoie — à l'appelant ou à un numéro fixe.                                                                                                                                                    |
| **Envoyer un e-mail** (`send_email`)                        | L'assistant rédige et envoie un e-mail pendant l'appel.                                                                                                                                                                                       |
| **Heures d'ouverture** (`check_business_hours`)             | Permet à l'assistant de vérifier si vous êtes actuellement ouvert — évalué dans le fuseau horaire de l'assistant.                                                                                                                             |
| **Planifier un rappel** (`schedule_callback`)               | L'assistant convient d'un horaire avec l'appelant ; une tâche cron compose le rappel automatiquement le moment venu. Toutes les réservations apparaissent en direct dans **Audience → Rappels programmés** (voix, chat/messagerie et e-mail). |
| **Collecter la carte de paiement** (`collect_payment_card`) | Active les nœuds de collecte de carte de paiement dans les flows. Les cartes sont tokenisées sur votre compte Stripe (votre clé secrète).                                                                                                     |
| **Définir une variable d'appel** (`set_variable`)           | Stocke une valeur en cours d'appel (par exemple le nom de l'entreprise). Le modèle en prend connaissance via le résultat de l'outil ; les outils suivants, les e-mails, les conditions de flow et les webhooks peuvent ensuite s'en servir.   |

La collecte au clavier est propre au flow : ajoutez un nœud **Collecte** dans le [Flow Builder](/flow-builder/overview), où le worker peut gérer en toute sécurité l'état DTMF et les transitions. Les actions de calendrier sont fournies par les [Intégrations](/assistants/calendar-booking). Les anciennes configurations autonomes `dtmf_input`, `collect_keypad` et `calendar_integration` sont conservées uniquement pour un affichage rétrocompatible et ne peuvent plus être créées comme nouveaux outils réutilisables.

## Activer un outil

Ouvrez **Outils**, créez un outil **Intégré**, renseignez ses champs, puis attribuez-le à un assistant. Son **nom**, obligatoire, est le nom exact de la fonction exposée au modèle, tandis que la **description** indique au modèle quand l'utiliser. Dans la vue Exécutions, les appels sont rattachés à l'outil réutilisable correspondant.

### Fin d'appel

Aucune configuration au-delà de la description. Le modèle doit terminer la demande et dire au revoir avant d'appeler la fonction ; le worker marque alors l'appel comme terminé et raccroche.

### Transfert d'appel (à froid)

* **Numéro de téléphone** — la destination fixe.
* **L'IA peut déterminer le numéro de transfert dynamiquement** — expose la destination sous forme d'argument de fonction à la place.
* **Message de transfert accompagné** — annonce optionnelle et non interruptible avant le transfert à froid.

### Transfert d'appel accompagné

Met l'appelant en attente et appelle d'abord un collègue :

* **Téléphone du superviseur** — qui appeler ; le trunk sortant configuré de l'espace de travail est utilisé.
* **Musique d'attente** — activée ou non, plus un **message d'attente** vocal optionnel.
* **Briefing** — **instructions de résumé** (comment résumer l'appel pour le collègue) et une **phrase d'ouverture du briefing** adressée au collègue ; les deux prennent en charge les `{{variables}}`.
* **Délai de sonnerie** et **repli** — poursuivre la conversation, raccrocher, ou basculer sur un transfert à froid si l'appel de consultation échoue.

### Transfert vers un assistant (IA → IA)

Transfère la session en direct à un autre assistant du **même espace de travail** sans raccrocher :

* **Assistant cible** (`assistant_id`) — obligatoire ; doit appartenir à l'espace de travail.
* **Message avant transfert** — ligne non interruptible optionnelle prononcée avant la bascule.
* **Énoncer le message d'accueil du transfert** — activé par défaut : le premier message / message d'accueil de l'assistant cible est joué juste après la bascule.
* **Description** — obligatoire : indiquez au modèle *quand* transférer (par exemple des questions tarifaires → assistant commercial).

Le modèle peut transmettre un court `reason` et un `conversation_summary` pour que l'assistant destinataire conserve le contexte. Le worker reconstruit le STT/LLM/TTS (ou le mode realtime) pour la cible, appelle `session.update_agent`, et écrit les événements d'appel `assistant_transfer` / `assistant_transfer_failed`. Un appel peut être transféré au maximum **trois fois** (protection anti-boucle). L'auto-transfert vers le même assistant est refusé.

### Envoyer un SMS

L'assistant rédige lui-même le texte du message à partir de la conversation et l'envoie en cours d'appel :

* **Destinataire** (`sms_to_mode`) — `caller` (par défaut : le numéro de l'appelant) ou `custom` avec un **numéro personnalisé** fixe (`sms_custom_number`, au format E.164, par exemple `+491701234567`).

Usage typique : envoyer par SMS une confirmation, une adresse ou un lien de paiement pendant que l'appel est encore en cours.

### Envoyer un e-mail

L'outil e-mail sépare la capture du destinataire, l'identité de l'expéditeur, le contenu et la signature, afin que chaque élément puisse être déterministe là où c'est nécessaire :

* **Destinataire** (`email_to_mode`) — `ask` passe par un flux dédié de capture d'e-mail pour normaliser une parole bruitée et obtenir une confirmation explicite ; `fixed` utilise `email_fixed_to`. Une adresse mal formée ou dictée à l'oral n'est jamais devinée au moment de l'envoi.
* **Expéditeur** (`email_sender_mode`) — `auto` essaie d'abord l'adresse SendGrid vérifiée de l'assistant, puis le SMTP de l'espace de travail/revendeur, puis la messagerie de la plateforme. Vous pouvez aussi choisir explicitement **SMTP de l'espace de travail**, **Messagerie de la plateforme**, ou une adresse vérifiée issue de `GET /api/v1/email-senders`. Un choix explicite échoue clairement plutôt que de basculer silencieusement sur un autre expéditeur.
* **Nom d'affichage** (`email_from_name`) — surcharge optionnelle par outil.
* **Contenu** (`email_content_mode`) — `llm` laisse le modèle rédiger l'objet et le corps à partir de l'appel ; `fixed` envoie toujours le texte littéral configuré ; `template` résout les `{{call_variables}}` et bloque l'envoi si une valeur est manquante.
* **Signature** (`email_signature_mode`) — signature par défaut de l'espace de travail (avec `{agent_name}` / `{{assistant_name}}`), une signature personnalisée par outil, ou aucune. Elle est ajoutée une seule fois par le code applicatif, jamais improvisée par le modèle.
* **Statut de livraison** — un résultat d'outil réussi signifie que le fournisseur SMTP a accepté le message, pas qu'il est arrivé dans la boîte de réception. Les suppressions SendGrid connues (rebonds, blocages, spam) sont vérifiées avant l'envoi et remontées à l'assistant comme un échec de livraison.

L'envoi, irréversible, désactive les interruptions, associe l'ID d'appel à l'historique des e-mails, et utilise une clé d'idempotence pour qu'un appel de fonction rejoué ne crée pas volontairement un second message.

### Heures d'ouverture

Permet à l'assistant de répondre honnêtement à « êtes-vous ouverts en ce moment ? » — et d'adopter un comportement différent en dehors des heures d'ouverture :

* **Heures d'ouverture** (`business_hours`) — un planning hebdomadaire, avec une ou plusieurs plages horaires par jour de la semaine (`{"mon": [["09:00", "17:00"]], ...}` — le même format que les plages d'appel de campagne).
* **Note** (`hours_note`) — un indice en texte libre optionnel, renvoyé avec le résultat (par exemple *« Fermé les jours fériés »*).

La vérification est évaluée dans le **[fuseau horaire](/assistants/timezone) de l'assistant** (celui d'une campagne le remplace pour l'appel en cours), donc « ouvert » signifie toujours ouvert *localement*.

### Planifier un rappel

L'assistant convient d'un horaire de rappel avec l'appelant ; la plateforme l'enregistre et une tâche cron compose automatiquement le rappel une fois l'échéance atteinte :

* **Numéro de rappel** (`callback_to_mode`) — `caller` (par défaut : rappeler l'appelant sur son propre numéro) ou `custom` avec un **numéro personnalisé** fixe (`callback_custom_number`, au format E.164).
* **Nombre maximum de jours à l'avance** (`max_days_ahead`) — jusqu'à combien de jours dans le futur un rappel peut être réservé (1 à 365 jours).

À l'exécution, la fonction exige une heure ISO-8601 exacte et un indicateur de confirmation positif. Les dates passées et celles au-delà de la limite configurée sont rejetées ; le worker n'applique jamais silencieusement un délai par défaut de 30 minutes et ne modifie jamais le choix de l'appelant.

### Collecter la carte de paiement

Active les nœuds de collecte **Carte de paiement** du [Flow Builder](/flow-builder/nodes). Ce n'est pas une action appelable par le LLM : elle conditionne le nœud de flow et détermine quel compte Stripe reçoit le moyen de paiement.

1. Ajoutez votre clé secrète Stripe dans **Outils → App Store → Stripe**.
2. Créez un outil intégré de type `collect_payment_card` et sélectionnez ce compte Stripe (`stripe_connection_id`).
3. Attribuez l'outil à un assistant.
4. Ajoutez un nœud Collecte de type **Carte de paiement** dans le flow.

Pendant l'appel, l'agent recueille les données de carte de façon sécurisée ; la plateforme crée un moyen de paiement Stripe sur **votre** compte Stripe, avec votre clé secrète. Seuls `card_last4`, `card_brand` et `stripe_payment_method_id` sont stockés — jamais le numéro complet de la carte ni le CVV. Nécessite la fonctionnalité de forfait **Collecter les cartes de paiement**. Facturé par collecte réussie (voir les paramètres de crédits).

Sans connexion à une clé secrète Stripe, le formulaire de l'outil affiche une invite à en ajouter une d'abord — il n'existe aucune solution de repli de la plateforme pour les données de carte client.

### Définir une variable d'appel

Permet à l'assistant de stocker une valeur en cours d'appel (par exemple le nom de l'entreprise de l'appelant), afin que les outils suivants, les e-mails, les conditions de flow et le webhook post-appel puissent l'utiliser :

* **Clés autorisées** (`allowed_keys`) — liste blanche optionnelle en snake\_case. Vide = n'importe quelle clé valide, sauf les clés réservées de la plateforme (`assistant_name`, `direction`, `call_id`, `date`, `time`, `datetime`, `weekday`).
* **Description** — indiquez au modèle *quand* enregistrer (par exemple une fois que l'appelant a donné le nom de son entreprise).

L'outil écrit dans la table de variables de l'appel en cours et renvoie `{"updated":{"key":"value"}}`, de sorte que le modèle apprend la valeur stockée via le résultat de l'outil. Il ne réécrit **pas** le prompt système en cours d'appel (les modèles realtime l'ignoreraient). Une chaîne vide efface une clé.

## Outil système : get\_current\_time

Indépendamment des outils configurables ci-dessus, chaque assistant dispose toujours de l'outil système **`get_current_time`** — aucune configuration, il ne peut pas être désactivé. Le modèle l'appelle dès que la date ou l'heure actuelle entre en jeu (résoudre *« demain à 15h »*, vérifier une échéance, prendre un rendez-vous).

L'heure renvoyée est localisée dans le **fuseau horaire** de l'assistant (`assistants.timezone`, un identifiant IANA comme `Europe/Berlin`). Lors des appels de campagne, le **fuseau horaire de la campagne** le remplace pour l'appel en cours (`meta.timezone ?? assistant.timezone`) — voir [Fuseau horaire](/assistants/timezone).

## API et MCP

Les outils intégrés se trouvent dans le tableau `builtin_tools` de l'assistant (également accepté sous le nom `tools`, pour compatibilité). Configurez-les via l'API publique :

```bash theme={null}
curl -X PATCH https://app.famulor.io/api/v1/assistants/{id} \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "tools": [
      { "type": "end_call", "description": "Hang up politely once the caller is done." },
      { "type": "send_email", "email_to_mode": "ask",
        "email_sender_mode": "auto", "email_content_mode": "llm",
        "email_signature_mode": "workspace" }
    ]
  }'
```

Le même contrat de champs est utilisé par l'éditeur, l'API REST et le MCP. `GET /api/v1/email-senders` et l'outil MCP `list_email_senders` exposent le catalogue d'expéditeurs sans données secrètes ; voir la [référence API](/api-reference/introduction).
