Как да анализирам параметрите на Mobile USSD, предадени като http GET заявки

Опитвам се да създам уеб API, който ще обработва данни, предоставени от USSD сървър от оператора на мобилна мрежа (MNO). По-долу е даден фрагмент от това как този вид взаимодействие работи с външната система, която е Моето приложение.

USSD илюстрация на приложението

За всяка заявка трябва да определя на какво ниво е потребителят и да отговоря със съответното меню. MNO ще ми изпрати нещо като http://my_app_url?*123*#. Тъй като няма нищо между последния * и #, определям, че това е заявка за основно меню и мога да отговоря с меню на потребителя, напр. 1. Регистрирайте се, 2. Проверка на баланса, 3. Поискайте ПИН. Ако приемем, че потребителят иска да провери баланса, той ще избере Меню 2 на мобилния си телефон и MNO ще ми изпрати http://my_app_url?*123*2#. Отговарям с 1. Въведете номера на акаунта, 2. Поискайте обратно обаждане. Потребителят избира да въведе номера на сметката и MNO ще изпрати http://my_app_url?*123*2*1#, което ще ми каже къде се намира потребителят.

Въпреки че цялото меню не е дълго, поддържането му може да стане объркващо, тъй като мога да имам следната комбинация. http://my_app_url?*123*1*2*3*1# или http://my_app_url?*123*1*1*3# или http://my_app_url?*123*2*1*3*1# и т.н

Още информация:

  1. Всяка заявка, изпратена от MNO, идва с мобилния номер на потребителя, идентификатор на USSD сесия, създаден от MNO, който ще остане, докато USSD сесията приключи, и USSD параметри, т.е. от първия * до # в примерите по-горе.

  2. Съхранил съм менютата за USSD приложението в база данни (sql fiddle), така че в зависимост на нивото, на което е даден потребител, мога да знам какво меню да му сервирам, напр. ако това е основна заявка, мога да обслужвам потребителя с всички менюта, чието родителско_меню е 1. Ако това е заявка за проверка на баланса, ще отговоря с всички менюта, чието родителско меню е 2 и т.н. и т.н.

Настоящият ми подход за определяне на това каква заявка прави потребителят е да напиша множество оператори if else, но по средата губя следите и става сложно. Дълбоко в себе си чувствам, че трябва да има по-елегантен начин за анализиране на заявките, изпратени от потребителя, и определяне на какво ниво е заявката и знае какво да им служи. Можете ли да предоставите по-добър подход? Още по-добре, имате ли опит в изграждането на този тип приложение и бихте ли споделили логиката си на преминаване през менютата?


person lukik    schedule 21.12.2014    source източник


Отговори (2)


Имах подобен проблем преди няколко месеца. За мен използвах регулярни изрази за обработка на USSD низа, т.е. *123*3*3#. Но все пак ще ви трябва операторите if else. В зависимост от вашата система ще трябва да разделите кода си на класове.

Примерен начин за обработка с помощта на Regex е:

ussd_string=123*2
if bool(re.match(r"^(\d+)[*]2",self.ussd_string)):
     #this will match 123*2 so process here
person Morfat Mosoti    schedule 03.04.2015

Можете да създадете допълнителни колони за таблицата с потребители на ussd, за да проследите текущото ниво на потребителя и да използвате нещо като напредък. Ако все още се нуждаете от това, ще се радвам да ви информирам повече.

person sam    schedule 07.03.2017