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

# Calendrier et prise de rendez-vous

> Vérification de disponibilité et réservation en cours d'appel via Acuity Scheduling, Cal.com, Calendly, eTermin, HighLevel ou le moteur intégré

La prise de rendez-vous est le cas d'usage classique des agents vocaux : l'assistant vérifie les créneaux disponibles pendant l'appel, propose quelques options, puis réserve celui que l'appelant choisit. La plateforme prend en charge cela de deux manières, combinables librement :

1. **Calendar integrations** — connectez une fois un fournisseur de planification externe (Acuity Scheduling, Cal.com, Calendly, eTermin, HighLevel), attribuez-le à un assistant, et celui-ci obtient automatiquement des outils de réservation pour chaque appel. Google Calendar et Outlook se connectent au même endroit, mais alimentent la synchronisation de calendrier du moteur intégré plutôt que la réservation en cours d'appel — voir la remarque sous le tableau.
2. **Le moteur de réservation intégré** — définissez vos propres types d'événements avec une disponibilité hebdomadaire, et obtenez une page de réservation publique et intégrable à l'adresse `/book/{workspace}/{slug}`, des e-mails d'invitation ICS, ainsi qu'une intégration `native` sur laquelle vos assistants peuvent réserver. Aucun compte externe requis. Voir [Calendrier intégré](/fr/assistants/native-calendar) pour une vue d'ensemble complète.

## Aperçu des fournisseurs

| Fournisseur                 | Disponibilité                                                                          | Réservation                                                                                                   | Identifiants                                                                                                               |
| --------------------------- | -------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
| **Cal.com**                 | ✓ créneaux ouverts d'un type d'événement                                               | ✓ réservation directe                                                                                         | Clé API (`cal_…`) + point de terminaison API (US, EU ou auto-hébergé), type d'événement choisi dans une liste synchronisée |
| **Calendly**                | ✓ horaires disponibles d'un type d'événement sélectionné                               | ✓ réservation directe (forfaits Calendly payants), lien de planification à usage unique, annulation confirmée | Connexion OAuth (une fois)                                                                                                 |
| **Acuity Scheduling**       | ✓ créneaux en direct ou disponibilité de cours pour un type de rendez-vous sélectionné | ✓ réservation directe, annulation confirmée et replanification (les séries ne peuvent pas être replanifiées)  | Connexion OAuth (une fois)                                                                                                 |
| **eTermin**                 | ✓ créneaux en direct pour un service sélectionné + calendrier/personne                 | ✓ réservation directe                                                                                         | Public Key + Secret Key (Account Settings → API), service et calendrier/personne choisis dans des listes synchronisées     |
| **HighLevel**               | ✓ créneaux libres en direct d'un calendrier sélectionné                                | ✓ réservation directe                                                                                         | Une connexion HighLevel existante (depuis Automations → Connections) + calendrier                                          |
| **Google Calendar**         | ✓ libre/occupé d'un calendrier connecté, pour le moteur intégré                        | ✓ création d'événement avec invitation des participants, depuis le moteur intégré                             | Connexion OAuth (une fois)                                                                                                 |
| **Outlook / Microsoft 365** | ✓ libre/occupé d'un calendrier connecté, pour le moteur intégré                        | ✓ création d'événement avec invitation des participants, depuis le moteur intégré                             | Connexion OAuth (une fois)                                                                                                 |
| **Native (moteur intégré)** | ✓ calculé à partir de la disponibilité hebdomadaire de votre type d'événement          | ✓ réservation directe + e-mail ICS                                                                            | aucun — voir [Calendrier intégré](/fr/assistants/native-calendar)                                                          |

<Note>
  **Google Calendar et Outlook sont des cibles de synchronisation, pas des fournisseurs de réservation en cours d'appel.** Les connecter met leurs plages occupées et la création d'événements à disposition du [moteur de réservation intégré](/fr/assistants/native-calendar#le-moteur-de-réservation-intégré) ; les assistants ne peuvent pas encore les appeler directement pendant une conversation. Pour réserver sur ces calendriers en cours d'appel, placez devant eux un type d'événement Cal.com, Calendly, Acuity ou HighLevel, ou utilisez un type d'événement intégré avec la synchronisation de calendrier activée.
</Note>

<Note>
  **Mode lien Calendly** : l'API de planification de Calendly nécessite un forfait Calendly payant. Si votre forfait ne permet pas la réservation directe, réglez le `booking_mode` de l'intégration sur `link` — l'assistant convient alors d'un horaire approximatif avec l'appelant et envoie un **lien de planification à usage unique** par SMS ou e-mail (`link_channel`) plutôt que de réserver directement. Les intégrations qui rencontrent cette restriction de forfait payant au moment de l'appel sont signalées avec le statut `link_mode`.
</Note>

## Connecter une intégration

Allez dans **Booking → Integrations** et choisissez une carte de fournisseur :

<Tabs>
  <Tab title="Cal.com">
    Collez votre clé API (Cal.com → Settings → Developer → API Keys) et choisissez le **API endpoint** : US (par défaut), EU, ou Custom pour une instance Cal.com auto-hébergée. Sélectionnez **Load event types** pour récupérer vos événements par nom et durée — inutile de copier un ID numérique depuis l'URL. L'intégration lit aussi automatiquement les questions de réservation personnalisées du type d'événement ; utilisez **Refresh fields** si vous les modifiez plus tard dans Cal.com. Fuseau horaire personnalisable en option — veillez à ce qu'il corresponde à celui du type d'événement Cal.com.
  </Tab>

  <Tab title="Calendly">
    Cliquez sur **Connect with Calendly**, autorisez l'accès, puis choisissez un type d'événement actif par **nom et durée**. Une même connexion de compte peut être réutilisée par plusieurs intégrations. Si le type d'événement a plusieurs lieux configurés dans Calendly, choisissez celui que l'assistant doit utiliser sous **Meeting location**. Choisissez le mode de réservation, le canal du lien, et les autorisations Book/Cancel.
  </Tab>

  <Tab title="Acuity Scheduling">
    Cliquez sur **Connect with Acuity**, autorisez l'accès, puis choisissez un type de rendez-vous. Vous pouvez éventuellement sélectionner un calendrier ou une personne en particulier, ou laisser le service choisir n'importe quel calendrier disponible. Activez ou désactivez Book, Cancel et Reschedule pour chaque intégration.
  </Tab>

  <Tab title="eTermin">
    Collez votre **Public Key** et votre **Secret Key** (eTermin → Account Settings → API), puis sélectionnez **Load services** pour récupérer vos services par nom et durée. Choisir un service ne charge que les calendriers/personnes qu'eTermin propose pour celui-ci — choisissez-en un et ajustez la durée si elle doit différer de celle par défaut du service. Une fois l'intégration enregistrée, une **Web Push URL** apparaît : collez-la dans les réglages **API → API & Web Push** d'eTermin (activez **Send Web Push**, préférez le format JSON) afin qu'eTermin notifie la plateforme chaque fois qu'un rendez-vous est créé, modifié ou annulé de son côté. L'éditeur affiche alors l'heure de réception du dernier événement — le moyen le plus rapide de confirmer que la connexion est active. Un secret partagé facultatif peut être défini des deux côtés et est vérifié via l'en-tête `X-Webhook-Secret`.
  </Tab>

  <Tab title="HighLevel">
    Connectez d'abord un compte HighLevel sous **Automations → Connections** si ce n'est pas déjà fait. De retour dans **Booking → Integrations**, choisissez **Connect HighLevel**, sélectionnez cette connexion, puis choisissez l'un de ses calendriers actifs. Les bascules Book, Cancel et Reschedule sont enregistrées par intégration, mais les assistants n'obtiennent actuellement que la disponibilité et la réservation pour HighLevel — il n'existe pas encore d'outil d'annulation ou de replanification HighLevel.
  </Tab>

  <Tab title="Google / Outlook">
    Cliquez sur **Connect** et validez le consentement OAuth. La connexion peut être réutilisée par plusieurs types d'événements dans l'espace de travail.
  </Tab>

  <Tab title="Native">
    Choisissez l'un de vos [types d'événements de réservation](/fr/assistants/native-calendar#le-moteur-de-réservation-intégré).
  </Tab>
</Tabs>

Chaque intégration est **vérifiée avant d'être enregistrée**. Des identifiants ou des réglages d'événement invalides sont rejetés avec un message d'erreur clair. Les valeurs secrètes ne sont plus jamais affichées après l'enregistrement.

Supprimer la dernière intégration utilisant un compte Acuity révoque son jeton OAuth via le point de terminaison de déconnexion d'Acuity et supprime la connexion locale. Un compte inutilisé peut aussi être retiré avec **Disconnect account** dans l'éditeur Acuity ; les comptes partagés ne peuvent être déconnectés qu'une fois leurs intégrations restantes supprimées.

Les intégrations existantes utilisant un jeton d'accès personnel restent opérationnelles, mais apparaissent comme
**Legacy connection — reconnect with Calendly**. Se reconnecter les fait passer à
OAuth et retire le PAT de l'intégration.

## Attribution à un assistant

Ouvrez les paramètres de l'assistant et cochez les intégrations qu'il doit utiliser (ou appelez `PUT /api/v1/assistants/{id}/integrations`). Chaque intégration attribuée ajoute ses propres outils de réservation à chaque appel :

| Outil                                                          | Type                                                                   | Fonction                                                                                                                                                                                                                                           |
| -------------------------------------------------------------- | ---------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `check_availability(start_date, end_date?)`                    | lecture seule, interruptible                                           | Récupère les créneaux disponibles pour la plage de dates et les énonce dans le fuseau horaire de l'assistant (avec un plafond, pour que l'agent ne récite jamais 200 créneaux).                                                                    |
| `book_appointment(name, email, start, notes?)`                 | écriture — s'exécute avec une phrase de remplissage, non interruptible | Réserve le créneau choisi. En cas de succès, l'heure de début et l'ID de la réservation sont stockés comme variables d'appel pour les flux, l'analyse et les webhooks. Si le créneau vient d'être pris, l'agent est invité à en proposer un autre. |
| `send_booking_link(email?, phone?)`                            | mode lien Calendly uniquement                                          | Crée un lien de planification à usage unique et l'envoie par SMS ou e-mail.                                                                                                                                                                        |
| `find_appointment(email, name)`                                | gestion Calendly/Acuity                                                | Trouve les rendez-vous à venir pour le type d'événement/de rendez-vous sélectionné. L'e-mail exact de réservation et le nom complet sont tous deux requis.                                                                                         |
| `cancel_appointment(event_id / appointment_id, confirmed)`     | écriture — non interruptible                                           | Annule uniquement un événement ou un rendez-vous renvoyé par `find_appointment` au cours du même appel, après que l'assistant l'a relu et a reçu une confirmation explicite.                                                                       |
| `reschedule_appointment(appointment_id, new_start, confirmed)` | gestion Acuity                                                         | Déplace uniquement un rendez-vous Acuity renvoyé au cours du même appel, après vérification de la disponibilité et confirmation explicite du nouvel horaire par l'appelant.                                                                        |

Chaque intégration reçoit `check_availability` et `book_appointment`. Les outils de gestion ne sont ajoutés que lorsque le fournisseur les prend en charge : **Calendly** (recherche et annulation), **Acuity** (recherche, annulation et replanification, selon les bascules que vous avez définies), et le **moteur intégré**, qui ajoute un ensemble commun à tout l'espace de travail identifiant l'appelant d'abord par son numéro de téléphone, puis, à défaut, par e-mail et nom complet. Les calendriers **Cal.com**, **eTermin** et **HighLevel** n'offrent actuellement que la disponibilité et la réservation — l'assistant peut lire les créneaux et réserver, mais pas rechercher, annuler ou déplacer un rendez-vous existant pendant un appel.

Si plusieurs intégrations sont attribuées, le nom de l'intégration est ajouté en suffixe au nom de l'outil (par exemple `check_availability_sales`). Les créneaux sont toujours annoncés dans le **[fuseau horaire](/fr/assistants/timezone) de l'assistant** — configurez-le dans les paramètres de l'assistant.

<Note>
  Les réservations Calendly ne peuvent pas être replanifiées via son API — un appelant qui souhaite un autre horaire obtient à la place un nouveau `cancel_appointment` suivi d'un `book_appointment`, ou replanifie via le lien présent dans son e-mail de confirmation Calendly.
</Note>

<Tip>
  Indiquez à l'assistant **quand** réserver dans son prompt, par exemple : *« Avant de proposer un horaire, appelle check\_availability. Une fois que l'appelant confirme un créneau, appelle book\_appointment avec son nom et son e-mail. »*
</Tip>

## Limitation par le forfait

Votre forfait doit inclure **Calendar integrations**. Si ce n'est pas le cas, vous ne pouvez pas créer d'intégrations.

## Dépannage

<AccordionGroup>
  <Accordion title={`Cal.com : « Invalid API key » ou les types d'événements ne se chargent pas`}>
    Vérifiez que la clé est toujours active dans Cal.com et que vous avez collé une clé de production (les clés de production Cal.com commencent par `cal_live_`), puis sélectionnez à nouveau **Load event types**. Si vous obtenez une erreur d'authentification au lieu d'une liste vide, vous avez probablement choisi le mauvais point de terminaison API — un compte Cal.com EU a besoin du point de terminaison EU (ou Custom pour une instance auto-hébergée), pas du point de terminaison US par défaut.
  </Accordion>

  <Accordion title="Cal.com : l'assistant redemande sans cesse un e-mail, ou la réservation n'aboutit jamais">
    `book_appointment` a besoin d'une adresse e-mail valide, car Cal.com refuse une réservation sans elle. Les adresses dictées à l'oral (« anna arobase example point com ») et les trémas allemands sont convertis automatiquement avant l'envoi de la requête, donc la plupart des adresses dictées fonctionnent ; si ce que l'assistant a entendu reste inutilisable, il est invité à redemander plutôt qu'à réserver quand même. Indiquez-lui dans le prompt de collecter et de confirmer l'e-mail avant de réserver, et de réutiliser une adresse déjà disponible comme [variable d'appel](/fr/assistants/variables) plutôt que de la redemander deux fois.
  </Accordion>

  <Accordion title="Calendly : « Specified location kind is not configured for this event type »">
    Le seul lieu configuré pour ce type d'événement dans Calendly est un lien de visioconférence (Google Meet, Zoom, Teams), et l'agent vocal ne peut pas générer de lien de réunion. Dans Calendly, modifiez le type d'événement et ajoutez **Custom** ou **Phone Call → Inbound call** comme lieu — Custom est le choix le plus sûr et fonctionne dans tous les cas. Si le type d'événement se retrouve avec plusieurs lieux, choisissez le bon sous **Meeting location** dans l'intégration.
  </Accordion>

  <Accordion title="Calendly : certains types d'événements d'équipe sont absents">
    Dans une organisation Calendly, les comptes admin et owner voient les types d'événements de tous les membres, y compris les événements Round Robin et Collective ; un compte membre standard ne voit que les siens.
  </Accordion>

  <Accordion title="Les réservations se comportent différemment lors d'un test dans le navigateur que lors d'un vrai appel">
    Un test **Web Call** s'exécute sans numéro de téléphone, donc tout ce que le flux de réservation déduit du numéro de l'appelant (envoi d'un lien de planification par SMS, recherche d'un rendez-vous par téléphone) ne peut pas fonctionner de la même façon. Utilisez **Test → Call** dans l'en-tête de l'assistant pour un test réaliste : l'assistant compose un numéro que vous saisissez, ou vous composez vous-même son numéro entrant.
  </Accordion>
</AccordionGroup>

Toujours bloqué ? Contactez le support en indiquant le nom de l'intégration, l'erreur affichée dans l'éditeur d'assistant, et une transcription de l'appel dont la réservation a échoué.

## API & MCP

Tout ce qui précède est disponible dans l'[API REST publique](/fr/api-reference/introduction) et sous forme d'outils MCP à l'adresse `https://<your-domain>/mcp` :

| REST                                                                          | Outil MCP                                                                                                | Portée                             |
| ----------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | ---------------------------------- |
| `GET/POST /api/v1/integrations`, `GET/PATCH/DELETE /api/v1/integrations/{id}` | `list_integrations`, `get_integration`, `create_integration`, `update_integration`, `delete_integration` | `integrations:read/write`          |
| `POST /api/v1/integrations/calendly/oauth-url`                                | `create_calendly_oauth_url`                                                                              | `integrations:write`               |
| `GET /api/v1/integrations/calendly/connections`                               | `list_calendly_connections`                                                                              | `integrations:read`                |
| `GET /api/v1/integrations/calendly/event-types?connection_id=…`               | `list_calendly_event_types`                                                                              | `integrations:read`                |
| `POST /api/v1/integrations/acuity/oauth-url`                                  | `create_acuity_oauth_url`                                                                                | `integrations:write`               |
| `GET /api/v1/integrations/acuity/connections`                                 | `list_acuity_connections`                                                                                | `integrations:read`                |
| `GET /api/v1/integrations/acuity/appointment-types?connection_id=…`           | `list_acuity_appointment_types`                                                                          | `integrations:read`                |
| `GET /api/v1/integrations/acuity/calendars?connection_id=…`                   | `list_acuity_calendars`                                                                                  | `integrations:read`                |
| `GET/PUT /api/v1/assistants/{id}/integrations`                                | `get_assistant_integrations`, `set_assistant_integrations`                                               | `integrations:*` ou `assistants:*` |

Les types d'événements, les connexions et les enregistrements de réservation du moteur intégré sont traités dans [Calendrier intégré](/fr/assistants/native-calendar).
