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 通用示例 - 额外计费
2.1 概述
2.2 定义与语法
2.3 工作原理 - 多呼叫腿计费
3.1 概述
3.2 配置
3.3 记录的数据 - 呼叫数据记录生成
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.1 Kamailio 模块
5.2 外部库或应用程序 - 参数
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.1 acc_log_request(comment)
7.2 acc_db_request(comment, table)
7.3 acc_request(comment, table)
- 概述
- 常见问题
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