故事的一切还要从储藏室里翻出来的年纪比我大的电话机说起。

步步高 130M 来电显示有绳电话
步步高 130M 来电显示有绳电话
以及它的正面
以及它的正面

简单测试和清洗了一下,似乎还能用,于是想把他接到电话网中。

不过现在已经是 5202 年了,我家也没有找运营商拉电话线,所以接公网的电话是不太可能了。

但是好在 Asterisk 提供了一套十分完善的 PBX 系统解决方案,约等于开箱即用。

安装 & 配置 Asterisk

安装非常简单,在现代的 Linux 发行版的软件源中基本上都已经带了 Asterisk 的包。

不过 Arch 官方源中并没有包含 Asterisk 的预构建版本,需要从 AUR 中安装。

1
paru -Sy asterisk

接下来配置一个最小化可用的配置文件,这里我们使用了 PJSIP 作为 SIP 的实现,使用 Asterisk 的 Dial Plan 配置分机号转发到对应的用户的规则。

extension.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[from-internal]

exten => _1XXX,1,NoOp(Calling {EXTEN})
same => n,Answer()
same => n,Dial(PJSIP/${EXTEN},20)
same => n,Set(_DIALSTATUS=${DIALSTATUS})

same => n,GotoIf($["${DIALSTATUS}"="CHANUNAVAIL"]?unavail)
same => n,GotoIf($["${DIALSTATUS}"="CONGESTION"]?unavail)
same => n,GotoIf($["${DIALSTATUS}"="NOANSWER"]?noanswer)
same => n,GotoIf($["${DIALSTATUS}"="BUSY"]?busy)
same => n,Hangup()

exten => _1XXX,n(unavail)
same => n,Hangup()

exten => _1XXX,n(noanswer)
same => n,Hangup()

exten => _1XXX,n(busy)
same => n,Hangup()
pjsip.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
[transport-udp]
type=transport
protocol=udp
bind=0.0.0.0:5060

[1000]
type=endpoint
context=from-internal
disallow=all
allow=ulaw
auth=auth1000
aors=1000
direct_media=no
rtp_symmetric=yes
force_rport=yes
rewrite_contact=yes

[auth1000]
type=authcallerid = 1000 <1000>

auth_type=userpass
password=1234
username=1000

[1000]
type=aor
max_contacts=2

[1001]

...

我们有了什么?

现在,以 1 开头的四位数分机号将会自动路由到对应的用户,且:

  • 用户不存在时:挂机
  • 用户无应答时:挂机
  • 用户忙线时:挂机

没错,无论是哪种情况,只要打不通就会挂机。接下来我们还可以自定义一些好玩的操作,比如语音信箱,比如 “您拨打的用户正在通话中”。

到现在,启动 Asterisk,找俩设备配个 SIP 客户端,就可以互相打电话玩了。

传统座机呢?

7002 年的座机显然是没有 SIP 这种高端东西了,接口也只是平平无奇的两芯 RJ-11,但是并不妨碍我们把它接到 SIP 电话网络。

在小黄鱼一番寻找后,花几十块捡了一台 LinkSys PAP2T。这是一台 Internet Phone Adapter,是一个可以把传统电话接入 英 特 网 的适配器。

Linksys PAP2T
Linksys PAP2T

按照用户手册,插上电,接好网线和电话线,拨 ****
然后 101#1#1# 挂机,就可以配置它从网络中的 DHCP 服务器获取 IP 地址了。好古老的配置方式

进入管理后台,长下面这个样子:

后台
后台

图上已经配好了 SIP 服务器,初次使用需要先进行服务器和线路配置。(虽然我这台二手货内置了一个配置)

题外话:也可以先重置所有设置再进行配置,在 **** 后的配置菜单输入 73738#1#1# 即可,真是太神奇了。

进入 Line 1 选项卡,我们只需要关注这一块的内容即可:

线路配置
线路配置

输入 SIP 服务器,以及刚才配置的账号密码,在页面底部 Save Config

接下来它会注册到服务器,观察到 Line 1 对应的 LED 灯常亮,摘机能听到持续的嘟声,那便是注册成功了。

然后就可以按照上文的介绍,和已经注册好的其他设备互打了。

一些别的好玩的

Asterisk 是一个开放性极高无比的系统,通过拨号配置可以实现很多好玩的,比如:

1
2
3
4
exten => 7355608,1
same => n,Answer()
same => n,Playback(/path/to/audio)
same => n,Hangup()

视频录得太潦草了就不放上来了(

没解决的问题

如一开始所说,这是一台 来电显示有绳电话,尽管已经在 PAP2T 后台中配置了来电显示,也给电话装了来电显示电池,但依然不能显示来电号码。不确定是时间长放坏了还是哪里有问题,有待进一步研究。

更:我找到了一台更古老的电话,插上之后保持默认设置来电显示依然是正常的,看来是步步高的电话年久失修了,不知道还有没有机会把它修好(悲