LoginSignup
7
8

More than 3 years have passed since last update.

内線電話 + 050plus 作業メモ

Last updated at Posted at 2020-05-06

Googleと、いろいろでてくるので、今更感がありありですが、せっかく立てたので、作業メモを残します。

目的

  • 050電話の外線番号を、複数のスマホで待ち受けできること
  • 着信を受けたスマホから、ほかのスマホへ転送できること
  • どのスマホからでも、050電話から発信できること
  • スマホ同士で、内線通話ができること

複数のスマホで待ち受けするなら、050plusソフトを複数インストールすればいいのですが、自分宛ではないものをピックした場合、正しい宛先へ転送したいので、ひと工夫することにしました。

ここの例は、16.3.0を使っています。

asteriskそのもののセットアップ

見栄え上、以下の順序で記載していますが、本当は以下の順番でビルドを進める。

  • bcg729
  • asterisk本体
  • asterisk-g72x

g72xをビルドする際、asterisk本体が必要。また、asterisk本体をビルドする際は、bcg729があったほうがよいため。

asterisk本体のインストール

本家からgit cloneした後、以下の手順

$ git clone -b 16.3 https://github.com/asterisk/asterisk.git
$ ./configure --with-jansson-bundled
$ make
$ sudo make install

apt-getでも入りますが、後述の通り、g729を入れるためには、asteriskのヘッダファイルが必要なので、どのみちビルドすることになります。

ビルドツールが必要な場合

まっさらな環境ですと、以下のパッケージたちが必要

$ sudo apt-get install git curl wget libnewt-dev libssl-dev libncurses5-dev subversion  libsqlite3-dev build-essential libjansson-dev libxml2-dev  uuid-dev libedit-dev libtool autoconf

その他ツールのインストール

コーデックg729がないと、050plusでは通話できないので、g729をインストールします。

bcg729

$ wget http://download-mirror.savannah.gnu.org/releases/linphone/plugins/sources/bcg729-1.0.2.tar.gz
$ tar zxvf bcg729-1.0.2.tar.gz 
$ cd bcg729-1.0.2/
$ ./configure
$ make
$ sudo make install
$ sudo ldconfig
$ sudo ldconfig -p | grep 729

asterisk-g72x

$ wget http://asterisk.hosting.lv/src/asterisk-g72x-1.4.3.tar.bz2
$ bunzip2 asterisk-g72x-1.4.3.tar.bz2 
$ tar vxf asterisk-g72x-1.4.3.tar 
$ cd asterisk-g72x-1.4.3
$ ./autogen.sh 
$ ./configure --with-bcg729 --with-asterisk-includes=/home/debian/src/asterisk/include
$ make
$ sudo make install

確認

core show codecsコマンドで確認できます。

*CLI> core show codecs
Disclaimer: this command is for informational purposes only.
        It does not indicate anything about your configuration.
      ID TYPE  NAME         FORMAT           DESCRIPTION
------------------------------------------------------------------------------------------------
(snip)
      20 audio g729         g729             (G.729A)
(snip)

asterisk運用に関するセットアップ

050plusのアクセス情報入手

執筆時(2020年1月)では、googleに落ちている情報は、古いものが多くなっておりました。
情報を調べるwebサイトがありましたので、そちらを利用して入手します。ブラウザからアクセスして、ソースコードを見るで、必要な情報が出てきます。

証明書の作成

$ sudo mkdir /etc/asterisk/keys
$ sudo ast_tls_cert -d /etc/asterisk/keys

途中、パスフレーズが聞かれるので、適当に入力。4文字以上だそうです。

Confファイルの設定

sip.conf

[general]
context=default
maxexpirey=3600
defaultexpirey=3600
bindaddr=0.0.0.0
bindport=5060
localnet=192.168.0.0/24
nat=force_rport,comedia
srvlookup=yes
disallow=all
allow=ulaw
allow=alaw
allow=g729  ;<== 050plusに必要。ただし、g729だけだと、VoIPクライアントの制約を受けるので、ulawほかも生かしておく
allow=gsm
language=ja

tlsenable=yes
tlsbindaddr=0.0.0.0
tlscertfile=/etc/asterisk/keys/asterisk.pem   ; <==ast_tls_certで作成したものを指定する
tlscafile=/etc/asterisk/keys/ca.crt           ; なにもしなければ、デフォルトでOK
tlscipher=ALL
tlsclientmethod=tlsv1
tlsdontverifyserver=yes
register => tls://xxxxxxxx:xxxxxxxx:xxxxxxxx@kar2-f2fcp.050plus.com:443/1

[050plus]   ; <==extensions.confのDialで"@050plus"としている由来
type=friend
defaultuser=xxxxxxxx
secret=xxxxxxxx
fromuser=xxxxxxxx
host=kar2-f2fcp.050plus.com
port=443
fromdomain=050plus.com
context=default
insecure=invite,port
dtmfmode=inband
canreinvite=no
callgroup=1
transport=tls
encryption=yes

[10]
type=friend
username=10
secret=password
canreinvite=no
host=dynamic
dtmfmode=rfc2833
callgroup=1
pickupgroup=1
mailbox=10

[11]
type=friend
username=11
secret=password
canreinvite=no
host=dynamic
dtmfmode=rfc2833
callgroup=1
pickupgroup=1
mailbox=11

[12]
type=friend
username=12
secret=password
canreinvite=no
host=dynamic
dtmfmode=rfc2833
callgroup=1
pickupgroup=1
mailbox=12

extensions.conf

[globals]
usevoicemail=yes
writeprotect=yes
priorityjumping=no
OCNNUMBER=050AAABBBB

[default]
exten => 1,1,Dial(SIP/10&SIP/11&SIP/12,120,rt)
exten => 1,2,Hangup()

exten => 10,1,Dial(SIP/10,120,rtT)
exten => 10,2,Hangup()
exten => 10,102,Busy()

exten => 11,1,Dial(SIP/11,120,rtT)
exten => 11,2,Hangup()
exten => 11,102,Busy()

exten => 12,1,Dial(SIP/12,120,rtT)
exten => 12,2,Hangup()
exten => 12,102,Busy()

exten => _0.,1,Set(CALLERID(num)=${OCNNUMBER})
exten => _0.,2,Set(CALLERID(name)=${OCNNUMBER})
exten => _0.,3,Dial(SIP/${EXTEN}@050plus,180,rT)
exten => _0.,4,Congestion

r:着信音を鳴らす
t:呼び出し元ユーザに、転送操作を許可する
T:呼び出し先ユーザに、転送操作を許可する
_0: 0からスタートする呼び出しがトレースするコマンド群

features.conf

転送関係、あるいはダイアル操作を司る設定を行います。こだわりがなければ、デフォルトの設定でも、行けそう。
いくつかの操作は、Dialコマンドのオプション指定が必要です。

キーアサイン コマンド 動作 注意事項
*2 atxfer 保留にしたうえで、転送先と会話する。転送先が切ると転送される "Tもしくはt"が"DialもしくはQueue"に設定されていること
# blindxfer 問答無用で転送 (転送後、転送元は勝手に切れる) "Tもしくはt"が"DialもしくはQueue"に設定されていること
*8 pickupexten ほかの内線が鳴っているのを取る なし
*(アスタリスク) disconnect Disconnect "Hもしくはh"が"DialもしくはQueue"に設定されていること

運用

asteriskのビルドの最後に、以下のコマンドを入力すると、サービスとして登録されます。

$ sudo make config

Android/iPhone/iPadなどに、Zoiperをいれて使っています。(複数のサーバを設定しない限り、無料版で十分です)
3台あれば、内線転送の試験までできます。

image.png

接続確認

sip show peersで確認することが可能。一番上に050plusが登録されていて、11番にスマホが登録されていることが見える。10番はつないでいないので、未登録(Unspecified)で見えている。

CLI> sip show peers
Name/username             Host                                    Dyn Forcerport Comedia    ACL Port     Status      Description                      
050plus/XXXXXXXX          XXX.XX.XXX.XX                               Yes        Yes            443      Unmonitored                                  
10/10                     (Unspecified)                            D  Yes        Yes            0        Unmonitored                                  
11/11                     192.168.0.XXX                            D  Yes        Yes            4XXX7    Unmonitored

最後に

外部環境を利用したお試しコール、通話確認まですると、課金されるので注意が必要です。

おまけ

ついでに、ひかり電話も収容しました。

変更点

NTTルータ

image.png

トップページ > 電話設定 > 内線設定 と進んで、IPhoneとなっているところの1つを利用します。
ユーザIDとパスワードは、sip.confで使うことを意識して設定します。

asteriskの設定

sip.conf

;for HikariD
register => 3:0003:0003@192.168.x.x/3
(snip)
[HikariD]
context=default
type=friend
username=0003
secret=0003
fromuser=3
host=192.168.x.x
fromdomain=192.168.x.x
insecure=invite,port
dtmfmode=inband
canreinvite=no
callgroup=1

extensions.conf

(末尾に)
exten => _9.,1,Set(CALLERID(num)=${NTTNUMBER})
exten => _9.,2,Set(CALLERID(name)=${NTTNUMBER})
exten => _9.,3,Dial(SIP/${EXTEN:1}@HikariD,180,rT)
exten => _9.,4,Congestion

"EXTEN:1"の":1"をつけると、9発信の"9"を取ってくれる。上述の050回線の発信は、"EXTEN"なので、0発信だけど、"00..."と0を2回入れる必要はない。

[おしまい]

7
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
8