ナンバーディスプレイに加入していると電話番号を表示できますが、同様にLinux で、ひかり電話にかかってきた電話番号を取得できます。
以下では Ubuntu での取得方法です。
なお、以前の記事でも紹介しましたが、使用するモジュールを最新のものにしているのと、一部設定方法が異なる箇所がありますので、本記事の設定の方を参照してください。
(~/.baresip/accounts ファイルの記述内容が異なっています)
Linux でひかり電話にかかってきた電話番号を取得する: パソコン鳥のブログ
準備
libre、librem、baresip を次の手順でインストールします。
ソースコードをダウンロードします。
wget https://github.com/baresip/re/archive/v1.1.0.zip -O re.zip wget https://github.com/creytiv/rem/releases/download/v0.6.0/rem-0.6.0.tar.gz wget https://github.com/baresip/baresip/archive/v1.0.0.zip -O baresip.zip
以降の手順で unzip を使いますのでインストールしておきます。
sudo apt install unzip
ビルド・インストールします。
unzip re.zip cd re-1.1.0 make RELEASE=1 sudo make RELEASE=1 install sudo ldconfig cd .. tar zxvf rem-0.6.0.tar.gz cd rem-0.6.0 make sudo make install sudo ldconfig cd .. unzip baresip.zip cd baresip-1.0.0 make RELEASE=1 sudo make RELEASE=1 install cd ..
一旦 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@ZZ.ZZ.ZZ.ZZ>;auth_user=WWW;auth_pass=YYYYY
X:内線番号
WWW:ユーザID
YYYYY:パスワード
ZZ.ZZ.ZZ.ZZ:ひかり電話ルータのIPアドレス
例えば、次のような感じになります。
<sip:3@192.168.1.1>;auth_user=0003;auth_pass=7fag3hwf
動作確認
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)
Linux でひかり電話にかかってきた電話番号を取得する: パソコン鳥のブログ
コメント
パソコン鳥様
こんにちは、ブログ参考にさせていただいています。
上記で、sedで標準出力された結果をファイルに出力したいのですが、どうもうまくいきません。
パイプで、teeに渡したりですとか、リダイレクションでそのままファイルに渡そうとしても、
>file のように、0byteになってしまいます。
いい方法ございましたら、ご教示いただけませんでしょうか?
お忙しいところ恐れ入りますが、よろしくお願い申し上げます。
コメントありがとうございます。
ファイルへのリダイレクトは、バッファリングによりある程度内容が溜まらないと出力されません。
バッファリングさせないようにするには、sed に -u オプションを追加(sed -u -n ~)してみてください。すぐにファイル出力されるはずです。
こちらの環境(Ubuntu)ではOKでした。
パソコン鳥様
お忙しいところ、ご教示ありがとうございました。
unbuffered お恥ずかしながら知りませんでしたし、マニュアル読んでもひらめきませんでした。
ディスプレイ出力とファイル出力できました。
ありがとうございました。
また、他のいろいろな記事を参考にさせていただきます。
パソコン鳥様
先日は、ありがとうございました。
あれから、色々と
baresipを常駐させて、24時間待機させようとしているのですが、途中で
フリーズしてしまうようで、うまくいきません。
常駐させて、24時間受け付けるというのは、
baresipでは不可能でしょうか?
#ファイル出力したものを、phpで取り込んで、着信リストを作ろうと思っています。
お忙しいところ恐れ入りますが、ご教示いただければ幸いです。
よろしくお願い申し上げます。
う~ん、こちらではbaresipを2か月くらい連続して動作させても問題が起こったことはありません。
ちなみに、baresip の出力をパイプでperlに渡して処理しています。
パソコン鳥様
お忙しいところありがとうございます。
コメントを頂いてもしやと思い、調べてみました。
多分、baresip自身がまともに動いていないみたいです。
こちら、調べ直します。
ありがとうございます。
パソコン鳥様
お忙しいところありがとうございました。
動きました。
まさかの、centos8では、正常に動かないようです
ubuntuに入れ替えたら、動くようになりました。
色々と有難うございました。
こちらはUbuntuで動かしていました。
CentOS8では問題ありなんですね。
情報ありがとうございます。