Введение

Данная документация описывает принципы работы с Pruffme API Данный сервис позволяет развернуть полноценную вебинарную комнату прямо на Вашем сайте. При этом создание комнат и модерация происходят через REST API.

Для работы с порталом необходимы код и ключ пользователя. Найти их можно на странице https://pruffme.com/cabinet/#/user/main

var user = "USER_HASH",         // Код доступа к API Pruffme
var key  = "SECRET_HASH",       // Скрытый Ключ доступа

Формирование запроса

Формирование запроса для отправки к серверу состоит из 2х этапов:

1) Создание тела запроса

Это Json-объект, в который вносится вся информация, необходимая для выполнения запроса. Ниже приведен пример для функции webinars-list

{}

2) Подпись запроса

  • Преобразуем объект Json в строку
  • Преобразуем строку в Base64 формат
  • Создадим результирующий объект для отправки, добавив в него партнерский ключ и логин и название метода

Пример формирование на JavaScript:

var content = JSON.stringify(json);
var base = Base64.encode(content);
var postData =
{
    "user":     "USER_HASH",         // Код доступа к API Pruffme    https://pruffme.com/cabinet/#/user/main
    "key":      "SECRET_HASH",       // Скрытый Ключ доступа
    "action":   "webinars-list"
    "content": base
};

$.ajax({
    type: "POST",
    dataType: "json",
    url: "https://pruffme.com/api/",
    data: postData,
    success: function (data) {

    },
    error: function (e) {
        console.log(e.message);
    }
});

Пример формирования на PHP

$content = (object)array(
    "limit"=>2,
    "offset"=>0
);
$encoded    = json_encode($content);
$base       = base64_encode($encoded);    

$params = array(
    "user"=>"USER_HASH",
    "key"=>"SECRET_HASH",        
    "action"=>"webinars-list",
    "content"=>$base
);
$postFields = http_build_query($params);



$server = "https://pruffme.com/api/";
$curl = curl_init($server);
curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/4.0");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_POSTFIELDS, $postFields);
curl_setopt($curl, CURLOPT_TIMEOUT, 30);
$result = curl_exec($curl);

$json = json_decode($result);                 

Безопасные операции

Безопасные операции - это операции, которые необходимо исполнять со стороны собственного сервера. Они содержать клиентский ключ, поэтому не должны быть прочитаны конечными пользователями

К таким операциям относятся:

  • webinars-list - Список созданных вебинаров
  • webinar-records - Записи вебинаров
  • webinar-info - Подробная информация о вебинаре
  • webinar-edit - Создание/редактирование вебинара
  • webinar-create - Создание/редактирование вебинара
  • webinar-delete - Удалить вебинар

webinars-list

Возвращает список вебинаров в системе

Формат запроса:

{
    "limit": 10,      // Максимальное кол-во вебинаров
    "offset": 0      
}

Формат ответа:

{
    "result": [
        {
            "id": 1,
            "hash": "7fa1897bdf724161a5faa000869008ef",
            "name": "Новый вебинар FLASH",
            "login": "tmp001",
            "password": "",
            "has_questions": "0",
            "landing": "https://pruffme.com/landing/login/tmp001",
            "creationdate": "2020-08-28 00:43:49",
            "updatedate": "2020-08-28 00:44:04"
        },
        {
            "id": 12,
            "hash": "dc3f62d7670e7f639ae7f400007b81b3",
            "name": "Новый вебинар WEBRTC",
            "login": "tmp001",
            "password": "",
            "has_questions": "0",
            "landing": "https://pruffme.com/landing/login/tmp002",
            "creationdate": "2020-08-13 03:56:11",
            "updatedate": "2020-08-13 03:56:11"
        }
    ]
}

webinar-records

Возвращает список записей вебинара

Формат запроса:

{
    "webinar": "HASH Вебинара"  //Если не указать, то вернется список всех записей пользователя
    "limit": 10,      // Максимальное кол-во записей
    "offset": 0      
}

Формат ответа:

{
    "result": [
        {
            "id": 11111,
            "hash": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",//hash записи
            "groupHash": "",//Hash родительской записи, если применимо
            "name": "Название",
            "url": "https://recordsXXX.pruffme.com/xxxxxxxxxxxxxxxxxxxxxxxxx.mp4",
            "preview": "https://recordsXXX.pruffme.com/xxxxxxxxxxxxxxxxxxxxxxxxx.jpg",
            "convert_status": 0,
            "size": 92112,//Размер
            "duration": 11,//Длительность в секундах
            "creationdate": "2021-10-31 00:00:00",//время создания
            "exec_date": "2021-10-31 00:00:00",//Дата проведения вебинара
            "children": []//вложенные записи, если преминимо
        }
    ]
}

webinar-info

Получение подробной информации о вебинаре

Формат запроса:

{
      "hash": "Your webinar hash"    // Hash вебинара   [Обязательное]
}

Формат ответа:

{
    "webinar": {
        "id": 1000000,
        "hash": "d6b8292187af000364199a3fa36a5dcf",
        "name": "Webinar Label Name",
        "login": "tmp1600824219",
        "password": "",
        "has_questions": "0",
        "landing": "https://pruffme.com/landing/login/tmp1600824219",
        "publish": "0",
        "creationdate": "2020-09-23 04:23:41",
        "updatedate": "2020-09-23 04:23:52",
        "times": [
            {
                "selected_date": "2020-09-24 12:00:00",
                "duration": 60,
                "zone_offset": -180
            }
        ],
        "questions": [
            {
                "name": "Имя и Фамилия",
                "type": 1,
                "ordering": 0
            }
        ],
        "moderators": [
            {
                "id": 9,
                "hash": "45c48cce2e20000dea1afc51c7c6ad26",
                "status": 0,
                "name": "Name",
                "surname": "Surname",
                "logo": "https://storage.pruffme.com/media/default.jpg",
                "landing": "https://pruffme.com/landing/login"
            }
        ]
    }
}

webinar-create

Создание или редактирование вебинара. В ответ приходит полное его описание

Формат запроса:

{       
    "name": "Webinar Label Name",   // Название вебинара    [Обязательное]
    "login": "uniq_webinar_login",  // Уникальный код вебинара
    "password": "",                 // Пароль на вход в вебинар
    "publish": 0,                   // Публиковать в каталоге Pruffme[2] или нет[0]
    "has_questions": 0,             // Использовать анкету[1] или нет [0]
    "password": "",                 // Пароль на вход в вебинар
    "use_record": 0,                // Включить автоматическую запись 1 - да, 0 - нет[по умолчанию]
    "type": "webinar",              // Вебинар или конференция [webinar,meeting][по умолчанию webinar]
    "time": {                       // Объект времени проведения вебинара
        "selected_date": "2020-09-24 12:00:00", //дата и время проведения   [Обязательное]
        "duration": 60,                         // Длительность в минутах   [Обязательное]
        "zone_offset": -180                     // Часовой пояс [смещение в минутах]. Для GMT+3 = -180  [Обязательное]
    },
    "times":[                       // Если надо несколько дат, то можно использовать данное поле с массивом
        {                       
            "selected_date": "2020-09-24 12:00:00",
            "duration": 60,
            "zone_offset": -180
        },
        {                       
            "selected_date": "2020-09-24 12:00:00",
            "duration": 60,
            "zone_offset": -180
        },
    ],
    "questions": [                  // Список Вопросов
        {
            "name": "Имя и Фамилия",    // Название вопроса
            "type": 1                   // Тип вопроса ( 1 - Имя,3 - Email,4 - телефон, 0 - Любой другой)
        }
    ],
    "cloneOf":"Hash of Webinar to clone"    //Хеш вебинара для копирования. Копируются стили посадочной страницы, настройки внутри вебинара, Вопросы.
}

Формат ответа как в webinar-info

webinar-edit

Создание или редактирование вебинара. В ответ приходит полное его описание

Формат запроса:

{
    "hash": "Hash of Webinar",  // hash редактируемого вебинара                     [Обязательное]
    .                           // Те же поля, что и при создании, кроме cloneOf
    .
    .
}

Формат ответа как в webinar-info

webinar-delete

Удаление вебинара. В ответ приходит полное статус операции

Формат запроса:

    
{
    "hash": "Hash of Webinar",  // hash удаляемого вебинара                     [Обязательное]        
}

Формат ответа

{
    "result": true    
}

webinar-get-registrations-stat

Получение статистики регистраций на вебинар

Формат запроса:

    
{
    "hash": "Hash of Webinar",  // hash вебинара                     [Обязательное]
    "date_from": "2024-11-01 16:50:00",  // дата начала              [Обязательное]
    "date_to": "2024-11-02 16:50:00",    // дата окончания           [Обязательное]
}

Формат ответа

{
    "result": [{
        "name": "Марина",
        "email": "marina@mail.ru",
        "hash": "867a9e7903c603b17d0e897c148fb1d5",
        "creationdate": "2024-11-01T16:51:21.000Z",
        "questions": {
            "E-Mail": "marina@mail.ru",
            "Телефон": "70000005515",
            "как дела": "Отлично",
            "Город": "Санкт-Петербург",
        }
    },
    {
        "name": "Модератор акк",
        "email": null,
        "hash": "367cb110d5769d165a97f2d58e38ee68",
        "creationdate": "2024-12-04T14:00:23.000Z"
    },
    ...]

}

webinar-get-full-stat

Получение полной статистики вебинара за указанный период в виде файла xlsx

Формат запроса:

    
{
    "hash": "Hash of Webinar",  // hash вебинара                     [Обязательное]
    "date_from": "2024-11-01 16:50:00",  // дата начала              [Обязательное]
    "date_to": "2024-11-02 16:50:00",    // дата окончания           [Обязательное]
}

Пример запроса (из командной строки)


    curl -X POST https://pruffme.com/api/ ^
      -d "action=webinar-get-full-stat" ^
      -d "user=USER_HASH" ^
      -d "key=SECRET_HASH" ^
      -d "content=ewogICJ3ZWJpbmFyIjogImU0NmZkMjcwMTVkNGIyODQ2MTAxMmYzY2E4ZGM3ZGI0IiwKICAiZGF0ZV9mcm9tIjogIjIwMjQtMTAtMTggMTk6NDM6NTEiLAogICJkYXRlX3RvIjogIjIwMjQtMTEtMTggMTk6NDM6NTEiCn0=" ^ // Тело запроса закодированное в формате Base64
      -H "Content-Type: application/x-www-form-urlencoded" ^
      -o "C:\Downloads\result_file.xlsx" // Путь сохранения файла

Формат ответа

Файл в формате xlsx

create-participant

Создает участника с нужными привилегиями. Для существующего участника можно изменить привилегии. Идентификация происходит по полю email

Формат запроса:

    
{
    "webinar": "Hash of Webinar",  // hash вебинара, для которого создается участник     [Обязательное]  
    "user":{                       // [Обязательное]
        "email":"xxx@mail.ru",     // уникальный логин участника
        "name":"Василий",           
        "surname":"Иванов",
        "link":"https://your.site",// Ссылка, куда перейдет участник после кнопки Выход, если вебинар на отдельной странице
        "role":"moderator"         // Привилегии. Варианты ["moderator","publisher","participant"]
    }      
}

Формат ответа

{
    "participant": {
      "id":             123,
      "hash":           "dc62afcee5d300000e46eb078564e5",
      "webinarHash":    "Hash of Webinar",
      "status": 3,
      "name": "Василий Иванов",
      "logo": "",
      "email": "xxx@mail.ru",
      "creationdate": "2021-08-21 00:00:00"
    },
    "session": "eyJwIjoiZG..................................NGE3ODE2Mz"
}

Замечание:

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

1) Через метод pruffmeapi.setParticipantSession(session) мы можем передать сессию внутрь вебинара,если комната отрисовывается через API.

2) Если используется комната используется на сайте pruffme.com.

Для этого необходимо сформировать ссылку вида:

https://pruffme.com/webinar/?id=WEBINAR_HASH#session=PARTICIPANT_SESSION

При переходе по этой ссылке, участник приобрет права, заданные ему методом create-participant

participants-duration

Информация о проведенном времени внутри вебинара

Формат запроса:

    
{
    "webinar": "Hash of Webinar",  // hash удаляемого вебинара                     [Обязательное]
    "date_from": "2020-10-01",  // дата начала запроса
    "date_to": "2020-11-01",    // дата окончания запроса
    "participant": "Hash of Webinar Participant",   // Информация по конкретному участнику вебинара      
}

Формат ответа

{
    "result": [
        {
            "participant": "d88e80165f3e7f5eb004781c04bcd561",
            "name": "Participant Name 1",
            "seconds": 7
        },
        {
            "participant": "cc46d46109a871584cc1dd4bd083a751",
            "name": "Participant Name 2",
            "seconds": 1800
        },
        {
            "participant": "f57c188bbd0841142851060ebf459e02",
            "name": "Participant Name 3",
            "seconds": 3600
        }
    ]
}

Формирование страницы с вебинаром

Для того, чтобы отобразить вебинарную комнату на своем сайте, необходимо разместить следующий код:

<head>
  <script src="https://pruffme.com/api/library.js" data-name="pruffmeapi" data-type="webinar"></script>
  <script>
    function pruffmeAPICallback(callback)
    {
      pruffmeapi.setWebinarHash("WEBINAR HASH");//[Обязательно] Hash вебинара
      pruffmeapi.setWebinarContainerName(".pruffme-container");  // Указание контейнера, где будет отрисована комната. Если не указано то на всю страницу              
      pruffmeapi.setParticipantName("Participant Name"); //Заранее заданное имя участника вебинара
      pruffmeapi.setParticipantQuestionValue(1,"Value"); //Любой другой вопрос по порядку

      pruffmeapi.setParticipantSession("ParticipantSession");  // Данный метод используется, если ранее был создан участник с использованием create-participant

      pruffmeapi.setExitCallback(function(){
        alert("exit"); // Действие при нажатии кнопки "Выход"
        pruffmeapi.logoutWebinar(function(){//Если необходимо очистить сессию для входа другим участником
            alert("logedOut");
        })
      });
      pruffmeapi.setParticipantCallback(function(participant){
        console.log(participant); // Вывод информации о залогиненом участнике вебинара
      });

      callback();//[Обязательно] Для продолжения инициализации
    }
  </script>
  
  <style>
    .pruffme-container
    {
      width:100%;
      height: 100%;
      /*min-height: 100vh */;  /* Необходимо указать минимальную высоту контейнера если высота родительского контейнера не задана   
      position: relative; /*[Обязательно] чтобы элементы вебинара были внутри области*/
      overflow: hidden;
      
    }
  </style>
</head>
<body>
   <div class="pruffme-container"></div>
</body>

onLoadedActions позволяет инициализировать вебинарные действия и выполнить настройки после загрузки скрипта библиотеки Pruffme API, обеспечивая более гибкую инициализацию и настройку вебинарного окружения.


<script>
  /**
   * Функция для динамической загрузки скрипта
   * @param {string} scriptSrc - URL загружаемого скрипта
   * @param {function} callback - Callback функция, вызываемая после загрузки скрипта
   */
  function loadExternalScript(scriptSrc, callback) {
    var head = document.head;
    var script = document.createElement("script");
    script.type = "text/javascript";
    script.charset = "utf-8";
    script.src = scriptSrc;
    script.onload = callback;
    script.onreadystatechange = function() {
      if (this.readyState === "complete" || this.readyState === "loaded") {
        callback();
      }
    };
    head.appendChild(script);
  }/**
    * Callback для настройки параметров вебинара
    * @param {function} callback - Callback функция для продолжения инициализации
    */
   function pruffmeAPICallback(callback) {
     pruffmeapi.setWebinarHash("xxxxxxxxxx"); // Установить хэш вебинара
     pruffmeapi.setWebinarContainerName(".webinar-container"); // Установить контейнер для рендеринга вебинара
     callback(); // Продолжить инициализацию
   }
   
   // Загрузка скрипта Pruffme API через 5 секунд после загрузки страницы
   setTimeout(function() {
     loadExternalScript("https://pruffme.com/api/library.js", function() {
       pruffmeapi.onLoadedActions("webinar");
     });
   }, 5000);

Выполнить