WhatsApp

Язык запросов

Поля, операторы и фильтры дат для поиска 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
haslink и типы файлов общего языка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 и значение
card13–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).

Далее

  • Поиск: ежедневные поиски, сохраненные поиски и подсчет.
  • Локальная база данных: что хранится в локальном хранилище и почему при поиске сообщение может не отображаться.