Предыстория

Клиенту необходимо проверить баланс на своих картах. Оператор может присылать два различных варианта ответа на USSD-запрос:

  • Первый вариант: “Your balance is 40 USD and 50 cents”
  • Второй вариант:” Your balance is minus 40 USD and 50 cents”

Решение


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

  • Регулярное выражение в случае ответа: “Your balance is 40 USD and 50 cents”.

Your balance is (?P-?\d+(\.\d*)?) USD and (?P-?\d+(\.\d*)?) cents

  • Регулярное выражение в случае ответа: “Your balance is minus 40 USD and 50 cents” message.

Your balance is minus (?P-?\d+(\.\d*)?) USD and (?P-?\d+(\.\d*)?) cents


Логика обработки USSD-ответа


Мы разделяем баланс на две переменные:

  • sim__balance__USD – для части с целым числом.
  • sim_balance_cents - для части с цифрами после запятой.

После обработки сервисом мы преобразуем строчное выражение в число, которое будет занесено в базу. Для этого мы используем следующее выражение.

  • В первом варианте: float({sim__balance_USD}+"."+{sim__balance_cents})
  • Во втором варианте: float("-"+{sim__balance_USD}+"."+{sim__balance_censt})

Визуально кейсы будут выглядеть следующим образом.

Первый вариант:


Второй вариант: