Linux でひかり電話にかかってきた電話番号を取得する

ナンバーディスプレイに加入していると電話番号を表示できますが、同様にLinux で、ひかり電話にかかってきた電話番号を取得する方法です。

準備


libre、librem、baresip をインストールします。

ソースコードをダウンロードします。


ビルド・インストールします。

tar zxvf re-0.5.5.tar.gz
cd re-0.5.5/
make
sudo make install
sudo ldconfig
cd ..
tar zxvf rem-0.5.2.tar.gz
cd rem-0.5.2/
make
sudo make install
sudo ldconfig
cd ..
tar zxvf baresip-0.5.5.tar.gz
cd baresip-0.5.5/
make
sudo make install


一旦 baresip を実行します。
実行は一般ユーザでOKです。


baresip


ずらずらっと表示がされ、最後に baresip is ready. と表示されます。
この時、赤字でエラーが表示されても、この時点では気にしないでください。

CTRL+C で baresip を終了します。

basresip を実行すると、~/.baresip ディレクトリが出来ます。
以降で、.baresip ディレクトリの中の各ファイルについて設定します。



設定


config ファイル


~/.baresip/config ファイルを編集します。

以下の行で # を入れてコメントにします。


#module stdio.so
#module alsa.so


baresip は、SIPクライアントとして、ダイアルしたりのコマンドをキー入力できます。
今回は電話番号を表示させるだけなので、上記の stdio のコメントアウトで、キー入力を無効化します。

また、alsa はサウンド関連のモジュールですが、特に設定していない状態では baresip 実行時にエラーになります。
電話番号を表示させるだけなので、stdio と同様に無効化します。

その他、syslog.so の行のコメントを外すと、/var/log/syslogにも出力されるようになりますので、必要な場合設定して下さい。


accounts ファイル


ひかり電話ルータの管理画面 http://ntt.setup/ にアクセスします。
ユーザ名「user」とパスワードを入力します。

画面左のメニューで、電話設定−内線設定 を選択します。
ひかり電話ルータによって、違う個所があるかもしれませんが、次のような画面になります。

内線番号 3〜7 のどれかの [編集] を選択します。
ここでは、例として、内線番号3 を選択します。




次のような画面になるので、"内線番号"、"ユーザID"、"パスワード" を確認します。
後でこの値を使用します。




次に、ひかり電話ルータのIPアドレスを調べます。
不明な場合は、コマンドプロンプトで、
nslookup ntt.setup
と実行して下さい。
表示されたものが、ひかり電話ルータのIPアドレスです。

以上確認した内容を、~/.baresip/accounts の末尾に次の書式で追加します。


<sip:X:YYYYY@ZZ.ZZ.ZZ.ZZ>;auth_user=WWWW
X:内線番号
WWW:ユーザID
YYYYY:パスワード
ZZ.ZZ.ZZ.ZZ:ひかり電話ルータのIPアドレス


例えば、次のような感じになります。

<sip:3:7fag3hwf@192.168.1.1>;auth_user=0003




動作確認


baresip を実行します。

何行か表示がされます。
最後に baresip is ready. に続いて、
3@192.168.1.1: {0/UDP/v4} 200 OK () [1 binding]
のような表示がされます。

この状態で、ひかり電話に電話すると、

sip:3@192.168.1.1: Incoming call from: DDDDDDDDDDD sip:DDDDDDDDDDD@192.168.1.1 - (press 'a' to accept)

のように表示されます。
DDDDDDDDDDD の個所には、かかってきた電話番号が表示されます。

この状態で、電話をかけてきた側が切るか、自宅内の電話をとった場合(留守電の応答も含みます)、
sip:DDDDDDDDDDD@192.168.1.1: session closed: Connection reset by peer
のように表示されます。
(DDDDDDDDDDD の個所には、かかってきた電話番号)

最後に CTRL+C で baresip を終了します。



電話番号の取得


電話番号を取得するには、baresip の出力を処理します。
baresip の出力は標準エラー出力なので、標準出力にリダイレクトし、それをパイプで sed で次のように処理すると、かかってきた電話番号が表示されます。


baresip 2>&1| sed -n "s/^.\+from: \(.\+\) sip.\+/\1/gp"


ここまで出来ると、後はさらにパイプで電話番号を渡して処理できますね。



参考


BaresipをUbuntuで使用する – HARD DAY'S NIGHT ブログ
続)ひかり電話の着信お知らせメール - yotayota diary(2016-01-12)

最近の画像付き記事