Skip to main content
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. 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

La collecte au clavier est propre au flow : ajoutez un nœud Collecte dans le Flow Builder, 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. 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.
  • Briefinginstructions 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 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. 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.

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