所以,我开始玩Asterisk Restful Interface(ARI).
我创建了一个单独的快速应用程序来执行此操作.
我有一个正确配置的Asterisk 13运行实例.我知道这一点因为当我进入https://192.168.46.122:8088/ari/sounds浏览器时,系统会提示我输入用户名和密码,输入后会返回一个有效的JSON对象,其中包含预期的数据...
[
{
"id": "conf-now-unmuted",
"text": "The conference is now unmuted.",
"formats": [
{
"language": "en",
"format": "gsm"
}
]
},
{
"id": "vm-nomore",
"text": "No more messages.",
"formats": [
{
"language": "en",
"format": "gsm"
}
]
},
{
"id": "vm-review",
"text": "press 1 to accept this recording press 2 to listen to it press 3 to rerecord your message",
"formats": [
{
"language": "en",
"format": "gsm"
}
]
},
{
"id": "demo-echodone", …Run Code Online (Sandbox Code Playgroud) 将来电直接传递给 Stasis,并允许应用程序决定是向来电者播放振铃音还是忙音。
使用我的 ARI 应用程序,如果我same => n,Ringing从拨号计划中省略该行,如果呼叫方挂断,Stasis 应用程序将返回错误。我可以在没有任何早期媒体的情况下挂断电话,直到我通过channel.play()ARI传递命令。
这个解决方案有两个问题:
Channel not found错误。channel.busy有没有人有什么建议?
我目前能看到的唯一选择是确保所有用户都有语音邮件,并且永远不会播放忙音。不是每个人都想要/喜欢语音邮件,而且在来电者不知道他们的电话已接通的情况下接听电话并播放忙音是不道德的。
使用以下拨号计划,我可以让它以所需的方式工作(如果用户不可用,则向用户播放),但出现错误:
[public]
exten => _.,1,NoOp()
same => n,Stasis(myStasisApp, ${SIP_HEADER(to)})
same => n,Busy(10)
same => n,Hangup()
Run Code Online (Sandbox Code Playgroud)
// The user is available
channel.ring();
// The user is busy
channel.continueInDialplan();
Run Code Online (Sandbox Code Playgroud)
呼叫方挂机时发送另一个 StasisStart,其后是:
Unhandled rejection Error: {
"message": "Channel not found"
}
Run Code Online (Sandbox Code Playgroud)