背景
acc
模块用来记录会话信息到syslog
或者数据库
中,最小的记录信息包括:
- 请求
method
- From 头的
tag
- To 头的
tag
Call-ID
- 响应的
code
- 响应的
reason
- 会话完成的
时间戳
官方文档地址: acc,本次测试的kamailio版本是:
version: kamailio 5.8.5 (x86_64/linux)
重要参数解析
|
|
重要函数
acc_log_request(comment)
主动上报请求到syslog,可以用在ANY_ROUTE
中
acc_db_request(comment, table)
主动上报请求到数据库,可以用在ANY_ROUTE
中
acc_request(comment, table)
主动上报请求到syslog和数据库,如果db_url
没有设置,那么就输出到日志.可以用在ANY_ROUTE
中
实战
输出到日志
官方的示例配置基本上都是输出到日志,这里做一些简单的修改。
配置文件
|
|
官方配置解析:
FLT_ACC
: 表示记录成功的请求,在第一次收到INVITE
请求和BYE
时设置。FLT_ACCMISSED
: 表示记录未接来电,在LOCATION
路由中设置。FLT_ACCFAILED
: 表示记录失败的请求,在BYE
请求时设置。
输出的结果
- 正常接通挂断
sip信令图:
日志输出内容:
|
|
可以看到acc_log_request
有INVITE
和BYE
两条记录,分别表示接通时
和挂断时
的信息。
- 被叫未接挂断
sip信令图:
日志输出内容:
|
|
acc_log_request
打印了被叫挂断
时的信息。
- 主叫CANCEL
sip信令图:
日志输出内容:
|
|
acc_log_request
打印了一些信息,method
是INVITE
,确认是487
这个响应产生的,也就是miss_calls
.
- 上报完整数据
配置放开:
|
|
- 被叫接通挂断:
sip 信令图:
日志输出内容:
|
|
可以看到有4个事件被记录了:
- 被叫坐席接通
200OK
ACK
- 主叫
BYE
时 - 打印
CDR
目前来看,180响铃
这个上报没生效。
- 主叫CANCEL:
sip 信令图:
日志输出内容:
|
|
CANCEL
这个事件上报没生效, 在request_route
中,添加以下代码:
|
|
日志输出内容:
|
|
可以看到CANCEL
事件上报生效了。
所以如果想上报CANCEL
,需要两个条件:
- report_cancels=1
- 主路由中在方法为
CANCEL
的地方,添加setflag(FLT_ACC)
输出到数据库
配置文件
|
|
目前因为是测试,所以输出到syslog
不去掉,在测试过程中会既打印日志又写数据库.
在运行之前,还要手动为表添加一些字段:
|
|
输出结果
- 被叫接通并挂断:
sip信令图:
acc
表记录:
acc_cdrs
表数据:
- 主叫
CANCEL
sip信令图:
acc
表记录:
miss_calls
表记录:
acc_cdrs
表数据:
总结
CANCEL
生效的条件有两个:report_cancels=1
和setflag(FLT_ACC)
- 使用数据库的话,总共要用到
acc
,miss_calls
,acc_cdrs
三张表。 180响铃
目前看是没记录的,183
也许可行,但是没测试过。ACK
也不是所有的都记录,200OK
的ACK
记录了。