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

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

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

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

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

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

Hello {{1}}! A quick reminder: the offer on {{2}} ends {{3}}. {{4}} Tap the button below to claim it before time runs out.

Требовать до крайнего срока
  • {{1}}
    имя клиента
  • {{2}}
    промоакция или продукт, о которых контакт уже узнал из первой рассылки
  • {{3}}
    срок окончания предложения (дата или время)
  • {{4}}
    строка «последний шанс» (например, осталось несколько часов, последнее напоминание)
  • “Требовать до крайнего срока”
    кнопка — исправлено в шаблоне Meta
WhatsApp Business API for limited-time offer deadline reminder

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

Используйте этот сценарий, когда ограниченная по времени акция уже запущена, контакты получили первое объявление, срок окончания приближается, но многие еще не воспользовались предложением. Он подходит для финальных напоминаний о распродаже, окон для обновления SaaS, срок которых подходит к концу, а также агентствам, проводящим повторную рассылку для тех, кто не отреагировал на предыдущую рекламную рассылку. Он не предназначен для холодных контактов, обычных сезонных запусков или напоминаний о коммунальных платежах или действиях, не связанных с маркетинговым сроком.

Переведите контакты, которые уже видели предложение в клиентов
Напоминание нацелено на тех, кто не совершил конверсию после первой рассылки, поэтому оно отправляется людям, которые уже знакомы с акцией.
Формулировка сроков, создающая ощущение срочности
Четыре переменные в теле содержат имя контакта, предложение, которое им озвучили, крайний срок и фразу последнего шанса, чтобы сообщение выглядело как срочное напоминание, а не повторное объявление.
Одно касание, чтобы вернуться на ту же страницу акции
Статическая URL-кнопка, закрепленная в шаблоне Meta, повторно открывает промо-страницу, чтобы контакт мог действовать до закрытия окна, не дожидаясь истечения 24 часов на ответ.
Менее трудозатратное последнее напоминание
CRM помечает непреобразованных клиентов по мере приближения дедлайна, и шаблон отправляется по этому триггеру — ни одному менеджеру не нужно заново составлять список или перепечатывать срочный текст для каждого контакта.
Отслеживание конверсий в последние часы
Результаты доставки фиксируются для группы напоминаний, чтобы отдел маркетинга мог сравнить отправленные в последний момент сообщения с числом конверсий перед окончанием акции.

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

  1. Триггер

    CRM или система автоматизации маркетинга отмечает тех, кто не совершил конверсию после первой промо-рассылки, по мере приближения крайнего срока.

    event · triggered

  2. Отслеживание события

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

    phone: "+…"

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

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

    POST /sendTemplate

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

    Каждый целевой контакт получает последнее напоминание в WhatsApp.

    delivered

  5. Отслеживание статуса

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

    status: "read"

WhatsApp Business API for limited-time offer deadline reminder

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

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

  1. Ключ 1MSG API · Как получить API ключ
  2. Аккаунт WhatsApp Business · Как подключить 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_PRODUCTORSERVICENAME="___"         # {{2}} product or service name
TEST_DATE="___"         # {{3}} date or time
TEST_ADDITIONALINFO="___"         # {{4}} additional info

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_PRODUCTORSERVICENAME=$TEST_PRODUCTORSERVICENAME" \
            "TEST_DATE=$TEST_DATE" \
            "TEST_ADDITIONALINFO=$TEST_ADDITIONALINFO"; 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}} product or service name → ${TEST_PRODUCTORSERVICENAME}
# {{3}} date or time → ${TEST_DATE}
# {{4}} additional info → ${TEST_ADDITIONALINFO}
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_PRODUCTORSERVICENAME}" },
        { "type": "text", "text": "${TEST_DATE}" },
        { "type": "text", "text": "${TEST_ADDITIONALINFO}" }
      ]
    }

  ]
}
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 завязаны на этом

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

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

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

  • id

    Сопоставляет обратный вызов с 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 при запуске единственного указанного продукта, услуги, тарифа или функции.
Маркетинговые кампании
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 за часы
без проблем с инфраструктурой