Квалифицируйте бренд перед регистрацией его кампании
Кампания 10DLC описывает сообщения, которые зарегистрированный бизнес намерен отправлять, как получатели дают согласие, а также как они могут получить помощь или остановить сообщения. Этот API создает запись в реестре; завершение промышленной активации у оператора — это отдельный шаг настройки учетной записи. Используйте собственный бренд из регистрации бренда, затем загрузите его доступные варианты использования и выбранного варианта использования текущие требования.
Используйте текущий результат квалификации, чтобы выбрать суб-варианты использования, допустимые идентификаторы сетей, образцы сообщений и декларации подписки/отписки/помощи. Требования могут различаться в зависимости от бренда и сети. Не отправляйте идентификаторы из примера и не копируйте его описание согласия для бизнеса с другим процессом.
Держите песочницу и промышленную среду отдельно
Для упражнения в песочнице используйте собственный тестовый бренд и текущий вариант использования, для которого он квалифицирован. Используйте TRIAL только тогда, когда эта квалификация его предлагает. Портал проверяет, что выбранный бренд и среда кампании совпадают. Прямой запрос API не выполняет за вас полную проверку мастера портала, поэтому сохраняйте это разделение в своей интеграции.
Создание промышленной кампании платное и не делает номер автоматически готовым к отправке. Держите среду кампании согласованной с ее брендом и просмотрите плату и применимые условия перед созданием рабочей кампании.
Отправьте JSON кампании
Подготовьте campaign.json с вашими квалифицированными значениями. R000000 означает отсутствие реселлера; используйте его только тогда, когда это задуманная конфигурация. Для обычной конфигурации реселлера MultiTEL получите разрешенный идентификатор реселлера MultiTEL LLC из коллекции реселлеров вашей учетной записи или из потока подготовки портала, а не прописывайте жестко чужой идентификатор.
curl --silent --show-error --user "$API_USER:$API_PASSWORD" \
'https://api.multitel.net/tcr/v2/reseller?companyName=MultiTEL%20LLC&recordsPerPage=500'Приведенный ниже JSON иллюстрирует пробную кампанию для собственного тестового бренда. Замените бренд, вариант использования, реселлера и текст согласия значениями, которые фактически квалифицированы для вашего теста.
{
"brandId": "B123ABC",
"channelId": "10DLC",
"usecase": "TRIAL",
"subUsecases": [],
"resellerId": "R000000",
"description": "Trial account notices requested by users of the example application.",
"messageFlow": "Test users explicitly select an unchecked consent box before requesting these trial notices.",
"sample1": "Example application: your requested account notice is available. Reply STOP to stop notices.",
"subscriberOptin": true,
"optinKeywords": "START",
"optinMessage": "You are subscribed to the example application's requested account notices.",
"subscriberOptout": true,
"optoutKeywords": "STOP",
"optoutMessage": "You will no longer receive the example application's account notices.",
"subscriberHelp": true,
"helpKeywords": "HELP",
"helpMessage": "For help with example account notices, contact support@example.invalid.",
"embeddedLink": false,
"embeddedPhone": false,
"numberPool": false,
"ageGated": false,
"directLending": false,
"termsAndConditions": true,
"autoRenewal": false,
"mnoIds": [],
"referenceId": "your-trial-reference"
}Установите termsAndConditions в значение true только после того, как уполномоченное лицо просмотрело и приняло применимые условия. Пример не является согласием от вашего имени. Для флагов используйте булевы значения JSON, а не строки в кавычках.
curl --silent --show-error --user "$API_USER:$API_PASSWORD" \
--header 'Content-Type: application/json' \
--header "Idempotency-Key: $IDEMPOTENCY_KEY" \
--data-binary @campaign.json \
'https://api.multitel.net/tcr/v2/campaignBuilder'Поля кампании и условные требования
| Поля | Что указать |
|---|---|
| brandId, channelId, usecase | Ваш собственный бренд, канал 10DLC и допустимый текущий код варианта использования. Используйте коды из квалификации, а не переведенные названия. |
| subUsecases | Массив допустимых кодов суб-вариантов использования. Соблюдайте минимальное и максимальное количество, определенные выбранной квалификацией. |
| resellerId | Разрешенный идентификатор реселлера. Маршрут, принадлежащий учетной записи, принимает собственных реселлеров, его настроенного общего реселлера или намеренное значение без реселлера. Несвязанный реселлер отклоняется. |
| description, messageFlow | Опишите фактическую цель и способ сбора согласия. Каждое поле должно содержать 40–4096 символов. Укажите реальное действие пользователя, форму или процесс; не выдумывайте согласие, которое ваше приложение не собирает. |
| sample1 … sample5 | Репрезентативные сообщения, обычно 20–1024 символа каждое. Портал требует как минимум одно; допустимые сети могут требовать больше. Укажите количество, требуемое текущей квалификацией. |
| subscriberOptin, subscriberOptout, subscriberHelp | Задекларируйте поддерживаемые потоки получателей, используя эти точные имена полей. Когда поток включен, укажите его поля ключевых слов и сообщений. Требования сетей могут делать отдельные потоки обязательными. |
| optinKeywords, optoutKeywords, helpKeywords | Фактические распознаваемые ключевые слова, до 255 символов. Они должны соответствовать поведению принимающего приложения. |
| optinMessage, optoutMessage, helpMessage | Соответствующие сообщения. Текущие опубликованные правила полей определяют 20–1024 символа. Укажите реальное поведение поддержки и отписки. |
| embeddedLink, embeddedPhone, embeddedLinkSample | Честно задекларируйте встроенные ссылки или номера телефонов. Даже сеть, соответствующая остальным требованиям квалификации, может их запретить. Образец ссылки допускает до 255 символов. |
| mnoIds | Необязательный массив допустимых числовых идентификаторов сетей из квалификации. Не предполагайте, что каждая сеть поддерживает выбранный вариант использования. |
| numberPool, ageGated, directLending | Применимые характеристики кампании как булевы значения JSON. Выбирайте их в соответствии с фактическим сервисом. |
| privacyPolicyLink, termsAndConditionsLink | Ваши соответствующие публичные URL-адреса политики и условий, когда применимо, до 2048 символов каждый. Они должны описывать фактический сервис обмена сообщениями. |
| termsAndConditions | Явное принятие применимых условий кампании. Портал требует true, а его мастер также собирает текущие индивидуальные подтверждения. |
| autoRenewal | Продлевается ли кампания. По умолчанию — true. Отключение продления не снимает минимальное обязательство, уже связанное с промышленной кампанией. |
| referenceId, tag | Ваша ссылка на кампанию, до 50 символов, и необязательные теги. referenceId — это не заголовок Idempotency-Key. |
Опубликованная схема содержит некоторые несогласованности в использовании заглавных букв в описательных таблицах. Текущий запрос портала использует subscriberOptin и subscriberOptout, как показано выше. Сохраняйте именно такой регистр. Это руководство охватывает рабочий процесс 10DLC для арендаторов; не делайте вывода, что обязательные поля или шаги активации другого канала такие же.
Безопасно повторите тот же задуманный запрос
Используйте один Idempotency-Key для этого задуманного создания. Ключ — это 1–128 печатных символов ASCII без пробелов, привязанный к учетной записи владельца. При повторной попытке сохраняйте без изменений метод HTTP, путь, строку запроса и точные байты тела. Переформатированный файл JSON конфликтует, даже если его значения эквивалентны.
Выполняющийся дубликат может вернуть HTTP 409 с Retry-After; выполненные запросы могут повторно воспроизвести свой сохраненный ответ. Кешированная ошибка не доказывает, что реестр ничего не создал. Сохраните campaignId, requestId и любые корреляционные заголовки, проверьте существующую кампанию и проверьте фактическое состояние и устраните расхождения после частичного сбоя, прежде чем рассматривать новый ключ.
Идентификатор кампании — это не окончательная настройка отправки
Ответ использует статус HTTP и прямой JSON. При успешном создании сохраните campaignId и прочитайте его текущее состояние:
curl --silent --show-error --user "$API_USER:$API_PASSWORD" \
"https://api.multitel.net/tcr/v2/campaign/$CAMPAIGN_ID"Текущий промышленный рабочий процесс портала также предоставляет кампанию оператору обмена сообщениями и загружает бренд/кампанию в учетную запись отправки. Это отдельные операции от этого публичного вызова создания. Кампания в реестре может существовать, даже если более поздний шаг предоставления доступа или загрузки у оператора не удался.
Используйте интегрированный промышленный рабочий процесс создания портала, когда вам нужна объединенная последовательность регистрации, предоставления доступа и загрузки у оператора. Для промышленной кампании, уже созданной напрямую этим API, сохраните ее идентификатор кампании и через поддержку проверьте фактическое состояние настройки оператора учетной записи и устраните расхождения. Текущий клиентский интерфейс не предоставляет общей кнопки продолжения для каждой напрямую созданной промышленной кампании. Не создавайте другую регистрацию, чтобы повторить ее активацию. Убедитесь, что кампания активна и настройка оператора завершена, прежде чем назначать номер для отправки. Номер также должен принадлежать вам, быть активным и поддерживать SMS. Создание кампании не отправляет сообщения.
Платы за промышленные кампании
| Вариант использования | Ежемесячная плата |
|---|---|
| LOW_VOLUME, UCAAS_LOW | $1.67 |
| SOLE_PROPRIETOR | $2.23 |
| CHARITY | $3.34 |
| EMERGENCY | $5.56 |
| AGENTS_FRANCHISES | $33.34 |
| Другие настроенные резервные варианты использования | $11.12 |
Эти розничные суммы были проверены по текущей конфигурации портала по состоянию на 24 октября 2026 года. Подтвердите текущий квалифицированный вариант использования и отображаемую цену перед промышленной отправкой. monthlyFee в ответе квалификации реестра не является автоматически вашей розничной ценой MultiTEL.
Текущий портал указывает трехмесячное минимальное обязательство для неполитических промышленных кампаний. Просмотрите применимые условия и выбор продления перед подтверждением. Регистрация, аренда номера, дополнительная проверка и использование сообщений — это отдельные платы. Успешный ответ о создании сам по себе не доказывает, что каждый шаг выставления счетов или активации у оператора завершен.
Обрабатывайте ошибки валидации и частичные сбои
Читайте HTTP status и возвращенный JSON. Ошибки валидации могут быть массивами объектов code/description; локальные сбои вместо этого могут быть объектами с message, status и, для некоторых ошибок обработки, requestId.
| Результат HTTP | Следующее действие |
|---|---|
| 400 | Исправьте конкретные поля или ключ идемпотентности. Перечитайте текущую квалификацию, требуемое количество образцов и требования к потокам получателей. |
| 401, 403 или 404 | Проверьте учетные данные API и разрешенный исходный IP, затем владение брендом/реселлером и разрешения. Не используйте идентификаторы из другой учетной записи. |
| 402 | Просмотрите финансирование промышленной среды и разрешение на покупку, прежде чем повторять то же задуманное создание. |
| 409 | Различайте повторное воспроизведение выполняющегося запроса и измененный запрос с тем же ключом. Сохраняйте существующую кампанию и детали запроса при проверке фактического состояния и устранении расхождений. |
| 429 или ограничитель недоступен | Соблюдайте Retry-After, когда он присутствует, и сохраняйте исходный ключ и точный запрос. |
| 500 или 502 | Создание уже могло произойти. Сохраните любые campaignId и requestId, проверьте существующую кампанию и возобновите ее активацию или проверьте ее фактическое состояние и устраните расхождения, а не создавайте дубликат. |