Kannel:从数据库获取短信状态

时间:2016-01-27 19:09:17

标签: symfony kannel

我正在创建一个symfony应用程序,在数据库中存储大量的SMS,Kannel检测到这些短信并发送,我确实使用sqlbox,Kannel通知我们的symfony应用程序的问题一个短信通过dlr-url导致很多内存使用apache,导致每个Sms我们从dlr得到大约3个http请求来更新sms所以对于100k sms我们得到300k请求并且在每个请求中我们更新数据库......

所以我想到的是,为什么Kannel不直接更新数据库中的sms状态而不调用dlr url ...是否可能?

1 个答案:

答案 0 :(得分:2)

根据我的理解,您的测试基于以下配置:

  • sqlbox发送消息(通过send_sms表格中的插入
  • dlr_url在您的配置中设置以获取投放报告
  • 没有自定义dlr-storage

如何在不使用其他http调用的情况下保留DLR

已经有一种工具可以自动将DLR导入数据库:这是dlr-storage的利益

在Kannel文档中,您将看到此字段有多种可能性:

  

支持的类型有:internal,spool,mysql,pgsql,sdb,mssql,   sqlite3,oracle和redis。默认情况下,它设置为internal。

根据我的经验,当使用数据库dlr-storage时,传送报告(DLR)仅在未收到传送状态时保存在数据表中,然后自动删除

因此,如果您希望保留有关已发送项目的日志,则需要编辑一些文件(gw/dlr_mysql.cgw/dlr.c)以避免此删除。

dlr-strorage的配置

这里我将提供一个MySql示例。

kannel.conf文件中的其他配置示例:

# this line must be in the "core" group
dlr-storage = mysql

#---------------------------------------------
# DLR STORAGE
#
# 
group = mysql-connection
id = mydlr
host = localhost
username = *yourMySqlUserName*
password = *yourMySqlPass*
database = *yourMySqlDatabaseWithTheDlrTable*
max-connections = 1

# Group defining where are the data in the db (table, columns)
group = dlr-db
id = mydlr
table = dlr
field-smsc = smsc
field-timestamp = ts
field-destination = destination
field-source = source
field-service = service
field-url = url
field-mask = mask
field-status = status
field-boxc-id = boxc