拒否済み迷惑電話に自動応答して相手にメロディ等を聴かせる仕掛けを作る

拒否済み迷惑電話に自動応答して相手にメロディ等を聴かせる仕掛けを作る
Page content

迷惑電話の対応策

これまでは、無視

自宅の固定電話には迷惑電話がよく掛かってくるので、電話が掛かってきたらすぐに発信元の属性が推測できるよう、次の仕掛けを構築して日々運用してきた。AsteriskとはオープンソースのIP-PBXソフトウェアで、ひかり電話のようなIP電話環境に接続して好みのシステムを作ることができる。

自宅の仕掛けは具体的にどういうものかというと、固定電話が掛かってきたらほぼその瞬間に、発信元の電話番号にどんな口コミがあるかを直接確認できるURLが家族LINEに通知されるので、そのURLを人間が閲覧して電話に出るべきかどうかを判断できるものだ。

そして発信元が仮に「不用品買取・訪問買取・押し買い」だったり「不動産売買・マンション投資」 (個人情報管理が緩かった時代の某母校の卒業アルバムがこのような界隈に流れている可能性を感じる) だったりといった電話番号で、我が家には不要な用件だろうと思われたら電話を無視する、という運用を行っている。

しかしながら、この対応策では積極的に迷惑電話を減らすことには繋がらないようだ。数週間経つと同じ電話番号からまた電話が掛かってくることは多い。そうするとその都度、家族LINEへの通知が実施され、前回と同じように発信元の属性を推測して無視する対応を取らなければならない。私は意義のない面倒くさいことの繰り返しが嫌いなのよ……。

これからは、発信元のリソースを削る

そこで改めて諸々調査すると、運用中のAsteriskに拒否リスト (blacklist) 機能があると分かったので、この機能を活用して前述の仕掛けを次のように進化させよう。

  1. 電話の発信元の電話番号が、Asteriskの拒否リストに含まれている既知のものなら
  2. 家族LINEへの発信元電話番号の通知は省略して、できるだけ素早くAsteriskが電話に自動応答する (Asteriskの着信応答動作が早いので家の固定電話機の着信音はほとんど鳴らない)
  3. Asteriskが任意の音源ファイルの音を電話に数十秒間流して
  4. Asteriskが自動的に電話を切る

これならば、我が家に繰り返し迷惑電話を掛けてくる発信元のリソース、つまりは通話料金と時間を着信無視の対応よりも多く消費するはずだから、電話番号を発信対象リストから削除してくれるんじゃないかな……。そう願いたい。仮にもし、引き続き迷惑電話が掛かってきたとしても、Asteriskの自動応答によって私を含む家族がそれに気を遣うことはないが。

Asteriskの拒否リストへの電話番号登録はとりあえずAsterisk CLIを用いて手動で行う想定だ。2021年12月から約1年分の着信ログを精査すると迷惑電話だと判断できる電話番号は「19個」あったので、最初はこれらを登録しておけばよかろう。

Asterisk自動応答の設定方法

Step-1: 音源ファイルの用意

後述のextensions.confにて指定する、着信応答に使用する音源ファイルを適当に用意する。電話の場面に合うようなメロディでも良いし、好きな台詞をしゃべらせたAI音声でもよいだろう。ここではAsteriskで利用可能で音質劣化の少ないフォーマットの、サンプリングレート32kHzの音源ファイル (拡張子「sln32」) とした。

一般的なWAVファイルinput.wavoutput.sln32に変換する一連のコマンドは次のとおり。Asterisk Audio and Video Capabilities - Asterisk Project - Asterisk Project Wiki > Signed Linear PCM を参照しつつ、モノラル化 (-c 1) も追加している。

sox input.wav -t raw -b 16 -r 32000 -c 1 output.sln
mv output.sln output.sln32

ちなみに我が家のAsteriskでは、色々なリアル店舗で良く耳にする、軽やかな『呼び込み君』の「ポポーポポポポ♪ ポポーポポポポ♪」がメロディとして流れるように設定した。

音声POP(ポップ) | 呼び込み君(ビューサインmini無し)

音声POP(ポップ) | 呼び込み君(ビューサインmini無し)

POPGALLERY

音声POP(ポップ) | 呼び込み君(ビューサインmini無し) H209×W150×D82mm ABS樹脂【1台入】

音声POP(ポップ) | 呼び込み君(ビューサインmini無し) H209×W150×D82mm ABS樹脂【1台入】

POPGALLERY

Step-2: Asteriskの設定

Asterisk (当環境では18.9.0) の設定ファイル/etc/asterisk/pjsip.confを、2021-12-30の記事の内容にしておく。

次に、Asteriskの設定ファイル/etc/asterisk/extensions.confを、BLACKLIST関数を使った条件分岐を含む次の内容に書き換えて、ダイアルプランを再読み込みする (例: asterisk -rx 'dialplan reload')。

[globals]
COMMAND_LOGGER=/usr/bin/logger
COMMAND_NOTIFY=/home/hoge/telppo/telppo.py ; https://remoteroom.jp/diary/2021-12-31/
FILE_SOUND_MUSIC=/var/lib/asterisk/sounds/何らかのメロディ ; 拡張子「sln32」の音源ファイルを用意する
FILE_SOUND_UNAVAILABLE=/var/lib/asterisk/sounds/拒否る台詞 ; 拡張子「sln32」の音源ファイルを用意する

[from-hikari]
exten => s,1,GotoIf($[${BLACKLIST()}=1]?meiwakudenwa:normal)
; 未知の電話 (not BLACKLISTed) な時:
same => n(normal),System(${COMMAND_LOGGER} -i -t telppo 'CALLERID=${CALLERID(num)} (not BLACKLISTed)')
same => n,System(${COMMAND_NOTIFY} ${CALLERID(num)})
same => n,Ringing()
same => n,Return()
; 迷惑電話 (BLACKLISTed) な時:
same => n(meiwakudenwa),System(${COMMAND_LOGGER} -i -t telppo 'CALLERID=${CALLERID(num)} (BLACKLISTed,MeiwakuDenwa!)')
same => n,Answer()
same => n,Wait(1)
same => n,Playback(${FILE_SOUND_MUSIC})
same => n,Playback(${FILE_SOUND_UNAVAILABLE})
same => n,Hangup()

内部で呼び出しているプログラムtelppo.pyは、第1引数に書かれる電話番号を特定の宛先にLINE通知するための自作ツール。2021-12-31の記事にてPythonソースを参照できる。

Step-3: Asterisk拒否リストの編集

Asterisk CLIを直接操作して、拒否リストの登録内容確認、電話番号050XXXXXXXXを拒否リストに登録・登録解除する各コマンドは次のとおり。

asterisk -rx 'database show blacklist'
asterisk -rx 'database put blacklist 050XXXXXXXX "任意のコメント"'
asterisk -rx 'database del blacklist 050XXXXXXXX'

把握している迷惑電話の電話番号を、上記の登録コマンド (put) を用いて拒否リストへ複数登録し、正しく登録されたかは確認コマンド (show) で確認すればよい。

Step-4: 着信をテスト

Asteriskの拒否リストを使った動作をテストするため、たとえば自身の携帯電話の電話番号を一時的にAsteriskの拒否リストに登録してから、Asteriskへ携帯電話から発信する。想定通りに動作すれば、Asteriskが自動応答して携帯電話のスピーカーからは設定した音源ファイルの音が流れ、その後に電話が自動的に切れる。テスト完了後は登録解除をお忘れなく。

実際の迷惑電話の着信ログ

進化させた上記の仕掛けを我が家の本番環境で運用開始した翌々日。本物の迷惑電話が平日お昼にさっそく掛かってきたことを、Asteriskサーバのsyslogで確認することができた。

root@raspi4:~# grep MeiwakuDenwa /var/log/syslog
Jan 10 12:56:00 raspi4 telppo[701391]: CALLERID=0503183XXXX (BLACKLISTed,MeiwakuDenwa!)
Jan 10 12:57:08 raspi4 telppo[701734]: CALLERID=0503183XXXX (BLACKLISTed,MeiwakuDenwa!)
Jan 10 12:58:21 raspi4 telppo[702003]: CALLERID=0503183XXXX (BLACKLISTed,MeiwakuDenwa!)

しかし不思議だ。なぜに1回きりではなく、同じ電話番号からの着信ログが短時間に3回分残っているのだろう?

我が家のAsteriskで設定しているメロディは『呼び込み君』、それに続く台詞はおふざけで「お掛けになった電話電話は現在使われておりません。番号をお確かめになってお掛け直しください」としている。再生時間は合計で約60秒だ。この長さを勘案すると、もしかして発信者は着信応答を面白がって、メロディやらを何回かフルコーラスで聞いてくれたのかもしれない。

参考リンク

迷惑電話の対応を、疑似的にチャットボット化するならば次のアイデアも良さそうだ。