Основы

Несколько номеров WhatsApp на одном аккаунте: продажи, поддержка, филиалы

Обновлено 6 мин чтения

Один номер на всю компанию быстро становится тесным: продажи и поддержка пишут из одного чата, клиенты из Астаны попадают к менеджеру в Алматы, а уведомления о заказах тонут среди живых диалогов. В wapi.kz к одному аккаунту можно подключить несколько номеров WhatsApp и работать с ними через один API.

Разберём, как это устроено: что у каждого номера своё, как выбрать отправителя в запросе, как разделить вебхуки и сколько это стоит. В конце — пример на Node.js: отправка с номера того филиала, к которому относится клиент.

Как это устроено

На аккаунте по умолчанию до 10 номеров, больше — по заявке в поддержку. Подойдёт обычный WhatsApp или WhatsApp Business: каждый номер привязывается как отдельное связанное устройство и остаётся на своём телефоне.

Своё у каждого номераОбщее на аккаунт
Статус подключенияБаланс
Индекс доверия и лимитыКлюч аккаунта
Вебхук (если задан на карточке номера)Общий вебхук из раздела «API и MCP»
История сообщенийНастройка хранения текстов
Ключи номера для подрядчиковЛичный кабинет

Лимиты и индекс доверия считаются для каждого номера отдельно. Если на одном номере сработала защита от рассылок, остальные работают как обычно.

Сколько стоит

Каждый активный номер стоит 9 900 ₸ в месяц. Деньги списываются с общего баланса по дням — 330 ₸ в сутки за номер, в 00:05 по Алматы. Платы за сообщения, запросы к API и вебхуки нет.

НомеровВ суткиВ месяц
1330 ₸9 900 ₸
3990 ₸29 700 ₸
103 300 ₸99 000 ₸

Сколько списывается сейчас, показывает GET /balance — поле daily_charge. Подробности — на странице цен.

Сценарии

Филиалы в Алматы и Астане

У каждого филиала свой номер и свой менеджер. Клиент пишет на номер своего города, а ваша система отправляет уведомления с того же номера — человек видит знакомый чат, а не незнакомого отправителя.

Продажи и поддержка

Отдел продаж ведёт новые заявки, поддержка — вопросы после покупки. Разные номера — разные вебхуки: заявки уходят в воронку CRM, обращения — в систему тикетов или к ИИ-агенту.

Отдельный номер под уведомления

Статусы заказов, напоминания о записи, коды подтверждения — с отдельного номера, чтобы они не смешивались с живой перепиской. Писать стоит только тем, кто ждёт уведомление: например, клиенту, который оформил заказ. Подробнее — в гайде про уведомления через API.

Чего делать не стоит

Несколько номеров — не способ обойти лимиты. Разбить холодную рассылку на десять номеров значит рискнуть десятью номерами: у каждого свои лимиты и своя защита от рассылок, а недовольные получатели жалуются на конкретный номер. Как снизить риск блокировки — в гайде как не получить блокировку.

Выбор номера: поле from

С какого номера работать, задаёт поле from — id номера или его телефон. В POST-запросах это поле тела, в GET — параметр строки запроса. Список номеров с id отдаёт GET /numbers:

JSON
{
  "numbers": [
    { "id": 1, "label": "Продажи", "phone": "77010000000", "status": "active", "wa_status": "WORKING", "connected": true, "rating": 74, "cold_blocked_until": null },
    { "id": 2, "label": "Поддержка", "phone": "77020000000", "status": "paused", "wa_status": "STOPPED", "connected": false, "rating": 61, "cold_blocked_until": null }
  ],
  "limit": 10
}

Что будет, если from не указать:

  • POST /messages/send и POST /contacts/check — берётся единственный подключённый номер; если подключённых несколько — ошибка from_required (HTTP 400);
  • GET /limits — берётся единственный номер аккаунта; если номеров несколько — тоже from_required;
  • GET /messages, GET /chats, GET /export — данные всех номеров сразу.

Пока номер один, from можно не передавать. Но лучше указывать его сразу: когда вы добавите второй номер, отправка без from начнёт возвращать ошибку. Все варианты — в документации.

Пример: отправка с номера по городу клиента

В CRM у клиента записан город, у каждого филиала — свой номер. Связку «город → id номера» берём из GET /numbers один раз и держим в настройках.

JavaScript
const API = "https://wapi.kz/api/v1";

// id номеров из GET /numbers
const NUMBER_BY_CITY = { almaty: 1, astana: 2 };

async function sendToClient(client, text) {
  const from = NUMBER_BY_CITY[client.city] ?? NUMBER_BY_CITY.almaty;
  const res = await fetch(`${API}/messages/send`, {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.WAPI_KEY}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({ to: client.phone, text, from }),
  });
  const data = await res.json();
  if (!res.ok) throw new Error(`${data.code}: ${data.error}`);
  return data; // { ok, id, wa_message_id, from: { id, phone } }
}

sendToClient({ phone: "77011234567", city: "astana" }, "Ваш заказ №1042 готов к выдаче в филиале")
  .then((r) => console.log("ушло с номера", r.from.phone))
  .catch((e) => console.error(e.message));

Вместо id можно передать телефон номера: from: "77020000000". Если номер филиала на паузе, ответ будет number_paused (HTTP 402), если не подключён к WhatsApp — not_connected (409). Больше примеров отправки — в гайде отправка сообщений через API.

Вебхуки: раздельные или общий

Есть два варианта, и оба рабочие.

  • Раздельные. На карточке каждого номера — свой адрес: заявки Алматы уходят в одну систему, Астаны — в другую.
  • Общий. Один адрес в разделе «API и MCP» для всех номеров. Он применяется сразу ко всем номерам, включая добавленные позже.

Если нужна смесь, сначала сохраните общий адрес, потом задайте отдельные на карточках нужных номеров.

С общим адресом номер узнают по полю wapi в теле события: number_id и phone. Отвечать клиенту стоит с того же номера, на который он написал, — просто передайте number_id в from:

JavaScript
app.post("/whatsapp/webhook", express.json(), (req, res) => {
  if (req.query.token !== process.env.WAPI_HOOK_TOKEN) return res.sendStatus(403);
  res.sendStatus(200); // ответить сразу, обработать — после
  const e = req.body;
  if (e.event === "message" && e.payload.from.endsWith("@c.us")) {
    const client = e.payload.from.split("@")[0];
    handleIncoming({ from: e.wapi.number_id, client, text: e.payload.body });
  }
});

Повторной отправки событий нет: если ваш сервер был недоступен, пропущенное заберите через GET /messages?from=…&since=…. Как принимать события — в гайде вебхуки WhatsApp и документации.

Баланс и пауза

Баланс у всех номеров общий. Если денег не хватает на сутки для всех номеров, часть из них встаёт на паузу, а при нулевом балансе на паузе оказываются все. Номер на паузе не отправляет и не принимает сообщения через сервис, но привязка WhatsApp сохраняется и телефон работает как обычно. После пополнения номера включаются сами.

Мы предупреждаем, когда баланса остаётся на 3 дня или меньше. Для своего мониторинга удобен GET /status: номера и баланс одним запросом.

Как добавить номер

Шаг 1. Проверьте баланс

Первый день нового номера списывается сразу, поэтому на балансе должно быть хотя бы 330 ₸. Пополнить можно через Kaspi или по счёту на ТОО/ИП, от 1 000 ₸.

Шаг 2. Добавьте номер в кабинете

Назовите его понятно — «Астана», «Поддержка». Название вернётся в поле label в GET /numbers.

Шаг 3. Привяжите WhatsApp

По QR-коду или коду по номеру телефона, как в гайде подключение WhatsApp API. Новый номер проходит свой прогрев — первые две недели лимиты ниже.

Шаг 4. Настройте вебхук и from

Задайте вебхук на карточке номера или проверьте, что общий адрес подходит. Добавьте id нового номера в настройки своей программы.

Удалить номер можно на его карточке: со следующего дня он не списывается, уже списанный день не возвращается, ключи этого номера перестают работать. Если номер был на паузе, проверьте на телефоне «Связанные устройства» и удалите устройство вручную.

Зарегистрироваться и подключить номера — около 5 минут на первый номер.

Частые вопросы

Сколько номеров WhatsApp можно подключить к одному аккаунту?

По умолчанию до 10. Если нужно больше, оставьте заявку в поддержку.

Нужен ли отдельный API-ключ для каждого номера?

Нет: ключ аккаунта работает со всеми номерами, номер выбирается полем from. Если доступ нужен подрядчику только к одному номеру, выпустите ключ номера.

Что будет, если не указать from?

Если подключён один номер, сообщение уйдёт с него. Если подключённых несколько, API вернёт from_required с подсказкой, где взять список номеров.

Как понять, на какой номер написал клиент?

В вебхуке — поле wapi.number_id, в истории сообщений — поле from. Отвечайте с того же номера.

Можно ли раскидать рассылку по нескольким номерам, чтобы обойти лимиты?

Нет. Лимиты и защита от рассылок работают на каждом номере, а холодная рассылка с десяти номеров — это риск потерять все десять.

Можно ли подключить и обычный WhatsApp, и WhatsApp Business?

Да. Оба типа номеров подключаются одинаково — как связанные устройства — и работают через один API и один баланс.

Подключите WhatsApp к своим системам

9 900 ₸ в месяц за номер, без платы за сообщения. Сервер в Казахстане, оплата Kaspi или счётом на ТОО/ИП. Подключение — около 5 минут.