自宅ひかり電話で着信した電話番号等をAsteriskからLINEに通知する

自宅ひかり電話で着信した電話番号等をAsteriskからLINEに通知する
Page content

本記事は下記の記事の続きで、Asteriskを使って、自宅のひかり電話で着信した電話番号などをLINEに通知する方法を記します。

手早く作ったのであまり凝ってはおらず、「電話主」や「迷惑電話か否か」を把握できる情報ページのURLを通知する程度です。見知らぬ番号の電話に対しては応答前にこのURLを参照すると有益でしょう。また、私はSlack通知のほうがどちらかというと好みですが、LINE通知のほうが家族の受けが良いのでそうしております。

ちなみに、今回の仕掛けの名前は telppo (てるっぽ) としました。語感で決めましたが、あえて言えば「telの一報」を縮めた造語かもしれません。

Step-1: telppoの設置

設置ディレクトリ (例: /home/hoge/telppo/) に、次のようにファイルを保存します。telppo.pyは、asteriskサービスの実行ユーザ (上記の記事ではasterisk) で実行できるようにしておく必要があります。

/home/hoge/telppo/
        +--- telppo.py
  1. 日本の電話番号文字列をハイフン付きに分割してくれるPythonモジュールとして、Google製の https://github.com/google/libphonenumber をPythonへ移植した https://pypi.org/project/phonenumbers/ を見つけました。これをasteriskサービスの実行ユーザを含むシステム全体から使えるようにsudo pip3 install phonenumbersしておきます
  2. 次のtelppo.pyを保存してchmod +xします。line_tokenはLINE Notify https://notify-bot.line.me/ja/ で取得するトークンです
#!/usr/bin/env python3

# telppo.py (Ver.20220516)
# usage: telppo.py TELNUMBER

import phonenumbers # pip3 install phonenumbers
import requests
import sys

# LINE
line_token: str = '*******************************************' # LINE Notify https://notify-bot.line.me/ja/ で取得するトークン
line_url: str = 'https://notify-api.line.me/api/notify'

# split telnumber
try:
	n: str = phonenumbers.parse(sys.argv[1], 'JP')
	n_hyphen: str = phonenumbers.format_number(n, phonenumbers.PhoneNumberFormat.NATIONAL)
except phonenumbers.phonenumberutil.NumberParseException:
	n_hyphen: str = sys.argv[1]

# make message
url_numberinfo: str = 'https://www.jpnumber.com/numberinfo_{:s}.html#result-globalNavi'.format(n_hyphen.replace('-', '_'))
message: str = '☎ ' + n_hyphen.replace('-', '★') + '\n' + url_numberinfo # 電話番号はLINE画面上でリンクされないように星印で区切る

# post
dic_token: dict = {'Authorization': 'Bearer' + ' ' + line_token} 
dic_message: dict = {'message': message}
print(message)
requests.post(line_url, headers=dic_token, data=dic_message)

Step-2: Asteriskの設定

  1. Asteriskの設定ファイル/etc/asterisk/extensions.confを次の内容に編集します
[globals]
COMMAND_NOTIFY=/home/hoge/telppo/telppo.py

[from-hikari]
exten => s,1,Ringing()
exten => s,n,System(${COMMAND_NOTIFY} ${CALLERID(num)})
  1. Asteriskの設定ファイル/etc/asterisk/pjsip.conf前回の記事の内容と同じにします
  2. asteriskサービスを再起動します: sudo systemctl restart asterisk

Step-3: ひかり電話へ☎して通知テスト

  1. 自宅のひかり電話へ実際に電話をかけます
  2. LINEに https://www.jpnumber.com/ での電話番号情報が参照できる通知が飛んでくればテスト成功です
  3. 実際の運用では、あきらかに迷惑電話な番号からの発信は電話機などで着信拒否するとよいでしょう

追記 [2023-01-11]

本記事の続編を書きました。

参考サイト