API за поврзување на Вашиот систем
Вовед и основни насоки
Како да управувате со медиуми, кампањи и извештаи директно од Вашиот систем, без најавување во администрацијата.
За што служи API
API го поврзува сопствениот систем на клиентот — на пример е-продавница, планер за рекламни кампањи или внатрешен каталог — директно со управувањето со содржината на уредите. Вашиот систем може да прикачува медиуми, да создава и да активира кампањи и да ги презема нивните резултати, без некој да мора да се најавува во администрацијата и рачно да ги извршува овие дејства.
Тоа е истиот интерфејс што го користи веб-администрацијата. Затоа API ги поддржува истите операции како администрацијата, во рамките на дозволите на најавениот корисник.
Кога да го користите API
Ако повремено прикачувате неколку медиумски датотеки и рачно активирате кампања, администрацијата е подобар избор: водичот за кампања прикажува преглед и ги проверува форматите на медиумите и капацитетот на уредите. API има смисла кога рачната работа почнува да Ве забавува.
| Сакате да | Препорачан пристап |
|---|---|
| Прикачувате неколку медиумски датотеки и активирате кампања | Администрација |
| Редовно ја ажурирате содржината, но рачно | Администрација |
| Групно прикачувате медиуми од Вашиот систем | API |
| Автоматски создавате кампањи од Вашиот планер | API |
| Преземате резултати од кампањите во Вашиот систем за извештаи | API |
Интерфејсот нема посебни верзии и може да се менува со развојот на платформата. Известете го Вашиот добавувач на софтвер пред да пуштите интеграција во употреба и проверувајте дали таа и понатаму работи по ажурирањата на системот.
За кого е наменето упатството и кој за што е одговорен
- Добавувачот на платформата го одржува интерфејсот, ја обезбедува адресата на администрацијата и го поставува режимот на репродукција на Компанијата.
- Клиентот го одредува опсегот на интеграцијата и создава посебен корисник со потребните дозволи во својата Компанија — видете Создавање корисник и прво најавување.
- Развивачот на интеграцијата го поврзува системот на клиентот со интерфејсот. Техничките упатства и примерите со код во овој водич се наменети за тој развивач. Ако самите ја развивате интеграцијата, ја преземате и оваа улога.
Техничка референца
Технички водич за развивачи на интеграции
Започнете со заедничките правила за повикување и најавувањето. Потоа следете ја постапката од прикачување медиумска датотека до активирање кампања и разгледајте го прегледот на достапните крајни точки.
Заеднички правила за повикување
- Адреса: интерфејсот работи на истата адреса како Вашата администрација; сите патеки започнуваат со
/api/. Во примерите адресата е заменета соhttps://admin.example.org. Ако е достапна тестна околина, Вашиот добавувач ќе Ви ја даде нејзината адреса. - Најавување: секое барање ги содржи податоците за најава преку HTTP Basic Auth. Не се користат сесии или токени.
- Формат на податоците: телата на барањата и одговорите се во JSON. Исклучок е прикачувањето датотеки, каде што телото ги содржи необработените бинарни податоци.
- Идентификатори и вредности: идентификаторите се цели броеви. Датумот и времето го користат форматот
YYYY-MM-DDTHH:MM:SS, а времетраењата на прикажување се во милисекунди (10000= 10 s). - Резултат: успешниот прием се потврдува со статус
200. Тоа значи дека барањето е прифатено, а не дека содржината веќе се репродуцира на уредите.
Најавување
Корисничкото име не е е-пошта, туку код од осум знаци што системот го генерира при создавањето на корисникот, на пример A1B2C3D4. За интеграцијата создадете посебен корисник со најмалите потребни дозволи; потоа може да му се одземе пристапот во секое време, без да се влијае врз другите корисници.
curl -u "A1B2C3D4:your-password" https://admin.example.org/api/public/loginЛозинката се испраќа со секое барање. Чувајте ја како таен податок, на пример во променлива на околината или во сеф за лозинки — никогаш во изворниот код, репозиториум или дневници.
Следните примери претпоставуваат дека се поставени овие променливи:
export API="https://admin.example.org"
export AUTH="A1B2C3D4:your-password"Примерите користат curl бидејќи не зависи од програмскиот јазик. Интерфејсот се заснова на HTTP, па може да се повикува од кој било јазик или алатка што поддржува Basic Auth, на пример Python, JavaScript, PHP, Postman или Make.
Постапка: од датотека до активна кампања
- Преземете го идентификаторот на Компанијата. Ќе го користите во сите понатамошни повици.
- Прикачете медиумска датотека. Во одговорот се враќа нејзиниот идентификатор.
- Вчитајте образец за кампања. Серверот однапред го пополнува со поставките на Компанијата и со списокот на локации и уреди.
- Уредете го образецот — име, период, целни уреди и визуел.
- Создајте ја кампањата. Се создава како нацрт и сѐ уште не се репродуцира.
- Активирајте ја кампањата. Системот подготвува нов план за репродукција и го испраќа до уредите.
- Следете ги резултатите во извештајот за кампања.
1. Идентификатор на Компанијата
curl -u "$AUTH" "$API/api/public/login"Одговор (скратен):
{
"id": 1715714421868,
"name": "Интеграција – е-продавница",
"login": "A1B2C3D4",
"company": { "id": 1698234512001, "name": "Рекламна агенција ДОО" },
"permission": {
"resource": 12,
"device_layer_top": 12,
"report_layer_top": 4
}
}Зачувајте ја вредноста на company.id; примерите ја користат како променлива COMPANY. Секцијата permission ги наведува дозволите на корисникот; нивното значење е опишано во Дозволи.
2. Прикачување медиумска датотека
Датотеката се испраќа како бинарно тело на барањето со PUT; нејзините својства се наведуваат во заглавијата.
curl -u "$AUTH" -X PUT \
"$API/api/resource/single/$COMPANY" \
-H "file-type: IMAGE" \
-H "file-mime: image/jpeg" \
-H "file-name: summer-sale.jpg" \
-H "file-suffix: jpg" \
--data-binary @summer-sale.jpg| Заглавие | Содржина |
|---|---|
file-type | Вид на медиум според табелата Видови медиуми, на пример IMAGE. |
file-mime | MIME-тип на датотеката, на пример image/jpeg, video/mp4 или application/pdf. |
file-name | Име на медиумот што се прикажува во администрацијата; серверот ја отстранува наставката, ако постои. Имињата со знаци надвор од ASCII кодирајте ги за URL (encodeURIComponent). |
file-suffix | Наставка на датотеката без точка. |
Истиот повик во Python:
import requests
with open("summer-sale.jpg", "rb") as f:
r = requests.put(
f"{API}/api/resource/single/{COMPANY}",
auth=("A1B2C3D4", "your-password"),
headers={
"file-type": "IMAGE",
"file-mime": "image/jpeg",
"file-name": "summer-sale.jpg",
"file-suffix": "jpg",
},
data=f,
)
r.raise_for_status()
resource_id = r.json()["id"]Одговорот ги содржи идентификаторот на медиумот (id) и неговиот вид (type); двете вредности ќе ги користите во визуелот на кампањата.
{
"id": 1724832015443,
"type": 2,
"name": "summer-sale",
"width": 1920,
"height": 1080,
"duration": 0,
"aspectRatio": 32
}- Големина: обични датотеки до приближно 1,1 GB, видео со проѕирност до приближно 2,1 GB. Серверот ги одбива поголемите датотеки со
413. - Подготовка на видеото: по прикачувањето, видеото се конвертира во заднина. Подготвено е кога деталите за медиумот (
GET /api/resource/single/{companyId}/{id}) содржат вредност воdt_ready. За слики, подготовката е речиси моментална. - Заглавие што недостига: без
file-mime,file-nameилиfile-suffixсерверот враќа204и не ја создава медиумската датотека. Секогаш проверувајте дали одговорот содржиidпред да продолжите.
3. Образец за кампања
Не составувајте ја кампањата рачно. Побарајте образец што серверот однапред го пополнува со стандарден период (еден месец од денес), поставките на Компанијата и списокот на сите локации и уреди. Секој уред во него е означен со isActive: false.
curl -u "$AUTH" "$API/api/campaign/company/$COMPANY" > campaign.jsonПример на образец (скратен):
{
"id": -1,
"groupId": -1,
"state": 2,
"name": "",
"start": "2026-11-01T10:00:00",
"end": "2026-12-01T10:00:00",
"isCommercial": true,
"isNonCommercial": false,
"settings": {
"type": 2,
"companyCount": 10,
"companyDuration": 10000,
"campaignCount": 1,
"campaignDuration": 10000
},
"locations": [
{
"id": 1698234512100,
"name": "Градски трговски центар",
"days": [ { "day": 1, "start": "09:00", "end": "21:00" } ],
"devices": [
{
"id": 1698234512201,
"name": "Влез A",
"screenRatio": 32,
"isHorizontal": true,
"isActive": false
}
]
}
],
"visuals": []
}Вредноста на settings.type го одредува режимот на репродукција на Компанијата: 2 = SLOT, 4 = IMPRESSION. Режимот го поставува добавувачот и не може да се промени преку API.
4. Уредување на образецот
name: име на кампањата што се прикажува во администрацијата и во извештаите.start,end: почеток и крај на кампањата.isActive: поставетеtrueза уредите на кои треба да се репродуцира кампањата.visuals: додајте визуел со прикачената медиумска датотека.
"visuals": [
{
"id": 1,
"name": "Основен визуел",
"isPrimary": true,
"isCustom": true,
"res": [
{
"id": 1,
"conditionId": 0,
"resourceId": 1724832015443,
"name": "summer-sale",
"duration": 10000,
"type": 2
}
]
}
]| Поле | Значење |
|---|---|
id | Кој било број што е единствен во рамките на кампањата; серверот го пренумерира при создавањето. |
isPrimary | true за основниот визуел, false за останатите. |
isCustom | true – визуелот ѝ припаѓа на оваа кампања. |
resourceId | Идентификаторот на медиумот од чекор 2. |
duration | Времетраење на прикажувањето во милисекунди. |
type | Видот на медиумот; истата вредност што е вратена при прикачувањето во type. |
Образецот може да го уредите со скрипта, на пример со jq:
jq --argjson res "$RESOURCE" '
.name = "Летна распродажба 2026"
| .start = "2026-11-02T00:00:00"
| .end = "2026-11-09T00:00:00"
| .locations[].devices[].isActive = true
| .visuals = [{
id: 1, name: "Основен визуел", isPrimary: true, isCustom: true,
res: [{ id: 1, conditionId: 0, resourceId: $res,
name: "summer-sale", duration: 10000, type: 2 }]
}]
' campaign.json > campaign-edited.jsonАко кампањата е наменета и за хоризонтални и за вертикални екрани (isHorizontal), додајте визуел за секоја ориентација. Во спротивно, содржината на некои екрани ќе се отсече или ќе се намали. Видете Визуели на кампањите.
5. Создавање на кампањата
curl -u "$AUTH" -X POST \
"$API/api/campaign/company/$COMPANY" \
-H "Content-Type: application/json" \
--data @campaign-edited.json \
-o response.json
export CAMPAIGN=$(jq -r '.id' response.json)
export GROUP=$(jq -r '.groupId' response.json)Кампањата се создава како нацрт и не се репродуцира никаде. Одговорот ја содржи зачуваната кампања со доделен id и groupId. Во образецот веќе е поставено state: 2 (нацрт); серверот ја одбива секоја друга вредност со 409.
6. Активирање на кампањата
curl -u "$AUTH" -X PATCH \
"$API/api/campaign/company/$COMPANY/$CAMPAIGN/+01:00/0"+01:00: временската зона како отстапување од UTC според кое работи кампањата. За Средна Европа користете+01:00во зимскиот период и+02:00во периодот на летното сметање на времето.0: очекуваниот број прикажувања за целата кампања. Важи во режимот IMPRESSION; во режимот SLOT користете0.
Кампања со почеток денес или порано станува активна, а нејзиниот почеток се поставува на моментот на активирање. Кампања со почеток во иднина станува објавена и започнува на планираниот ден.
Системот потоа повторно го пресметува планот за репродукција и го испраќа до засегнатите уреди. За поврзаните уреди тоа обично трае неколку десетици секунди; исклучениот уред го добива планот откако ќе се воспостави врската. Проверете го капацитетот на уредите во администрацијата, видете Капацитет за кампањи.
7. Резултати од кампањата
curl -u "$AUTH" "$API/api/report/$COMPANY/campaign/$GROUP"
curl -u "$AUTH" "$API/api/report/$COMPANY/campaign/$GROUP/impression"Извештаите користат groupId, а не id на кампањата. Првата крајна точка враќа преглед на кампањата, а втората — број на евидентирани прикажувања. Уредите ги испраќаат записите континуирано, во пакети, па бројките не се достапни во реално време. Видете Извештај за кампања за значењето на бројките.
Паузирање, запирање и бришење
# паузирај активна кампања; повторниот повик ја продолжува
curl -u "$AUTH" -X PATCH \
"$API/api/campaign/company/$COMPANY/$CAMPAIGN/+01:00/0"
# запре трајно
curl -u "$AUTH" -X PATCH \
"$API/api/campaign/company/$COMPANY/$CAMPAIGN/+01:00"
# избриши
curl -u "$AUTH" -X DELETE \
"$API/api/campaign/company/$COMPANY/$CAMPAIGN"Крајната точка од чекор 6 работи како прекинувач: паузира активна или објавена кампања и продолжува паузирана кампања. Пред да ја повикате, проверете ја тековната состојба на кампањата (state во деталите). Запрена кампања не може повторно да се активира, но останува во списокот заедно со своите извештаи. Избришана кампања исчезнува од списокот.
Преглед на крајните точки
Патеките се релативни во однос на адресата на администрацијата. {c} го означува идентификаторот на Компанијата.
Сметка
| Метод | Патека | Намена |
|---|---|---|
GET | /api/public/login | Ги проверува податоците за најава и го враќа корисничкиот профил, вклучително и company.id. |
GET | /api/user/info | Информации за најавениот корисник. |
GET | /api/user/check | Брза проверка дали податоците за најава се важечки. |
Медиуми
| Метод | Патека | Намена |
|---|---|---|
PUT | /api/resource/single/{c} | Прикачува датотека (file-* заглавија, тело = бинарни податоци). |
GET | /api/resource/listing/{c}/1 | Список на медиуми; 1 = без ограничување според видот. |
GET | /api/resource/single/{c}/{id} | Детали за медиум. |
ИЗБРИШИ | /api/resource/single/{c}/{id} | Брише медиумска датотека. |
Кампањи
| Метод | Патека | Намена |
|---|---|---|
GET | /api/campaign/company/{c} | Образец за нова кампања. |
POST | /api/campaign/company/{c} | Создава кампања како нацрт. |
PATCH | /api/campaign/company/{c} | Ги зачувува промените на постојна кампања. |
POST | /api/campaign/listing/company/{c} | Список на кампањи; телото на барањето содржи филтер. |
GET | /api/campaign/company/{c}/{id} | Детали за кампања. |
GET | /api/campaign/company/{c}/group/{groupId} | Детали за кампања според groupId. |
PATCH | /api/campaign/company/{c}/{id}/{tz}/{impressions} | Активира, паузира или продолжува кампања. |
PATCH | /api/campaign/company/{c}/{id}/{tz} | Трајно запира кампања. |
ИЗБРИШИ | /api/campaign/company/{c}/{id} | Брише кампања. |
Локации и уреди
| Метод | Патека | Намена |
|---|---|---|
GET | /api/location/listing/{c} | Список на локации. |
GET | /api/location/single/{id} | Детали за локација, вклучително и работното време. |
GET | /api/device/listing/{c}/{locationId} | Список на уреди во локација. |
GET | /api/device/single/{id}/{lang} | Детали за уред; lang е јазичен код, на пример en. |
Извештаи
| Метод | Патека | Намена |
|---|---|---|
GET | /api/report/{c}/campaign/{groupId} | Преглед на кампања. |
GET | /api/report/{c}/campaign/{groupId}/impression | Број на евидентирани прикажувања. |
Шифрарници
Вредностите од шифрарниците во JSON се запишуваат како броеви.
Состојба на кампања (state)
| Вредност | Статус | Значење |
|---|---|---|
2 | Нацрт | Зачувана кампања што не се репродуцира. |
4 | Објавена | Активирана кампања што го чека денот на почеток. |
8 | Активни | Кампањата се репродуцира. |
16 | Завршени | Крајниот датум на кампањата поминал. |
32 | Запрена | Кампањата е трајно запрена. |
64 | Избришана | Кампањата е избришана. |
128 | Паузирана | Репродукцијата е привремено прекината. |
Видови медиуми
type вредност | file-type заглавие | Медиуми |
|---|---|---|
2 | IMAGE | Слика (JPG, PNG, WebP) |
4 | VIDEO | Видео |
8 | PDF | PDF-документ |
16 | WWW_APP | Веб-апликација |
32 | TEXT | Долг текст |
128 | VIDEO_ALPHA | Видео со проѕирна заднина |
256 | AUDIO | Аудио |
За документи, заглавието file-type ја користи вредноста PDF, а не DOCUMENT.
Дозволи
Интерфејсот ги применува истите дозволи како администрацијата и ги проверува при секое барање. Во одговорот при најавување, секоја област е изразена со број што е збир од поединечните права:
| Вредност | Право во рамките на Вашата Компанија |
|---|---|
4 | Прегледување |
8 | Додавање |
16 | Уредување |
32 | Бришење |
На пример, resource: 28 (4 + 8 + 16) значи дека корисникот може да прегледува, додава и уредува медиуми, но не и да ги брише. Повисоките вредности (128 до 1024) ги претставуваат истите права надвор од Компанијата на корисникот; на интеграцијата не ѝ се потребни.
| Површина | Минимум за опишаната постапка |
|---|---|
resource – медиуми | 12 (прегледување, додавање) |
device_layer_top – кампањи | 12 (прегледување, додавање) |
report_layer_top – извештаи за кампањи | 4 (прегледување) |
location – локации | 4 (прегледување) |
device_info – уреди | 4 (прегледување) |
За активирање, паузирање и запирање кампања е потребно правото Додавање. За бришење активирана кампања или медиумска датотека е потребно правото Бришење; нацрт на кампања може да се избрише и без него. Добра појдовна основа е улогата Менаџер за реклами на компанијата со отстранети непотребни права.
Кодови на грешки
| Код | Значење | Што да направите |
|---|---|---|
400 | Неисправно барање | Проверете ги идентификаторите во патеката, временската зона и задолжителните податоци. |
401 | Недостига дозвола | Корисникот го нема потребното право или пристап до Компанијата. Кај кампањите најчесто недостига правото Додавање. |
404 | Не е најдено | Записот не постои или не ѝ припаѓа на дадената Компанија. |
406 | Неприфатливо | Неважечки податоци за најава или кампања во состојба од која не е дозволен бараниот премин (на пр. запрена). |
409 | Конфликт на состојба | Кампањата што се создава не е нацрт. |
413 | Преголема датотека | Намалете ја големината на датотеката; ограничувањата се наведени во чекор 2. |
500 | Серверска грешка | Обидете се повторно подоцна; ако проблемот продолжи, обратете се кај Вашиот добавувач. |
Најпрво тестирајте ја интеграцијата во тестна околина или на уред што не е видлив за јавноста — активираната кампања навистина се репродуцира на продукциските уреди. Надвор од работното време на локацијата не се репродуцира содржина, дури ни за кампања планирана деноноќно.
Чувајте ги идентификаторите на медиумите и кампањите (id, groupId) во Вашиот систем; интерфејсот не нуди пребарување кампањи по име. Прикачувајте ги медиумите еден по еден и не барајте извештаи почесто од еднаш на неколку минути. Потпирајте се само на крајните точки наведени во овој водич.
Целосен пример
Скриптата ја извршува целата постапка од прикачување слика до активирање кампања на сите уреди на Компанијата. Потребни се curl и jq.
#!/usr/bin/env bash
set -euo pipefail
API="https://admin.example.org"
AUTH="${INTEGRATION_AUTH:?поставете INTEGRATION_AUTH=login:password}"
FILE="summer-sale.jpg"
NAME="Летна распродажба 2026"
FROM="2026-11-02T00:00:00"
TO="2026-11-09T00:00:00"
TZ_OFFSET="+01:00"
# 1) Идентификатор на Компанијата
COMPANY=$(curl -sf -u "$AUTH" "$API/api/public/login" | jq -r '.company.id')
# 2) прикачување медиум
RESOURCE=$(curl -sf -u "$AUTH" -X PUT \
"$API/api/resource/single/$COMPANY" \
-H "file-type: IMAGE" \
-H "file-mime: image/jpeg" \
-H "file-name: $FILE" \
-H "file-suffix: jpg" \
--data-binary "@$FILE" | jq -r '.id')
# 3) образец за кампања
curl -sf -u "$AUTH" "$API/api/campaign/company/$COMPANY" > template.json
# 4) уредување на образецот
jq --argjson res "$RESOURCE" --arg n "$NAME" --arg from "$FROM" --arg to "$TO" '
.name = $n
| .start = $from
| .end = $to
| .locations[].devices[].isActive = true
| .visuals = [{
id: 1, name: "Основен визуел", isPrimary: true, isCustom: true,
res: [{ id: 1, conditionId: 0, resourceId: $res,
name: $n, duration: 10000, type: 2 }]
}]
' template.json > campaign.json
# 5) создавање нацрт
RESPONSE=$(curl -sf -u "$AUTH" -X POST \
"$API/api/campaign/company/$COMPANY" \
-H "Content-Type: application/json" \
--data @campaign.json)
CAMPAIGN=$(echo "$RESPONSE" | jq -r '.id')
GROUP=$(echo "$RESPONSE" | jq -r '.groupId')
# 6) активирање
curl -sf -u "$AUTH" -X PATCH \
"$API/api/campaign/company/$COMPANY/$CAMPAIGN/$TZ_OFFSET/0" > /dev/null
echo "Кампањата $CAMPAIGN е активирана, извештај: $API/api/report/$COMPANY/campaign/$GROUP"Поврзани теми и следни чекори
← Назад кон прегледот – Интеграции и создавање содржина
Контактирајте го давателот на софтверот.
