Предыстория
Клиенту необходимо проверить баланс на своих картах. Оператор может присылать два различных варианта ответа на 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
- Регулярное выражение в случае ответа: “Your balance is minus 40 USD and 50 cents” message.
Your balance is minus (?P
Логика обработки USSD-ответа
Мы разделяем баланс на две переменные:
- sim__balance__USD – для части с целым числом.
- sim_balance_cents - для части с цифрами после запятой.
После обработки сервисом мы преобразуем строчное выражение в число, которое будет занесено в базу. Для этого мы используем следующее выражение.
- В первом варианте: float({sim__balance_USD}+"."+{sim__balance_cents})
- Во втором варианте: float("-"+{sim__balance_USD}+"."+{sim__balance_censt})
Визуально кейсы будут выглядеть следующим образом.
Первый вариант:
Второй вариант: