以交互方式使用kannel和GSM Modem?

时间:2015-01-25 21:49:06

标签: sms sms-gateway kannel

我想知道是否可以使用脚本通过kannel向用户查询某些数据。

USECASE

  

考虑我需要执行注册过程的场景   通过短信。我需要查询姓名,生日,性别等。

建议高度赞赏。

进度

我尝试过使用sms-service;

# SMS SERVICE
group = sms-service
keyword = limo
get-url = "http://localhost:3000/client?sender=%p&text=%k"
accept-x-kannel-headers = true
max-messages = 3
concatenation = true

在这种情况下,我依靠 get-url 来提取发件人 msisdn 。在收到关键字" limo"后,我想开始提示用户提供他们的姓名,生日,性别等......以逐步的方式。

当用户发送" limo"时,我会回答一个问题,例如"回复你的名字?"。用户可以回复" Willy"。我想在数据库中检索并存储它,并提示生日,我将依次存储在数据库中。

面临的挑战是从smsbox.log中有效地提取这些响应以及处理会话。

1 个答案:

答案 0 :(得分:0)

是的,这是可能的。为此设置Kannel非常简单(https://jasonrogena.github.io/2014/01/18/kannel-and-the-huawei-e160.html)。但是,由于Kannel无国籍,您必须自己管理会话。

更新

  1. 您无需从日志文件中提取任何内容(强烈建议不要处理日志文件)。您在此场景中所需的一切都可以传递到您的脚本中(由get-url变量指定)

  2. 我认为你在我们的get-url中指定的GET请求变量有点乱了。请改用“http://localhost:3000/client?phone=%p&text=%a”。

  3. 处理会话非常简单:
    • 在您的数据库中,有一个用于存储会话的表。将发件人的电话号码作为此表的主键。该表应该有另一列用于存储最后一个注册步骤(在您的情况下,您可以将其声明为ENUM('name','birthdate','gender'))。我将此列称为 last_step 列。
    • 当您的脚本被Kannel调用时,请检查发件人的号码是否在会话表中。
    • 如果发件人不在会话表中,请使用 primary_key =电话号码和 last_step ='name'添加新行。您可能应该向发件人发送一条短信,要求他们提供姓名。
    • 如果发件人在会话表中,请检查该特定号码的 last_step 的值是多少。如果 last_step ='name',您的代码应该假定发件人刚刚发送了他们的名字。将收到的SMS存储在数据库中作为名称。更新 last_step ='birthdate'然后向发件人发送短信,要求他们提供出生日期。
    • 遵循此逻辑,直到用户完成注册过程。