---
title: "Спецификация на формата за умения | Tajo"
description: "Научете формата skills.md за дефиниране на умения за автоматизация, задвижвани от AI, които се интегрират с Brevo."
url: https://tajo.io/bg/docs/skills/overview/skills-format/
markdown: https://tajo.io/bg/docs/skills/overview/skills-format.md
lang: bg-BG
author: "Set Noa"
author_url: https://tajo.io/bg/set-noa/
robots: noindex
---

Заявете ранен достъп

Въведете собственото си име и служебен имейл адрес. Ще ви изпратим връзка за потвърждение на заявката за достъп до Tajo.

# Спецификация на формата за умения

[Set Noa](https://tajo.io/bg/set-noa/)

Форматът **skills.md** дефинира как уменията са структурирани, конфигурирани и изпълнявани. Тази спецификация гарантира последователно поведение във всички умения на Tajo.

## Структура на файла

Едно умение се дефинира в един markdown файл с YAML frontmatter:

```markdown
---
name: customer-sync
version: 2.1.0
description: Sync customer data to Brevo contacts
category: data-sync
status: stable

triggers:
  - event: customer_created
  - event: customer_updated
  - event: customer_deleted

actions:
  - brevo/create-contact
  - brevo/update-contact
  - brevo/delete-contact

brevoEndpoints:
  - POST /v3/contacts
  - PUT /v3/contacts/{identifier}
  - DELETE /v3/contacts/{identifier}

permissions:
  - contacts:write
  - contacts:read
---

# Customer Sync

Automatically synchronize customer data from your platform to Brevo contacts.

## Overview

This skill listens for customer lifecycle events and mirrors changes to Brevo...
```

## Полета в frontmatter

### Задължителни полета

| Поле | Тип | Описание |
| --- | --- | --- |
| `name` | string | Уникален идентификатор (kebab-case) |
| `version` | string | Семантична версия (напр. “2.1.0”) |
| `description` | string | Кратко описание (макс. 160 знака) |
| `category` | enum | Едно от: `data-sync`, `email-marketing`, `sms-whatsapp`, `loyalty`, `analytics`, `integrations` |
| `triggers` | array | Събития, които активират това умение |
| `actions` | array | Операции, които това умение може да изпълнява |

### Незадължителни полета

| Поле | Тип | По подразбиране | Описание |
| --- | --- | --- | --- |
| `status` | enum | `stable` | Едно от: `stable`, `beta`, `experimental` |
| `brevoEndpoints` | array | `[]` | Използвани API крайни точки на Brevo |
| `permissions` | array | `[]` | Необходими разрешения за API на Brevo |
| `relatedSkills` | array | `[]` | ID на свързани умения |
| `featured` | boolean | `false` | Откроява в каталога на уменията |

## Тригери

Тригерите дефинират какви събития активират уменнието.

### Тригери от тип събитие

```yaml
triggers:
  - event: cart_abandoned
    conditions:
      - cart_value: "> 50"        # Minimum cart value
      - items_count: ">= 1"       # At least one item
      - time_since_activity: "> 30m"  # 30 minutes of inactivity
    debounce: 5m                  # Wait 5 minutes before re-triggering
```

### Планирани тригери

```yaml
triggers:
  - schedule: "0 9 * * *"         # Cron expression (daily at 9am)
    timezone: "America/New_York"
  - schedule: every_hour
  - schedule: every_day
```

### Webhook тригери

```yaml
triggers:
  - webhook: /skills/customer-sync/trigger
    method: POST
    authentication: api_key
```

### Оператори за условия

| Оператор | Описание | Пример |
| --- | --- | --- |
| `=` | Равно | `status: "active"` |
| `!=` | Различно | `status: "!= deleted"` |
| `>` | По-голямо от | `cart_value: "> 50"` |
| `>=` | По-голямо или равно | `items: ">= 1"` |
| `<` | По-малко от | `age: "< 30"` |
| `<=` | По-малко или равно | `quantity: "<= 10"` |
| `contains` | Съдържа низ | `email: "contains @gmail.com"` |
| `starts_with` | Префикс на низ | `name: "starts_with Dr."` |
| `in` | Стойност в списък | `country: "in US,CA,UK"` |

## Действия

Действията дефинират какви операции изпълнява уменнието.

### Дефиниция на действие

```yaml
actions:
  - id: send_reminder_email
    type: brevo/send-email
    parameters:
      template_id: 12345
      to: "{{ contact.email }}"
      params:
        first_name: "{{ contact.firstName }}"
        cart_items: "{{ cart.items }}"
    retry:
      attempts: 3
      backoff: exponential
    on_error: continue  # or 'stop'
```

### Типове действия

| Тип | Описание |
| --- | --- |
| `brevo/send-email` | Изпращане на транзакционен имейл |
| `brevo/send-sms` | Изпращане на SMS съобщение |
| `brevo/send-whatsapp` | Изпращане на WhatsApp съобщение |
| `brevo/create-contact` | Създаване на нов контакт |
| `brevo/update-contact` | Обновяване на атрибути на контакт |
| `brevo/delete-contact` | Изтриване на контакт |
| `brevo/add-to-list` | Добавяне на контакт към списък |
| `brevo/remove-from-list` | Премахване на контакт от списък |
| `brevo/track-event` | Проследяване на персонализирано събитие |
| `http/request` | HTTP заявка |
| `transform/map` | Трансформация на данни |
| `control/delay` | Изчакване преди продължаване |
| `control/condition` | Разклоняване по условие |

### Променливи в шаблон

Използвайте синтаксис `{{ }}` за обръщане към данни:

```yaml
parameters:
  to: "{{ contact.email }}"
  subject: "Your order #{{ order.number }} has shipped"
  params:
    name: "{{ contact.firstName | default: 'Customer' }}"
    items: "{{ cart.items | map: 'name' | join: ', ' }}"
    total: "{{ cart.total | currency: 'USD' }}"
```

### Налични филтри

| Филтър | Описание | Пример |
| --- | --- | --- |
| `default` | Стойност по подразбиране | `{{ name \| default: 'Guest' }}` |
| `uppercase` | Главни букви | `{{ name \| uppercase }}` |
| `lowercase` | Малки букви | `{{ email \| lowercase }}` |
| `capitalize` | Главна първа буква | `{{ name \| capitalize }}` |
| `truncate` | Съкращаване на низ | `{{ desc \| truncate: 100 }}` |
| `date` | Форматиране на дата | `{{ date \| date: 'YYYY-MM-DD' }}` |
| `currency` | Форматиране на валута | `{{ price \| currency: 'EUR' }}` |
| `map` | Картографиране по свойство на масив | `{{ items \| map: 'name' }}` |
| `join` | Обединяване на масив | `{{ tags \| join: ', ' }}` |
| `first` | Първи елемент на масив | `{{ items \| first }}` |
| `last` | Последен елемент на масив | `{{ items \| last }}` |
| `size` | Дължина на масив/низ | `{{ items \| size }}` |

## Разрешения

Дефинирайте необходимите разрешения за API на Brevo:

```yaml
permissions:
  - contacts:read        # Read contact data
  - contacts:write       # Create/update contacts
  - email:send           # Send transactional emails
  - sms:send             # Send SMS messages
  - lists:write          # Manage contact lists
  - events:write         # Track events
```

## Пълен пример

```yaml
---
name: abandoned-cart-recovery
version: 3.0.0
description: Recover abandoned shopping carts with a multi-step email sequence
category: email-marketing
status: stable

triggers:
  - event: cart_abandoned
    conditions:
      - cart_value: "> 25"
      - customer_email: "exists"
      - items_count: ">= 1"
    debounce: 30m

actions:
  - id: wait_1h
    type: control/delay
    parameters:
      duration: 1h

  - id: check_purchase
    type: control/condition
    parameters:
      condition: "{{ cart.converted }} = false"
      then: send_first_email
      else: stop

  - id: send_first_email
    type: brevo/send-email
    parameters:
      template_id: {{ env.ABANDONED_CART_TEMPLATE_1 }}
      to: "{{ contact.email }}"
      params:
        first_name: "{{ contact.firstName }}"
        cart_url: "{{ cart.recovery_url }}"
        items: "{{ cart.items }}"
        total: "{{ cart.total | currency }}"

  - id: wait_24h
    type: control/delay
    parameters:
      duration: 24h

  - id: check_purchase_2
    type: control/condition
    parameters:
      condition: "{{ cart.converted }} = false"
      then: send_second_email
      else: stop

  - id: send_second_email
    type: brevo/send-email
    parameters:
      template_id: {{ env.ABANDONED_CART_TEMPLATE_2 }}
      to: "{{ contact.email }}"
      params:
        first_name: "{{ contact.firstName }}"
        cart_url: "{{ cart.recovery_url }}"
        discount_code: "{{ generate_discount(10, 'percent') }}"

brevoEndpoints:
  - POST /v3/smtp/email
  - GET /v3/contacts/{identifier}

permissions:
  - contacts:read
  - email:send

relatedSkills:
  - customer-sync
  - order-events
  - browse-abandonment
---

# Abandoned Cart Recovery

Recover lost sales with a proven multi-step email sequence...
```

## Излагане като MCP инструмент

Уменията могат да бъдат изложени като MCP инструменти, което ги прави извикаеми от AI агенти. Добавете полето `mcp` към Вашия frontmatter:

```yaml
---
name: abandoned-cart-recovery
version: 3.0.0
description: Recover abandoned shopping carts with a multi-step email sequence
category: email-marketing

# MCP Configuration
mcp:
  tool_name: tajo/recover-abandoned-cart
  description: Execute abandoned cart recovery sequence for a specific cart
  inputSchema:
    type: object
    properties:
      cart_id:
        type: string
        description: The abandoned cart identifier
      customer_email:
        type: string
        description: Customer email address
      min_cart_value:
        type: number
        description: Minimum cart value to trigger recovery
        default: 25
    required: [cart_id, customer_email]
  brevo_servers:
    - brevo_contacts
    - brevo_email_campaign_management
    - brevo_templates
---
```

### Как работи излагането чрез MCP

Когато едно умение има поле `mcp`, то става инструмент, който AI агентите могат да открият и извикат:

```
Agent: "Recover abandoned cart #4521 for user@example.com"
    ↓
MCP Tool Discovery: finds tajo/recover-abandoned-cart
    ↓
Tool Execution: runs the skill's action chain
    ↓
Brevo MCP Servers: contacts + email modules called
    ↓
Result: recovery sequence initiated
```

### MCP полета

| Поле | Тип | Описание |
| --- | --- | --- |
| `mcp.tool_name` | string | Име на MCP инструмент (формат: `tajo/skill-name`) |
| `mcp.description` | string | Описание, показвано на AI агентите при откриване на инструмент |
| `mcp.inputSchema` | object | JSON Schema, дефинираща входните параметри на инструмента |
| `mcp.brevo_servers` | array | Кои MCP сървърни модули на Brevo са нужни на това умение |

### Умения срещу директни MCP инструменти

| Аспект | Умение като MCP инструмент | Директен Brevo MCP |
| --- | --- | --- |
| **Абстракция** | Висока – агентът казва “възстанови тази количка” | Ниска – агентът трябва да вика отделни крайни точки на Brevo |
| **Сложност** | Капсулира многостъпкова логика | Агентът трябва да оркестрира всяка стъпка |
| **Защитни огради** | Вградени в уменнието (условия, debounce) | Агентът трябва да внедри свои |
| **Най-подходящо за** | Повторяеми работни процеси | Инцидентни операции |

Tip

**Използвайте умения като MCP инструменти** за сложни, многостъпкови работни процеси, които агентите не бива да измислят отначало всеки път. Използвайте **директни MCP инструменти на Brevo** за прости, еднократни операции като търсене на контакт или изпращане на единичен имейл.

### Комбиниране на умения и агенти

Един агент може да използва едновременно умения (като MCP инструменти) и директни MCP модули на Brevo:

```yaml
# Agent spec
---
name: retention-agent
tools:
  # Tajo Skills as MCP tools
  - tajo/recover-abandoned-cart
  - tajo/customer-sync
  - tajo/win-back-sequence
  # Direct Brevo MCP modules
  - brevo_contacts
  - brevo_campaign_analytics
  - brevo_segments
---
```

Това дава на агентите автоматизация на високо ниво (умения) за често срещани шаблони, като същевременно запазва достъпа на ниско ниво (Brevo MCP) за персонализирана логика.

Вижте [Формат на спецификацията на агенти](https://tajo.io/bg/docs/mcp/agent-specification) и [Изграждане на агенти](https://tajo.io/bg/docs/mcp/building-agents) за пълни подробности.

## Добри практики

Tip

**Версионирайте уменията си** чрез семантично версиониране. Промени, които нарушават съвместимостта, изискват вдигане на главната версия.

1. **Поддържайте уменията фокусирани** – Едно умение трябва да прави едно нещо добре
2. **Използвайте описателни имена** – `abandoned-cart-recovery`, а не `acr`
3. **Документирайте условията** – Обяснете защо съществува всяко условие
4. **Обработвайте грешките внимателно** – Използвайте `on_error: continue` за некритични действия
5. **Тествайте с малки аудитории** – Използвайте `status: experimental` по време на разработка
6. **Добавете излагане чрез MCP** за умения, които агентите трябва да могат да извикват директно

## Следващи стъпки

- [Преглед на MCP и агенти](https://tajo.io/bg/docs/mcp) – Как уменията се вписват в агентската архитектура
- [Формат на спецификацията на агенти](https://tajo.io/bg/docs/mcp/agent-specification) – Дефинирайте агенти, които използват умения като инструменти
- [Изграждане на агенти](https://tajo.io/bg/docs/mcp/building-agents) – Изградете Вашия първи маркетингов агент
- [Умения за синхронизация на данни](https://tajo.io/bg/docs/skills/data-sync) – Разгледайте уменията за синхронизация на данни
