Введение
Данная документация описывает принципы работы с 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
}
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);