Перейти к содержимому

API шлюза сообщений

Единый API для всех каналов сообщений

Отправляйте сообщения в WhatsApp Business, SMS, Telegram, Messenger, Instagram и TikTok через один REST-эндпоинт. Предоплата, оплата за каждое исходящее сообщение, вебхуки о доставке и тестовый режим.

От
0,0003 $
за исходящее сообщение
За регистрацию
100
бесплатных сообщений
Обязательства
Нет
предоплата, без контракта
curl https://api.omnimessage.co/v1/messages \
  -H "Authorization: Bearer om_live_..." \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: order-1042-shipped" \
  -d '{
    "channel": "ch_7Hq2mN5vB8cX1zL0pK3j",
    "to": "+971501234567",
    "type": "text",
    "text": { "body": "Your order #1042 has shipped." },
    "reference": "order-1042"
  }'
202 Accepted
{
  "id": "msg_2b1Xw9aQ3rT8yU0pL4kZ",
  "object": "message",
  "mode": "live",
  "channel_id": "ch_7Hq2mN5vB8cX1zL0pK3j",
  "channel_type": "whatsapp",
  "direction": "outbound",
  "to": "+971501234567",
  "from": "+971800123456",
  "type": "text",
  "content": {
    "text": { "body": "Your order #1042 has shipped." }
  },
  "status": "queued",
  "error": null,
  "reference": "order-1042",
  "metadata": {},
  "billing": {
    "source": "wallet",
    "amount_micros": 1000,
    "package_grant_id": null,
    "refunded": false
  },
  "created_at": "2026-10-05T09:30:00.000Z",
  "sent_at": null,
  "delivered_at": null,
  "read_at": null,
  "failed_at": null
}
  • Типы каналов7 за одним эндпоинтом
  • Типы сообщений9: от текста до интерактивных списков
  • Цена от0,0003 $ за исходящее сообщение
  • Лимит запросов100 запросов в секунду на ключ
  • Размер пакетного запросаДо 100 сообщений в одном запросе
  • Повторные попытки вебхуков8, с интервалом, растущим от 30 секунд до 24 часов
  • Окно идемпотентности24 часа
  • Тестовый режимБесплатно, канал не нужен
  • Сообщения с ошибкойСредства возвращаются автоматически
  • Входящие сообщенияБесплатно

Каналы

Семь типов каналов, один формат запроса

Подключайте отправителей, которые у вас уже есть. Каждый становится идентификатором канала, который вы передаёте на тот же эндпоинт, и каждый возвращает одинаковые статусы.

Как это работает

От регистрации до доставленного сообщения за четыре шага

Никаких звонков с отделом продаж и минимальных обязательств. Первый вызов API в тестовом режиме можно сделать через минуту после создания аккаунта.

  1. Шаг 01

    Создайте аккаунт

    Зарегистрируйтесь, подтвердите электронную почту и создайте API-ключ в консоли. Тестовые ключи работают сразу, ещё до подключения каналов.

  2. Шаг 02

    Подключите канал

    Войдите через Facebook или TikTok в консоли, чтобы подключить номер WhatsApp, Страницу или бизнес-аккаунт. Бота Telegram или номер Twilio добавьте с помощью их учётных данных — в консоли или запросом POST /v1/channels.

  3. Шаг 03

    Отправляйте через один эндпоинт

    POST /v1/messages принимает идентификатор канала, получателя и типизированный объект с содержимым. Формат запроса одинаков для всех каналов.

  4. Шаг 04

    Отслеживайте каждую доставку

    Подписанные вебхуки сообщают о статусах «отправлено», «доставлено», «прочитано» и «ошибка». Та же история доступна в консоли и по запросу GET /v1/messages.

Типы сообщений

Что отправляете, то и видит получатель

У каждого сообщения есть тип и объект с содержимым под ключом этого типа. Выберите тип, чтобы увидеть тело запроса рядом с сообщением, которое он создаёт.

POST /v1/messages
{
  "channel": "ch_7Hq2mN5vB8cX1zL0pK3j",
  "to": "+971501234567",
  "type": "text",
  "text": {
    "body": "Ваш заказ #1042 отправлен. Отследить его можно здесь: https://example.com/t/1042",
    "preview_url": true
  },
  "reference": "order-1042"
}

Обычный текст, который принимают все типы каналов. Установите preview_url, чтобы канал показал предпросмотр ссылки.

КаналыWhatsApp Business, SMS, SMS OTP, Telegram, Messenger, Instagram и TikTok

Консоль

Консоль для всего, что не является кодом

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

Обзор. Баланс кошелька, остаток кредитов пакетов и объём исходящих сообщений за последние 30 дней — отдельно для каждого аккаунта и режима. Экраны на этой странице показаны с демонстрационными данными.
Журнал сообщений. Фильтруйте по каналу, статусу, получателю или собственному референсу и открывайте любое сообщение, чтобы увидеть историю статусов и сумму списания.
Оплата. Пополняйте кошелёк, покупайте пакеты, настраивайте автопополнение и скачивайте квитанции. Для кредитов пакетов видны остаток и срок действия.

Цены

Платите за каждое сообщение или покупайте сообщения оптом

Пополните предоплаченный кошелёк на сумму от 10 $ и платите за каждое сообщение по цене соответствующего канала или купите пакет кредитов сообщений для больших объёмов на самых дорогих каналах.

10 тыс. сообщений

8 $

0,0008 $ за сообщение

  • Исходящих сообщений: 10 000
  • Действует 3 месяца с момента покупки
  • Действует для всех типов каналов
Начать с пакета «10 тыс.»

100 тыс. сообщений

Рекомендуем

60 $

0,0006 $ за сообщение

  • Исходящих сообщений: 100 000
  • Действует 6 месяцев с момента покупки
  • Действует для всех типов каналов
Начать с пакета «100 тыс.»

1 млн сообщений

400 $

0,0004 $ за сообщение

  • Исходящих сообщений: 1 000 000
  • Действует 12 месяцев с момента покупки
  • Действует для всех типов каналов
Начать с пакета «1 млн»

Оплата по факту

Цена за исходящее сообщение по факту по типам каналов, в долларах США
КаналЗа сообщение
WhatsApp Business0,001 $
SMS0,0005 $
SMS OTP0,0005 $
Telegram0,0003 $
Messenger0,0005 $
Instagram0,0005 $
TikTok0,0005 $

Что входит в цену

  • ОплачиваетсяИсходящие сообщения, принятые API, — в момент принятия.
  • БесплатноВходящие сообщения, сообщения в тестовом режиме, вебхуки и консоль.
  • ВозвращаетсяЛюбое сообщение, завершившееся ошибкой, — в тот пакет или кошелёк, из которого оно было оплачено.
  • ОтдельноПлата, которую Meta, операторы связи или другие провайдеры взимают за сам канал.

Удобство для разработчиков

Интегрируйте один раз — и больше не возвращайтесь

Подписанные вебхуки, безопасные повторные запросы, песочница, которая ведёт себя как продакшен, и ошибки, по которым можно ветвить логику.

Вебхуки, которые можно проверить

Каждая доставка подписана с помощью HMAC-SHA256 от временной метки и сырого тела запроса; подпись передаётся в заголовке OmniMessage-Signature. Верните любой ответ 2xx в течение 10 секунд. Неудачные доставки повторяются восемь раз с интервалом, растущим от 30 секунд до 24 часов.

verify-signature.js
import { createHmac, timingSafeEqual } from 'node:crypto';

// header is "t=<unix seconds>,v1=<hex hmac-sha256>"
export function verifySignature(rawBody, header, secret) {
  const parts = header.split(',').map((part) => part.split('='));
  const { t, v1 = '' } = Object.fromEntries(parts);

  const expected = createHmac('sha256', secret)
    .update(`${t}.${rawBody}`)
    .digest('hex');

  const fresh = Math.abs(Date.now() / 1000 - Number(t)) < 300;
  const matches =
    v1.length === expected.length &&
    timingSafeEqual(Buffer.from(v1), Buffer.from(expected));

  return fresh && matches;
}
Событие message.delivered
{
  "id": "evt_8Kd2pQ7wN4xB1zR6mT3c",
  "object": "event",
  "type": "message.delivered",
  "mode": "live",
  "created_at": "2026-10-05T09:30:02.900Z",
  "data": {
    "object": {
      "id": "msg_2b1Xw9aQ3rT8yU0pL4kZ",
      "object": "message",
      "status": "delivered",
      "reference": "order-1042",
      "delivered_at": "2026-10-05T09:30:02.871Z"
    }
  }
}

Тестовый режим, который ничего не стоит

Тестовые ключи работают со встроенными каналами-песочницами, поэтому подключать ничего не нужно. Последние цифры получателя определяют имитируемый результат, а ваши вебхуки срабатывают так же, как в продакшене.

Запрос в песочнице, конечный статус — «прочитано»
curl https://api.omnimessage.co/v1/messages \
  -H "Authorization: Bearer om_test_..." \
  -H "Content-Type: application/json" \
  -d '{
    "channel": "ch_test_whatsapp",
    "to": "+971501230002",
    "type": "text",
    "text": { "body": "Hello from the sandbox" }
  }'

Ошибки с типом и кодом

У каждого ответа, отличного от 2xx, одинаковое тело: type — класс ошибки, стабильный code для ветвления логики, параметр param, вызвавший ошибку (если он есть), и request_id для обращения в поддержку.

402 Payment Required
{
  "error": {
    "type": "billing_error",
    "code": "insufficient_balance",
    "message": "Not enough wallet balance or package credits.",
    "request_id": "req_5Vn1cH8jL3qW6yD9sF2k",
    "doc_url": "https://omnimessage.co/docs/errors#insufficient_balance"
  }
}
  • Идемпотентные POST-запросы

    Добавьте заголовок Idempotency-Key, и повторный запрос в течение 24 часов вернёт сохранённый ответ с Idempotent-Replayed: true — без повторной отправки и списания.

  • Предсказуемые лимиты

    100 запросов в секунду на ключ для POST /v1/messages и 20 — для остальных эндпоинтов. Каждый ответ содержит RateLimit-Remaining, а ответ 429 — Retry-After.

  • Пакетная отправка

    POST /v1/messages/batch принимает до 100 сообщений. Каждый элемент принимается, отклоняется и оплачивается отдельно, а ответ 207 сообщает результаты по индексам.

  • Ключи с ограниченными разрешениями

    Выдавайте каждому ключу только нужные разрешения, например messages:write или billing:read, и ограничивайте его списком разрешённых IP-адресов.

Вопросы

Прежде чем интегрировать

Здесь короткие ответы. Подробные — в документации.

Нужен ли мне собственный номер WhatsApp, бот или номер для SMS?

Да. OmniMessage — шлюз, к которому вы подключаете собственные каналы: свой номер WhatsApp Cloud API, бота Telegram, номер Twilio или аккаунт в соцсети — и сохраняете право владения ими. На странице каналов описано, что нужно для каждого типа.

За что именно я плачу?

Одно списание за каждое исходящее сообщение, принятое API: кредит пакета, если он у вас есть, а если нет — цена сообщения для этого типа канала из кошелька. Входящие сообщения и сообщения в тестовом режиме бесплатны, а средства за сообщение, завершившееся ошибкой, возвращаются автоматически.

Входит ли в цену плата Meta, операторов связи или провайдеров?

Нет. Плата за шлюз покрывает API, отслеживание доставки, вебхуки и консоль. Плата, которую Meta, Twilio или другой провайдер взимает за сам канал, остаётся между вами и этим провайдером.

Как тестировать, не отправляя настоящих сообщений?

Используйте ключ, который начинается с om_test_. В каждом аккаунте есть канал-песочница для каждого типа, например ch_test_whatsapp. Ничего не доставляется и не оплачивается, а статусы имитируются: для получателя, который оканчивается на 0000, сообщение завершается ошибкой, на 0001 — остаётся отправленным, на 0002 — ещё и прочитывается, а в остальных случаях доставляется примерно за две секунды.

Что будет, когда баланс закончится?

API ответит 402 insufficient_balance и ничего не поставит в очередь, так что задолженности задним числом у вас не возникнет. Можно подписаться на событие balance.low или включить автопополнение, чтобы кошелёк пополнялся, как только баланс опустится ниже выбранного вами порога.

Нужен ли SDK?

Нет. API — это JSON поверх HTTPS с аутентификацией по bearer-токену, поэтому подойдёт любой HTTP-клиент. В документации есть примеры для cURL, Node, Python и PHP.

Отправьте первое сообщение в тестовом режиме уже сегодня

Создайте аккаунт, скопируйте тестовый ключ и вызовите API ещё до подключения первого канала. Каждый новый аккаунт получает 100 бесплатных сообщений.