> This is a page from the ElevenLabs documentation. For a complete page index, fetch https://elevenlabs.io/docs/llms.txt. For the full documentation in a single file, fetch https://elevenlabs.io/docs/llms-full.txt.

# Supabase

Votre réceptionniste peut enregistrer les informations d’un appel dans une table Supabase et rechercher un appelant par numéro de téléphone via l’API REST de Supabase. La configuration ci-dessous utilise la clé publique de votre projet avec la sécurité au niveau des lignes. Le réceptionniste ne peut ainsi effectuer que les actions que vous autorisez.

> **Warning**
>
> Ne placez jamais la clé `service_role` ou la clé secrète dans un outil webhook. Ces clés contournent la sécurité au niveau des lignes
> et donnent un accès complet à votre base de données.

## Avant de commencer

Dans le Dashboard Supabase, ouvrez **Project Settings** → **API Keys** et copiez la clé **publishable**, ou l’ancienne clé **anon**. L’URL de votre projet est `https://PROJECT_REF.supabase.co`.

## Préparer la base de données

Exécutez cette commande dans **SQL Editor**. Elle crée une table dans laquelle votre réceptionniste peut uniquement insérer des données, ainsi qu’une fonction qui renvoie un client à partir d’un numéro de téléphone exact. La fonction suppose l’existence d’une table `customers` avec les colonnes `name`, `plan`, `notes` et `phone`. Adaptez donc les noms à votre schéma.

Les appelants ne peuvent pas utiliser la fonction pour lister les clients : elle ne renvoie rien tant que le numéro de téléphone exact n’est pas connu.

```sql
create table callback_requests (
  id bigint generated always as identity primary key,
  created_at timestamptz not null default now(),
  caller_name text not null,
  phone text not null,
  reason text not null
);

alter table callback_requests enable row level security;

create policy "Receptionist can add callback requests"
  on callback_requests for insert to anon
  with check (true);

create function find_customer_by_phone(phone text)
returns table (name text, plan text, notes text)
language sql stable security definer set search_path = public
as $$
  select c.name, c.plan, c.notes from customers c where c.phone = find_customer_by_phone.phone limit 1;
$$;

revoke execute on function find_customer_by_phone from public;
grant execute on function find_customer_by_phone to anon;
```

## Créer les outils

Pour les deux outils, accédez à **Intégrations**, sélectionnez **Ajouter une intégration**, choisissez **Outil webhook**, puis ajoutez ces en-têtes de requête :

| En-tête         | Valeur                                                               |
| --------------- | -------------------------------------------------------------------- |
| `apikey`        | Votre clé publishable ou anon                                        |
| `Authorization` | `Bearer ` suivi de la clé anon. Omettez-le pour une clé publishable. |

### Enregistrer une demande de rappel

| Champ                    | Valeur                                                                                    |
| ------------------------ | ----------------------------------------------------------------------------------------- |
| **Nom**                  | `save_callback_request`                                                                   |
| **Description**          | "Enregistrez une demande de rappel chaque fois que vous promettez un suivi à l’appelant." |
| **Méthode**              | POST                                                                                      |
| **URL**                  | `https://PROJECT_REF.supabase.co/rest/v1/callback_requests`                               |
| **Paramètres du corps**  | `caller_name`, `phone` et `reason` (tous des chaînes, obligatoires)                       |
| **Attribuer aux agents** | **Réceptionniste**                                                                        |

### Rechercher un client

| Champ                    | Valeur                                                                                                                                               |
| ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Nom**                  | `find_customer`                                                                                                                                      |
| **Description**          | "Recherchez le compte de l’appelant par numéro de téléphone. Utilisez cet outil lorsqu’un appelant pose une question sur son forfait ou son compte." |
| **Méthode**              | POST                                                                                                                                                 |
| **URL**                  | `https://PROJECT_REF.supabase.co/rest/v1/rpc/find_customer_by_phone`                                                                                 |
| **Paramètres du corps**  | `phone` (chaîne, obligatoire) : "Le numéro de téléphone de l’appelant au format E.164, par exemple +14155550123."                                    |
| **Attribuer aux agents** | **Réceptionniste**                                                                                                                                   |

Sélectionnez **Activer** sur chaque outil, puis [testez votre réceptionniste](/docs/fr/reception-ai/receptionist/testing) avec une demande de rappel. La ligne apparaît dans **Table Editor**.

## Résolution des problèmes

| Problème                                     | Vérification à effectuer                                                                                    |
| -------------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
| `new row violates row-level security policy` | La stratégie d’insertion doit cibler le rôle `anon`.                                                        |
| `Could not find the function`                | Le paramètre du corps doit porter exactement le même nom que l’argument de la fonction, ici `phone`.        |
| 401 `Invalid API key`                        | Avec une clé publishable, supprimez l’en-tête `Authorization`.                                              |
| Clients introuvables                         | Stockez les numéros de téléphone au format E.164, le même format que celui envoyé par votre réceptionniste. |