当前位置: 首页 > article >正文

kamailio-ACC模块介绍【kamailio6.0. X】

Acc 模块

作者
Jiri Kuthan
iptel.org
jiri@iptel.org

Bogdan-Andrei Iancu
Voice Sistem SRL
bogdan@voice-system.ro

Ramona-Elena Modroiu
rosdev.ro
ramona@rosdev.ro

编辑
Bogdan-Andrei Iancu
Voice Sistem SRL
bogdan@voice-system.ro

Sven Knoblich
1&1 Internet AG
sven.knoblich@1und1.de

版权
© 2002, 2003 FhG FOKUS
© 2004, 2006 Voice Sistem SRL
© 2011 1&1 Internet AG


目录

  1. 管理员指南
    1. 概述
      1.1 通用示例
    2. 额外计费
      2.1 概述
      2.2 定义与语法
      2.3 工作原理
    3. 多呼叫腿计费
      3.1 概述
      3.2 配置
      3.3 记录的数据
    4. 呼叫数据记录生成
      4.1 概述
      4.2 CDR 额外信息
      4.2.1 定义与语法
      4.3 多呼叫腿的 CDR
      4.3.1 概述
      4.3.2 配置
      4.3.2.1 螺旋代理示例
      4.3.3 记录的数据
    5. 依赖
      5.1 Kamailio 模块
      5.2 外部库或应用程序
    6. 参数
      6.1 early_media (整数)
      6.2 failed_transaction_flag (整数)
      6.3 failed_filter (字符串)
      6.4 report_ack (整数)
      6.5 report_cancels (整数)
      6.6 detect_direction (整数)
      6.7 acc_prepare_flag (整数)
      6.8 acc_prepare_always (整数)
      6.9 acc_extra_nullable (整数)
      6.10 multi_leg_info (字符串)
      6.11 log_flag (整数)
      6.12 log_missed_flag (整数)
      6.13 log_level (整数)
      6.14 log_facility (字符串)
      6.15 log_extra (字符串)
      6.16 db_flag (整数)
      6.17 db_missed_flag (整数)
      6.18 db_table_acc (字符串)
      6.19 db_table_missed_calls (字符串)
      6.20 db_url (字符串)
      6.21 acc_method_column (字符串)
      6.22 acc_from_tag_column (字符串)
      6.23 acc_to_tag_column (字符串)
      6.24 acc_callid_column (字符串)
      6.25 acc_sip_code_column (字符串)
      6.26 acc_sip_reason_column (字符串)
      6.27 acc_time_column (字符串)
      6.28 db_extra (字符串)
      6.29 db_insert_mode (整数)
      6.30 cdr_enable (整数)
      6.31 cdr_skip (字符串)
      6.32 cdr_expired_dlg_enable (整数)
      6.33 cdr_start_on_confirmed (整数)
      6.34 cdr_facility (整数)
      6.35 cdr_extra (字符串)
      6.36 cdr_extra_nullable (整数)
      6.37 cdr_start_id (字符串)
      6.38 cdr_end_id (字符串)
      6.39 cdr_duration_id (字符串)
      6.40 cdr_log_enable (整数)
      6.41 cdrs_table (字符串)
      6.42 time_mode (整数)
      6.43 time_attr (字符串)
      6.44 time_exten (字符串)
      6.45 time_format (字符串)
      6.46 reason_from_hf (整数)
      6.47 clone_msg (整数)
      6.48 cdr_on_failed (整数)
      6.49 acc_extra_size (整数)
      6.50 cdr_extra_size (整数)
    7. 函数
      7.1 acc_log_request(comment)
      7.2 acc_db_request(comment, table)
      7.3 acc_request(comment, table)
  2. 常见问题

1. 概述

ACC 模块用于将事务信息记录到不同的后端,如 syslog 和 SQL。通过单独的模块 acc_radius 可以启用对 RADIUS 的支持。

acc_diameter 模块中提供了对 Diameter 协议的早期支持,但未与当前 Diameter 协议保持同步。如果需要 Diameter 支持,请使用 ims_charging 模块。

要为事务计费并选择使用哪一组后端,脚本编写者只需设置一些标志(参见模块参数部分的标志定义)。如果为特定后端设置了计费标志,ACC 模块将在事务完成时报告。模块的典型用法不需要特定的脚本命令——功能通过事务处理隐式绑定。脚本编写者只需使用适当的 setflag 标记事务以进行计费。即使如此,模块仍允许脚本编写者通过某些脚本函数在特殊情况下强制计费。

默认情况下,计费模块会记录事务的一组固定属性。如果要通过添加更多信息来自定义计费,请参阅下一章关于额外计费的内容。

固定的最小计费信息包括:

  • 请求方法名称
  • From 头的 TAG 参数
  • To 头的 TAG 参数
  • Call-Id
  • 最终回复的 3 位状态码
  • 最终回复的原因短语
  • 事务完成时的时间戳

如果请求中不存在某个值,则记录为空字符串。

注意:

  • 单个 INVITE 可能会生成多个计费报告——这是由于 SIP 的分叉特性。
  • 所有与计费相关的标志都需要在请求处理路由中设置——只有“missed-call”标志可以从其他类型的路由中切换。
  • 如果 UA 在通话中途失败,代理将永远不会发现。通常,更好的做法是从终端设备(如 PSTN 网关)进行计费,因为它最了解呼叫状态(包括媒体状态和 PSTN 状态)。然而,基于 CDR 的日志记录可以选择记录来自过期对话的现有信息(cdr_extra 中的 dlg_vars)。请参阅 cdr_expired_dlg_enable 参数。

SQL 后端支持已编译到模块中。

1.1 通用示例
loadmodule "modules/acc/acc.so"
modparam("acc", "log_level", 1)
modparam("acc", "log_flag", 1)

if (uri=~"sip:+40") { /* 呼叫罗马尼亚 */
    if (!proxy_authorize("sip_domain.net", "subscriber")) {
        proxy_challenge("sip_domain.net", "0");
        exit;
    }

    if (method=="INVITE" && !check_from()) {
        log("from!=digest\n");
        sl_send_reply("403","Forbidden");
    }

    setflag(1); /* 设置计费标志 */
    t_relay();  /* 进入有状态模式 */
};

2. 额外计费

2.1 概述

除了静态的默认信息外,ACC 模块还允许动态选择要记录的额外信息。这允许您记录任何伪变量(AVP、请求的部分等)。

2.2 定义与语法

通过 xxx_extra 参数选择额外信息,指定要记录的附加信息的名称。这些信息通过伪变量定义,可能包括头、AVP 值或其他消息或系统值。参数语法为:

xxx_extra = extra_definition (';'extra_definition)*
extra_definition = log_name '=' pseudo_variable

支持的伪变量列表可在 Kamailio 文档 中找到。

2.3 工作原理

某些伪变量可能返回多个值(如头或 AVP)。在这种情况下,返回的值将以逗号分隔的格式嵌入单个字符串中。


3. 多呼叫腿计费

3.1 概述

由于转发操作,SIP 呼叫可能具有多个腿。例如,用户 A 呼叫用户 B,用户 B 将呼叫转发给用户 C。只有一个 SIP 呼叫,但有两条腿(A 到 B 和 B 到 C)。记录呼叫腿对于正确计费是必要的。

3.2 配置

通过一组 AVP 为每个呼叫腿存储一组值。脚本编写者必须确保正确插入这些 AVP。

3.3 记录的数据

对于每个呼叫,所有 AVP 集的值将被记录。记录方式取决于数据后端:

  • syslog:所有腿集将作为一个记录字符串添加。
  • 数据库:每个腿集将单独记录。
  • RADIUS:所有腿集将添加到同一 RADIUS 计费消息中。

4. 呼叫数据记录生成

4.1 概述

除了基于事务的日志记录外,还可以直接从 Kamailio 生成和记录呼叫数据记录(CDR)。CDR 记录依赖于对话框模块。

4.2 CDR 额外信息

类似于事务额外信息,CDR 额外信息通过 cdr_extra 参数定义。

4.3 多呼叫腿的 CDR

与普通计费不同,CDR 日志记录使用对话框而不是事务来记录数据。


5. 依赖

5.1 Kamailio 模块

该模块依赖于以下模块:

  • tm:事务管理器
  • 数据库模块:如果使用 SQL 支持
  • rr:记录路由,如果启用了 detect_direction 参数
  • dialog:对话框,如果启用了 cdr_enable 参数
5.2 外部库或应用程序

无。


6. 参数

6.1 early_media (整数)

是否应记录早期媒体(任何带有正文的临时回复)?
默认值为 0(否)。

6.2 failed_transaction_flag (整数)

事务失败时(SIP 状态码 >= 300)是否应记录事务的标志。
默认值为未设置(无标志)。

6.3 failed_filter (字符串)

失败响应代码的字符串(300 到 999),用逗号分隔。即使设置了 failed_transaction_flag,如果响应代码在列表中,失败事务也不会被记录。
默认值为未设置(无过滤)。

6.4 report_ack (整数)

是否尝试记录端到端的 ACK?
默认值为 0(否)。

6.5 report_cancels (整数)

是否显式记录 CANCEL 事务?
默认值为 0(否)。

6.6 detect_direction (整数)

控制顺序请求的方向检测。
默认值为 0(禁用)。

6.7 acc_prepare_flag (整数)

事务标志,指示是否可以在稍后计费。
默认值为未设置(无标志)。

6.8 acc_prepare_always (整数)

是否始终准备所有请求以标记事务稍后计费。
默认值为未设置。

6.9 acc_extra_nullable (整数)

如果设置为 1,数据库额外字段在未定义或为 $null 时设置为 NULL。
默认值为 0。

6.10 multi_leg_info (字符串)

定义用于每条呼叫腿计费的 AVP 集。
默认值为 0(禁用)。

6.11 log_flag (整数)

请求标志,用于通过 syslog 记录事务。
默认值为未设置(无标志)。

6.12 log_missed_flag (整数)

请求标志,用于通过 syslog 记录未接呼叫。
默认值为未设置(无标志)。

6.13 log_level (整数)

记录计费消息的日志级别。
默认值为 1(L_NOTICE)。

6.14 log_facility (字符串)

记录计费消息的日志设施。
默认值为 LOG_DAEMON。

6.15 log_extra (字符串)

要记录的额外值。
默认值为 NULL。

6.16 db_flag (整数)

请求标志,用于通过数据库记录事务。
默认值为未设置(无标志)。

6.17 db_missed_flag (整数)

请求标志,用于通过数据库记录未接呼叫。
默认值为未设置(无标志)。

6.18 db_table_acc (字符串)

成功呼叫的计费表名。
默认值为 “acc”。

6.19 db_table_missed_calls (字符串)

未接呼叫的计费表名。
默认值为 “missed_calls”。

6.20 db_url (字符串)

SQL 地址。
默认值为 NULL(SQL 禁用)。

6.21 acc_method_column (字符串)

存储请求方法名称的列名。
默认值为 “method”。

6.22 acc_from_tag_column (字符串)

存储 From 头 TAG 参数的列名。
默认值为 “from_tag”。

6.23 acc_to_tag_column (字符串)

存储 To 头 TAG 参数的列名。
默认值为 “to_tag”。

6.24 acc_callid_column (字符串)

存储 Callid 值的列名。
默认值为 “callid”。

6.25 acc_sip_code_column (字符串)

存储最终回复状态码的列名。
默认值为 “sip_code”。

6.26 acc_sip_reason_column (字符串)

存储最终回复原因短语的列名。
默认值为 “sip_reason”。

6.27 acc_time_column (字符串)

存储事务完成时间戳的列名。
默认值为 “time”。

6.28 db_extra (字符串)

要记录到数据库的额外值。
默认值为 NULL。

6.29 db_insert_mode (整数)

如果设置为 1,使用 INSERT DELAYED 添加记录。
默认值为 0。

6.30 cdr_enable (整数)

启用 CDR 报告。
默认值为 0(禁用)。

6.31 cdr_skip (字符串)

跳过具有此 dlg_var 设置的对话框的 CDR 生成。
默认值为 NULL。

6.32 cdr_expired_dlg_enable (整数)

是否在对话框过期时启用 CDR 日志记录?
默认值为 0(禁用)。

6.33 cdr_start_on_confirmed (整数)

是否从对话框确认时开始计时?
默认值为 0(从对话框创建时开始)。

6.34 cdr_facility (整数)

CDR 消息的日志设施。
默认值为 LOG_DAEMON。

6.35 cdr_extra (字符串)

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

6.36 cdr_extra_nullable (整数)

自定义 CDR 字段是否可以为 NULL?
默认值为 0。

6.37 cdr_start_id (字符串)

修改用于存储开始时间的 ID。
默认值为 “start_time”。

6.38 cdr_end_id (字符串)

修改用于存储结束时间的 ID。
默认值为 “end_time”。

6.39 cdr_duration_id (字符串)

修改用于存储持续时间的 ID。
默认值为 “duration”。

6.40 cdr_log_enable (整数)

控制是否将 CDR 记录写入 syslog。
默认值为 1(启用)。

6.41 cdrs_table (字符串)

存储对话框 CDR 的数据库表名。
默认值为 “”(无数据库存储)。

6.42 time_mode (整数)

存储与事件时间相关的额外值。
默认值为 0。

6.43 time_attr (字符串)

存储事件时间的 syslog 属性或数据库列名。
默认值为未设置。

6.44 time_exten (字符串)

存储事件时间的扩展值的 syslog 属性或数据库列名。
默认值为未设置。

6.45 time_format (字符串)

指定时间格式。
默认值为 “%Y-%m-%d %H:%M:%S”。

6.46 reason_from_hf (整数)

从何处获取 sip_reason。
默认值为 0(从状态行获取)。

6.47 clone_msg (整数)

是否克隆请求结构以避免并发访问。
默认值为 1。

6.48 cdr_on_failed (整数)

是否存储失败对话框的 CDR?
默认值为 1。

6.49 acc_extra_size (整数)

设置计费记录中额外属性的最大数量。
默认值为 64。

6.50 cdr_extra_size (整数)

设置 CDR 中额外属性的最大数量。
默认值为 64。


7. 函数

7.1 acc_log_request(comment)

报告请求,例如用于报告未接呼叫。
参数:

  • comment:要附加的注释,可以包含伪变量。
7.2 acc_db_request(comment, table)

将请求报告发送到数据库。
参数:

  • comment:要附加的注释,可以包含伪变量。
  • table:要使用的数据库表。
7.3 acc_request(comment, table)

将计费记录写入 LOG 和 DATABASE 后端。
参数:

  • comment:用于生成 SIP 响应代码和文本字段的注释。
  • table:要使用的数据库表。

2. 常见问题

2.1 旧的 log_fmt 参数发生了什么?

该参数已被废弃,由额外计费功能取代。

2.2 旧的 multi_leg_enabled 参数发生了什么?

该参数已被 multi_leg_info 参数取代。

2.3 旧的 src_leg_avp_id 和 dst_leg_avp_id 参数发生了什么?

这些参数已被 multi_leg_info 参数取代。

2.4 在哪里可以找到更多关于 Kamailio 的信息?

请访问 Kamailio 官方网站。

2.5 在哪里可以发布关于此模块的问题?

请查看我们的邮件列表:

  • 用户邮件列表:[sr-users@lists.kamailio.org](https://lists.kamailio.org/mailman3/postorius

http://www.kler.cn/a/528956.html

相关文章:

  • C++实现状态模式
  • 代码随想录34 动态规划
  • 洛谷 P10288 [GESP样题 八级] 区间 C++ 完整题解(STL二分法)
  • jinfo命令详解
  • 【自学笔记】计算机网络的重点知识点-持续更新
  • ICSE‘25 LLM Assistance for Memory Safety
  • 996引擎 -地图-设置出生地
  • 在LINUX机器上 在线安装DeepSeek R1与测试
  • 【Pandas】pandas Series kurt
  • VLN视觉语言导航基础
  • (9)下:学习与验证 linux 里的 epoll 对象里的 EPOLLIN、 EPOLLHUP 与 EPOLLRDHUP 的不同。小例子的实验
  • happytime
  • (即插即用模块-特征处理部分) 二十、(TPAMI 2022) Permute-MLP 置换MLP模块
  • LeetCode题练习与总结:种花问题--605
  • C基础寒假练习(6)
  • 【数据采集】案例01:基于Scrapy采集豆瓣电影Top250的详细数据
  • 解决istoreos无法拉取青龙镜像
  • Java小白入门教程:HashSet
  • ZZNUOJ(C/C++)基础练习1031——1040(详解版)
  • 【JAVA】循环语句
  • 工作中使用到的单词(软件开发)_第一、二、三版汇总
  • TensorFlow 示例摄氏度到华氏度的转换(一)
  • 作者新游戏1.0
  • Linux中 端口被占用如何解决
  • rust跨平台调用动态库
  • 设计模式Python版 组合模式