Документација / Интеграции и создавање содржини / API за поврзување на Вашиот систем

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. Преземете го идентификаторот на Компанијата. Ќе го користите во сите понатамошни повици.
  2. Прикачете медиумска датотека. Во одговорот се враќа нејзиниот идентификатор.
  3. Вчитајте образец за кампања. Серверот однапред го пополнува со поставките на Компанијата и со списокот на локации и уреди.
  4. Уредете го образецот — име, период, целни уреди и визуел.
  5. Создајте ја кампањата. Се создава како нацрт и сѐ уште не се репродуцира.
  6. Активирајте ја кампањата. Системот подготвува нов план за репродукција и го испраќа до уредите.
  7. Следете ги резултатите во извештајот за кампања.

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-mimeMIME-тип на датотеката, на пример 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Кој било број што е единствен во рамките на кампањата; серверот го пренумерира при создавањето.
isPrimarytrue за основниот визуел, false за останатите.
isCustomtrue – визуелот ѝ припаѓа на оваа кампања.
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 заглавиеМедиуми
2IMAGEСлика (JPG, PNG, WebP)
4VIDEOВидео
8PDFPDF-документ
16WWW_APPВеб-апликација
32TEXTДолг текст
128VIDEO_ALPHAВидео со проѕирна заднина
256AUDIOАудио

За документи, заглавието 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"
Не го најдовте тоа што го баравте?
Контактирајте го давателот на софтверот.