Начинаем перенос my.1msg.ioЕщё
1msg official logo

Запрос фото или файла через шаблон WhatsApp API

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

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

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

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

Здравствуйте, {{1}}! Чтобы обработать ваш запрос №{{2}}, приложите, пожалуйста, {{3}}. Загрузить файл можно по кнопке ниже.

Загрузить файл
  • {{1}}
    имя клиента
  • {{2}}
    номер тикета или обращения
  • {{3}}
    что нужно приложить (например, фото повреждения, счёт в PDF, скан паспорта)
  • “Загрузить файл”
    кнопка задана в шаблоне Meta
WhatsApp Business API for ticket attachment request

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

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

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

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

  1. Триггер

    Хелпдеск отмечает, что для тикета нужно фото, документ или подтверждение.

    event · triggered

  2. Фиксация события

    Система находит номер телефона получателя и данные запроса.

    phone: "+…"

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

    Собирается персональное сообщение по шаблону с тремя переменными в тексте и кнопкой со статическим URL.

    POST /sendTemplate

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

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

    delivered

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

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

    status: "read"

WhatsApp Business API for ticket attachment request

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

Что понадобится

  1. Ключ API 1MSG · Как получить ключ 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_TICKETNUMBER="___"         # {{2}} ticket number
TEST_AWAITEDITEM="___"         # {{3}} awaited item

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_TICKETNUMBER=$TEST_TICKETNUMBER" \
            "TEST_AWAITEDITEM=$TEST_AWAITEDITEM"; 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}} ticket number → ${TEST_TICKETNUMBER}
# {{3}} awaited item → ${TEST_AWAITEDITEM}
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_TICKETNUMBER}" },
        { "type": "text", "text": "${TEST_AWAITEDITEM}" }
      ]
    }

  ]
}
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,
  "message": "Sent to [email protected]",
  "description": "Message has been sent to the provider",
  "id": "wamid.HBgLMzgwNjM5..."
}
  • sent

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

  • id

    Сохраните его: уведомления о доставке и hookInfo привязаны к этому значению

Связанные

Обслуживание клиентов
Уведомление о смене статуса тикета через WhatsApp API
Сценарий отправляет клиенту персональный шаблон WhatsApp, когда меняется статус тикета в поддержке.
Обслуживание клиентов
Уведомление об эскалации тикета через WhatsApp API
Сценарий отправляет клиенту персональный шаблон WhatsApp, когда тикет эскалирован, потому что решение занимает больше времени, чем обычно.
Обслуживание клиентов
Уведомление о создании тикета через WhatsApp API
Сценарий отправляет клиенту персональный шаблон WhatsApp, когда в поддержке создан новый тикет.
Обслуживание клиентов
Уведомление о закрытии тикета через WhatsApp API
Сценарий отправляет клиенту персональный шаблон WhatsApp, когда тикет в поддержке закрыт.
Обслуживание клиентов
WhatsApp Business API для запроса дополнительных сведений по тикету
Сценарий отправляет клиенту персонализированный шаблон WhatsApp, когда для решения тикета нужна дополнительная информация, а сеансовое окно не открыто.
Обслуживание клиентов
WhatsApp Business API для уведомления о принятии тикета
Сценарий отправляет клиенту персонализированный шаблон WhatsApp, когда его запрос в поддержку принят на обработку.
Обслуживание клиентов
WhatsApp Business API для командной рассылки — создать группу WhatsApp
В этом сценарии используется API групп с операцией создания, чтобы создать именованную группу WhatsApp для рассылок команды.
Обслуживание клиентов
WhatsApp Business API для квитанции о доставке — реакции и прочтения
Этот сценарий объединяет sendReaction и readMessage в рамках 24-часового окна обслуживания клиентов.

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