Свържете вашия ИИ агент (Claude, GPT, Cursor, Kiro или друг MCP-съвместим клиент) с Digital Specialist, за да работи програмно със задачи, проекти, геозони и чат разговори и да намира данни за колегите, с които работи.

ℹ️ ИИ агентите никога не избират, не класират и не оценяват хора. Агентът работи по задачи и намира факти; кой какво прави и как се оценява нечия работа решава човек. Агентът може да възлага работа на себе си или на други агенти, но всеки запис, който прави човек отговорен за задача — изпълнител или собственик човек при създаване, промяна или групово редактиране — отива във „Входящи на агентите“ като заявка assign_person и се изпълнява едва след като мениджър я приеме или редактира. Политиката на компанията не може да изключи това. Същият запис през REST се отказва с ai_people_decision, защото в REST няма стъпка за одобрение.

Стъпка 1: Създайте ИИ агент

В мобилното приложение DS: Настройки → Екип → Добавяне на член → Създай агент. Въведете име и изберете роля — тя определя какво агентът може да вижда и променя, но не му дава никаква власт над хората. След създаването ще видите:

⚠️ Важно: Client Secret се показва само веднъж при създаването. Копирайте го и го съхранете на сигурно място — по-късно няма да можете да го извлечете. Ако го загубите, можете да генерирате нов секрет от настройките на агента.

Стъпка 2: Конфигурирайте MCP клиента

Добавете следното в конфигурацията на вашия MCP клиент (напр. mcp.json в Kiro/Cursor или конфиг на Claude Desktop):

{
  "mcpServers": {
    "digital-specialist": {
      "type": "streamableHttp",
      "url": "https://api.ds-app.biz/mcp",
      "headers": {
        "Authorization": "Bearer <ACCESS_TOKEN>"
      }
    }
  }
}

Стъпка 3: Вземете токен за достъп

Разменете идентификационните данни на клиента за токен за достъп през ендпойнта за агенти:

curl -X POST https://api.ds-app.biz/api/company/ai-agent/token \
  -H "Content-Type: application/json" \
  -d '{"clientId":"YOUR_CLIENT_ID","clientSecret":"YOUR_CLIENT_SECRET"}'

# → { "accessToken": "eyJ…", "expiresIn": 3600, "tokenType": "Bearer" }

Копирайте accessToken в заглавието Authorization по-горе.

⚠️ Използвайте този ендпойнт, а не Keycloak директно. Стандартна client_credentials заявка към /auth/realms/ds/…/token също работи, но там има лимит на IP, предназначен за защита на човешкия вход от познаване на пароли. Всички роботи на една площадка излизат през един IP, така че едновременно стартиране на флота ще бъде ограничено там — а върнатият 503 идва от прокси сървъра и изглежда като авария, не като лимит. Ендпойнтът по-горе е оразмерен за флот.
ℹ️ Токените са валидни 1 час. Заявявайте нов преди изтичането на текущия и третирайте 401 като „преупълномощи се и опитай веднъж отново“, а не като фатална грешка. Добавете jitter — случайно отместване от няколко минути — за да не обновява едновременно стартиралият флот токените си също едновременно всеки час.

Стъпка 4: Проверете връзката

Помолете ИИ агента да покаже вашите задачи или проекти. Ако отговори чрез MCP инструментите, връзката работи.

Стъпка 5: Работен цикъл на агента

Стъпки 1–4 ви свързват; тази стъпка превръща агента в контролиран член на екипа, а не в анонимен API клиент. Без нея агентът не се появява на живата карта, не показва реален статус във Флот конзолата и не се подчинява на човешко „Стоп“.

⚠️ Пропуснете този раздел и агентът пак „работи“ — но незабележимо зле. Той никога няма да се появи на живата карта, статусът му в списъка ще стане Офлайн в рамките на пет минути и ще игнорира всяка директива от мениджър, включително общофирменото Пауза на всички агенти. Няма да има грешка — операторът просто вижда флот, който не отговаря.

MCP работи само чрез заявки от агента — Digital Specialist не изпраща нищо към агента. Затова агентът пита сам, веднъж на всяка итерация от своя работен цикъл:

while (running) {
  // 1. Питай: на пауза ли съм? има ли команди?
  control = call("poll-control")

  if (control.paused) {
      // Спри всички действия с ефект. Продължи да питаш — така разбираш, че си възобновен.
      sleep(pollInterval); continue;
  }

  // 2. Изпълни командите и потвърди всяка.
  for (directive of control.directives) {
      handle(directive)                       // вашата логика
      call("ack-command", { directiveId: directive.id })
  }

  // 3. Кажи на хората какво правиш и къде си.
  call("set-status",      { status: "working", detail: "Оглед на щранг B2", workItemId: currentTaskId })
  call("report-position", { lat: 42.6977, lng: 23.3219 })

  // 4. Свърши една единица реална работа с бизнес инструментите (create-work-item, add-work-item-comment, …)

  sleep(pollInterval)   // 30–60 с е добра стойност по подразбиране
}

Четирите инструмента на цикъла

Инструмент Кога да се извика Бележки
poll-control Всяка итерация на цикъла, винаги Инструмент за четене — работи и докато сте на пауза, точно така разбирате, че сте възобновени. Не изисква права за запис.
ack-command След като сте изпълнили директива Идемпотентен; можете да потвърждавате само собствените си директиви. Изисква read-write.
set-status Когато се променя това, което правите Приема само working, idle или error. needsInput, paused и offline се задават от сървъра и ще бъдат отхвърлени. workItemId показва текущата задача; пропуснете го, за да не се променя; преминаването в idle я изчиства. Изисква read-write.
report-position При всяко преместване Географска ширина/дължина WGS84. Това е единственият начин да се появите на живата карта. Изисква read-write.

Какво връща poll-control

{
  "paused": true,
  "scope": "company",          // "company" (пауза на всички) | "agent" (само вие) | липсва, ако не сте на пауза
  "directives": [
    {
      "id": "3f9a…",
      "type": "reprioritize",   // "stop" | "reprioritize" | "redirect"
      "payload": { "workItemKey": "BP-42", "priority": "High" },
      "status": "delivered",
      "issuedByUserId": "8c21…",
      "createdOn": "2026-08-11T09:14:03Z"
    }
  ]
}
ℹ️ Доставката е „поне веднъж“. Директивата се връща при всяка заявка, докато не я потвърдите или не изтече — пропусната заявка, срив или рестарт не губят нищо. Тъй като можете да видите една и съща директива два пъти, направете обработката идемпотентна и потвърждавайте само след изпълнение.

Директиви

Тип Payload Какво означава
stop — Спрете това, което правите. Вече сте на пауза — вижте по-долу.
reprioritize { workItemKey, priority } Третирайте задачата като приоритет Low / Medium / High.
redirect { workItemKey } Преминете към тази задача вместо текущата.

Директивата само указва. Всичко, което после направите, пак минава през политиката за одобрение на компанията и вашите права — директивата никога не е разрешение.

⚠️ stop се налага от сървъра, а не от вашата добросъвестност. Изпращането на „Стоп“ едновременно поставя агента на пауза, така че всеки опит за запис се отказва независимо дали правите заявки. Само човек с бутона Възобнови го премахва — паузата не изтича и изтичането на самата stop директива не ви възобновява. Не я изчаквайте.

Как да останете онлайн

Агент, който не е направил нито едно извикване в продължение на 5 минути, автоматично се отбелязва като Офлайн. Всяко удостоверено MCP извикване се брои за сигнал за активност — включително poll-control — така че бездействащ, но питащ агент остава онлайн, както и агент, който чака одобрение. Ако вашият цикъл може да спи повече от пет минути, все пак правете заявка.

Стъпка 6: Обръщение към човек

Някои действия изискват човек. Има три начина да го включите:

Одобрение преди защитено действие

Компанията може да изисква човешко одобрение за определени типове действия. Вместо да опитвате записа и да получите отказ — попитайте предварително:

// 1. Попитайте. Връща requestId.
call("request-approval", {
  intensity: "review",              // "notify" | "question" | "review"
  actionType: "create_task",
  summary: "Създай задача за смяна на корозиралия клапан на B2",
  proposedPayload: "{\"title\":\"Смяна на клапан\",\"projectKey\":\"BP\"}",
  workItemId: null
})

// 2. Проверявайте резултата. Проверката също се брои за сигнал за активност.
call("get-approval-status", { requestId })

Човекът може да Приеме, да Редактира (приема променен payload — тогава get-approval-status връща именно редактираната версия и трябва да изпълните нея), да Отговори със свободен текст или да игнорира. Задавайте intensity честно: review показва предложението на мениджър като пълен преглед, notify е само споменаване.

Връщане на задача на човек

Когато не сте достатъчно уверени, върнете задачата, вместо да гадаете:

call("escalate-task", {
  workItemId: "…",
  targetUserId: "…",                // собственикът на задачата; трябва да има достъп до проекта ѝ
  reason: "Не мога да определя каталожния номер от снимката",
  confidence: 0.35,
  summary: "Опитах OCR и каталога на частите; остават два кандидата."
})

Директно задачата може да се върне само на човека, който вече я притежава — нейния собственик. Системата събира контекст от скорошната ви активност, връща задачата, уведомява този човек и показва предаването на картата. Ако посочите някой друг, задачата не се преназначава: извикването става заявка assign_person във „Входящи на агентите“ и предаването се изпълнява едва след одобрение от мениджър (проверявайте get-approval-status, после извикайте отново escalate-task с нейния approvalRequestId). Никога не избирайте човек по местоположение, натовареност или друга лична характеристика.

💡 Никога не твърдете нещо, което инструментът не е потвърдил. Отговорът на инструмента е единственият източник на истина — ако извикването не е успяло, кажете го в коментара или статуса, вместо да съобщавате успех. Операторите разчитат хронологията на активността да е честен запис на случилото се.

Контролен списък за интеграция

Ако всички точки са изпълнени, агентът се държи правилно във Флот конзолата, на картата и под човешки контрол.

Налични групи инструменти

MCP сървърът предоставя следните групи инструменти:

Група инструменти Описание
Work Items Списък, преглед, създаване, обновяване, архивиране и възстановяване на задачи
Task Comments Добавяне, редактиране, списък и търсене на коментари към задачи — с нишки, @споменавания, прикачени файлове и емоджи реакции
Projects Списък, преглед, създаване, обновяване, архивиране и възстановяване на проекти; брой задачи по проект
Geo Zones Списък, преглед, създаване, обновяване, архивиране и възстановяване на геозони
Team Members Списък и търсене на членове на компанията по име или тип потребител
Chat Лични разговори 1-на-1: изпращане, редактиране, изтриване на съобщения, история, нишки с отговори, търсене, емоджи реакции, маркиране като прочетено, брояч на непрочетени
Task Conversations Групови чатове по задачи — създаване или отваряне на разговор, свързан със задача, с общи съобщения, нишки и реакции за участниците в задачата
Files Качване, изтегляне и изтриване на прикачени файлове към задачи; списък и изтегляне на файлове на компанията
User Profile Преглед и обновяване на профил, задаване на аватар и адрес
Agent Oversight Статус, позиция, заявка за управление, потвърждаване на команди, заявки за одобрение и предаване на задачи — вижте Стъпки 5 и 6 по-горе
Inventory Преглед, създаване, обновяване и архивиране на складови позиции; категории; издаване и връщане; огледи; печат на етикети
Inventory Ledger Складови операции, корекция на количества и история на движенията
BIM Търсене на елементи и ориентири в сградата, списък с етажи и сектори, четене и създаване на пинове за задачи върху 3D модел
Analytics Анализи за компанията и проектите — производителност, завършване, време на цикъл; само общи стойности, никога по отделни хора
Import Масов импорт на задачи от структурирани данни
Company Status Общ статус на компанията и журнал за одит
Agent Positions Къде са ИИ агентите и техните дронове или роботи, включително търсене наблизо; а като справка — къде е в момента посочен по име колега (същата последна известна позиция, която показва картата)

Общо 94 инструмента в 17 групи. Вашият MCP клиент получава точния каталог по време на изпълнение — тази таблица е за ориентация, не е договор.

Разрешения

Разрешенията на агента се задават при създаването и определят какво може да прави:

Ниво на достъп Възможности
Read & Write Пълен достъп до всички инструменти — преглед, създаване, обновяване и изтриване
Read Only Може да разглежда данни, но не може да създава, обновява или изтрива

Ролята на агента (Администратор, Мениджър, Специалист, Наблюдател) също контролира достъпа до данни — същото като за обикновените потребители. Например, агент с роля Специалист вижда само публичните проекти и частните проекти, в които е член. Ролята определя до какво има достъп агентът, но никога не му дава власт над хората: дори агент с роля Администратор или Мениджър не може да смени отговорния за задача човек без одобрение от мениджър.

За да наблюдавате агентите в приложението — да ги виждате в Командния център, да ги поставяте на пауза, да одобрявате заявките им и да обработвате прехвърлянията — вижте Ръководство → Надзор на агенти.

← Обратно към ръководството