Язык запросов
Поля, операторы и фильтры дат для поиска WhatsApp с точными примерами команд.
Если вы используете ИИ-агент с wa, вам не нужно изучать этот язык: опишите то, что вы хотите, простыми словами, и агент напишет запрос. Эта страница предназначена для людей, которые сами вводят поисковые запросы, и для всех, кому нужны все фильтры: точные операторы, каждое поле, предустановки, правила дат и ограничения.
Это ссылка на запросы wa personal search messages, wa personal search all, wa personal stats messages show и сохраненные поисковые запросы. Для повседневных примеров начните с search.
Термины, используемые на этой странице:
- Запрос: текст, который вы ищете, например
invoice from:me date:7d. - Поле: имя и двоеточие, которые ограничивают одну часть запроса одним свойством сообщения, например
from:(отправитель) илиdate:(когда оно было отправлено). Слова без поля ищут текст сообщения. - Оператор: слово или знак, объединяющий условия, например
AND,ORиNOT. - Словоформы: одно и то же слово с разными окончаниями.
pisoиpisos— формы одного слова.
Этот язык используется всеми интерфейсами командной строки WireCat. Это строгий профиль синтаксиса запросов Apache Lucene: слова, фразы, И/ИЛИ/НЕ, группы, поля, диапазоны, ограниченные подстановочные знаки и регулярные выражения. «Строгий» означает, что все, что он не поддерживает, является ошибкой, которую никогда не игнорируют молча. В полной ссылке (на русском языке) есть сгенерированные таблицы полей, операторов, пресетов и ограничений, а также исполняемые примеры.
Что он может сделать
| Вы хотите | Написать |
|---|---|
| сообщения со всеми этими словами в любой форме | invoice paid |
| эти слова вместе, в таком порядке | "invoice paid" |
| то или иное слово, без третьего | (cafe OR library) NOT loud |
| только эта точная форма слова | exact:piso или --exact для каждого слова без поля |
| слова, начинающиеся с чего-то | invo* |
| отправитель, чат, разновидность чата | from:me, chat:"Book club", kind:private |
| период | date:7d, date:[2026-01-01 TO 2026-02-01} |
| текст, похожий на пароль, карту или телефон | preset:secret, preset:card |
| ваши собственные лейблы | tag:work |
| узор | text:/pass(port)?/ |
Слова и словосочетания без полей соответствуют словоформам. --exact выбирает точные формы слов без поля; явный text: по-прежнему соответствует формам. Языковые настройки хранилища определяют, какие формы совпадают (формы слов).
Операторы
| Оператор | Пример | Значение |
|---|---|---|
| слова | invoice paid | оба слова |
| фраза | "invoice paid" | слова в этом порядке |
AND, && | alpha AND beta | оба |
OR, || | alpha OR beta | либо |
NOT, !, - | alpha NOT beta | первое без второго |
+ | +alpha OR beta | требуется альфа-версия, бета-версия необязательна |
| группа | (alpha OR beta) gamma | скобки задают порядок |
| группа полей | from:(alice OR bob) | поле применяется к каждому значению |
| диапазон | date:[2026-01-01 TO 2026-02-01} | [ ] включить, { } исключить, * открыть |
| сравнение | date>=7d, date:>=7d | открытый полигон; форма двоеточия такая же |
| подстановочный знак | invo*, te?t | * любые символы, ? один |
| регулярное выражение | text:/pass(port)?/ | ограниченное регулярное выражение Lucene |
alpha OR beta gamma означает (alpha OR beta) AND gamma; alpha OR beta AND gamma означает alpha OR (beta AND gamma). Используйте скобки для ясности. Строчные буквы and, or, not — это простые слова. Запрос только с NOT ничего не находит: укажите положительное условие, например kind:group NOT preset:secret. Нечеткие ~, близость, повышение и интервалы отклоняются с ошибкой, а не игнорируются. Опечатки не исправлены: чтобы уловить несколько окончаний, используйте подстановочный знак, например invo*.
Поля
| Поле | Находки | Пример |
|---|---|---|
text | слова сообщения (поле по умолчанию) | text:invoice |
exact | точная форма слова или фразы | exact:piso, exact:"invoice paid" |
body | весь исходный текст с учетом регистра | body:/.*invoice.*/ |
from | отправитель, по имени или идентификатору; me это ты | from:"Alice Synthetic", from:"100000000000001@lid" |
chat | чат по имени или идентификатору | chat:"Book club", chat:[email protected] |
date | когда оно было отправлено | date:today, date:7d, date:[2026-01-01 TO 2026-02-01} |
kind | вид чата: private, group, channel, saved и общий отдых | kind:private |
has | link и типы файлов общего языка | has:link |
in | какие счета: провайдер | in:whatsapp |
preset | текст в форме секрета или контактной информации | preset:secret |
tag | ваш собственный локальный тег в сообщении, его чате или отправителе | tag:work |
phone | номер телефона найден в тексте, как бы он ни был написан | phone:"<phone>" |
email | адрес электронной почты, найденный в тексте | email:"[email protected]" |
url | ссылка, найденная в тексте, без параметров отслеживания | url:"https://example.com/a" |
domain | сайт ссылки или адреса, найденного в тексте | domain:example.com |
mentions | человек, организация или документ, с которым связано найденное упоминание | mentions:"person:12" |
Имена полей чувствительны к регистру. Неизвестное поле, значение или комбинация — это ошибка, а не пустой ответ и никогда не простой текст. Имя, которое не известно в локальном хранилище, не ищется в WhatsApp.
В WhatsApp kind:private — это индивидуальный чат, kind:group — групповой, kind:saved — чат с самим собой, а kind:channel — канал WhatsApp. Цитируйте идентификатор: @ — оператор. Поля файлов — content, filename, mime, size и has: с file, photo, voice и другими типами вложений — соответствуют файлам сообщений, сохраненных с тех пор. wa обрабатываемые файлы; content: необходимо сначала прочитать текст файла (вложения файлов). topic: не имеет ничего общего: в WhatsApp нет тем на форуме.
Упоминания
wa находит телефоны, адреса электронной почты, ссылки, документы и имена людей в сохраненных сообщениях. Используйте эти поля, чтобы найти сообщения, которые их содержат. Сами находки указаны под номером wa personal mentions list. Чтобы найти телефон, сначала напишите номер number.txt в одну строку.
wa personal search messages "phone:\"$(cat number.txt)\""
wa personal search messages 'email:"[email protected]" OR domain:example.com'
wa personal search messages 'mentions:"person:12"'В таблице <phone> означает номер: на этих страницах настоящего номера нет. Заключите в кавычки значение, имеющее + или @, поскольку оба являются операторами. Телефон найден, как написано: с пробелами, тире и кодом страны или без них, это один телефон, а номер без + читается со странами настройки phone_countries. domain: обрабатывает docs.example.com как example.com. mentions: берет ссылку на человека, организацию или документ и находит сообщения, упоминания которых вы связали с ним с помощью wa personal mentions confirm.
Пресеты
Пресет находит текст по его форме. Используйте его, чтобы найти пароль, код или номер карты, который кто-то прислал.
| Предустановленные | Кандидат |
|---|---|
password | метка пароля, за которой следует значение |
code | этикетка с кодом подтверждения и 4–8 цифр |
api-key | метка API-ключа и значение |
secret | пароль, секрет, токен или метка ключа API и значение |
card | 13–19 цифр с необязательными пробелами и дефисами |
bank | значение в форме IBAN |
passport | указанная стоимость паспорта или российская форма из 4+6 цифр |
phone | международный телефонный номер с префиксом плюс |
email | форма адреса электронной почты |
url | ссылка HTTP(S) |
contact | вложение с контактом, адрес электронной почты или телефон |
location | вложение местоположения или гео: ссылка |
Пресет сообщает о кандидате по его форме. Он не проверяет пароль, карту или документ и может сопоставить что-то безобидное. Не удаляйте и не пересылайте сообщения автоматически по его слову.
Даты
--timezone занимает зону IANA, например Europe/Madrid; без него используется зона компьютера и возвращается в ответ. Дата без времени — это целый календарный день. Включающий верхний день включает в себя весь этот день, исключительный его исключает; день, когда часы переводятся, может длиться 23 или 25 часов.
date:today и date:yesterday — календарные дни. date:7d означает период с 7 дней назад по настоящее время (также 30m, 2h); date>=7d и date:[30d TO 7d} работают в сравнениях и диапазонах, отсчитываемых с момента выполнения запроса. Указывается точное время с секундами и смещением: date>="2026-01-01T10:00:00+02:00".
Слова, подстановочные знаки и регулярные выражения
Текст сворачивается перед индексацией и поиском: строчные буквы, без диакритических знаков. Побочный эффект: некоторые разные слова становятся одинаковыми, например año и ano. text: Регулярные выражения и подстановочные знаки сворачиваются таким же образом.
text:/pay/ соответствует слову pay, а не платежу целиком. body:/pay/ соответствует только сообщению, весь текст которого платный, с учетом регистра; чтобы найти его где угодно, используйте body:/.*pay.*/. Это синтаксис регулярных выражений Lucene, без обхода JavaScript, обратных ссылок, привязок и флагов.
В большом хранилище короткий префикс, такой как a*, может расширяться до более чем 10 000 слов и отклоняется; удлинить его. Длинные запросы, глубокая вложенность, большие шаблоны и медленное сканирование отклоняются с помощью validation_error, причина query.too-large, а не сокращаться: сузить чат, даты или шаблон.
Ответ
--json возвращает { items, page: { limit, has_more }, next?, missing?, meta }, даже если ничего не найдено. --jsonl передает только элементы.
items: хиты, сначала лучшие (или сначала самые новые с--newest), каждый со своимref(msg:…),timestamp,sender_name,excerptиmatched_in.meta.accounts: на каких аккаунтах производился поиск.missing: то, что ответ не видел, каждый со своим шагом, который его заполняет.textозначает, что индекс слов все еще строится (шагиstore.migrate,wa personal store migrate).next: шаги для запуска.page.nextповторяет запрос для следующей страницы.page.has_moreречь идет о странице, а не о том, держит ли телефон больше.
Ошибка несет в себе положение проблемы в запросе и подсказку.
Через MCP
Когда агент выполняет поиск на сервере MCP wa, wa_read (command: "search messages") принимает запрос как query, а timezone — для календарной зоны. chat принимает идентификатор или сохраненное имя; source, newest, context и limit работают так же, как параметры команды; saved запускает сохраненный поиск. thread, thread_hops, thread_messages, thread_bytes и thread_within соответствуют опциям --thread…. Ответ имеет те же поля, что и --json. wa_read (command: "stats messages show") считает одни и те же запросы. wa personal mcp --no-record или record, установленный на false, исключает вызовы сервера из истории запросов (MCP).
Далее
- Поиск: ежедневные поиски, сохраненные поиски и подсчет.
- Локальная база данных: что хранится в локальном хранилище и почему при поиске сообщение может не отображаться.