Используйте AFP с ИИ-агентами для кода
Установите навык агента AFP в свой проект одной командой, затем позвольте агенту читать этот сайт как Markdown. Навык фиксирует то, что модель не может угадать сама: у AFP нет клиентского API, поэтому агент создаёт граф кампании, а не код; какие типы узлов холст может действительно добавить; и какие связи холст отклоняет. Каждая страница здесь также отдаётся как Markdown — добавьте .md к адресу любой страницы — и /llms.txt индексирует их все.
Что вам нужно сначала
Заголовок раздела «Что вам нужно сначала»- Агент, который загружает файлы инструкций из вашего проекта: директорию с навыками или файл правил, который он читает при запуске.
- Кампания на холсте, в которой можно построить результат. Агент может описать граф; только холст может его сохранить. См. Построение кампании на холсте.
Как установить навык агента?
Заголовок раздела «Как установить навык агента?»Скачайте навык с этого сайта в свой проект:
mkdir -p .claude/skills/afpcurl -fsSL https://docs.afp.monster/skills/afp/SKILL.md -o .claude/skills/afp/SKILL.mdЭтот путь — место, где Claude Code ищет навык проекта. Агент, который вместо этого читает единый файл правил или инструкций — так работают Cursor и большинство ассистентов в редакторах — берёт то же содержимое: скачайте его рядом с другими инструкциями агента и сошлитесь на него из файла, который загружает ваш инструмент при запуске.
curl -fsSL https://docs.afp.monster/skills/afp/SKILL.md -o afp-skill.mdЗакоммитьте файл, чтобы агент каждого участника работал по одним и тем же правилам. Поле version в начале файла фиксирует, какую поверхность AFP он описывает — скачайте заново, когда это значение изменится.
Навык содержит пять вещей: модель продукта, каждый тип узла, который холст может добавить, с его ключами настройки, правила связей, которые применяет холст, один полный граф как разобранный пример, и список типичных ошибок, которые модели делают про AFP.
Какие URL должен читать агент?
Заголовок раздела «Какие 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-адрес каждой страницы
Заголовок раздела «Markdown-адрес каждой страницы»Добавьте к каждому адресу префикс https://docs.afp.monster.
| Страница | Markdown-адрес |
|---|---|
| Начало работы | /ru/start.md |
| Создание аккаунта | /ru/start/create-your-account.md |
| Подключение страницы | /ru/start/connect-a-page.md |
| Отправка первого автоответа | /ru/start/first-auto-reply.md |
| Почему моя кампания не отвечает? | /ru/start/troubleshooting.md |
| Построение кампании на холсте | /ru/guides/build-a-campaign.md |
| Маршрутизация комментариев в ЛС | /ru/guides/route-comments-to-dm.md |
| Тест и отладка кампании | /ru/guides/test-and-debug-campaigns.md |
| Сопоставление комментариев со списками ключевых слов | /ru/guides/keyword-lists.md |
| Сегментация контактов тегами | /ru/guides/tags.md |
| Работа с контактами | /ru/guides/contacts.md |
| Работа с перепиской во входящих | /ru/guides/inbox.md |
| Модерация комментариев | /ru/guides/comment-moderation.md |
| Массовое удаление комментариев клинером | /ru/guides/cleaner.md |
| Управление подключёнными страницами | /ru/guides/connected-pages.md |
| Управление профилями под одним аккаунтом | /ru/guides/profiles-and-master-accounts.md |
| Тарифы и оплата | /ru/guides/plans-and-billing.md |
| Заработок на партнёрской программе | /ru/guides/referrals.md |
| Настройка уведомлений | /ru/guides/notifications.md |
| Получение помощи | /ru/guides/support-tickets.md |
| Использование AFP с ИИ-агентами для кода (эта страница) | /ru/guides/ai-agent-skill.md |
| Типы узлов | /ru/reference/node-types.md |
| События триггеров | /ru/reference/trigger-events.md |
| Правила сопоставления ключевых слов | /ru/reference/keyword-matching.md |
| Состояния выполнения | /ru/reference/execution-states.md |
| Схема графа кампании | /ru/reference/campaign-graph-schema.md |
| Поля контакта | /ru/reference/contact-fields.md |
| Права доступа страницы и токены | /ru/reference/page-permissions.md |
| Лимиты тарифа | /ru/reference/plans-and-quotas.md |
| Жизненный цикл подписки | /ru/reference/subscription-lifecycle.md |
| Каталог уведомлений | /ru/reference/notifications.md |
| Глоссарий | /ru/reference/glossary.md |
| Сравнение AFP с альтернативами | /ru/compare.md |
| AFP против ManyChat | /ru/compare/afp-vs-manychat.md |
| AFP против Chatfuel | /ru/compare/afp-vs-chatfuel.md |
| AFP против встроенной автоматизации Meta | /ru/compare/afp-vs-meta-automations.md |
| Журнал изменений | /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 — так что описанный граф и сохранённый можно сравнить поле за полем. Полную форму даёт Схема графа кампании.
Ключевое слово в комментарии → ЛС
Заголовок раздела «Ключевое слово в комментарии → ЛС»Публичный reply_comment перед send_dm сделан намеренно: он говорит комментатору проверить сообщения, а другие читатели видят, что страница отвечает. Установите match_type условия на keyword_list и укажите идентификатор сохранённого списка; совпадающие сообщения покидают выход 0, а всё остальное — выход 1.
Ответ и квалификация
Заголовок раздела «Ответ и квалификация»condition с установленным wait_for_reply паркует выполнение на этом узле, пока человек не ответит, и ответ затем сопоставляется так же, как первое сообщение — включая подпись кнопки, на которую он нажал. Обеим веткам нужны собственные хвостовые узлы, потому что узел принимает одну входящую связь, и две ветки не могут слиться.
condition с match_type: any совпадает со всем и имеет один выход: холст убирает его выход No Match и удаляет любую связь, что из него выходила. Агент, рисующий ветку No Match от условия any, описывает граф, который холст не сохранит.
Модерация и ответ
Заголовок раздела «Модерация и ответ»Действиям с комментарием нужен комментарий, на который можно действовать, так что этот паттерн работает только под trigger_comment. Поместите нежелательные слова в список ключевых слов и скройте ветку Match, или установите reverse_keywords на условии, чтобы ветку Match вместо этого брало всё, что список не совпадает.
Чему должен удовлетворять каждый сгенерированный граф
Заголовок раздела «Чему должен удовлетворять каждый сгенерированный граф»- Один триггер, и это единственный узел без входящей связи. У каждого другого узла она есть, иначе активация не пройдёт.
- Триггер подключается только к
condition, иconditionникогда не подключается к другомуcondition. - Каждый узел принимает одну входящую связь, и каждый выходной разъём несёт одну исходящую связь.
- Никаких циклов. Выполнение, которое достигает узла, уже посещённого, завершается ошибкой цикла.
- Действия с комментарием недоступны, когда триггер —
trigger_dm, аreply_commentиhide_commentотклоняются послеdelete_comment. - На
conditionвыход 0 — это Match, а выход 1 — No Match.
Схема графа кампании даёт точные имена полей и полный граф в JSON; Типы узлов даёт каждый ключ настройки, который может написать агент.
Что агент понимает про AFP неправильно?
Заголовок раздела «Что агент понимает про AFP неправильно?»| Что предполагают модели | Что на самом деле делает AFP | Что вместо этого даёт навык модели |
|---|---|---|
| Есть REST API для создания кампаний | Клиентского API нет. Кампании создаются на холсте и сохраняются из него | Инструкцию сказать это, а не писать запрос к придуманному эндпоинту |
Триггер может идти прямо в send_dm | Триггер подключается только к condition | Правила связей, где это названо самым частым невалидным графом |
| Можно использовать любой тип узла из рантайма | Панель настроек есть только у типов из палитры, поэтому настроить можно только их | Список палитры, плюс имена типов, которые нельзя использовать никогда |
| Две ветки могут слиться обратно в один узел | Узел принимает одну входящую связь | Правило дублировать хвост вместо слияния |
| Ключевые слова вводятся прямо в условие | Условие сопоставляет свой text, или ссылается по идентификатору на отдельно сохранённый список ключевых слов | Четыре типа сопоставления и то, какой ключ читает каждый из них |
| Лимит кампаний или страниц в тарифе — фиксированное число | Лимиты берутся из тарифа аккаунта | Инструкцию никогда не называть число лимита |
| ЛС можно отправить кому угодно в любое время | Первое ЛС отвечает на событие, запустившее выполнение; более поздние сообщения достигают аккаунта человека, как только он ответил | Заметку о том, что действуют окна обмена сообщениями платформы, и AFP их не отменяет |
| Сохранение делает кампанию активной, а редактирование меняет выполнения в процессе | Сохранение записывает новую версию, а активация — отдельное действие; выполнение остаётся на версии, на которой оно началось | Оба правила, рядом с моделью |
| Это конструктор чат-ботов, так что подходят “flow” и “bot” | Словарь — это кампания, узел, условие, выполнение | Этот словарь, используемый повсюду |
Ещё два предположения навык не может исправить сам, потому что они проявляются только при запуске графа:
send_commentнуждается в собственномpost_id. Он не откатывается к посту, на котором сработал триггер, и без него ничего не делает, когда выполнение доходит до него.- Один человек не может иметь два выполнения одной кампании одновременно. Пока его выполнение активно, второе совпадающее событие от него пропускается, так что дополнительное сообщение должно стоять за
delayвнутри того же графа, а не полагаться на второе событие от того же человека.
Как проверить граф, который дал мне агент?
Заголовок раздела «Как проверить граф, который дал мне агент?»- Постройте его на холсте. Холст проверяет по ходу перетаскивания, так что граф, который нельзя построить, падает на первой плохой связи, а не после сохранения.
- Исправьте любой узел, который холст помечает. Кнопка Сохранить кампанию (Save campaign) остаётся недоступной, пока у узла есть ошибка настройки.
- Сохраните, затем запустите тестовое выполнение. Оно проходит по сохранённому графу и записывает, что сделал бы каждый узел, не отправляя сообщений никому, не трогая комментарий и не меняя теги контакта. См. Тест и отладка кампании.
- Включите кампанию только после того, как тестовый путь совпадёт с описанием агента.
Почему агент всё ещё выдаёт граф, который холст отклоняет?
Заголовок раздела «Почему агент всё ещё выдаёт граф, который холст отклоняет?»| Симптом | Причина | Исправление |
|---|---|---|
| Агент пишет код, который отправляет запрос к эндпоинту AFP | Навык не загружен в этой сессии | Убедитесь, что файл там, где агент ищет инструкции, затем начните новую сессию |
| Граф подключает триггер прямо к действию | Агент проектирует по общим знаниям о чат-ботах | Попросите его заново сформулировать правила связей перед тем, как снова предложить граф |
| Граф использует тип узла без панели настроек | Список узлов взят не из навыка | Замените его: condition покрывает ветвление, delay покрывает ожидание |
| Агент называет число лимита кампаний или страниц | Лимиты — это настройка тарифа, а не фиксированные значения | Уберите число и вместо него дайте ссылку на Лимиты тарифа |
| Две ветки заканчиваются в одном узле | Слияние хорошо смотрится на диаграмме, но холст его отклоняет | Продублируйте хвостовые узлы на каждой ветке |
| Описанные поля не существуют в панели настроек | Навык устарел относительно изменения поверхности | Скачайте файл заново и сравните поле version |
| Таблицы с сайта возвращаются искажёнными, или ничего не было загружено | Агент прочитал HTML-страницу, или у него нет доступа к сети | Дайте ему адрес .md или /llms-full.txt, либо сохраните эти файлы в репозиторий рядом с навыком |
Связанное
Заголовок раздела «Связанное»- Схема графа кампании — имена полей и ограничения, под которые должен писать агент
- Типы узлов — каждый узел и каждый ключ настройки
- Построение кампании на холсте — превращение предложенного графа в сохранённый
- Тест и отладка кампании — проверка того, что граф делает на самом деле
- Сопоставление комментариев со списками ключевых слов — создание списка, на который ссылается условие
- Глоссарий — словарь, которого навык требует от агента придерживаться