家庭盒子到 Trixbox

作者:Michael George

大约两年多前,我使用 Asterisk 和模拟接口卡构建了一个家庭电话系统。它为我们服务得很好,但现在是升级的时候了。自从首次构建该系统以来,在简化 Asterisk 配置方面取得了巨大进步。Asterisk@Home(现在称为 Trixbox)是一个系统,它可以使用基于 Web 的 GUI 为工作或家庭实现强大的电话系统。我决定为我的新电话系统使用 Trixbox,看看它是否具有实现当前系统所有功能的灵活性。本文讨论了我的新家庭电话系统的安装和配置。

我对新电话系统有几个目标。首要目标是能够从房屋的一部分呼叫到另一部分。其次,我想最大限度地减少烦人的电话推销电话,并将晚上 10 点后的电话直接转到语音邮件,而不是让电话响铃(除非是紧急电话)。因为我大部分时间都在家工作,所以我想拥有一个连接到办公室系统的 VoIP 分机。

组装和安装电话系统

在配置电话系统之前,您必须组装它并安装软件。虽然 Trixbox 使这变得相当容易,但我在此概述安装过程,以便那些想亲自尝试的人知道会发生什么。

首先要考虑的是此项目所需的硬件和软件。我已经有一台旧的备用计算机可以使用(一台 Pentium II 266MHz,配备 256MB 内存和 6GB 硬盘),但我还需要一块用于电话线的接口卡。当我第一次构建我当前的系统时,我购买了一块 Digium TDM31B,带有三个用于电话机(FXS)的端口和一个电话公司(FXO)端口,现在的价格约为 350 美元。从 Digium 购买有助于支持 Asterisk,因为它是该项目的主要支持者。最后一个要求是系统软件 Trixbox,可以从 www.trixbox.org 下载。

Digium 卡配置了 1-3 端口用于电话机,4 端口用于来电电话线。由于管理电话接口具有实时需求,因此最好将 Digium 设备保持在其自己的中断上,尤其是在像我这样的旧机器中。将卡隔离在其自己的中断上通常不是很困难——更改插槽并在 BIOS 中禁用不必要的设备通常可以解决问题。值得注意的是,由于这些接口卡的高中断率,不应运行许多其他具有高中断频率的设备或应用程序,尤其是不应运行 X11。

安装 Trixbox 软件

下载 Trixbox ISO 后,我将其刻录到 CD 上并从中启动系统。我看到了一个屏幕,告诉我继续操作将完全销毁硬盘上的任何数据。我愿意这样做,按回车键继续。安装过程要求我选择键盘类型和布局、时区和 root 密码。这些选择之间似乎有一些很长的停顿,但系统完成了安装并配置了引导加载程序。此时,在安装了基本系统并配置了网络后,它重新启动了。

恢复启动后,它检索了 Trixbox 软件本身,构建并安装了所有内容,并启动了另一次重新启动。重新启动后,它完成了 FreePBX 的安装并重新启动。这些重新启动起初有点令人不安,但到此时,整个系统已完全安装并运行。但是,它没有识别或配置我的 TDM 卡。

Trixbox 的主要功能之一是其可升级性,因此在对 TDM 配置感到恐慌之前,我决定先更新。以 root 身份登录后,我运行了trixbox-update.sh。两次。第一次运行更新了脚本本身,第二次更新了系统的其余部分。完成后,它告诉我重新启动系统。这一次,所有与 TDM 相关的模块都加载了,尽管只需要 wctdm 和 zaptel。卡被正确检测到,并且从命令行运行genzaptelconf正确配置了它。此时,Trixbox 系统已安装、更新且功能正常。

可以使用netconfig命令从命令行轻松配置网络。我可以将其保留为动态 IP 地址,因为我没有要连接的 VoIP 电话,但我的目的是从系统中移除键盘和监视器并远程管理它。如果我知道系统的内部网络地址,这样做会容易得多,所以我将其设置为静态地址并相应地配置了其余网络设置。我还通过修改 /etc/hosts 和 /etc/sysconfig/network 并重新启动来更改系统的主机名。

重新启动后,我打开一个浏览器窗口,并将其定向到我定义的静态地址。然后我看到了初始 Trixbox 屏幕,如图 1 所示。大多数配置都是通过 FreePBX 完成的,可以通过选择“系统管理”,在弹出窗口中输入 maint 用户名和上面的密码(图 2),然后选择 FreePBX 来找到 FreePBX。“FreePBX”非常模块化,这些模块仍然需要安装和激活,然后我才能对系统做任何事情。首先从顶部菜单中选择“工具”,然后从侧面选择“模块管理”,我就到了模块管理屏幕。然后我选择了“连接到在线模块仓库”链接以查看所有可用的模块。我选择了所有“本地模块”,然后单击表格底部的“提交”按钮。接下来,我下载并安装了除 Gabcast 和 Java SSH 之外的所有“在线模块”。

Home Box to Trixbox

图 1. Trixbox 网页已启动并运行

Home Box to Trixbox

图 2. 登录后的主菜单

图 3 中显示的最终模块集是一个非常全面的小型家庭系统功能集。此模块管理界面还会在每次连接到在线仓库时检查是否有任何模块更新可用。这些更新可以轻松下载和安装,以保持系统最新。

Home Box to Trixbox

图 3. Trixbox 中的模块设置

配置电话系统

在我下载、更新、安装和配置了所有必要的软件之后,电话系统已将其所有模块更新到最新状态,并准备好进行配置。从 FreePBX 浏览器窗口中,我从顶部菜单中选择“设置”(图 4)。左侧是与已加载的许多模块关联的菜单项。首先,我通过选择该菜单项更改了“常规设置”。FreePBX 界面的一个非常有用的功能是,屏幕上的许多项目都有与之关联的弹出窗口,为这些项目提供信息。我喜欢从“拨号命令选项”中删除 r 以仅在“适当的时候”为呼叫者生成回铃音,并在“拨号命令选项”中添加 w,在“呼出拨号命令选项”中添加 W,以允许我们的内部扩展在呼叫期间通过按 *1 来记录任一方向的呼叫。我也希望能够在需要时在分机之间转移呼出呼叫,所以我将 T 添加到呼出选项中。最后,我将响铃时间更改为 20 秒,以便我们有更多时间接听电话。图 5 显示了我们的“常规设置”的最终状态。

Home Box to Trixbox

图 4. FreePBX 浏览器窗口

Home Box to Trixbox

图 5. FreePBX 的常规设置

向系统添加中继线

系统的下一个添加是“中继线”,呼叫由此进入或离开系统。从左侧菜单中选择“中继线”将显示“添加中继线”屏幕(图 6)。中继线 ZAP/g0 在安装时创建,它指的是 Digium 接口卡上连接到电话公司的所有插槽。在我的情况下,只有插槽 4。我没有修改该中继线的默认配置(图 7)。可以设置“呼出主叫号码”,但我将其留给电话运营商设置。此中继线将用于通过我们系统的大多数呼叫。

Home Box to Trixbox

图 6. 使用 FreePBX 界面添加中继线

Home Box to Trixbox

图 7. 编辑 ZAP 中继线

我定义的另一个中继线是连接到办公室 PBX 的 IAX2 中继线,这样我就可以接收发送到我的工作分机的呼叫,并通过办公室帐户拨打电话。从“添加中继线”屏幕(图 6)开始,我选择了“添加 IAX2 中继线”,并填写了中继线的配置页面。图 8 和图 9 显示了该中继线的配置。“对等方详情”、“用户详情”和“注册字符串”已更改,以删除工作系统的 IP 地址和密码,但创建中继线时,所有这些设置默认都存在。通常只需要更改地址、用户名和密码。这里需要注意两点

  1. “用户上下文”设置应为服务提供商的帐户名称。

  2. 我已经将通过此中继线传入的呼叫的上下文更改为 custom-from-work 上下文,我将在本文后面介绍。

Home Box to Trixbox

图 8. 编辑 IAX2 中继线

Home Box to Trixbox

图 9. IAX2 中继线的配置

填写完所有参数后,我选择了“提交更改”按钮以创建中继线。然后,与对配置的所有更改一样,界面在屏幕顶部显示红色条,用于将更改提交到系统。定义了中继线后,现在有了一种使呼叫到达和离开系统的方式。

设置内部拨号

接下来,我需要为厨房、书房和办公室定义内部扩展。

从左侧菜单中选择“分机”后,我选择“添加 ZAP 分机”。我为我的办公室电话指定了分机号 22、显示名称“办公室”和通道 2。为其指定通道 2 意味着它已插入 Digium PCI 卡上的插槽 2。

然后,我在该通道上启用了语音邮件,并分配了所需的语音邮件密码。选择“提交”后,新通道将显示在右侧菜单中。当再次从菜单中选择它时,“设备选项”具有更多可以修改的参数,但默认值就足够了(图 10 和 11)。分配给通道 1 上厨房电话的分机 24 的配置类似(图 12 和 13),此分机上的语音邮件是家庭语音邮件箱。分配分机 23 和通道 3 的书房也类似,但语音邮件处于禁用状态(图 14)。这完成了系统上所有三个真实分机。

Home Box to Trixbox

图 10. 默认设备选项对于 ZAP 分机 22 来说足够了。

Home Box to Trixbox

图 11. 更多默认设备选项

Home Box to Trixbox

图 12. 厨房分机 24 的类似配置

Home Box to Trixbox

图 13. 分机 24 的更多默认设备选项

Home Box to Trixbox

图 14. 书房分机 23 将语音邮件保持禁用状态。

我还设计了一个伪分机,它将使整个房屋响铃,另一个只使厨房和书房电话响铃。我为此使用了“振铃组”。“振铃组”是一组彼此关联的分机,可以使用单个号码拨打,并且可以按特定顺序响铃。从左侧菜单中选择“振铃组”后,我为整个房屋定义了组号 20。我将所有三个真实分机都放入分机列表中,并将它们设置为同时响铃,这是策略 ringall(图 15)。

Home Box to Trixbox

图 15. 振铃组 20 将使整个房屋响铃。

我将响铃时间设置为 20 秒,与其他分机的超时时间相同,如果没有人接听,呼叫将转到家庭语音邮件箱 (24)。为房屋分机创建一个振铃组完全相同,但列表中只有分机 23 和 24(图 16)。这些振铃组可以从任何内部扩展或允许直接拨打分机的来电拨打。使用这些振铃组的一个好处是,在学年期间,我可以从振铃组中删除书房中的分机,这样该房间的人就不会在白天受到干扰。在夏天,我可以将该分机添加回组中。

Home Box to Trixbox

图 16. 从分机使整个房屋响铃

该系统有三个用于接收和拨打电话的设备,它们可以通过五个分机号码访问。

呼叫外部世界

虽然分机之间的呼叫当然很酷且有用,但仍然需要呼出系统。“呼出路由”弥合了这一差距。为了便于配置和更快地解析拨号号码,我将系统配置为所有通过电话公司拨出的号码都将以数字 9 开头。从左侧菜单中选择“呼出路由”,我为将呼出号码传递到 PSTN 中继线(即 ZAP/g0)定义了一个名为 9_outside 的路由(图 17)。

Home Box to Trixbox

图 17. 分别处理 9 用于外线和 911

ZAP/g0 是一个组,其中包含连接到电话公司的所有 ZAP 通道,这是 Trixbox 在安装时默认定义的。这些组类似于电话系统的寻线组概念:按顺序尝试通道,第一个可用的通道将被使用。

我 направляю 到此中继线的拨号模式是 911 和 9|.. 前一种模式表示当分机拨打 911 时,系统会在选定的中继线上拨打 911。后一种模式 (9|.) 匹配任何以 9 开头,后跟任意位数的数字的拨号号码。

然后,系统会删除 9,如竖线 (|) 所示,并将剩余的数字发送到中继线。我将 911 与其他以 9 开头的号码分开处理,因为我不希望任何人知道或记住在 911 前面加上 9 才能拨出(9911)。由于只有一个中继线用于拨出,并且呼出号码必须以 9 开头,因此呼出路由非常容易定义。

处理呼入呼叫

电话系统最复杂的部分是按照设计处理呼入呼叫。呼入呼叫需要配置三个部分:播放给呼叫者的音频消息、“数字接待员”菜单(也称为交互式语音应答 (IVR) 菜单)以及确定哪个“数字接待员”处理呼叫的“时间条件”。

为了保持系统简单,我只使用了两条外发消息。第一条消息标题为“夜晚”,内容是:“我们现在无法接听电话,请按 1 留言,如果这是紧急事件,请按 0 使所有电话响铃。”第二条消息标题为“工作日”,内容是:“感谢您致电。要使房屋响铃,请输入 21;要使办公室响铃,请输入 22;要使所有电话响铃,请输入 20 或保持在线。”使用这些脚本,我从左侧菜单中选择“系统录音”,然后选择“添加录音”以进入第一个屏幕(图 18)。可以直接上传 WAV 文件,但我使用分机直接录制到系统中。单击“开始”后,我看到了如图 19 所示的屏幕,其中包含录制消息的说明。在我满意地录制每条消息后,我为录音命名并单击“保存”。

Home Box to Trixbox

图 18. 从分机 22 设置外发录音。

Home Box to Trixbox

图 19. 设置录制消息的选项。

“数字接待员”只比三个菜单稍微复杂一些。我通过在右侧菜单顶部选择“添加 IVR”链接来定义这些菜单中的每一个。“数字接待员”菜单的配置非常简单,一旦人们知道每个选项的作用。顶部的“常规”部分允许定义或更改 IVR 的名称;接下来是呼叫者输入选项的秒数,之后使用 t 选项;“启用目录”和“目录上下文”允许呼叫者通过输入 # 转到自动目录系统;“启用直接拨号”意味着呼叫者可以直接输入“分机”中定义的任何分机;“宣告语”是在提供拨号选项之前播放给呼叫者的音频消息。“常规”部分下方是呼叫者可以选择的其他选项,以将他们带到系统的其他部分。呼叫者输入的选项不得与任何“分机”冲突。可以为目标选择的内容取决于系统中安装的模块,并且大多数都是不言自明的。可能的目的地之一是另一个 IVR 菜单,它允许非常强大的级联菜单系统。

了解了“数字接待员”,我们可以看看我定义的上下文。“访问分机”旨在用于工作/上学日(图 20)。它播放“工作日宣告语”,允许直接拨打任何“分机”,定义使“振铃组”响铃的选项,如果呼叫者什么都不做(t 分机),则所有电话都会响铃。“RingAll-dflt”用于晚上和周末(图 21 和 22)。它播放相同的消息,但不允许直接拨打任何分机。相反,输入的所有分机号码都会重定向以使所有电话响铃。最后一个 IVR “Voicemail-dflt”用于所有孩子都上床睡觉后到达的呼叫(图 23)。向呼叫者播放“夜晚消息”,呼叫者可以输入 0 使整个房屋响铃,或输入 1(或什么都不做)转到家庭语音邮件箱。不允许直接拨打分机。有了这三个消息菜单,系统就可以处理所有呼入呼叫了。

Home Box to Trixbox

图 20. 设置“数字接待员”。

Home Box to Trixbox

图 21. 设置 ring-all 默认值。

Home Box to Trixbox

图 22. 完成设置 ring-all 默认值。

Home Box to Trixbox

图 23. 设置语音邮件默认值。

接下来,为了定义哪个“数字接待员”上下文根据接收呼叫的时间处理呼叫,我使用了“时间条件”。我想区分三种时间类别:正常工作日、非工作日醒着的时间以及所有其他时间。我首先定义了“周末和晚上时间条件”(图 24),以便上午 7 点到晚上 10 点 (22:00) 之间的呼叫转到“RingAll-dflt IVR”,在该时间之外,呼叫由“Voicemail-dflt”处理。然后,我创建了一个“时间条件”来处理工作日时间(图 25),它检查时间是否在工作/上学日期间,如果是,则将呼叫传递给“访问分机 IVR”。如果它不匹配,则将其传递给“WeekendEve”条件以进行进一步测试。因此,如果呼叫在周一至周五且在上午 7:30 至下午 5 点 (17:00) 之间到达,“访问分机 IVR”会处理它。如果呼叫不在该时间范围内,“WeekendEve 时间条件”将接管控制。如果呼叫在一周中的任何一天上午 7 点到晚上 10 点之间,“RingAll-dflt IVR”会处理呼叫;否则,“Voicemail-dflt IVR”会接管控制。

Home Box to Trixbox

图 24. 设置“数字接待员”如何工作的时间条件。

Home Box to Trixbox

图 25. 工作日的时间条件

处理呼入呼叫的剩余部分是决定当呼叫到达系统时该怎么做。“呼入路由”检查“拨入直拨号码”和主叫号码,并相应地 направляю 呼叫。我只有一个路由(图 26 和 27)用于所有呼入呼叫,所以我将“DID 号码”和“CID 字段”留空,并且“目标”是“时间条件工作日”,它将呼叫路由到初始时间条件。

Home Box to Trixbox

图 26. 呼入路由配置

Home Box to Trixbox

图 27. 呼入的传真处理

“呼入路由”屏幕还允许传真处理和在 SIP 电话上设置独特的铃声(但不适用于 ZAP 通道)。为了增加对电话推销员的安全性,可以激活“隐私管理器”,要求没有主叫号码的呼叫者输入他们的电话号码,然后才能继续通过系统。我没有主叫号码显示服务,所以我将其关闭了。我发现电话系统本身阻止了我们过去经常收到的许多自动电话推销电话。

处理 VoIP 中继线

最后要处理的是往返 VoIP 中继线的呼叫路由。为了将呼叫从内部扩展路由到中继线,并将呼叫从中继线路由到我的办公室分机,我需要稍微修改拨号计划文件,这可以通过 WebUI 或从命令行完成。从初始 WebUI 屏幕中,我选择了“系统管理”、“配置编辑”,然后选择了“extensions_custom.conf”以调出该文件的编辑窗口。将清单 1 中显示的行添加到 from-internal-custom 上下文中,允许所有内部扩展连接到我的工作 VoIP 中继线。来自该中继线的呼入呼叫不需要经过来自 PSTN 线路的呼叫的所有处理,因为它们已经由办公室 PBX 过滤。因此,我还创建了上下文 custom-from-work(清单 2),除了在呼叫到达时使我的分机 (ZAP/2) 响铃之外,它什么都不做。当我在本文开头更改中继线的上下文选项时,我将该上下文附加到中继线。因此,现在所有来自办公室的呼叫都会使我的电话响铃,并且从我们的任何电话拨打 #8 都会连接到办公室 VoIP 系统。

清单 1. 如何呼叫工作用中继线

; Call the work trunk
      exten => #8,1,NoOp(Calling Work trunk) ; comment in log file
      exten => #8,n,Dial(IAX2/Work/bat) ; dial the extension "bat" on the trunk
      exten => #8,n,NoOp(After dial) ; another comment for the log file
exten => #8,n,Hangup() ; if we get to here, hangup the line

清单 2. 如何将工作用中继线 направляю 到 ZAP/2

; custom-from-work receives the calls from the work
      trunk and directs them to ZAP/2
      ; we don't worry about VM because the work system
      will get it [custom-from-work]
      exten => s,1,NoOp(cxt: ${CONTEXT} - x: ${EXTEN} -
      prio: ${PRIORITY} - cid#: ${CALLERIDNUM}) ; info
      exten => s,2,DIAL(ZAP/2) ; ring indefinitely
      exten => s,n,NoOp(cxt: ${CONTEXT} - x: ${EXTEN} -
      prio: ${PRIORITY} - after DIAL)
exten => s,n,Hangup()
结论

我现在拥有一个满足我目标的完整应答系统。我能够通过简单地拨打分机或振铃组从房屋的一部分呼叫到另一部分。由于系统在我们听到电话响铃之前就接通了线路,因此我们将垃圾电话减少到几乎为零。如果人们在深夜来电,他们会被提醒时间并 направляю 到语音邮件,但紧急呼叫仍然可以接通。我能够像在与系统相同的建筑物中一样,从办公室 PBX 拨打和接听电话。所有这一切,我唯一的投资就是 Digium TDM 卡的成本和我的时间。我已经在这里有了计算机,我们的房子在我们到达时已经连接了模拟电话线。

因此,我发现 Trixbox 在获得极大的易用性的同时,并没有过多地损害灵活性。但是,我仍然希望系统具有一些功能。最值得注意的是,我希望电话对于内部呼叫和呼入呼叫的响铃方式不同。我还希望我的办公室电话以不同的方式响铃,以区分我的办公室呼叫和家庭呼叫,以及我的办公室内部呼叫和我的呼入办公室呼叫。请关注未来文章中的这些主题。

资源

Nerd Vittles: www.nerdvittles.com

voip-info.org: voip-info.org

Asterisk@Home Handbook Wiki: www.voip-info.org/wiki/view/Asterisk%40home+Handbook+Wiki

Michael George 与他的妻子和五个孩子居住在密歇根州乡村地区(确切地说是 Pewamo)。他是 Lansing 社区心理健康的系统分析师,还与 Ideal Solutions (www.idealso.com) 一起从事 OSS 咨询和电话系统部署。可以通过 george@mutualdata.com 与他联系。

加载 Disqus 评论