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

如何在asterisk中记录呼叫(SIP)请求?,sip,asterisk,asteriskami,Sip,Asterisk,Asteriskami,是否可以将SIP请求记录到星号中的数据库?我对这些细节感兴趣: 时间戳 SIP方法 状态码 来源号码/分机号码 目的地号码/分机 我非常确信,将队列日志事件转换为SIP请求并从中获取上述信息是可能的。但是,由于不是每个呼叫都经过呼叫队列,所以此解决方案不适用于我 也许可以通过使用AMI来实现?还是写自定义拨号计划?请分享您对这个问题的看法。没有办法 星号不会记录sip消息,除非已打开sip调试 如果您需要对消息级别进行控制,请查看kamailio/opensips项目。我曾经为一位要求非常详

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

  • 时间戳
  • SIP方法
  • 状态码
  • 来源号码/分机号码
  • 目的地号码/分机
我非常确信,将队列日志事件转换为SIP请求并从中获取上述信息是可能的。但是,由于不是每个呼叫都经过呼叫队列,所以此解决方案不适用于我

也许可以通过使用AMI来实现?还是写自定义拨号计划?请分享您对这个问题的看法。

没有办法

星号不会记录sip消息,除非已打开sip调试


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

我曾经为一位要求非常详尽的实时统计数据的客户工作。为了使一切正常,我们必须组合CDR、CEL和队列日志。最后,这是一个非常复杂的系统,但当时我们没有看到另一条路要走。好吧,我们做了,但不可行

你可以问的一个最简单的问题是:谁(A)给谁(B)打了电话,最后谁接了电话(C)。如果你能回答这个问题,你基本上可以回答哪个客户(A),打哪个分机(B),这可能反映了客户的兴趣。要找出工作负载发生的位置,您必须拥有最终扩展名(C)

这听起来很简单,但很难做到,这取决于客户的设置。如果您有混合技术,如ISDN用于出站呼叫,SIP(asterisk/freeswitch)用于入站(公司内)呼叫,您可能会发现甚至根本没有可用的呼叫详细信息记录

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

真正有帮助的是使用自定义CDR变量。将星号配置为使用“custom_cdr”驱动程序进行cdr日志记录,或者使用“custom_cel”进行cel日志记录。然后,您可以在拨号计划中设置CDR变量,这些变量将自动写入CDR/CEL后端日志记录设施(例如ODBC)

作为思考的最后一点:把A、B、C看作是人。让A给B打电话。让B把A挂断,然后向C询问,由于她的经验,她是否可以接任。将电话从AB转接到AC(B挂断)。你认为你能从中获得多少CDR和CEL?田地是怎么填满的?在CDR中,这看起来像是A一直在和B交谈。只有通过观察CEL,你才会注意到有一个转移事件给了你提示。(很抱歉,根据我的记忆,现在可能完全不同了)

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

如果您想从纯星号开始,您应该使用AMI。可能有一些自定义进程侦听事件,聚合它们并通过缓存使它们可用,这样您就不必查询AMI并将负载放在星号上

我希望这会有所帮助,但你可能正试图实现完全不同的目标。:)


玩得开心。

你能澄清一件事吗。你只想要日志吗?如果是,则按照以下步骤操作

  • 打开sip.conf并使sipdebug=yes,以便在调试文件中记录sip消息
  • 打开asterisk.conf并检查astlogdir。它将为您提供调试文件的位置。如果您愿意,您可以更改位置
  • 打开logger.conf并在debug=> e、 调试=>通知、警告、错误、详细、dtmf
  • 重新启动星号进程以使此更改生效

  • 除此之外,如果我需要存储额外的数据,或者如果我想对通话做些什么,那么我会使用自定义函数编写自己的拨号计划,并使用mysql数据库存储所需的数据。如果您想编写自己的应用程序,则需要在系统上安装asterisk和asterisk addon,并开始在asterisk addon/apps dir下编写自己的应用程序,并将共享库放在lib或lib64中,具体取决于您的系统类型。在进行任何类型的更改后,不要忘记重新启动asterisk。如果我能澄清您的疑问,请告诉我。

    让我们使用asterisk-r连接asterisk服务器。


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

    基本上,我想实时向客户提供他们的呼叫事件。解决方案已经完成,但我们当前的事件不包含关于分机的信息,该分机在接到来电时接听电话。您只能看到标准的外部编号。我们使用kamailio,但我有点害怕去那里,开始重写宏-不想造成我的雇主基础设施停机,因为我是一个完全的新手regardi