标签: asteriskami

使用C#和Aster.NET可靠地识别和跟踪Asterisk调用

我一直在使用C#构建WinForms桌面应用程序,该应用程序使用Aster.NET(以前/从Asterisk.NET分叉)与Asterisk交互。我们确实无法可靠地识别和跟踪与单个分机/用户相关的呼叫。

我们遇到的问题是由于Asterisk触发/触发的事件具有不可预测/模糊的性质,它们的变化很大,具体取决于呼叫到达分机之前路由的方式。

例如,在以下情况下,事件顺序/格式是不同的:呼叫在被盲目转移之前命中了IVR;如果呼叫在被转移前打到IVR;如果呼叫直接转到用户的分机。

Asterisk使用不同的唯一ID跟踪呼叫的每一端的方式(例如,呼叫的传入端具有与呼叫的接收端不同的UID),这进一步受到阻碍。尽管我们设法在(随后很丑陋!)代码中对此进行了说明,但在考虑该呼叫可以采用的不同路由路径方面仍然遇到了问题。

因此,我正在寻找有关如何执行以下操作的建议:

  1. 可靠地识别用户分机的来电
    • 我们需要能够识别被呼叫的分机和始发呼叫者的ID(在盲目或有人转接以及从外部直接呼叫之后)
    • 可靠地跟踪该来电的唯一ID,因为它用于链接到通话记录
  2. 可靠地识别用户分机的去电
    • 请牢记与上述相同的注意事项

就目前而言,我们拥有极其复杂的事件处理程序链,这些事件处理程序根据应用程序的“当前状态”进行不同的操作。

举一个例子:如果我们检测NewStateEvent与ChannelState 6的(“上”),我们检查是否有过程正在进行的呼叫那的UID匹配,如果是的话,那么当前呼叫已被应答。如果UID不匹配,但其他因素匹配(例如,通道,connectedlinenum等),则我们将其视为呼叫的“另一端”(即接收方或传入方)。

我不确定问题是出在API还是AMI上-但是无论是什么原因,这都使我们有些头疼。

任何建议,不胜感激。

c# asterisk asteriskami

5
推荐指数
1
解决办法
2804
查看次数

如何从Asterisk REST API(ARI)获取所有拨号事件?

我正在制作一个应该能够监控我的Asterisk服务器上的呼叫的Web应用程序.我可以使用URL上的Javascript WebSocket连接到ARI ws://(host):8088/ari/events?app=dialer并且它可以工作.问题是我只从通过ARI进行的呼叫中获取事件.来自Zoiper等其他客户的电话未注册.在另一方面,Asterisk有AJAM它采用长轮询上http://(host):8088/rawman?action=waitevent和它注册的所有客户端,(ARI,Zoiper和其他人)电话,但这里只有信息在呼叫(主叫),没有(被叫).

所以,我的问题是,如何从所有客户端(最好)使用WebSockets获取实时调用事件,以显示谁在调用谁.谢谢.

voip asterisk asteriskami

4
推荐指数
2
解决办法
1万
查看次数

星号AMI - 接听电话

我想使用AMI在Asterisk中接听电话.我可以发起电话,但完全不知道,如何接听电话......打电话的脚本:

#login
sock = socket.socket(af, socktype, proto)
sock.connect(sockaddr)
sock.send('Action: login\r\n')
sock.send('Events: off\r\n')
sock.send('Username: '+str(ast_server.login)+'\r\n')
sock.send('Secret: '+str(ast_server.password)+'\r\n\r\n')

#originate call
sock.send('Action: originate\r\n')
sock.send('Channel: ' + str(user.asterisk_chan_type) + '/' + str(user.internal_number)+'\r\n')
sock.send('Timeout: '+str(ast_server.wait_time*1000)+'\r\n')
sock.send('CallerId: '+str(user.callerid)+'\r\n')
sock.send('Exten: '+str(ast_number)+'\r\n')
sock.send('Context: '+str(ast_server.context)+'\r\n')
if ast_server.alert_info and user.asterisk_chan_type == 'SIP':
    sock.send('Variable: SIPAddHeader=Alert-Info: '+str(ast_server.alert_info)+'\r\n')
sock.send('Priority: '+str(ast_server.extension_priority)+'\r\n\r\n')

#logout
sock.send('Action: Logoff\r\n\r\n')
time.sleep(1)
sock.close()
Run Code Online (Sandbox Code Playgroud)

我需要类似的东西,但是要接听电话.在*CLI> manager show命令中找不到任何有用的命令

打瞌睡,plox

asterisk pbx trixbox asteriskami

3
推荐指数
1
解决办法
6888
查看次数

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

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

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

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

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

asterisk sip asteriskami

2
推荐指数
1
解决办法
1万
查看次数

在Asterisk Manager Interface脚本中使用send_action的Action =>'ping'是什么意思?

我已经开始阅读有关Asterisk :: AMI模块的内容.在该模块中,如果我们要将操作发送到AMI服务器,我们需要使用send_action方法使用Action with action name.在那个模块中,他们提到了send_action方法中的Action =>'Ping'.这里有什么用于Action =>'Ping'.任何人都可以解释一下.

    send_action({   Action => 'Ping',
                    CALLBACK => \&method,
               });
Run Code Online (Sandbox Code Playgroud)

提前致谢.

asterisk asteriskami

1
推荐指数
1
解决办法
2231
查看次数

星号 - 在上下文中减少 extensions.conf 中的扩展重复

我有一个非常基本的 extensions.conf,内容如下context

[LocalPhones]

exten => 1001,1,noop(Dialing ${PEX_ONE})
        same => n,Macro(DialStartMonitor,${PEX_ONE})
        same => n,Dial(SIP/${PEX_ONE},30,mTt)
        same => n,Playback(vm-nobodyavail)      ; Play "no one's available"
        same => n,Hangup()

exten => 1002,1,noop(Dialing ${PEX_TWO})
        same => n,Macro(DialStartMonitor,${PEX_TWO})
        same => n,Dial(SIP/${PEX_TWO},30,mTt)
        same => n,Playback(vm-nobodyavail)      ; Play "no one's available"
        same => n,Hangup()

exten => 1003,1,noop(Dialing ${PEX_THREE})
        same => n,Macro(DialStartMonitor,${PEX_THREE})
        same => n,Dial(SIP/${PEX_THREE},30,mTt)
        same => n,Playback(vm-nobodyavail)      ; Play "no one's available"
        same => n,Hangup()

exten => 1004,1,Dial(Dialing ${PEX_FOUR})
        same => n,Macro(DialStartMonitor,${PEX_FOUR})
        same => n,Dial(SIP/${PEX_FOUR},10,m)
        same => …
Run Code Online (Sandbox Code Playgroud)

voip telephony asterisk sip asteriskami

1
推荐指数
1
解决办法
2195
查看次数

标签 统计

asterisk ×6

asteriskami ×6

sip ×2

voip ×2

c# ×1

pbx ×1

telephony ×1

trixbox ×1