Перейти к содержимому

SMS-парсеры

Устройство передаёт каждое банковское SMS и push-уведомление, которое получает. Парсер превращает такое уведомление в сумму, а Trader автоматически подтверждает операцию, к которой это сообщение относится.

Поле Обязательное Описание
bank_id Да банк, к которому относится парсер
sms_type Да card, sbp, account или link
currency Да код валюты, до 3 символов
sim Да точный источник уведомления, например com.vtb.mobile
from_pattern Да регулярное выражение для отправителя или заголовка
text_pattern Да регулярное выражение для тела сообщения

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

Сопоставление не учитывает регистр и работает с многострочным текстом.

Значения извлекаются из выражений именованными группами. amount — та группа, которую нужно захватить обязательно: без неё уведомление не сопоставить с операцией:

Зачисление (?<amount>[\d\s]+[.,]\d{2}) RUB

Группы из отправителя и из текста объединяются, поэтому сумму можно захватить в любом из них. Банки, которые кладут сумму в заголовок, полностью обрабатываются через from_pattern:

^Received\s+(?<amount>[\d.,]+)$

Есть и другие группы, которые ещё точнее сужают сопоставление сообщения с операцией.

Группа amount захватывает сумму в основных единицах.

Разделителем дробной части принимаются и ., и ,, а разделителем тысяч — пробел, поэтому 1 234.56 и 1 234,56 дают 1234.56. Захватывать нужно зачисленную сумму, а не баланс, напечатанный рядом.

Извлечённая сумма сопоставляется с незавершёнными операциями на том же устройстве. Уведомление, сумма которого отличается хотя бы на 0.01, не совпадёт ни с одной операцией, и она останется открытой до истечения срока — поэтому рандомайзер суммы и не даёт двум открытым операциям на одном устройстве иметь одинаковую сумму.

Парсер можно проверить на примерах уведомлений до сохранения:

  • позитивный тест проходит, когда совпали все заданные выражения и извлечённые группы равны ожидаемым;
  • негативный тест проходит, когда парсер не совпал с сообщением.

Указывайте в тестах реальные from, text и sim того уведомления, под которое настраиваете парсер.