Перейти к содержимому

Отправка уведомлений об изменении тура

Условия отправки

  • Изменение любого параметра тура в CRM, который присутствует в методе /org-api/tour/get?id=<int>
  • Администратору сервиса должен быть передан URL для получения уведомлений об изменениях тура.

Процесс отправки

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

  • Параметры уведомления URL для отправки: <Ваш URL для получения уведомлений>
  • Формат данных: JSON
json
{
  "event": "tour_update",
  "payload": {
    "tour_id": "12345"
  }
}

Проверка подлинности запроса

Для каждого организатора задан уникальный секретный токен, каждый запрос будет содержать заголовок: X-Webhook-Secret: <ваш_токен>

Рекомендуем проверять значение этого заголовка на своей стороне и отклонять запросы, в которых оно не совпадает с выданным вам токеном. Это позволяет убедиться, что уведомление действительно отправлено нами.

Пример на PHP:

php
<?php

$expectedSecret = 'ваш_токен'; // хранится в окружении вашего сервиса
$receivedSecret = $_SERVER['HTTP_X_WEBHOOK_SECRET'] ?? null;

if (!$receivedSecret || !hash_equals($expectedSecret, $receivedSecret)) {
    http_response_code(403);
    exit('Invalid webhook secret');
}

// Токен верный - обрабатываем уведомление
$payload = json_decode(file_get_contents('php://input'), true);

Пример на Python (Flask):

python
import hmac
from flask import Flask, request, abort

app = Flask(__name__)
EXPECTED_SECRET = "ваш_токен"  # хранится окружении вашего сервиса

@app.route("/webhook", methods=["POST"])
def webhook():
    received_secret = request.headers.get("X-Webhook-Secret")

    if not received_secret or not hmac.compare_digest(EXPECTED_SECRET, received_secret):
        abort(403, description="Invalid webhook secret")

    payload = request.get_json()
    # обрабатываем уведомление
    return "", 200

Механизм повторных попыток

При отсутствии ответа со статусом 200 выполняется повторная отправка уведомления. Всего производится 7 попыток (включая первую) со следующими интервалами:

  1. В течение минуты (повторная попытка)
  2. Через 5 минут
  3. Через 15 минут
  4. Через 30 минут
  5. Через 1 час
  6. Через 4 часа

Особые случаи

При наличии нескольких неподтвержденных уведомлений для одного тура (без ответа 200):

  • Повторная отправка выполняется только для последнего уведомления
  • Предыдущие неподтвержденные уведомления игнорируются