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

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

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

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

---
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

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

ПолеТипОписание
namestringУникален идентификатор (kebab-case)
versionstringСемантична версия (напр. “2.1.0”)
descriptionstringКратко описание (макс. 160 знака)
categoryenumЕдно от: data-sync, email-marketing, sms-whatsapp, loyalty, analytics, integrations
triggersarrayСъбития, които активират това умение
actionsarrayОперации, които това умение може да изпълнява

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

ПолеТипПо подразбиранеОписание
statusenumstableЕдно от: stable, beta, experimental
brevoEndpointsarray[]Използвани API крайни точки на Brevo
permissionsarray[]Необходими разрешения за API на Brevo
relatedSkillsarray[]ID на свързани умения
featuredbooleanfalseОткроява в каталога на уменията

Тригери

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

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

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

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

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

Webhook тригери

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"

Действия

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

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

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/requestHTTP заявка
transform/mapТрансформация на данни
control/delayИзчакване преди продължаване
control/conditionРазклоняване по условие

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

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

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:

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

Пълен пример

---
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:

---
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 [email protected]"
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_namestringИме на MCP инструмент (формат: tajo/skill-name)
mcp.descriptionstringОписание, показвано на AI агентите при откриване на инструмент
mcp.inputSchemaobjectJSON Schema, дефинираща входните параметри на инструмента
mcp.brevo_serversarrayКои MCP сървърни модули на Brevo са нужни на това умение

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

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

Tip

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

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

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

# 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) за персонализирана логика.

Вижте Формат на спецификацията на агенти и Изграждане на агенти за пълни подробности.

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

Tip

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

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

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

Subscribe to updates

developer-docs

Drop your email or phone number — we'll send you what matters next.

auto-detect
AI асистент

Здравейте! Попитайте ме за документацията.