欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 新车 > kamailio-ACC_JSON模块详解

kamailio-ACC_JSON模块详解

2025/5/3 13:09:09 来源:https://blog.csdn.net/weixin_44213550/article/details/145410566  浏览:    关键词:kamailio-ACC_JSON模块详解

ACC_JSON 模块

作者
Julien Chavanton
jchavanton@gmail.com
Julien Chavanton
flowroute.com
jchavanton@gmail.com

编辑
Julien Chavanton
flowroute.com
jchavanton@gmail.com

版权
© 2018 Flowroute.com


目录

  1. 管理员指南
    1. 概述
    2. 依赖
      2.1 Kamailio 模块
      2.2 外部库或应用程序
    3. 参数
      3.1 acc_flag(整数)
      3.2 acc_missed_flag(整数)
      3.3 acc_extra(字符串)
      3.4 acc_json_pre_encoded_prefix(字符串)
      3.5 acc_time_mode(整数)
      3.6 acc_time_format(字符串)
      3.7 acc_output_mqueue(整数)
      3.8 acc_output_syslog(整数)
      3.9 acc_log_facility(整数)
      3.10 acc_log_level(整数)
      3.11 cdr_enable(整数)
      3.12 cdr_extra(字符串)
      3.13 cdr_pre_encoded_prefix(字符串)
      3.14 cdr_expired_dlg_enable(字符串)
      3.15 cdr_output_mqueue(整数)
      3.16 cdr_output_syslog(整数)
      3.17 cdr_log_facility(整数)
      3.18 cdr_log_level(整数)

1. 概述

ACC_JSON 模块用于将事务信息以 JSON 字典的形式记录。它绑定到 ACC 模块的 API,并使用与其他后端相同的计费机制。

它可以将 JSON 字典输出到 MQUEUE 或 SYSLOG(即使 Kamailio 未使用 syslog)。


2. 依赖

2.1 Kamailio 模块

该模块依赖于以下模块(即以下模块必须在此模块之前加载):

  • acc:计费模块。
  • mqueue:消息队列模块(可选)。
2.2 外部库或应用程序

在运行 Kamailio 之前,必须安装以下库或应用程序:

  • jansson:用于编码、解码和操作 JSON 数据的 C 库。
    官网:http://www.digip.org/jansson/

3. 参数

3.1 acc_flag(整数)

请求标志,用于标记需要计费的事务。参见 acc_output_mqueueacc_output_syslog
默认值为未设置(无标志)。

示例 1.1. acc_flag 示例

modparam("acc_json", "acc_flag", 2)

3.2 acc_missed_flag(整数)

请求标志,用于标记需要计费的未接呼叫。参见 acc_output_mqueueacc_output_syslog
默认值为未设置(无标志)。

示例 1.2. acc_missed_flag 示例

modparam("acc_json", "acc_missed_flag", 3)

3.3 acc_extra(字符串)

要添加到 JSON 字典中的额外值。
默认值为 NULL。

示例 1.3. acc_extra 示例

modparam("acc_json", "acc_extra", "via=$hdr(Via[*]); email=$avp(s:email)")

3.4 acc_json_pre_encoded_prefix(字符串)

用于标识已预先编码为 JSON 的值的前缀。
默认值为 NULL。

示例 1.4. acc_json_pre_encoded_prefix 示例

modparam("acc_json", "acc_extra", "json_data=$avp(json_data);")
modparam("acc_json", "acc_json_pre_encoded_prefix", "json_")
...
$avp(json_data) = '{"b":2, "c":3}';

3.5 acc_time_mode(整数)

存储与事件时间相关的额外值。
可选值:

  • 0:默认值,仅保存 Unix 时间戳(syslog)或日期时间(数据库)。
  • 1:保存秒数到 time_attr,微秒数到 time_exten
  • 2:保存秒数.毫秒数到 time_attr
  • 3:根据 time_format 参数保存格式化时间(使用 localtime() 输出)。
  • 4:根据 time_format 参数保存格式化时间(使用 gmtime() 输出)。

示例 1.5. acc_time_mode 示例

modparam("acc_json", "acc_time_mode", 1)

3.6 acc_time_format(字符串)

指定时间格式(用于 time_mode 为 3 或 4 时)。
默认值为 %Y-%m-%d %H:%M:%S

示例 1.6. acc_time_format 示例

modparam("acc_json", "acc_time_format", "%Y/%m/%d %H:%M:%S")

3.7 acc_output_mqueue(整数)

需要 mqueue 模块。ACC 模块会将 JSON 计费事件排队到指定的消息队列中。可以使用 rtimer 模块的 exec 访问队列并处理事件。
默认值为未设置(不启用消息队列)。

示例 1.7. acc_output_mqueue 使用示例

modparam("mqueue", "mqueue", "name=acc_events;size=100000")
modparam("acc_json", "acc_output_mqueue", "acc_events")
modparam("acc_json", "acc_flag", 2)
modparam("acc_json", "acc_extra", "caller_ip_port=$avp(caller_ip_port);")
modparam("rtimer", "timer", "name=nsqt;interval=1;mode=1;")
modparam("rtimer", "exec", "timer=nsqt;route=RUN_CDR_PUBLISH")
modparam("http_client", "keep_connections", 1)
modparam("http_client", "httpcon", "nsqd=>http://localhost:4151/pub?topic=acc")route[RUN_ACC_PUBLISH] {$var(count) = 0;while (mq_fetch("acc_events")) {$var(q_size) = mq_size("acc_events");$var(count) = $var(count) + 1;xinfo("[RUN_ACC_PUBLISH][$var(q_size)][$var(count)][$mqk(acc_events)][$mqv(acc_events)]\n");$var(res) = http_connect_raw("nsqd", "", "application/json", $mqv(acc_events), "$var(nsq_res)");if ($var(res) < 0) {xerr("[RUN_ACC_PUBLISH][$var(res)] http_connect_raw: timeout or error !\n");mq_add("acc_events", "acc_key", "$mqv(acc_events)");} else if ($var(res) < 200 || $var(res) > 299) {xerr("[RUN_ACC_PUBLISH][$var(res)] http unexpected response code !\n");mq_add("acc_dead_letter_queue", "acc_key", "$mqv(acc_events)");return;}}if ($var(count) > 0 ) {xinfo("[RUN_CDR_PUBLISH]done count[$var(count)]\n");}
}

3.8 acc_output_syslog(整数)

控制是否将 ACC JSON 输出发送到 syslog。即使 Kamailio 未以守护进程模式运行或日志输出到 stdout/stderr,也可以使用 syslog。
默认值为未设置(无标志)。

示例 1.8. acc_output_syslog 示例

modparam("acc_json", "acc_output_syslog", 1)
modparam("acc_json", "acc_log_level", 2)
modparam("acc_json", "acc_log_facility", "LOG_DAEMON")

3.9 acc_log_facility(整数)

指定 syslog 的日志设施。
默认值为 LOG_DAEMON

示例 1.9. acc_log_facility 示例

modparam("acc_json", "acc_log_facility", "LOG_LOCAL0")

3.10 acc_log_level(整数)

指定 syslog 的日志级别。
默认值为 1(L_NOTICE)。

示例 1.10. acc_log_level 示例

modparam("acc_json", "acc_log_level", 2) # 设置为 2(L_INFO)

3.11 cdr_enable(整数)

启用 CDR 报告,每个呼叫生成一条记录,依赖于对话框模块。
可选值:

  • 0:关闭(默认)。
  • 1:启用。

示例 1.11. cdr_enable 示例

modparam("acc_json", "cdr_enable", 1)

3.12 cdr_extra(字符串)

定义自定义 CDR 字段的伪变量集。
默认值为 NULL。

示例 1.12. cdr_extra 示例

modparam("acc_json", "cdr_extra", "ci=$dlg_var(call_id);ft=$dlg_var(from_tag)")

3.13 cdr_pre_encoded_prefix(字符串)

用于标识已预先编码为 JSON 的值的前缀。
默认值为 NULL。

示例 1.13. cdr_pre_encoded_prefix 示例

modparam("acc_json", "cdr_extra", "json_data=$avp(json_data);")
modparam("acc_json", "cdr_pre_encoded_prefix", "json_")
...
$avp(json_data) = '{"b":2, "c":3}';

3.14 cdr_expired_dlg_enable(字符串)

是否在对话框过期时启用 CDR 日志记录?
可选值:

  • 0:关闭(默认)。
  • 1:启用。

示例 1.14. cdr_expired_dlg_enable 示例

modparam("acc_json", "cdr_expired_dlg_enable", 1)

3.15 cdr_output_mqueue(整数)

需要 mqueue 模块。ACC 模块会将 JSON CDR 事件排队到指定的消息队列中。可以使用 rtimer 模块的 exec 访问队列并处理事件。
默认值为未设置(不启用消息队列)。

示例 1.15. cdr_output_mqueue 使用示例

modparam("mqueue", "mqueue", "name=cdr_events;size=100000")
modparam("acc_json", "cdr_enable", 1)
modparam("acc_json", "cdr_output_mqueue", "cdr_events")
modparam("acc_json", "cdr_extra", "ci=$dlg_var(call_id)")
modparam("rtimer", "timer", "name=nsqt;interval=1;mode=1;")
modparam("rtimer", "exec", "timer=nsqt;route=RUN_CDR_PUBLISH")
modparam("http_client", "keep_connections", 1)
modparam("http_client", "httpcon", "nsqd=>http://localhost:4151/pub?topic=acc")route[RUN_CDR_PUBLISH] {$var(count) = 0;while (mq_fetch("cdr_events")) {$var(q_size) = mq_size("cdr_events");$var(count) = $var(count) + 1;xinfo("[RUN_CDR_PUBLISH][$var(q_size)][$var(count)][$mqk(cdr_events)][$mqv(cdr_events)]\n");$var(res) = http_connect_raw("nsqd", "", "application/json", $mqv(cdr_events), "$var(nsq_res)");if ($var(res) < 0) {xerr("[RUN_CDR_PUBLISH][$var(res)] http_connect_raw: timeout or error !\n");mq_add("cdr_events", "cdr_key", "$mqv(cdr_events)");} else if ($var(res) < 200 || $var(res) > 299) {xerr("[RUN_CDR_PUBLISH][$var(res)] http unexpected response code !\n");mq_add("cdr_dead_letter_queue", "cdr_key", "$mqv(cdr_events)");return;}}if ($var(count) > 0 ) {xinfo("[RUN_CDR_PUBLISH]done count[$var(count)]\n");}
}

3.16 cdr_output_syslog(整数)

ACC 模块会将 JSON CDR 事件记录到 syslog。


3.17 cdr_log_facility(整数)

指定 syslog 的日志设施。
默认值为 LOG_DAEMON

示例 1.16. cdr_log_facility 示例

modparam("acc_json", "cdr_log_facility", "LOG_LOCAL0")

3.18 cdr_log_level(整数)

指定 syslog 的日志级别。
默认值为 1(L_NOTICE)。

示例 1.17. cdr_log_level 示例

modparam("acc_json", "cdr_log_level", 2) # 设置为 2(L_INFO)

总结

通过以上参数和示例,可以灵活配置 ACC_JSON 模块,将计费信息以 JSON 格式输出到消息队列或 syslog,并支持自定义字段和时间格式。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词