问题标签 [asternet]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2145 浏览

c# - 如何从我刚刚发起的呼叫中获取 UniqueId 和 Channel Name?

我正在尝试从 Asterisk.Net 的旧副本升级到最新版本的 AsterNet。我们曾经使用 AsteriskManager.OriginateCall() 发起调用,它返回一个 Call 对象。该调用对象有一个 UniqueId 和 ChannelName。

现在我使用 SendAction() 发起呼叫并向其发送 OriginateAction。所以我的第一个问题是:这是正确的做法吗?因为在我得到的结果中,UniqueId 为空并且它没有 ChannelName。我认为频道名称可能在一个属性中,但 Attributes 也是空的。

那么如何获取我刚刚发起的呼叫的频道名称和唯一 ID?

0 投票
1 回答
2046 浏览

c# - 通过 AsterNET 管理 VoIP 呼叫

我是 VoIP 编程的新手。假设我有两部 VoIP 电话连接到同一台服务器,我想检测通话何时触发、来电显示、通话时长等。我了解了 AsterNET,但没有找到任何好的示例来查看过程。

我知道我需要使用 ManagerConnection 连接到我的服务器,但是我不知道该怎么做。

我将不胜感激任何想法,建议,教程等...

谢谢。

0 投票
1 回答
4995 浏览

c# - 在 C# 中使用 AsterNET 发起 VoIP 呼叫

我试着做

其中 201 和 401 分机连接到我的本地网络。我正在尝试从 201 拨打 401。我做错了什么?

编辑:

  1. 我有一个带有“呼叫”按钮的测试应用程序
  2. 我有 2 个分机连接到我的服务器 - 201、401
  3. 我想在“呼叫”按钮单击时从 201 呼叫 401

我随机选择的频道名称我什至不确定我是否正确。

更新:

```

```

这样401接到201的来电,在接电话的时候,有声音告诉201正在接电话,然后是嘟嘟声。BUT 201其实是不接电话的,因为接201的电话管时,并没有接401。

0 投票
0 回答
428 浏览

c# - 某些东西在 Windows 服务中托管的 WCF 服务中处理 NetworkStream

我有 WCF 单实例服务,它使用AsterNET库和自定义 Windows 服务中的主机。当任何客户端连接到 WCF 服务并尝试通过 AsterNET AMI 向星号发送任何命令时,我收到异常:

如果我在控制台应用程序中托管相同的 WCF dll,所有工作都没有任何问题。那么,任何人都知道,什么处理 NetworkStream 以及如何解决这个问题?

WindowsService WCF 主机代码:

WCF 服务的某些部分:

0 投票
1 回答
1926 浏览

c# - 如何在 AsterNet 中输入手机号码为 exten

在我挂断内部固定电话后,我试图拨打一个手机号码,但它不起作用,我不知道发生了什么......这是我正在尝试使用的代码,但它不工作。固定电话正常调用,但手机不...

0 投票
1 回答
4341 浏览

asterisk - Asterisk 执行异步 AGI


我正在编写与 Asterisk 服务器集成的简单弹出应用程序。我们的测试环境基于我们配置了一些 SIP 中继的 FreePBX。测试在两个分机 3000 和 3001 之间进行。

3000、3001等分机由SIP客户端(microsip)控制,用于测试目的,以后可能会变成其他一些sip客户端或软电话。

我需要的是,一旦有人拨打分机 3000,接线员就可以使用常规的 SIP 客户端接听电话,而我的应用程序会显示一些有关呼叫的信息。我能够使用 AMI 实现这一目标。现在我想在我的应用程序中添加一个按钮,让我可以将呼叫置于保持状态。我知道,AMI 没有公开这样的功能,所以我正在尝试使用 Async AGI。(顺便说一句,我正在使用 asternet 与星号通信)

完成后我会收到回复

我想知道这意味着什么?

此外,我一直在尝试通过 CLI 启动“MusicOnHold”命令,并且得到了响应

我确实尝试在拨号计划(extensions.conf)中添加类似的东西:

这将删除“通道 XXXXX 不受 AGI 控制”错误,但仍然留下“无法将 AGI 命令添加到通道 SIP/3000-00000003 队列”错误。最糟糕的是,一旦我有了这个拨号计划,我的 sip 客户端就停止接听电话,尽管 AMI 仍然能够捕捉到它。

我想知道实现我想要的正确方法是什么?我对星号完全陌生,也许我缺少基本概念,所以我真的很感激很好的例子。谢谢你。

0 投票
1 回答
1870 浏览

c# - Asternet AMI 发送命令 c#

请告诉我如何通过 asternet (c#) 发送命令(例如:sip show peers)。任何帮助或链接将不胜感激。

喜欢:

0 投票
1 回答
256 浏览

c# - Asternet AGI GeneralMappingStrategy 使用 XML

我正在尝试将 XML 用于 Asternet 中的 GeneralMappingStrategy。我的程序使用 List 可以正常工作

如:

但我宁愿让它读取一个 XML 文件,因为它在文档中说它可以做,但是它似乎没有在任何地方说明需要 XML 格式。

我试过了:

使用我的 XML 作为:

作为一个完整的猜测,似乎是有道理的,但这不会编译,我得到以下错误:

System.InvalidOperationException: '有一个错误反映类型'System.Collections.Generic.List`1[AsterNET.FastAGI.MappingStrategies.ScriptMapping]'。'

有谁碰巧知道该怎么做?

0 投票
1 回答
1561 浏览

asterisk - 使用 Asterisk AGI 使用 Originate 和控制呼叫双方进行出站呼叫

我正在使用 Asterisk AGI 构建一个非常复杂的 IVR。我正在使用 AsterNET .NET 框架来集成到 FastAGI。

大多数脚本工作正常,我遇到的问题是进行出站呼叫。IVR 应用程序将处理进入拨号方案的入站呼叫,拨号方案将其发送到 AGI 来完成工作。AGI 脚本会做很多事情、数据库查找、多层菜单等,然后还会对号码进行外拨以连接入站呼叫者。显然,我可以在 AGI 中使用 Dial 应用程序,例如:

确实我可以,而且效果很好。但是,我需要对呼叫的出站端进行更多控制。例如,我需要保持呼入振铃或播放音乐,而呼出应答和我向呼出播放音频。同样,我知道我可以使用 Dial,但是,我需要在呼叫的出站端播放音频,并允许他们使用 DTMF 接听或拒绝呼叫,而 Dial 不这样做。如果他们拒绝呼叫,呼出停止并返回呼入脚本执行其他操作,可能拨打不同的号码,或执行其他操作,如语音邮件。

因此,我考虑使用 Originate 代替,并将其传递回另一个 AGI 脚本,例如:

这又是一种工作。入站等待一段时间,而出站方回答,然后出站方执行脚本中的任何操作,然后入站遵循它的脚本 - 分开。那么我需要将它们连接在一起,所以我当然使用 Bridge !!!但是我似乎不知道另一个通道是什么将它们都加入在一起,并且我有一个问题是我如何通知我的入站分支出站的状态是什么,好像我不这样做一样出站分支回答我的入站分支继续执行,而我需要它等待出站已回答并正在从目的地请求 dtmf。我想我也许可以轮询一个数据库,但是每个脚本都必须以某种方式再次被引用。

我还尝试通过入站通道发送到出站脚本,例如:

但我无法显示 Channel 变量,因为我无法在 Originate Exec 上为 arg2 获得多个参数,它只是将其视为 arg3,如果类型为 app,则将其忽略。

也许我是从错误的角度来看这个的,所以我很感激任何关于如何做到这一点的想法。我不能只使用扩展来构建它,因为它太复杂了,它会同时接收许多调用,所有调用都使用相同的脚本,但同时调用不同的目的地等,而且都是动态的。

谢谢

大卫

0 投票
1 回答
259 浏览

asterisk - 如何防止或捕获来自 AsterNet 的“无法运行:套接字为空”?

使用 AsterNet 连接到 Asterisk,我看到了以下内容:

您可以在 ManagerReader.cs 的第 197 行的 AsterNet 代码中看到引发此异常的行。看起来当 connect()(在 ManagerConnection.cs 中)启动一个新线程时会发生这种情况,但在 ManagerReader.cs 中 mrSocket 不知何故为空. 但是这个异常是从那个新线程中抛出的,所以我无法捕获它并处理错误。它只是让我的应用程序崩溃。

所以我有两个问题。首先,如何防止这种情况发生?我在连接或重新连接的方式上做错了吗?其次,是否有可能以某种方式捕获它并再次尝试连接?