---
title: "Используйте AFP с ИИ-агентами для кода"
description: "Установите навык агента AFP, направьте своего агента для написания кода на копии этого сайта в Markdown и llms.txt, и следите, чтобы графы кампаний, которые он пишет, оставались готовыми к сборке."
canonical: https://docs.afp.monster/ru/guides/ai-agent-skill
updated: 2026-08-19
pageType: guide
---

Установите навык агента AFP в свой проект одной командой, затем позвольте агенту читать этот сайт как Markdown. Навык фиксирует то, что модель не может угадать сама: у AFP нет клиентского API, поэтому агент создаёт граф кампании, а не код; какие типы узлов холст может действительно добавить; и какие связи холст отклоняет. Каждая страница здесь также отдаётся как Markdown — добавьте `.md` к адресу любой страницы — и `/llms.txt` индексирует их все.

## Что вам нужно сначала

- Агент, который загружает файлы инструкций из вашего проекта: директорию с навыками или файл правил, который он читает при запуске.
- Кампания на холсте, в которой можно построить результат. Агент может описать граф; только холст может его сохранить. См. [Построение кампании на холсте](/ru/guides/build-a-campaign).

## Как установить навык агента?

Скачайте навык с этого сайта в свой проект:

```bash
mkdir -p .claude/skills/afp
curl -fsSL https://docs.afp.monster/skills/afp/SKILL.md -o .claude/skills/afp/SKILL.md
```

Этот путь — место, где Claude Code ищет навык проекта. Агент, который вместо этого читает единый файл правил или инструкций — так работают Cursor и большинство ассистентов в редакторах — берёт то же содержимое: скачайте его рядом с другими инструкциями агента и сошлитесь на него из файла, который загружает ваш инструмент при запуске.

```bash
curl -fsSL https://docs.afp.monster/skills/afp/SKILL.md -o afp-skill.md
```

Закоммитьте файл, чтобы агент каждого участника работал по одним и тем же правилам. Поле `version` в начале файла фиксирует, какую поверхность AFP он описывает — скачайте заново, когда это значение изменится.

Навык содержит пять вещей: модель продукта, каждый тип узла, который холст может добавить, с его ключами настройки, правила связей, которые применяет холст, один полный граф как разобранный пример, и список типичных ошибок, которые модели делают про AFP.

## Какие URL должен читать агент?

Четыре поверхности, все сгенерированы из того же Markdown, что и сами страницы.

| URL | Что содержит | Для чего использовать |
|---|---|---|
| `https://docs.afp.monster/llms.txt` | Индекс всех страниц с их описанием | Чтобы агент выбирал, что читать |
| `https://docs.afp.monster/llms-full.txt` | Полный текст всех страниц в одном файле | Загрузка всего продукта одним запросом |
| `https://docs.afp.monster/llms-small.txt` | Тот же текст со свёрнутыми пробелами | Меньшее контекстное окно |
| Любой URL страницы с добавленным `.md` | Эта страница в виде чистого Markdown | Чтение одной страницы без навигации |

Правило `.md` действует для каждой страницы, так что агент может построить нужный адрес из текущего: `/ru/reference/node-types` становится `/ru/reference/node-types.md`.

Markdown-двойник содержит заголовок страницы, её описание и тело — без навигации, без боковой панели, без скриптов. Двойники отдаются как `text/markdown`, кросс-доменное чтение разрешено, и они помечены как не подлежащие индексации, чтобы никогда не конкурировать со страницами, которые отражают.

### Markdown-адрес каждой страницы

Добавьте к каждому адресу префикс `https://docs.afp.monster`.

| Страница | Markdown-адрес |
|---|---|
| [Начало работы](/ru/start) | `/ru/start.md` |
| [Создание аккаунта](/ru/start/create-your-account) | `/ru/start/create-your-account.md` |
| [Подключение страницы](/ru/start/connect-a-page) | `/ru/start/connect-a-page.md` |
| [Отправка первого автоответа](/ru/start/first-auto-reply) | `/ru/start/first-auto-reply.md` |
| [Почему моя кампания не отвечает?](/ru/start/troubleshooting) | `/ru/start/troubleshooting.md` |
| [Построение кампании на холсте](/ru/guides/build-a-campaign) | `/ru/guides/build-a-campaign.md` |
| [Маршрутизация комментариев в ЛС](/ru/guides/route-comments-to-dm) | `/ru/guides/route-comments-to-dm.md` |
| [Тест и отладка кампании](/ru/guides/test-and-debug-campaigns) | `/ru/guides/test-and-debug-campaigns.md` |
| [Сопоставление комментариев со списками ключевых слов](/ru/guides/keyword-lists) | `/ru/guides/keyword-lists.md` |
| [Сегментация контактов тегами](/ru/guides/tags) | `/ru/guides/tags.md` |
| [Работа с контактами](/ru/guides/contacts) | `/ru/guides/contacts.md` |
| [Работа с перепиской во входящих](/ru/guides/inbox) | `/ru/guides/inbox.md` |
| [Модерация комментариев](/ru/guides/comment-moderation) | `/ru/guides/comment-moderation.md` |
| [Массовое удаление комментариев клинером](/ru/guides/cleaner) | `/ru/guides/cleaner.md` |
| [Управление подключёнными страницами](/ru/guides/connected-pages) | `/ru/guides/connected-pages.md` |
| [Управление профилями под одним аккаунтом](/ru/guides/profiles-and-master-accounts) | `/ru/guides/profiles-and-master-accounts.md` |
| [Тарифы и оплата](/ru/guides/plans-and-billing) | `/ru/guides/plans-and-billing.md` |
| [Заработок на партнёрской программе](/ru/guides/referrals) | `/ru/guides/referrals.md` |
| [Настройка уведомлений](/ru/guides/notifications) | `/ru/guides/notifications.md` |
| [Получение помощи](/ru/guides/support-tickets) | `/ru/guides/support-tickets.md` |
| Использование AFP с ИИ-агентами для кода (эта страница) | `/ru/guides/ai-agent-skill.md` |
| [Типы узлов](/ru/reference/node-types) | `/ru/reference/node-types.md` |
| [События триггеров](/ru/reference/trigger-events) | `/ru/reference/trigger-events.md` |
| [Правила сопоставления ключевых слов](/ru/reference/keyword-matching) | `/ru/reference/keyword-matching.md` |
| [Состояния выполнения](/ru/reference/execution-states) | `/ru/reference/execution-states.md` |
| [Схема графа кампании](/ru/reference/campaign-graph-schema) | `/ru/reference/campaign-graph-schema.md` |
| [Поля контакта](/ru/reference/contact-fields) | `/ru/reference/contact-fields.md` |
| [Права доступа страницы и токены](/ru/reference/page-permissions) | `/ru/reference/page-permissions.md` |
| [Лимиты тарифа](/ru/reference/plans-and-quotas) | `/ru/reference/plans-and-quotas.md` |
| [Жизненный цикл подписки](/ru/reference/subscription-lifecycle) | `/ru/reference/subscription-lifecycle.md` |
| [Каталог уведомлений](/ru/reference/notifications) | `/ru/reference/notifications.md` |
| [Глоссарий](/ru/reference/glossary) | `/ru/reference/glossary.md` |
| [Сравнение AFP с альтернативами](/ru/compare) | `/ru/compare.md` |
| [AFP против ManyChat](/ru/compare/afp-vs-manychat) | `/ru/compare/afp-vs-manychat.md` |
| [AFP против Chatfuel](/ru/compare/afp-vs-chatfuel) | `/ru/compare/afp-vs-chatfuel.md` |
| [AFP против встроенной автоматизации Meta](/ru/compare/afp-vs-meta-automations) | `/ru/compare/afp-vs-meta-automations.md` |
| [Журнал изменений](/ru/changelog) | `/ru/changelog.md` (скоро) |

Агент без доступа к сети работает с теми же файлами офлайн: один раз загрузите `/llms-full.txt` и закоммитьте его рядом с навыком.

## Какие паттерны графа кампании должен использовать агент?

Три формы покрывают большинство того, что люди просят агента спроектировать. Каждая удовлетворяет правилам холста, так что её можно построить узел за узлом.

| Паттерн | Порядок узлов | Когда использовать |
|---|---|---|
| Ключевое слово в комментарии → ЛС | `trigger_comment` → `condition` → `reply_comment` → `send_dm` → `stop` | Пост просит людей прокомментировать слово, чтобы что-то получить |
| Ответ и квалификация | `trigger_dm` → `condition` → `send_dm` → `condition` → `add_tag` → `send_dm` → `stop` | Входящее ЛС нуждается в ответе и одном уточняющем вопросе |
| Модерация и ответ | `trigger_comment` → `condition` → `hide_comment` на Match, `reply_comment` на No Match | Нежелательные комментарии скрываются, а на всё остальное даётся публичный ответ |

Агент, описывающий граф, должен называть тип и ключи настройки каждого узла и исходный выход каждой связи. Это те же имена, что использует сохранённый граф — связи несут `from_node_id`, `to_node_id` и `output_index` — так что описанный граф и сохранённый можно сравнить поле за полем. Полную форму даёт [Схема графа кампании](/ru/reference/campaign-graph-schema).

### Ключевое слово в комментарии → ЛС

```d2 title="Comment to public reply to DM, with a stop on each branch"
direction: down
trigger: "trigger_comment\npost_scope all"
cond: "condition\nkeyword_list" {shape: diamond}
reply: reply_comment
dm: send_dm
haltMatch: stop
haltNoMatch: stop
trigger -> cond
cond -> reply: "Match, output 0"
reply -> dm -> haltMatch
cond -> haltNoMatch: "No Match, output 1"
```

Публичный `reply_comment` перед `send_dm` сделан намеренно: он говорит комментатору проверить сообщения, а другие читатели видят, что страница отвечает. Установите `match_type` условия на `keyword_list` и укажите идентификатор сохранённого списка; совпадающие сообщения покидают выход 0, а всё остальное — выход 1.

### Ответ и квалификация

```d2 title="A DM campaign that asks a question, waits for the reply, then tags and answers, or falls back"
direction: down
trigger: trigger_dm
gate: "condition\nmatch_type any" {shape: diamond}
ask: "send_dm\nзадаёт вопрос"
awaitReply: "condition\nmatch_type contains\nwait_for_reply" {shape: diamond}
tag: add_tag
answer: send_dm
haltMatch: stop
fallback: "send_dm\nзапасной вариант"
haltNoMatch: stop
trigger -> gate
gate -> ask: "output 0"
ask -> awaitReply
awaitReply -> tag: "Match, output 0"
tag -> answer -> haltMatch
awaitReply -> fallback: "No Match, output 1"
fallback -> haltNoMatch
```

`condition` с установленным `wait_for_reply` паркует выполнение на этом узле, пока человек не ответит, и ответ затем сопоставляется так же, как первое сообщение — включая подпись кнопки, на которую он нажал. Обеим веткам нужны собственные хвостовые узлы, потому что узел принимает одну входящую связь, и две ветки не могут слиться.

`condition` с `match_type: any` совпадает со всем и имеет один выход: холст убирает его выход No Match и удаляет любую связь, что из него выходила. Агент, рисующий ветку No Match от условия `any`, описывает граф, который холст не сохранит.

### Модерация и ответ

```d2 title="A moderation campaign that hides matching comments and replies to the rest"
direction: down
trigger: trigger_comment
cond: "condition\nkeyword_list" {shape: diamond}
hide: hide_comment
haltMatch: stop
reply: reply_comment
haltNoMatch: stop
trigger -> cond
cond -> hide: "Match, output 0"
hide -> haltMatch
cond -> reply: "No Match, output 1"
reply -> haltNoMatch
```

Действиям с комментарием нужен комментарий, на который можно действовать, так что этот паттерн работает только под `trigger_comment`. Поместите нежелательные слова в список ключевых слов и скройте ветку Match, или установите `reverse_keywords` на условии, чтобы ветку Match вместо этого брало всё, что список не совпадает.

### Чему должен удовлетворять каждый сгенерированный граф

1. Один триггер, и это единственный узел без входящей связи. У каждого другого узла она есть, иначе активация не пройдёт.
2. Триггер подключается только к `condition`, и `condition` никогда не подключается к другому `condition`.
3. Каждый узел принимает одну входящую связь, и каждый выходной разъём несёт одну исходящую связь.
4. Никаких циклов. Выполнение, которое достигает узла, уже посещённого, завершается ошибкой цикла.
5. Действия с комментарием недоступны, когда триггер — `trigger_dm`, а `reply_comment` и `hide_comment` отклоняются после `delete_comment`.
6. На `condition` выход 0 — это **Match**, а выход 1 — **No Match**.

[Схема графа кампании](/ru/reference/campaign-graph-schema) даёт точные имена полей и полный граф в JSON; [Типы узлов](/ru/reference/node-types) даёт каждый ключ настройки, который может написать агент.

## Что агент понимает про AFP неправильно?

| Что предполагают модели | Что на самом деле делает AFP | Что вместо этого даёт навык модели |
|---|---|---|
| Есть REST API для создания кампаний | Клиентского API нет. Кампании создаются на холсте и сохраняются из него | Инструкцию сказать это, а не писать запрос к придуманному эндпоинту |
| Триггер может идти прямо в `send_dm` | Триггер подключается только к `condition` | Правила связей, где это названо самым частым невалидным графом |
| Можно использовать любой тип узла из рантайма | Панель настроек есть только у типов из палитры, поэтому настроить можно только их | Список палитры, плюс имена типов, которые нельзя использовать никогда |
| Две ветки могут слиться обратно в один узел | Узел принимает одну входящую связь | Правило дублировать хвост вместо слияния |
| Ключевые слова вводятся прямо в условие | Условие сопоставляет свой `text`, или ссылается по идентификатору на отдельно сохранённый список ключевых слов | Четыре типа сопоставления и то, какой ключ читает каждый из них |
| Лимит кампаний или страниц в тарифе — фиксированное число | Лимиты берутся из тарифа аккаунта | Инструкцию никогда не называть число лимита |
| ЛС можно отправить кому угодно в любое время | Первое ЛС отвечает на событие, запустившее выполнение; более поздние сообщения достигают аккаунта человека, как только он ответил | Заметку о том, что действуют окна обмена сообщениями платформы, и AFP их не отменяет |
| Сохранение делает кампанию активной, а редактирование меняет выполнения в процессе | Сохранение записывает новую версию, а активация — отдельное действие; выполнение остаётся на версии, на которой оно началось | Оба правила, рядом с моделью |
| Это конструктор чат-ботов, так что подходят "flow" и "bot" | Словарь — это кампания, узел, условие, выполнение | Этот словарь, используемый повсюду |

Ещё два предположения навык не может исправить сам, потому что они проявляются только при запуске графа:

- `send_comment` нуждается в собственном `post_id`. Он не откатывается к посту, на котором сработал триггер, и без него ничего не делает, когда выполнение доходит до него.
- Один человек не может иметь два выполнения одной кампании одновременно. Пока его выполнение активно, второе совпадающее событие от него пропускается, так что дополнительное сообщение должно стоять за `delay` внутри того же графа, а не полагаться на второе событие от того же человека.

## Как проверить граф, который дал мне агент?

1. Постройте его на холсте. Холст проверяет по ходу перетаскивания, так что граф, который нельзя построить, падает на первой плохой связи, а не после сохранения.
2. Исправьте любой узел, который холст помечает. Кнопка **Сохранить кампанию** (Save campaign) остаётся недоступной, пока у узла есть ошибка настройки.
3. Сохраните, затем запустите тестовое выполнение. Оно проходит по сохранённому графу и записывает, что сделал бы каждый узел, не отправляя сообщений никому, не трогая комментарий и не меняя теги контакта. См. [Тест и отладка кампании](/ru/guides/test-and-debug-campaigns).
4. Включите кампанию только после того, как тестовый путь совпадёт с описанием агента.

:::note
Агент может ошибаться так, что холст это примет. Граф, который сохраняется и включается без проблем, всё ещё может отправить неверное сообщение не по той ветке — для этого и нужно тестовое выполнение.
:::

## Почему агент всё ещё выдаёт граф, который холст отклоняет?

| Симптом | Причина | Исправление |
|---|---|---|
| Агент пишет код, который отправляет запрос к эндпоинту AFP | Навык не загружен в этой сессии | Убедитесь, что файл там, где агент ищет инструкции, затем начните новую сессию |
| Граф подключает триггер прямо к действию | Агент проектирует по общим знаниям о чат-ботах | Попросите его заново сформулировать правила связей перед тем, как снова предложить граф |
| Граф использует тип узла без панели настроек | Список узлов взят не из навыка | Замените его: `condition` покрывает ветвление, `delay` покрывает ожидание |
| Агент называет число лимита кампаний или страниц | Лимиты — это настройка тарифа, а не фиксированные значения | Уберите число и вместо него дайте ссылку на [Лимиты тарифа](/ru/reference/plans-and-quotas) |
| Две ветки заканчиваются в одном узле | Слияние хорошо смотрится на диаграмме, но холст его отклоняет | Продублируйте хвостовые узлы на каждой ветке |
| Описанные поля не существуют в панели настроек | Навык устарел относительно изменения поверхности | Скачайте файл заново и сравните поле `version` |
| Таблицы с сайта возвращаются искажёнными, или ничего не было загружено | Агент прочитал HTML-страницу, или у него нет доступа к сети | Дайте ему адрес `.md` или `/llms-full.txt`, либо сохраните эти файлы в репозиторий рядом с навыком |

## Связанное

- [Схема графа кампании](/ru/reference/campaign-graph-schema) — имена полей и ограничения, под которые должен писать агент
- [Типы узлов](/ru/reference/node-types) — каждый узел и каждый ключ настройки
- [Построение кампании на холсте](/ru/guides/build-a-campaign) — превращение предложенного графа в сохранённый
- [Тест и отладка кампании](/ru/guides/test-and-debug-campaigns) — проверка того, что граф делает на самом деле
- [Сопоставление комментариев со списками ключевых слов](/ru/guides/keyword-lists) — создание списка, на который ссылается условие
- [Глоссарий](/ru/reference/glossary) — словарь, которого навык требует от агента придерживаться
