Оформление
Отправка уведомлений об изменении тура
Условия отправки
- Изменение любого параметра тура в 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 попыток (включая первую) со следующими интервалами:
- В течение минуты (повторная попытка)
- Через 5 минут
- Через 15 минут
- Через 30 минут
- Через 1 час
- Через 4 часа
Особые случаи
При наличии нескольких неподтвержденных уведомлений для одного тура (без ответа 200):
- Повторная отправка выполняется только для последнего уведомления
- Предыдущие неподтвержденные уведомления игнорируются