---
title: "Правила сопоставления ключевых слов"
description: "Как узел-условие сравнивает комментарий или ЛС со списком ключевых слов или настроенным текстом, с чем совпадает пустой список, и какую ветку берёт каждый результат."
canonical: https://docs.afp.monster/ru/reference/keyword-matching
updated: 2026-08-19
pageType: reference
---

Узел-условие сравнивает текст сообщения, которое до него дошло, со словами, настроенными на этом узле, затем отправляет выполнение через выход **Match** (выход 0) или **No Match** (выход 1). При типе сопоставления **Список ключевых слов** (Keyword list) сообщение совпадает, если содержит хотя бы одно ключевое слово из списка. Обратное сопоставление инвертирует этот результат, а список без ключевых слов — или удалённый — совпадает с любым сообщением.

## Сводка

| Тип сопоставления | Настройки, которые читает | Сообщение совпадает, когда |
|---|---|---|
| `any` | нет | Всегда. Узел сохраняет один выход, и каждое сообщение идёт по нему |
| `contains` | `text` | Сообщение содержит настроенный текст |
| `exact` | `text` | Сообщение — это настроенный текст и ничего больше |
| `keyword_list` | `keyword_list_id`, `reverse_keywords` | Сообщение содержит хотя бы одно ключевое слово из списка, или ни одно из них, когда включено обратное сопоставление |

## Алгоритм сопоставления

1. Условие берёт текст сообщения, которое запустило выполнение — комментарий или личное сообщение.
2. Условие, настроенное ждать ответа, паркует выполнение вместо того, чтобы что-либо сравнивать, и сравнивает текст ответа, когда он приходит. Нажатая кнопка считается текстом: условие сравнивает подпись кнопки.
3. Тип сопоставления решает, как сравнивать. `keyword_list` загружает сохранённый список по его идентификатору и проверяет сообщение против ключевых слов этого списка.
4. Обратное сопоставление инвертирует результат сравнения `keyword_list`, так что сообщение, не содержащее ни одного ключевого слова, совпадает.
5. Список ключевых слов без ключевых слов и ссылка на список, которого больше не существует, оба дают совпадение, ничего не сравнивая.
6. Результат выбирает выход. Match — это выход 0, No Match — выход 1, и выполнение продолжается по тому из них, который несёт связь. Выход без связи завершает выполнение на условии.
7. Медиафильтры на том же узле — изображения, GIF и ссылки — это отдельные настройки, не участвующие в сравнении ключевых слов, хотя сообщение, не прошедшее один из них, всё равно уходит через **No Match**.

```d2 title="How a condition node picks the text to match, applies the match type, and chooses its output"
direction: down
arrives: "Сообщение доходит до условия"
waits: "Ожидание ответа?" {shape: diamond}
parks: "Выполнение паркуется, пока не придёт ответ"
replyText: "Взять текст ответа"
triggerText: "Взять текст сообщения-триггера"
matchType: "Тип сопоставления" {shape: diamond}
matched: "Match, выход 0"
nodeText: "Сравнить с текстом узла"
listWords: "Сравнить с ключевыми словами списка"
reverse: "Обратное сопоставление включено?" {shape: diamond}
invert: "Инвертировать результат"
keep: "Оставить результат"
decide: "Совпало?" {shape: diamond}
unmatched: "No Match, выход 1"
arrives -> waits
waits -> parks: да
parks -> replyText
waits -> triggerText: нет
replyText -> matchType
triggerText -> matchType
matchType -> matched: any
matchType -> nodeText: keyword_list
matchType -> listWords: да
listWords -> reverse
reverse -> invert: нет
reverse -> keep: да
nodeText -> decide
invert -> decide
keep -> decide
decide -> matched: нет
decide -> unmatched: no
```

Настройки ключевых слов находятся на узле-условии. Узел-триггер решает, какие события запускают кампанию, и вообще не содержит настройки ключевых слов, так что кампания фильтрует текст только после того, как её выполнение доходит до условия. [Типы узлов](/ru/reference/node-types) перечисляет настройки обоих.

## `any`

- **Читает:** ничего
- **Выходов:** 1

Каждое сообщение совпадает, без какого-либо сравнения. Переключение условия на `any` убирает второй выход узла и удаляет любую связь, выходящую из него, так что ветка No Match не может существовать, пока выбран этот тип сопоставления.

## `contains`

- **Читает:** `text`
- **Выходов:** 2

Сообщение совпадает, когда настроенный текст встречается внутри него. `text` хранит одну строку, а не набор альтернатив — используйте список ключевых слов, когда нужно несколько.

## `exact`

- **Читает:** `text`
- **Выходов:** 2

Сообщение совпадает, когда оно является настроенным текстом и ничем больше. 

## `keyword_list`

- **Читает:** `keyword_list_id`, `reverse_keywords`
- **Выходов:** 2

Сообщение сравнивается с сохранённым списком ключевых слов, выбранным из выпадающего списка узла, и совпадает, если содержит хотя бы одно ключевое слово из этого списка. Список читается по идентификатору в момент сопоставления, так что редактирование списка меняет то, с чем совпадает этот узел, без пересохранения кампании. [Сопоставление комментариев со списками ключевых слов](/ru/guides/keyword-lists) описывает создание списка и его прикрепление.

```json
{
  "type": "condition",
  "config": {
    "match_type": "keyword_list",
    "keyword_list_id": 41,
    "reverse_keywords": false,
    "wait_for_reply": false,
    "filter_images": false,
    "filter_gifs": false,
    "filter_links": false
  }
}
```

Ключевые слова очищаются при сохранении списка, а не при поступлении сообщения: начальные и конечные пробелы обрезаются, пустые записи убираются, а повторяющиеся записи схлопываются в одну. Список, отправленный без ключевых слов, отклоняется.

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

## Обратное сопоставление

`reverse_keywords` применяется к типу сопоставления `keyword_list` и инвертирует результат сравнения. **Match** тогда несёт сообщения, не содержащие ни одного ключевого слова, а **No Match** — те, что содержат хотя бы одно. Больше ничего в сравнении не меняется.

## Пустой или удалённый список ключевых слов

| Ситуация | Что делает условие |
|---|---|
| В списке нет ключевых слов | Совпадает с любым сообщением |
| Список, на который указывает узел, был удалён | Совпадает с любым сообщением |

Условие, которое внезапно отвечает на всё, обычно имеет одну из этих двух причин. Ссылка узла-условия на список живёт внутри сохранённого графа кампании, поэтому список может исчезнуть из-под узла, который всё ещё на него указывает — [Сопоставление комментариев со списками ключевых слов](/ru/guides/keyword-lists) описывает, что удаление делает, а что нет отклоняет.

## Разобранные примеры

| Текст комментария | Настройка условия | Обратное сопоставление | Взятая ветка |
|---|---|---|---|
| `How much is shipping?` | Список ключевых слов с `shipping` и `price` | выключено | Match |
| `How much is shipping?` | Список ключевых слов с `shipping` и `price` | включено | No Match |
| `Beautiful, congratulations` | Список ключевых слов с `shipping` и `price` | выключено | No Match |
| `Beautiful, congratulations` | Список ключевых слов с `shipping` и `price` | включено | Match |
| `Beautiful, congratulations` | Список ключевых слов без ключевых слов | выключено | Match |
| `Beautiful, congratulations` | Удалённый список ключевых слов | выключено | Match |
| Стикер без текста, который приходит как `{{sticker}}` | Список ключевых слов с `shipping` и `price` | выключено | No Match |
| Стикер без текста, который приходит как `{{sticker}}` | Список ключевых слов с `{{sticker}}` | выключено | Match |
| `How much is shipping?` | `contains`, с `text`, установленным на `shipping` | неприменимо | Match |
| `Anything at all` | `any` | неприменимо | Match, на единственном выходе узла |

## Регистр, целые слова, пунктуация и эмодзи

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

- Регистр букв игнорируется, так что комментарий `Shipping` совпадает с ключевым словом `shipping`. 
- Ключевое слово совпадает внутри более длинного слова, так что `ship` совпадает с комментарием `shipping`. 
- Пунктуация рядом с ключевым словом не мешает совпадению, так что `shipping?` совпадает с ключевым словом `shipping`. 
- Эмодзи сравниваются как обычные символы, так что ключевое слово с одним эмодзи совпадает с комментарием, содержащим этот эмодзи. 

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

Пока остальное не подтверждено, проверяйте каждое ключевое слово тестовым выполнением с холста: запустите кампанию с точным текстом, который вы ожидаете получить, и посмотрите, какой выход взяло условие. См. [Тест и отладка кампании](/ru/guides/test-and-debug-campaigns).

## Примечания

- Комментарий без текста приходит с заполнителем вместо сообщения — `{{sticker}}` на Facebook, `{{media}}` в ответе Instagram — так что условию всегда есть с чем сравнивать. Список ключевых слов, содержащий именно эту строку, совпадает с такими комментариями.
- Выполнение, припаркованное на условии, ожидающем ответа, сохраняет набор ключевых слов, с которым оно начало. Ответ, пришедший после того, как вы отредактировали список, сопоставляется со старыми ключевыми словами; следующее выполнение использует новые.
- Условие с включённым фильтром изображений не совпадает с ответом, не несущим изображения, и направляет его в **No Match**, что бы ни говорили ключевые слова.
- Изменение типа сопоставления или текста условия на холсте меняет кампанию только в вашем браузере. Действующее выполнение сравнивает с сохранённой версией графа, на которой оно началось, так что изменение применяется к новым выполнениям только после сохранения.
- Условие никогда не подключается к другому условию, так что ветка проверяет текст сообщения один раз. Две проверки на одном пути нуждаются в двух ветках, или в списке ключевых слов, который покрывает оба набора слов.

## Связанное

- [Сопоставление комментариев со списками ключевых слов](/ru/guides/keyword-lists) — создание списка, прикрепление его к узлу, и что происходит при редактировании или удалении.
- [Типы узлов](/ru/reference/node-types) — полная настройка узла-условия, наряду с каждым другим узлом.
- [Схема графа кампании](/ru/reference/campaign-graph-schema) — где настройка условия находится в сохранённом графе.
- [События триггеров](/ru/reference/trigger-events) — события, которые производят текст, с которым сравнивает условие.
- [Поля контакта](/ru/reference/contact-fields) — что выполнение может изменить в контакте после выхода через **Match**.
