Исправьте кампанию без повторной регистрации
Используйте этот маршрут для изменения описания существующей кампании, примеров сообщений, пояснения о получении согласия или поддерживаемых характеристик содержимого. Сохраните идентификатор кампании, её текущий бренд и сценарий использования. Новая регистрация не служит способом повторной попытки исправления существующей кампании.
Пройдите аутентификацию с помощью активной учётной записи API по HTTPS с разрешённого исходного IP-адреса. Доступна только кампания, принадлежащая этой учётной записи. Перед подготовкой изменений получите её текущее состояние; кампании с истёкшим сроком действия нельзя обновить этим способом.
curl --silent --show-error --fail-with-body --user "$API_USER:$API_PASSWORD" \
"https://api.multitel.net/tcr/v2/campaign/$CAMPAIGN_ID"Выберите только те поля, которые действительно изменились
Подготовьте файл campaign-update.json с поддерживаемыми изменениями. Текущий портал отправляет только изменённые поля кампании и не отправляет brandId, usecase, campaignId или сведения о статусе, доступные только в ответе. Для прямого обновления через API также используется объект JSON с полями, а не применяемая порталом обёртка changes/version.
| Поля | Что указать |
|---|---|
| description, messageFlow | Точное описание сервиса и того, как люди дают согласие, получают сообщения и отзывают согласие. В каждом поле допускается 40–4096 символов. |
| sample1–sample5 | Реалистичные примеры сообщений этой кампании, по 20–1024 символа в каждом непустом примере. Сохраните количество примеров, требуемое для сценария использования, прошедшего квалификацию; не отправляйте сообщения, не относящиеся к кампании. |
| helpMessage, optinMessage, optoutMessage | Применимые ответы для получателей длиной до 1024 символов. Если это требуется, соблюдайте минимум в 20 символов и опишите фактически предоставляемый сервис. Перед очисткой поля ознакомьтесь с текущими требованиями к согласию. |
| optinKeywords, optoutKeywords, helpKeywords | Ключевые слова через запятую без пробелов, общей длиной до 255 символов. Следите, чтобы ответы соответствовали фактической обработке ключевых слов. |
| privacyPolicyLink, termsAndConditionsLink | Соответствующие общедоступные URL-адреса длиной до 2048 символов, описывающие реальные правила и практики этого сервиса. |
| embeddedLinkSample | Типичный пример ссылки, которая будет содержаться в сообщениях, длиной до 255 символов. |
| numberPool, embeddedLink, embeddedPhone, ageGated, directLending | Фактические характеристики кампании в виде логических значений JSON. Чтобы отключить одну из характеристик, используйте false, а не строку "false". |
| autoRenewal | Схема публичного API поддерживает это логическое значение JSON, хотя обычный редактор содержимого кампании в портале его не предоставляет. Отключение продления не отменяет действующие минимальные обязательства и не аннулирует уже причитающиеся платежи. |
| resellerId | Схема также позволяет указать связь с реселлером. Эта возможность не входит в обычную форму исправления содержимого в портале. Не используйте это поле для переноса кампании между клиентами и не предполагайте, что API настроит обслуживание у оператора для другого реселлера. |
Схема обновления не позволяет изменять поля brandId, usecase, subscriberOptin, subscriberOptout или subscriberHelp. Не копируйте в запрос обновления полное тело запроса создания кампании. См. текущие сведения о квалификации при проверке требований к сообщениям.
Отправьте конкретные исправления
В этом примере описан условный сервис напоминаний о назначенных встречах. Перед использованием адаптируйте его к фактическому сервису кампании и процессу получения согласия.
{
"description": "Appointment reminders requested by customers of the registered business.",
"sample1": "Example business: Your requested appointment reminder is ready. Reply STOP to opt out."
}curl --silent --show-error --fail-with-body --user "$API_USER:$API_PASSWORD" \
--request PUT \
--header 'Content-Type: application/json' \
--header "Idempotency-Key: $IDEMPOTENCY_KEY" \
--data-binary @campaign-update.json \
"https://api.multitel.net/tcr/v2/campaign/$CAMPAIGN_ID"Для повторной отправки одного и того же запроса сохраняйте тот же ключ, метод, путь и параметры запроса, а также побайтово идентичное тело. Изменённое содержимое требует отдельного проверенного запроса; не меняйте ключи вслепую после истечения времени ожидания. Завершённый запрос может повторно вернуть кешированную ошибку, а дубликат запроса, обработка которого ещё идёт, может вернуть 409 с Retry-After.
Получите данные кампании повторно
При HTTP 200 возвращается непосредственно объект кампании в формате JSON. Проверьте campaignId, затем получите ту же кампанию запросом GET и сравните нужные поля. Успешное сохранение само по себе не запрашивает повторную проверку оператором, не меняет привязки номеров, не активирует отправку и не отправляет сообщение.
Портал проверяет версию формы перед сохранением и затем повторно получает данные кампании. Публичная конечная точка PUT не проверяет эту версию портала: согласовывайте одновременные изменения. Ключ идемпотентности не обнаруживает обновление, внесённое другим редактором.
Если портал показывает неустранённый отказ по результатам проверки, сначала исправьте содержимое, а затем воспользуйтесь отдельным действием запроса проверки, когда оно доступно. Это действие проверяет текущую кампанию в рабочей среде и состояние предоставления доступа к ней. Одно лишь сохранение содержимого не запускает его, а наличие идентификатора кампании не подтверждает одобрение.
Обычные обновления кампании через PUT в текущем сервисе не инициируют отдельного списания за регистрацию кампании. Действующие ежемесячные платежи, минимальные обязательства, аренда номеров и плата за использование сообщений по-прежнему применяются. Текущие настроенные тарифы кампании см. в разделе плата за кампанию.
Учитывайте ограничения и неопределённые результаты
При HTTP 400 прочитайте ошибку конкретного поля и проверьте длину значений, текст согласия и состояние кампании. При 401, 403 или 404 проверьте учётные данные API, разрешённый исходный IP-адрес и принадлежность кампании учётной записи. При 429 соблюдайте Retry-After. При 500, 502 или прерывании запроса сохраните идентификатор кампании и имеющийся requestId, затем сверьте существующую запись перед повторной отправкой.
Локальный снимок данных зависит от возвращённого тела ответа. Непустой частичный ответ может не содержать ранее существовавших полей, включая метаданные продления; пустой ответ может оставить устаревшие значения. Проверьте полный результат GET, а не считайте один лишь успешный статус доказательством сохранения всех полей. Сообщите о неустранённых расхождениях в службу поддержки. Этот маршрут не выполняет атомарное обновление привязок к операторам и не предоставляет универсального действия для восстановления активации у оператора.