如何解析通过http GET请求传递的Mobile USSD参数

时间:2014-12-21 20:17:54

标签: python ussd

我正在尝试构建一个web api,它将处理USSD服务器从移动网络运营商(MNO)提供的数据。下面是这种交互如何与外部系统作为我的应用程序进行操作的片段。

USSD App Illustration

对于每个请求,我必须确定用户在什么级别,并使用适当的菜单进行响应。 MNO会向我发送http://my_app_url?*123*#之类的内容。由于最后一个*和#之间没有任何内容,我确定这是一个根菜单请求,我可以用菜单向用户回复,例如1.注册,2。检查余额,3。请求PIN。假设用户想要查看余额,他们将在手机上选择菜单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发送的每个请求都带有用户的手机号码,MNO创建的USSD会话ID,它将一直保留到USSD会话结束,USSD参数即从第一个*到#在上面的示例中。

  2. 我已将USSD App的菜单存储在数据库(sql fiddle)中,因此根据用户所在的级别,我可以知道要为其提供的菜单,例如如果它的根请求,我可以为用户提供其parent_menu为1的所有菜单。如果是一个支票余额请求,我将回复所有菜单的父菜单是2等等

  3. 我目前确定用户正在做出什么请求的方法是编写多个if if语句,但是在中间我正在松开轨道并且变得越来越复杂。在内心深处,我觉得必须有一种更优雅的方式来解析用户发送的请求,并确定请求的级别,并知道如何为它们提供服务。你能提供更好的方法吗?更好的是,您是否有构建此类应用程序的经验,您是否可以分享遍历菜单的逻辑?

2 个答案:

答案 0 :(得分:0)

几个月前我遇到了类似的问题。对我来说,我使用正则表达式来处理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

答案 1 :(得分:0)

您可以为ussd users表创建额外的列,以跟踪用户的当前级别并使用类似进度的内容。如果您仍然需要这些,我很乐意通知您。