如何在星号中记录呼叫(SIP)请求?

时间:2014-01-22 14:14:09

标签: sip asterisk asteriskami

是否可以将SIP请求记录到星号中的数据库?我对这些细节感兴趣:

  • 时间戳
  • SIP方法
  • 状态代码
  • 来源编号/扩展名
  • 目的地号码/分机号

我很确定可以将queue_log事件转换为SIP请求并从中获取上述信息。但是,由于并非所有呼叫都通过呼叫队列,因此该解决方案对我不起作用。

也许通过使用AMI可以实现?或者写自定义拨号方案?请分享您对此问题的看法。

4 个答案:

答案 0 :(得分:5)

无法做到这一点。

除非您启用了SIP调试,否则Asterisk不会记录sip消息。

如果您需要控制消息级别,请查看kamailio / opensips项目。

答案 1 :(得分:4)

我曾经为需要非常详尽的实时统计数据的客户工作。为了使一切正确,我们必须结合CDR,CEL和queue_logs。最后这是一个非常复杂的系统,但目前我们还没有看到另一种方法。好吧,我们做了,但这不可行。

您可以提出的最简单的问题之一是:谁(A)最终称为谁(B)和谁接听了电话(C)。如果您可以回答这个问题,您基本上可以回答哪个客户(A),调用可能反映客户兴趣的扩展(B)。要找出工作负载发生的位置,您必须具有最终扩展名(C)。

听起来很简单,根据客户的设置,这很难做到。如果您有出站呼叫的ISDN和入站(公司内)呼叫的SIP(星号/自由转发)等混合技术,您可能会发现甚至根本没有可用的呼叫详细记录。

即使对于入站SIP电话,我也可以告诉您,在某些情况下,找到正确的A,B,C扩展非常强硬!首先,你必须知道Asterisk内部知道两个所谓的“腿”,其中两条腿代表两个通道之间的桥梁(如果我错了,请纠正我)。我不是这里的专家,但认为它是两个相互交流的终点。在该术语中,没有“最初称为扩展B”。此外,CEL和CDR不会反映出这一点。 CDR中有“dst”和“src”字段,但实际上“频道”和“dstchannel”对您来说更有价值。 “dstchannel”有时看起来像“SIP / dialnumber @ foobar”,但仅当您的SIP帐户以某种方式与给定号码(extension = dialnumber)相关时。请注意,客户通常不关心扩展名或拨号号码之间的区别,但在SIP中您必须关心。

如果您使用自定义CDR变量,真正有用的是什么。配置星号以使用“custom_cdr”驱动程序进行CDR日志记录,并使用“custom_cel”进行CEL日志记录。然后,您可以在拨号方案中设置CDR变量,它们会自动写入CDR / CEL后端日志记录工具(例如ODBC)。

作为思考的最后一点:将A,B和C视为人。让A打电话B.让B暂停A并回答C,如果她可以接受由于她的经验。将呼叫从A< - > B转移到A< - > C(B挂断)。您认为从中获得了多少个CDR和多少个CEL?这些田地是如何填满的?在CDR中,这看起来像A一直与B交谈。只有通过查看CEL,您才会注意到有一个TRANSFER事件可以提示您。 (对不起,如果从我的记忆中,现在可能完全不同了。)

有了这个相当可怕的答案,我建议你花很长时间在需求工程上,而不是从asterisk和kamailio开始。询问客户希望用您的解决方案覆盖哪些用例。相信我,你不能涵盖一切。考虑使用灵活的数据格式来存储统计信息。想想基于文档的数据库,如MongoDB。

如果您想从纯Asterisk开始,您应该使用AMI。也许有一些自定义进程监听事件,聚合它们并通过缓存使它们可用,因此您不必查询AMI并将负载放在Asterisk上。

我希望这会有所帮助,但可能你正在努力实现完全不同的东西。 :)

玩得开心。

答案 2 :(得分:2)

你能清楚一件事吗?你只想要日志吗?如果是,请按照以下步骤进行操作,

  1. 打开sip.conf并生成sipdebug = yes以便在调试文件中记录sip消息
  2. 打开asterisk.conf并检查astlogdir。它会给你调试文件的位置。如果您愿意,可以更改位置。
  3. 打开logger.conf并在debug =>下添加任何日志类型的日志类型 例如debug =>通知,警告,错误,冗长,DTMF
  4. 重新启动星号进程以使此更改生效。
  5. 除此之外,如果我需要存储额外数据或者如果我想对调用执行某些操作,那么我使用自定义函数编写自己的拨号计划,并使用mysql数据库来存储我需要的数据。如果你想编写自己的应用程序,那么需要在你的系统上安装asterisk和asterisk-addon,并开始在asterisk-addon / apps dir下编写你自己的应用程序,并根据你的系统类型将共享库放在lib或lib64中。进行任何类型的更改后,请不要忘记重新启动星号。如果我能够清除您的疑问,请告诉我。

答案 3 :(得分:2)

让我们使用 asterisk -r

连接星号服务器

然后输入命令 sip set debug on 。您可以找到正在运行的日志和所有sip请求。