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.
- 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).
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) oucustomavec un numéro personnalisé fixe (sms_custom_number, au format E.164, par exemple+491701234567).
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) —askpasse par un flux dédié de capture d’e-mail pour normaliser une parole bruitée et obtenir une confirmation explicite ;fixedutiliseemail_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) —autoessaie 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 deGET /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) —llmlaisse le modèle rédiger l’objet et le corps à partir de l’appel ;fixedenvoie toujours le texte littéral configuré ;templateré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.
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 »).
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) oucustomavec 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).
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.- Ajoutez votre clé secrète Stripe dans Outils → App Store → Stripe.
- Créez un outil intégré de type
collect_payment_cardet sélectionnez ce compte Stripe (stripe_connection_id). - Attribuez l’outil à un assistant.
- Ajoutez un nœud Collecte de type Carte de paiement dans le flow.
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).
{"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èmeget_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 tableaubuiltin_tools de l’assistant (également accepté sous le nom tools, pour compatibilité). Configurez-les via l’API publique :
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.