💬 Командный WhatsApp-Инбокс на новой ПлатформеЕщё
1msg official logo

WhatsApp Business API для сезонной рассылки кампании

Сценарий отправляет персонализированный маркетинговый шаблон WhatsApp, когда начинается сезонная кампания по календарю.

Обзор сценария

Сценарий отправляет персонализированный шаблон маркетингового сообщения в WhatsApp, когда начинается сезонная кампания, привязанная к календарю. В сообщении указываются имя клиента, название сезона или события, детали сезонного предложения и дата окончания кампании. Статическая кнопка URL открывает страницу сезонной коллекции или распродажи.

Пример шаблона

Здравствуйте {{1}}! Наша {{2}}кампания началась: {{3}}. Сезонная распродажа продлится до {{4}}. Нажмите кнопку ниже, чтобы посмотреть коллекцию и сделать покупки.

Магазин: сезонная распродажа
  • {{1}}
    имя клиента
  • {{2}}
    сезон или календарное событие (Черная пятница, Новый год, возвращение в школу, летняя распродажа)
  • {{3}}
    подробности сезонного предложения (тема скидок, отдельные категории или акцент на подарки)
  • {{4}}
    дата окончания действия кампании
  • “Магазин: сезонная распродажа”
    кнопка — исправлено в шаблоне Meta
WhatsApp Business API for seasonal campaign broadcast

Когда использовать

Используйте этот сценарий, когда календарный сезон или праздник — основная причина для покупки: Черная пятница, новогодние гиды по подаркам, подготовка к школе или летняя распродажа с фиксированным сроком кампании, и у вас уже есть список подписчиков в WhatsApp. Он подходит для сезонных розничных акций, волн зачисления в учебные заведения и агентств, проводящих праздничные кампании для брендов клиентов из сегментов CRM. Это не подходит для скидок без привязки к сезону, баннерных акций, основанных только на креативе, или напоминания, что несезонное предложение скоро закончится.

Используйте календарь покупок в WhatsApp
Утвержденный рекламный шаблон отправляется подписавшимся контактам за пределами 24-часового окна, поэтому само сезонное событие может вызвать рассылку без ожидания входящего сообщения.
Кампании, называющие сезон и окно
Четыре переменные в теле подставляют имя контакта, название мероприятия, детали сезонного предложения и дату окончания кампании, чтобы сообщение воспринималось как сезонное событие с ограниченным сроком, а не обычная акция.
Сезонная коллекция в один клик
Кнопка с фиксированным URL, закрепленная в шаблоне Meta, открывает сезонную целевую страницу, чтобы контакты могли купить товары из ассортимента кампании без использования свободных текстовых ответов.
Меньше ручной работы с сезонными перечнями
CRM или автоматизация загружает сегмент подписчиков, когда открывается окно кампании, и шаблон отправляется по этому триггеру, поэтому маркетинг не вводит заново текст для каждого контакта.
Доставка сезонной кампании с измеримыми результатами
Результаты доставки возвращаются в систему отправки и фиксируются в журнале в рамках той же рассылки, поэтому отчеты по сезонным кампаниям привязаны к календарному периоду их начала.

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

  1. Триггер

    Маркетинг планирует сезонную кампанию с установленными сроками и определенным сегментом контактов.

    event · triggered

  2. Обработка события

    Система сопоставляет номера телефонов и сезонные поля персонализации для каждого контакта.

    phone: "+…"

  3. Собрать и отправить

    Персонализированный сезонный шаблон создается с четырьмя переменными в теле и статической кнопкой URL.

    POST /sendTemplate

  4. Доставлено

    Каждый подписавшийся контакт получает сообщение сезонной кампании WhatsApp.

    delivered

  5. Статус отслеживается

    Результаты доставки записываются для отслеживания эффективности сезонной кампании.

    status: "read"

WhatsApp Business API for seasonal campaign broadcast

Техническая реализация

Предварительные требования

  1. Ключ API 1MSG · Как получить API-ключ
  2. Бизнес-аккаунт WhatsApp · Как подключить WABA
  3. Шаблон WhatsApp · Как утвердить шаблон WABA
  4. Согласие клиента на получение рассылки · Как управлять согласием клиентов

Примеры кода

#!/usr/bin/env bash
set -euo pipefail

# === Configuration (replace "___" placeholders) ===

API_BASE_URL="https://api.1msg.io"        # production 1MSG API base URL
CHANNEL_ID="___"                           # channel ID from 1MSG dashboard
API_TOKEN="___"                            # channel JWT token (Bearer)

TEMPLATE_NAME="___"                        # approved template name
TEMPLATE_NAMESPACE="___"                   # template namespace (required — send fails without it)
TEMPLATE_LANGUAGE="___"                    # template language code, e.g. "en"



# === Test data ===
TEST_PHONE="___"                 # client phone in international format
TEST_CUSTOMERNAME="___"         # {{1}} customer name
TEST_TOPIC="___"         # {{2}} topic or subject
TEST_DETAILS="___"         # {{3}} change details
TEST_DATE="___"         # {{4}} date or time

PHONE_NORM="$(printf '%s' "$TEST_PHONE" | tr -cd '0-9')"

for pair in "CHANNEL_ID=$CHANNEL_ID" "API_TOKEN=$API_TOKEN" \
            "TEMPLATE_NAME=$TEMPLATE_NAME" "TEMPLATE_NAMESPACE=$TEMPLATE_NAMESPACE" \
            "TEMPLATE_LANGUAGE=$TEMPLATE_LANGUAGE" "TEST_PHONE=$TEST_PHONE" \
            "TEST_CUSTOMERNAME=$TEST_CUSTOMERNAME" \
            "TEST_TOPIC=$TEST_TOPIC" \
            "TEST_DETAILS=$TEST_DETAILS" \
            "TEST_DATE=$TEST_DATE"; do
    val="${pair#*=}"
    if [ -z "$val" ] || [ "$val" = "___" ]; then
        echo "Missing configuration value: ${pair%%=*}" >&2
        exit 1
    fi
done

if [ -z "$PHONE_NORM" ]; then
    echo "Error: phone number has no digits after normalization" >&2
    exit 1
fi

URL="${API_BASE_URL%/}/${CHANNEL_ID}/sendTemplate"

# params carries body ONLY. Button text is fixed in the Meta template — no button param.

# {{1}} customer name → ${TEST_CUSTOMERNAME}
# {{2}} topic or subject → ${TEST_TOPIC}
# {{3}} change details → ${TEST_DETAILS}
# {{4}} date or time → ${TEST_DATE}
read -r -d '' PAYLOAD <<JSON || true
{
  "phone": "${PHONE_NORM}",
  "template": "${TEMPLATE_NAME}",
  "namespace": "${TEMPLATE_NAMESPACE}",
  "language": { "policy": "deterministic", "code": "${TEMPLATE_LANGUAGE}" },
  "params": [
    {
      "type": "body",
      "parameters": [
        { "type": "text", "text": "${TEST_CUSTOMERNAME}" },
        { "type": "text", "text": "${TEST_TOPIC}" },
        { "type": "text", "text": "${TEST_DETAILS}" },
        { "type": "text", "text": "${TEST_DATE}" }
      ]
    }

  ]
}
JSON

RESPONSE="$(curl -s -w '\n%{http_code}' -X POST "$URL" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer ${API_TOKEN}" \
    -d "$PAYLOAD")"

HTTP_CODE="$(printf '%s' "$RESPONSE" | tail -n1)"
BODY="$(printf '%s' "$RESPONSE" | sed '$d')"

case "$BODY" in
    *'"sent":true'*) ok=1 ;;
    *) ok=0 ;;
esac

if [ "$HTTP_CODE" -ge 200 ] && [ "$HTTP_CODE" -lt 300 ] && [ "$ok" -eq 1 ]; then
    echo "Message sent to client."
    echo "API response: $BODY"
else
    echo "Send failed. HTTP status: $HTTP_CODE" >&2
    echo "$BODY" >&2
    exit 1
fi

Статус ответа и доставки

HTTP 2xx и JSON "sent": true означают, что 1MSG принял сообщение для отправки — это не значит, что оно уже доставлено на телефон клиента. Сохраните id поле (выглядит как wamid.…), чтобы сопоставить обратные вызовы о доставке.

200 OKОтвет
{
  "sent": true,
  "id": "wamid.HBgLMzgwNjM5...",
  "message": "Message accepted for delivery"
}
  • sent

    Принято для отправки — еще не доставлено на телефон клиента

  • id

    Сохраните это; обратные вызовы доставки и hookInfo опираются на это

Доставка приходит позже, отдельным обратным вызовом. Зарегистрируйте вебхук (POST …/webhook), и 1MSG отправит обновления статуса на ваш HTTPS-активный URL в данных верхнего уровня.hooks[]

200 OKВебхук для статуса доставки — данные, которые вы получаете
{
  "hooks": [
    {
      "id": "gBGGeSaGViBfAgnlzOSHEwK9O6F",
      "type": "message",
      "status": "sent",
      "timestamp": "1654864094",
      "recipient_id": "556123122026"
    }
  ]
}
  • status

    sent, delivered, read — или статус ошибки, если это возможно

  • id

    Связывает callback с id, который возвращает вызов send

  • timestamp

    Строка с Unix временем в секундах

Если вы предпочитаете не получать обратные вызовы, вместо этого используйте GET {base}/{channel}/hookInfo?messageId=<id> опрос. На практике доставка часто завершается в течение нескольких секунд, но в контракте API это не гарантируется, поэтому никогда не блокируйте процесс в ожидании доставки.

Распространенные ошибки

СтатусОтветПричина
200Message was not sent: template is not definednamespace, template or language missing from the request body.
200template name (…) does not exist in <language>The template is approved in a different language than the one requested.
200Message was not sent: provide chatId, phone, bsuid, or usernameNo recipient the channel could resolve.
403access deniedThe token is wrong, or belongs to a different channel than the URL.
429too many requests. please try laterThe channel is over its send rate.

ЧАВО

Да, для холодных сообщений в WhatsApp требуется одобренный Meta шаблон.

Связанные

Маркетинговые кампании
WhatsApp Business API для напоминания о крайнем сроке предложения
Сценарий отправляет персонализированный шаблон WhatsApp в рамках второго касания по акции, которая уже идет и скоро закончится.
Маркетинговые кампании
WhatsApp Business API для персональных предложений
Сценарий отправляет персонализированный шаблон маркетинга в WhatsApp, когда CRM делит базу на сегменты аудитории и назначает условия предложений для каждого.
Маркетинговые кампании
WhatsApp Business API для рассылки контента для вовлечения клиентов
Сценарий отправляет персонализированный шаблон WhatsApp при публикации образовательного или развлекательного контента для контактов, давших согласие.
Маркетинговые кампании
WhatsApp Business API для постпродажного взаимодействия
Сценарий отправляет персонализированный шаблон WhatsApp после покупки при наличии предложения — пополнение или сопутствующий товар.
Маркетинговые кампании
WhatsApp Business API для рассылки каталогов товаров и услуг
Сценарий отправляет персонализированный маркетинговый шаблон WhatsApp контактам, давшим согласие, когда бизнес публикует или обновляет весь каталог.
Маркетинговые кампании
WhatsApp Business API для рассылки новым клиентам
Сценарий отправляет персонализированный шаблон WhatsApp, когда в каталоге появляются новые товары или коллекция.
Маркетинговые кампании
WhatsApp Business API для рассылки промо-баннеров
Сценарий отправляет персонализированный шаблон WhatsApp, когда отдел маркетинга запускает визуальную кампанию.
Маркетинговые кампании
WhatsApp Business API для рекламной рассылки предложений
Сценарий отправляет персонализированный маркетинговый шаблон WhatsApp контактам, которые дали согласие, при начале промокампании.

Интегрируйте WhatsApp за часы
без проблем с инфраструктурой