Несколько номеров WhatsApp на одном аккаунте: продажи, поддержка, филиалы
Один номер на всю компанию быстро становится тесным: продажи и поддержка пишут из одного чата, клиенты из Астаны попадают к менеджеру в Алматы, а уведомления о заказах тонут среди живых диалогов. В wapi.kz к одному аккаунту можно подключить несколько номеров WhatsApp и работать с ними через один API.
Разберём, как это устроено: что у каждого номера своё, как выбрать отправителя в запросе, как разделить вебхуки и сколько это стоит. В конце — пример на Node.js: отправка с номера того филиала, к которому относится клиент.
Как это устроено
На аккаунте по умолчанию до 10 номеров, больше — по заявке в поддержку. Подойдёт обычный WhatsApp или WhatsApp Business: каждый номер привязывается как отдельное связанное устройство и остаётся на своём телефоне.
| Своё у каждого номера | Общее на аккаунт |
|---|---|
| Статус подключения | Баланс |
| Индекс доверия и лимиты | Ключ аккаунта |
| Вебхук (если задан на карточке номера) | Общий вебхук из раздела «API и MCP» |
| История сообщений | Настройка хранения текстов |
| Ключи номера для подрядчиков | Личный кабинет |
Лимиты и индекс доверия считаются для каждого номера отдельно. Если на одном номере сработала защита от рассылок, остальные работают как обычно.
Сколько стоит
Каждый активный номер стоит 9 900 ₸ в месяц. Деньги списываются с общего баланса по дням — 330 ₸ в сутки за номер, в 00:05 по Алматы. Платы за сообщения, запросы к API и вебхуки нет.
| Номеров | В сутки | В месяц |
|---|---|---|
| 1 | 330 ₸ | 9 900 ₸ |
| 3 | 990 ₸ | 29 700 ₸ |
| 10 | 3 300 ₸ | 99 000 ₸ |
Сколько списывается сейчас, показывает GET /balance — поле daily_charge. Подробности — на странице цен.
Сценарии
Филиалы в Алматы и Астане
У каждого филиала свой номер и свой менеджер. Клиент пишет на номер своего города, а ваша система отправляет уведомления с того же номера — человек видит знакомый чат, а не незнакомого отправителя.
Продажи и поддержка
Отдел продаж ведёт новые заявки, поддержка — вопросы после покупки. Разные номера — разные вебхуки: заявки уходят в воронку CRM, обращения — в систему тикетов или к ИИ-агенту.
Отдельный номер под уведомления
Статусы заказов, напоминания о записи, коды подтверждения — с отдельного номера, чтобы они не смешивались с живой перепиской. Писать стоит только тем, кто ждёт уведомление: например, клиенту, который оформил заказ. Подробнее — в гайде про уведомления через API.
Чего делать не стоит
Несколько номеров — не способ обойти лимиты. Разбить холодную рассылку на десять номеров значит рискнуть десятью номерами: у каждого свои лимиты и своя защита от рассылок, а недовольные получатели жалуются на конкретный номер. Как снизить риск блокировки — в гайде как не получить блокировку.
Выбор номера: поле from
С какого номера работать, задаёт поле from — id номера или его телефон. В POST-запросах это поле тела, в GET — параметр строки запроса. Список номеров с id отдаёт GET /numbers:
{
"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 один раз и держим в настройках.
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:
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 минут.