# Combien de numéros WhatsApp pour un agent IA : la formule

> Calculez combien de numéros WhatsApp il faut à un agent IA : limites par numéro, formule en trois parties, exemples chiffrés, routage et paliers de l'API Business.

Source: https://whasp.ai/fr/blog/combien-numeros-whatsapp-agent-ia · 2026-10-20

## L’essentiel

- Un numéro whasp autorise 100 chats actifs sur 30 jours, 40 nouveaux chats en 24 heures et 1 500 messages envoyés en 24 heures, et le nombre de numéros nécessaires est le plus grand de trois quotients, chacun arrondi à l'entier supérieur.
- Planifiez à 80 % de chaque limite, car au-delà de 80 % un numéro est marqué at_risk : cela ramène 100 utilisateurs par numéro à 80, 40 nouveaux chats par jour à 32 et 1 500 envois à 1 200.
- Un agent bavard est limité par les messages, pas par les utilisateurs : à la ligne des 80 %, un numéro peut envoyer 15 messages par utilisateur actif et par jour.
- Un pic de lancement est limité par les nouveaux chats : 1 000 inscriptions en un jour demandent 32 numéros, alors que les mêmes inscriptions étalées sur cinq jours en demandent 13.
- L'API Business de Meta passe à l'échelle autrement : ses paliers (250, 2 000, 10 000, 100 000, illimité) plafonnent le nombre de personnes que vous pouvez contacter hors de la fenêtre de 24 heures, pas vos réponses.

Sur whasp, le nombre de numéros WhatsApp dont votre agent IA a besoin est le plus grand de trois quotients, chacun arrondi à l'entier supérieur : utilisateurs actifs divisés par 80, inscriptions de votre jour le plus chargé divisées par 32, et messages envoyés lors de votre jour le plus chargé divisés par 1 200. Ce sont 80 % des limites par numéro. Ajoutez un ou deux numéros de réserve pour les bannissements.

## Quelles limites a un numéro ?

Un numéro whasp est un vrai compte WhatsApp personnel sur son propre téléphone cloud et sa propre IP : ses limites s'appliquent donc par numéro. La [référence de l'API](https://whasp.ai/docs) les liste :

| Limite, par numéro | Valeur | Ce qui se passe à la limite |
| --- | --- | --- |
| Chats actifs (personnes qui ont écrit au cours des 30 derniers jours) | 100 | Le numéro n'apparaît plus dans `/numbers/pick` ; les messages entrants continuent d'arriver |
| Nouveaux chats en 24 heures | 40 | Pareil |
| Messages envoyés en 24 heures | 1 500 | Les envois échouent avec 429 `number_daily_limit` |
| Messages reçus | Aucune limite | |

Un numéro est marqué `at_risk` quand une limite dépasse 80 %, donc les plafonds de planification sont 80 utilisateurs, 32 nouveaux chats et 1 200 envois. Deux autres faits comptent dans un plan. Les messages d'un même numéro partent un par un, à environ une seconde d'écart : une file de 120 réponses met donc environ deux minutes à se vider. Et le compte autorise 100 requêtes d'API par 10 secondes, soit 10 par seconde, le rythme de 10 numéros qui envoient à fond. Au-delà, mettez les envois en file d'attente de votre côté.

Comptez les utilisateurs actifs comme le fait whasp : les personnes qui ont écrit sur 30 jours glissants, pas le total des inscrits. Celles qui se taisent sortent du compte après 30 jours. `GET /v1/numbers/{number}/chats` liste qui a écrit et quand, ce qui vous permet de le mesurer.

## Comment calculer le nombre de numéros nécessaires ?

Le calcul prend trois entrées tirées de vos propres données : les utilisateurs actifs (`U`), les nouveaux utilisateurs de votre jour le plus chargé (`S`), et les messages que vous envoyez lors de votre jour le plus chargé (`M`). Chaque limite donne un nombre, et le plus grand l'emporte :

- par utilisateurs : U / (100 × 0,8) = U / 80
- par inscriptions : S / (40 × 0,8) = S / 32
- par envois : M / (1 500 × 0,8) = M / 1 200

Ajoutez ensuite une réserve de 10 %, au moins un numéro. Quand un numéro passe `critical` (banni, déconnecté, téléphone hors ligne depuis plus de 10 minutes, ou envois en échec), `/numbers/pick` cesse de le proposer et sa part des nouvelles inscriptions retombe sur les autres. Le remplaçant arrive gratuitement mais vide, et votre propre logique [déplace les utilisateurs](https://whasp.ai/fr/blog/numero-whatsapp-banni-migrer-utilisateurs). La réserve leur laisse de la place le temps de la bascule. Chaque numéro coûte $49 par 30 jours.

```ts
// Limites par numéro d'après la référence de l'API whasp, et la charge visée.
const LIMITS = { users: 100, signups: 40, sends: 1500 };
const PLAN = 0.8; // au-delà de 80 % d'une limite, un numéro est marqué at_risk

export function numbersNeeded(users: number, busiestDaySignups: number, busiestDaySends: number) {
  const byUsers = Math.ceil(users / (LIMITS.users * PLAN));
  const bySignups = Math.ceil(busiestDaySignups / (LIMITS.signups * PLAN));
  const bySends = Math.ceil(busiestDaySends / (LIMITS.sends * PLAN));
  const base = Math.max(byUsers, bySignups, bySends);
  const spare = Math.max(1, Math.ceil(base * 0.1)); // de la place pour un numéro qui passe critical
  return { byUsers, bySignups, bySends, base, spare, total: base + spare, monthlyUsd: (base + spare) * 49 };
}
```

## À quoi ressemblent trois plans réalistes ?

Les trois plans ci-dessous reposent sur des hypothèses que nous avons choisies, pas sur des mesures. Remplacez-les par les chiffres de vos propres journaux.

### Un tuteur de langues avec 3 000 utilisateurs actifs

Supposons que 25 % des utilisateurs actifs écrivent un jour donné, que l'agent envoie 12 messages à chacun, que le jour le plus chargé vaut le double d'un jour moyen, et qu'un lancement amène 400 nouveaux utilisateurs en un jour.

- Envois : 3 000 × 0,25 × 12 = 9 000 un jour moyen, 18 000 le jour le plus chargé.
- Par utilisateurs : 3 000 / 80 = 37,5, donc 38. Par inscriptions : 400 / 32 = 12,5, donc 13. Par envois : 18 000 / 1 200 = 15.
- Le plus grand est 38. Réserve : 10 % de 38 = 3,8, donc 4. Total 42 numéros, 42 × $49 = $2 058 par mois, soit $0,69 par utilisateur actif.

Ici, ce sont les utilisateurs qui décident.

### Un compagnon bavard avec 1 200 utilisateurs actifs

Supposons que 50 % écrivent un jour donné, que l'agent envoie 40 messages à chacun, que le jour le plus chargé vaut 1,5 fois un jour moyen, et que 100 nouveaux utilisateurs arrivent ce jour-là.

- Envois : 1 200 × 0,5 × 40 = 24 000 un jour moyen, 36 000 le jour le plus chargé.
- Par utilisateurs : 1 200 / 80 = 15. Par inscriptions : 100 / 32 = 3,1, donc 4. Par envois : 36 000 / 1 200 = 30.
- Le plus grand est 30. Réserve 3. Total 33 numéros, 33 × $49 = $1 617, soit $1,35 par utilisateur actif.

Ici, ce sont les messages qui décident. À 80 utilisateurs par numéro, 1 200 envois par jour permettent 15 messages par utilisateur actif et par jour. Ce compagnon en envoie 30 par utilisateur actif le jour le plus chargé : il lui faut donc deux fois plus de numéros que ne le suggère son nombre d'utilisateurs.

### Un lancement avec 1 000 inscriptions en un jour

Supposons 1 000 utilisateurs au total et 6 000 messages envoyés ce jour-là.

- Par utilisateurs : 1 000 / 80 = 12,5, donc 13. Par inscriptions : 1 000 / 32 = 31,25, donc 32. Par envois : 6 000 / 1 200 = 5.
- Le plus grand est 32. Réserve 4. Total 36 numéros, $1 764 par mois.

Étalons maintenant les mêmes 1 000 inscriptions sur cinq jours, 200 par jour, avec 1 200 envois le jour le plus chargé :

- Par utilisateurs : 13. Par inscriptions : 200 / 32 = 6,25, donc 7. Par envois : 1 200 / 1 200 = 1.
- Le plus grand est 13. Réserve 2. Total 15 numéros, $735 par mois.

Une liste d'attente ou des codes d'invitation économiseraient 21 numéros et $1 029 par mois. Dans cet exemple, c'est la limite de nouveaux chats par jour qui joue, pas celle des utilisateurs.

| Plan | Utilisateurs actifs | Inscriptions, jour le plus chargé | Envois, jour le plus chargé | Numéros | Par mois |
| --- | --- | --- | --- | --- | --- |
| Tuteur | 3 000 | 400 | 18 000 | 42 | $2 058 |
| Compagnon | 1 200 | 100 | 36 000 | 33 | $1 617 |
| Lancement en un jour | 1 000 | 1 000 | 6 000 | 36 | $1 764 |
| Lancement sur cinq jours | 1 000 | 200 | 1 200 | 15 | $735 |

## Comment router les nouveaux utilisateurs et les garder sur un numéro ?

`GET /v1/numbers/pick` renvoie le numéro sain et en ligne qui a le plus de place pour un nouvel utilisateur, et un lien `wa.me` qui ouvre le chat. Passez `text` et le lien s'ouvre avec ce message prérempli. Mettez-y l'identifiant de votre utilisateur, pour que l'agent sache qui écrit ([plus de détails sur les liens d'accueil](https://whasp.ai/fr/blog/lien-wa-me-qr-code-whatsapp)).

```ts
const API = "https://api.whasp.ai/v1";
const headers = { Authorization: `Bearer ${process.env.WHASP_API_KEY}` };

/** Le lien à montrer à un nouvel utilisateur, ou null quand tous les numéros sont pleins. */
export async function signupLink(userId: string): Promise<string | null> {
  const params = new URLSearchParams({ text: `Salut, mon code est ${userId}` });
  const res = await fetch(`${API}/numbers/pick?${params}`, { headers });
  if (res.status === 409) return null; // no_capacity : mettre l'inscription en attente, ajouter un numéro
  if (!res.ok) throw new Error(`pick failed with ${res.status}`);
  const { wa_link } = (await res.json()) as { number: string; wa_link: string };
  return wa_link;
}
```

Un chat reste sur son numéro. Quand vous envoyez sans `from`, whasp utilise le numéro auquel la personne a écrit en dernier, ce que vous voulez. Un `from` différent renvoie 409 `chat_not_open`, sauf si cette personne a aussi écrit à ce numéro.

Quand `signupLink` renvoie null, affichez un écran d'attente et ajoutez des numéros. Ajoutez-les avant d'en avoir besoin : `POST /v1/numbers` peut répondre 503 `no_capacity` quand aucun n'est prêt (rien n'est débité), et un numéro mis en place de zéro prend environ 30 minutes.

## Comment surveiller la marge et ajouter des numéros ?

Interrogez `GET /v1/numbers` toutes les quelques minutes. Chaque numéro renvoie ses `stats` et ses `limits` : vous pouvez ainsi additionner la place restante jusqu'à 80 % sur les numéros sains et déclencher une alerte pour tout numéro qui n'est pas `healthy`. Le webhook `number.status_changed` vous prévient dès que la santé ou `online` change ([gestion des webhooks](https://whasp.ai/fr/blog/webhook-whatsapp-signature-doublons)).

```ts
type Num = {
  number: string;
  status: "provisioning" | "active" | "retired";
  health: "healthy" | "at_risk" | "critical";
  stats: { active_chats_30d: number; new_chats_24h: number; outbound_24h: number };
  limits: { active_chats_30d: number; new_chats_24h: number; outbound_24h: number };
};

/** Place libre sur les numéros sains, comptée jusqu'à 80 % de chaque limite. */
export async function headroom() {
  const res = await fetch(`${API}/numbers`, { headers });
  const { data } = (await res.json()) as { data: Num[] };
  const live = data.filter((n) => n.status === "active");
  const sick = live.filter((n) => n.health !== "healthy").map((n) => n.number);
  const room = { users: 0, signups: 0, sends: 0 };
  for (const n of live.filter((n) => n.health === "healthy")) {
    room.users += Math.max(0, Math.floor(n.limits.active_chats_30d * PLAN) - n.stats.active_chats_30d);
    room.signups += Math.max(0, Math.floor(n.limits.new_chats_24h * PLAN) - n.stats.new_chats_24h);
    room.sends += Math.max(0, Math.floor(n.limits.outbound_24h * PLAN) - n.stats.outbound_24h);
  }
  return { numbers: live.length, sick, room };
}

/** Ajoute un numéro. Cela débite $49 immédiatement : appelez-le derrière un plafond. */
export async function addNumber(label: string): Promise<Num> {
  const res = await fetch(`${API}/numbers`, {
    method: "POST",
    headers: { ...headers, "Content-Type": "application/json" },
    body: JSON.stringify({ label, profile: { name: "Ava", about: "Ton amie IA" } }),
  });
  if (res.status === 402) throw new Error("balance too low: top up first");
  if (res.status === 503) throw new Error("no_capacity: nothing charged, retry later");
  if (!res.ok) throw new Error(`add failed with ${res.status}`);
  return (await res.json()) as Num;
}
```

Appelez `addNumber` quand `room.users` tombe sous le nombre d'inscriptions que vous attendez dans les deux prochaines semaines, ou `room.signups` sous votre jour le plus chargé, et plafonnez le total pour qu'un bug ne puisse pas dépenser votre solde. Gardez le solde au-dessus de numéros × $49 : un numéro se renouvelle tout seul tant que le solde le couvre, et quand le solde est épuisé, il bénéficie de 3 jours de grâce, puis il est retiré.

### Plusieurs produits ou clients

Un compte n'a qu'une URL de webhook : faites donc tourner un pool par produit, persona ou client, et distinguez-les vous-même. Donnez à chaque numéro un `label` tel que `tutor-fr-1`, réglez son profil (nom, à propos, photo) sur la persona, et routez chaque événement d'après son champ `number`. Lancez `numbersNeeded` par pool. La facturation passe par un solde unique : facturez donc chaque client de votre côté pour son nombre de numéros × $49.

## Comment se comparent les limites de l'API Business ?

Meta limite le nombre de personnes différentes qu'une entreprise peut contacter [hors de la fenêtre de service client de 24 heures](https://developers.facebook.com/documentation/business-messaging/whatsapp/messaging-limits), par période glissante de 24 heures et par portefeuille d'entreprise, partagé par tous ses numéros. Les nouveaux portefeuilles démarrent à 250. La vérification, ou l'envoi de 2 000 messages livrés de haute qualité, porte la limite à 2 000. Ensuite, elle monte automatiquement à 10 000, 100 000 puis illimité quand vos messages sont de haute qualité et que vous avez utilisé au moins la moitié de la limite au cours des 7 derniers jours.

| | whasp | WhatsApp Business Platform |
| --- | --- | --- |
| Ce qui est plafonné | Chats actifs, nouveaux chats et envois, par numéro | Personnes différentes contactées hors de la fenêtre de 24 heures, par portefeuille |
| Réponses aux personnes qui ont écrit | Comptent dans les 1 500 envois | Ne font pas partie du palier |
| Comment ajouter de la capacité | Ajouter un numéro : $49 par 30 jours, en général prêt tout de suite | Gagner un palier supérieur par la vérification et la qualité |
| Débit par numéro | Un message environ chaque seconde | [80 messages par seconde par défaut](https://developers.facebook.com/documentation/business-messaging/whatsapp/throughput), jusqu'à 1 000 |
| Numéros par compte | Vous les ajoutez avec `POST /v1/numbers` | [2 au départ, 20 une fois vérifié](https://developers.facebook.com/documentation/business-messaging/whatsapp/business-phone-numbers/phone-numbers) |

La plateforme officielle passe à l'échelle par quotas, whasp par téléphones. Les réponses dans la fenêtre ne font pas partie du palier de Meta et nous n'avons trouvé aucun plafond d'utilisateurs actifs par numéro officiel : pour un agent que Meta admet, un seul numéro officiel peut donc servir une très large audience. La première question est de savoir si votre IA y est autorisée, et [la comparaison des prix](https://whasp.ai/fr/blog/prix-api-whatsapp-2026-agent-ia) montre ce que coûte la voie officielle.

## Que faire ensuite ?

Tirez trois chiffres de vos propres journaux : les utilisateurs actifs sur 30 jours glissants, les inscriptions de votre jour le plus chargé et les messages envoyés ce jour-là. Lancez `numbersNeeded` et ajoutez les numéros un lancement à l'avance. Branchez la vérification de marge, et lisez [pourquoi les numéros se font bannir](https://whasp.ai/fr/blog/pourquoi-whatsapp-bannit-numero) pour dimensionner votre réserve.

## Questions

### De combien de numéros WhatsApp ai-je besoin pour 1 000 utilisateurs ?

Sur whasp, 1 000 utilisateurs actifs demandent 13 numéros à la ligne de planification de 80 utilisateurs, ou 10 à la limite stricte de 100. Vérifiez aussi les nouveaux chats et les messages par jour, car l'un ou l'autre peut exiger plus de numéros que le nombre d'utilisateurs.

### Quelle est la limite de messages par numéro WhatsApp sur whasp ?

Un numéro peut envoyer jusqu'à 1 500 messages en 24 heures, détenir 100 chats actifs sur 30 jours et ouvrir 40 nouveaux chats en 24 heures. Les messages entrants sont illimités, et à 1 500 envois l'API répond 429 number_daily_limit.

### Comment orienter les nouveaux utilisateurs vers le bon numéro ?

Appelez GET /v1/numbers/pick. Il renvoie le numéro sain et en ligne qui a le plus de place, avec un lien wa.me, et le chat reste ensuite sur ce numéro. Il répond 409 no_capacity quand tous les numéros sont pleins, hors ligne ou en mauvaise santé.

### Quelles sont les limites d'envoi de l'API WhatsApp Business ?

Meta plafonne le nombre de personnes différentes qu'une entreprise peut contacter hors de la fenêtre de 24 heures, par période glissante de 24 heures et par portefeuille d'entreprise : 250 au départ, puis 2 000, 10 000, 100 000 et illimité à mesure que le compte est vérifié et envoie des messages de haute qualité.

### Que se passe-t-il quand un numéro whasp est plein ?

Il n'est plus proposé par /numbers/pick, mais les messages de ses utilisateurs existants continuent d'arriver. Au-delà de 1 500 envois en 24 heures, les envois depuis ce numéro échouent avec 429 number_daily_limit.
