在 kamailio 中向 acc table 插入新的时间戳值

Insert new timestamp value to acc table in kamailio

我想在 acc table 中添加一个新列。我在时间戳类型 acc table 中创建了一个新列并将其命名为 ring_time。在每次通话中,我都会将响铃时间设为 $dlg_var,如下所示:

$dlg_var(ringtime) = $Ts;

然后我在配置中添加一个额外的列,如下所示:

modparam("acc", "log_extra", "src_user=$fU;src_domain=$fd;src_ip=$si;" "dst_ouser=$tU;dst_user=$rU;dst_domain=$rd;ring_time=$dlg_var(ringtime)")

但是当我尝试测试它时,我总是得到:

db_mysql [km_dbase.c:122]: db_mysql_submit_query(): driver error on query: Incorrect datetime value: '1591361996' for column kamailio.acc.ring_time at row 1 (1292) 
Jun 5 17:29:59 kamailio /usr/sbin/kamailio[22901]: ERROR: {2 102 INVITE 105a0f4a3d99a0a5558355e54b43f4e1@192.168.1.121:5060} <core> [db_query.c:244]: db_do_insert_cmd(): error while submitting query
Jun 5 17:29:59 kamailio /usr/sbin/kamailio[22901]: ERROR: {2 102 INVITE 105a0f4a3d99a0a5558355e54b43f4e1@192.168.1.121:5060} acc [acc.c:477]: acc_db_request(): failed to insert into database

听起来像是 SQL INSERT 查询的错误,如果我不得不猜测,我会说你被 SQL table 中的日期格式搞糊涂了与您推送的日期格式不匹配。

我不知道你的数据库的结构,但是当我看不到查询 运行;[=10= 时,我使用了一个简单的技巧来调试 SQL 查询]

在机器上启动 Wireshark/TCPdump 并捕获所有 SQL 流量的数据包(MySQL 是端口 3306)并复制错误。 从数据包捕获中,您将能够看到 Query Kamailio 的数据库引擎 运行.

如果错误 "db_mysql [km_dbase.c:122]: db_mysql_submit_query(): driver error on query: Incorrect datetime value: '1591361996' for column kamailio.acc.ring_time at row 1 (1292)",'1591361996' 看起来像是 $dlg_var(ringtime) 的纪元。错误的 "Incorrect datetime value" 部分看起来像是数据库正在尝试以日期时间数据类型存储值,因此数据类型不匹配。仔细检查,您可能需要更改铃声时间以转换为日期时间或将数据库列更改为需要纪元的类型。