Вебхуки. Получать вебхуки Стриминговой платформы

Последние изменения: 22.03.2024

Что такое вебхуки
Для чего нужны
Настроить отправку вебхуков
Примеры доступных вебхуков

Что такое вебхуки

Вебхуки — это бесплатные автоматические оповещения о событиях сервиса. Вы можете получать оповещения о следующих событиях Стриминговой платформы:

  • Live поток запущен или завершён

  • Запись Live потока начата или остановлена

  • Этапы обработки видео и записи Live потока — обработка началась, готова частично, готова полностью

  • Статусы трансляции: ожидает начала, трансляция идёт, трансляция на паузе и трансляция завершена

  • Видео загружено на платформу

Как только произойдёт событие, наш сервер создаст HTTP-запрос и отправит вам информацию о том, что случилось. Информация придёт в виде POST-запроса в формате JSON. Ниже пример вебхука о запуске Live потока, в круглых скобках даны пояснения о значениях параметров.

{ 
    "type": "stream", 
     "message": { 
           "stream": { 
             "id": 12345 (ID вашего потока в личном кабинете), 
             "live": true (платформа получает ваш поток), 
             "recording": false (поток не записывается) 
           } 
      } 
}

Мы отправляем вебхуки бесплатно. Для одного аккаунта мы можем присылать вебхуки только на один сервер. Если ваш сервер был недоступен, недошедший вебхук не отправляется повторно. Вам придёт вебхук о следующем событии.

Вебхуки приходят с IP адреса 45.147.162.135.

Для чего нужны вебхуки Стриминговой платформы

Вебхуки нужны для работы приложений, интегрированных со Стриминговой платформой. Вы сможете настроить автозапуск событий приложения при получении вебхуков.

Например, пользователи делятся видеороликами через ваше приложение. Когда пользователь добавляет видео, оно загружается и обрабатывается через Стриминговую платформу. Затем нужно опубликовать ролик в приложении. Вы настраиваете автопубликацию: как только видео будет обработано, Стриминговая платформа пришлёт вебхук, и приложение выполнит публикацию.

Настроить отправку вебхуков

1. Подготовьте свой HTTP-сервер для приёма вебхуков.

2. В разделе Стриминг перейдите на вкладку Вебхуки.

3. Включите отправку вебхуков.

4. В поле URL введите адрес вашего сервера, который будет принимать вебхуки.

Сохраните изменения.

Если вы хотите защитить соединение с помощью двусторонней проверки подлинности клиента и сервера (mTLS), продолжите настройку, следуя инструкции ниже.

5. Включите протокол mTLS.

6. (опционально) Включите проверку SSL. Опция проверяет корректность сертификата вашего сервера и сравнивает его имя с указанным в URL. Если сертификат не пройдёт проверку, соединение прервётся с ошибкой.

7. Вставьте SSL-сертификат, включая теги -----BEGIN CERTIFICATE----- и -----END CERTIFICATE-----. Цепочки сертификата должны быть вставлены слитно. Или нажмите на кнопку Вставить из файла, чтобы добавить сертификат из файла на вашем устройстве.

8. Вставьте приватный ключ, включая теги -----BEGIN PRIVATE KEY----- и -----END PRIVATE KEY-----. Или нажмите на кнопку Вставить из файла, чтобы добавить ключ из файла на вашем устройстве.

9. Вставьте Корневой сертификат CA, включая теги -----BEGIN CERTIFICATE----- и -----END CERTIFICATE-----. Цепочки сертификата должны быть вставлены слитно. Или нажмите на кнопку Вставить из файла, чтобы добавить сертификат из файла на вашем устройстве.

10. (опционально) Введите кодовую фразу, если вы использовали её при создании сертификата.

11. Сохраните изменения.

Примеры вебхуков обо всех событиях Стриминговой платформы

Ниже примеры всех вебхуков, которые можно получить от нашего сервиса. В круглых скобках даны пояснения о значениях параметров.

Запуск Live потока

{ 
  "type": "stream", 
  "message": { 
    "stream": { 
      "id": 12345 (ID вашего потока в личном кабинете), 
      "live": true (платформа получает ваш поток), 
      "recording": false (поток не записывается) 
    } 
  } 
}

Остановка Live потока

{ 
  "type": "stream", 
  "message": { 
    "stream": { 
      "id": 12345 (ID вашего потока в личном кабинете), 
      "live": false (платформа не получает ваш поток), 
      "recording": false (поток не записывается) 
    } 
  } 
} 

Начало записи

{ 
  "type": "stream", 
  "message": { 
    "stream": { 
      "id": 12345 (ID вашего потока в личном кабинете), 
      "live": true (платформа получает ваш поток), 
      "recording": true (поток записывается) 
    } 
  } 
}

Окончание записи

{ 
  "type": "stream", 
  "message": { 
    "stream": { 
       "id": 12345 (ID вашего потока в личном кабинете), 
       "live": true (платформа получает ваш поток), 
       "recording": false (поток не записывается) 
    } 
  } 
}

Начало обработки записи

{
  "type": "video",
  "message": {
    "video": {
      "id": 12345 (ID записи видео в личном кабинете),
      "slug": "abC12deFGhIjklmNO" (идентификатор видео в виде случайного набора символов, это помешает подобрать ссылку на видео, если вебхук перехватят),
      "name": "Stream Record: Test, 2023-05-20 09:00:00 +0000" (вместо Test будет название вашего потока),
      "duration": 2048,
      "status": "pending" (ожидание обработки),
      "converted_videos": [
        {
          "name": "vodcpu240" (видео в разрешении 240p),
          "status": "processing" (идёт обработка)
        },
        {
          "name": "vodcpu360" (видео в разрешении 360p),
          "status": "processing" (идёт обработка)
        },
        {
          "name": "vodcpu480" (видео в разрешении 480p),
          "status": "processing" (идёт обработка)
        },
        {
          "name": "vodcpu720" (видео в разрешении 720p),
          "status": "processing" (идёт обработка)
        },
        {
          "name": "vodcpu1080" (видео в разрешении 1080p),
          "status": "processing" (идёт обработка)
        }
      ]
    }
  }
}

Обработка записи частично завершена

{
  "type": "video",
  "message": {
    "video": {
      "id": 12345 (ID записи видео в личном кабинете),
      "slug": "abC12deFGhIjklmNO" (идентификатор видео в виде случайного набора символов, это помешает подобрать ссылку на видео, если вебхук перехватят),
      "name": "Stream Record: Test, 2023-05-20 09:00:00 +0000" (вместо Test будет название вашего потока),
      "duration": 2048,
      "status": "viewable" (видео доступно для просмотра),
      "converted_videos": [
        {
          "name": "vodcpu240" (видео в разрешении 240p),
          "status": "complete" (обработка завершена)
        },
        {
          "name": "vodcpu360" (видео в разрешении 360p),
          "status": "processing" (идёт обработка)
        },
        {
          "name": "vodcpu480" (видео в разрешении 480p),
          "status": "processing" (идёт обработка)
        },
        {
          "name": "vodcpu720" (видео в разрешении 720p),
          "status": "processing" (идёт обработка)
        },
        {
          "name": "vodcpu1080" (видео в разрешении 1080p),
          "status": "processing" (идёт обработка)
        }
      ]
    }
  }
}

Обработка записи полностью завершена

{
  "type": "video",
  "message": {
    "video": {
      "id": 12345 (ID записи видео в личном кабинете),
      "slug": "abC12deFGhIjklmNO" (идентификатор видео в виде случайного набора символов, это помешает подобрать ссылку на видео, если вебхук перехватят),
      "name": "Stream Record: Test, 2023-05-20 09:00:00 +0000" (вместо Test будет название вашего потока),
      "duration": 2048,
      "status": "ready" (обработка завершена),
      "converted_videos": [
        {
          "name": "vodcpu240" (видео в разрешении 240p),
          "status": "complete" (обработка завершена)
        },
        {
          "name": "vodcpu360" (видео в разрешении 360p),
          "status": "complete" (обработка завершена)
        },
        {
          "name": "vodcpu480" (видео в разрешении 480p),
          "status": "complete" (обработка завершена)
        },
        {
          "name": "vodcpu720" (видео в разрешении 720p),
          "status": "complete" (обработка завершена)
        },
        {
          "name": "vodcpu1080" (видео в разрешении 1080p),
          "status": "complete" (обработка завершена)
        }
      ]
    }
  }
}

Трансляция в статусе Ожидание начала

{ 
  "type": "broadcast", 
  "message": { 
    "broadcast": { 
      "id": 12345 (ID трансляции в личном кабинете), 
      "status": "pending" (статус Ожидание начала) 
    } 
  } 
}

Трансляция в статусе Live

{ 
  "type": "broadcast", 
  "message": { 
    "broadcast": { 
      "id": 12345 (ID трансляции в личном кабинете), 
      "status": "live" (статус Live) 
    } 
  } 
}

Трансляция в статусе Завершена

{ 
  "type": "broadcast", 
  "message": { 
    "broadcast": { 
      "id": 12345 (ID трансляции в личном кабинете), 
      "status": "finished" (статус Завершена) 
    } 
  } 
}

Трансляция в статусе На паузе

{ 
  "type": "broadcast", 
  "message": { 
    "broadcast": { 
      "id": 12345 (ID трансляции в личном кабинете), 
      "status": "paused" (статус На паузе) 
    } 
  } 
}

Видео добавлено на платформу

{ 
  "type": "video", 
  "message": { 
    "video": { 
      "id": 54321 (ID видео в личном кабинете), 
      "slug": "abC12deFGhIjklmNO" (идентификатор видео в виде случайного набора символов, это помешает подобрать ссылку на видео, если вебхук перехватят), 
      "name": "SampleVideo" (название видео), 
      "duration": 170859 (длительность в секундах), 
      "status": "empty" (видео ещё не обработано), 
      "converted_videos": [] 
    } 
  } 
} 

Обработка видео началась

{
  "type": "video",
  "message": {
    "video": {
      "id": 54321 (ID записи видео в личном кабинете),
      "slug": "abC12deFGhIjklmNO" (идентификатор видео в виде случайного набора символов, это помешает подобрать ссылку на видео, если вебхук перехватят),
      "name": "SampleVideo" (название видео),
      "duration": 2048,
      "status": "pending" (ожидание обработки),
      "converted_videos": [
        {
          "name": "vodcpu240" (видео в разрешении 240p),
          "status": "processing" (идёт обработка)
        },
        {
          "name": "vodcpu360" (видео в разрешении 360p),
          "status": "processing" (идёт обработка)
        },
        {
          "name": "vodcpu480" (видео в разрешении 480p),
          "status": "processing" (идёт обработка)
        },
        {
          "name": "vodcpu720" (видео в разрешении 720p),
          "status": "processing" (идёт обработка)
        },
        {
          "name": "vodcpu1080" (видео в разрешении 1080p),
          "status": "processing" (идёт обработка)
        }
      ]
    }
  }
}

Обработка видео частично завершена

{
  "type": "video",
  "message": {
    "video": {
      "id": 54321 (ID записи видео в личном кабинете),
      "slug": "abC12deFGhIjklmNO" (идентификатор видео в виде случайного набора символов, это помешает подобрать ссылку на видео, если вебхук перехватят),
      "name": "SampleVideo" (название видео),
      "duration": 2048,
      "status": "viewable" (видео доступно для просмотра),
      "converted_videos": [
        {
          "name": "vodcpu240" (видео в разрешении 240p),
          "status": "complete" (обработка завершена)
        },
        {
          "name": "vodcpu360" (видео в разрешении 360p),
          "status": "processing" (идёт обработка)
        },
        {
          "name": "vodcpu480" (видео в разрешении 480p),
          "status": "processing" (идёт обработка)
        },
        {
          "name": "vodcpu720" (видео в разрешении 720p),
          "status": "processing" (идёт обработка)
        },
        {
          "name": "vodcpu1080" (видео в разрешении 1080p),
          "status": "processing" (идёт обработка)
        }
      ]
    }
  }
}

Обработка видео полностью завершена

{
  "type": "video",
  "message": {
    "video": {
      "id": 54321 (ID записи видео в личном кабинете),
      "slug": "abC12deFGhIjklmNO" (идентификатор видео в виде случайного набора символов, это помешает подобрать ссылку на видео, если вебхук перехватят),
      "name": "SampleVideo" (название видео),
      "duration": 2048,
      "status": "ready" (обработка завершена),
      "converted_videos": [
        {
          "name": "vodcpu240" (видео в разрешении 240p),
          "status": "complete" (обработка завершена)
        },
        {
          "name": "vodcpu360" (видео в разрешении 360p),
          "status": "complete" (обработка завершена)
        },
        {
          "name": "vodcpu480" (видео в разрешении 480p),
          "status": "complete" (обработка завершена)
        },
        {
          "name": "vodcpu720" (видео в разрешении 720p),
          "status": "complete" (обработка завершена)
        },
        {
          "name": "vodcpu1080" (видео в разрешении 1080p),
          "status": "complete" (обработка завершена)
        }
      ]
    }
  }
}

Помогла ли вам статья?