FreePBX(RasPBX)の着信をSlackに通知

会社の電話システムを購入すると数十万~数百万円かかりますが、オープンソースソフトウェア(OSS)であるAsterisk、FreePBXなどを利用すると格安でシステムを構築することができます。

ただし、NTTなどの事業者の回線である「ひかり電話」等には接続できません。(技術的には可能なのですが、NTT等による機材の検査が必要になります。)

よって、IP電話(050から始まる電話番号)に接続することが前提となります。

弊社では、Raspberry Pi用にカスタマイズされたFreePBXのRasPBXを運用しています。やや不安定なときもありますが、概ね順調に稼働しています。

最近、自動音声ガイダンス(IVR)を導入しました。着信してからお客様に該当する番号を選んでいただくものです。以前までは、着信するとすべての電話が一斉に鳴動していたのですが、IVRの導入により担当者の電話のみが鳴動することになりました。

よって、着信履歴はそれぞれの電話に残ることになり、すべての着信履歴を簡単に確認する方法がありませんでした。
(営業電話は基本的に留守番電話につながる設定ですので、現状では着信履歴も残りません)

そこで、着信した全ての電話番号をSlackに通知する仕組みを導入しました。これも無料で構築できます。

導入の際に迷ったことがあったのでメモとして記録しておきます。

Slackへのアプリ追加

Slackのチャンネル上で右クリックし「チャンネル詳細を開く」を選択します。

「インテグレーション」タブを選択し、「アプリを追加する」を選択します。

ここで「Incoming Webhook」というアプリを選択し、追加します。

これにより、RasPBXからSlackに着信番号を通知することが可能になります。

Incoming Webhookの設定は説明を見ながら希望の内容に設定してください。

FreePBX(RasPBX)の設定

着信した際には次の動作になります。

着信 → カスタム宛先(Slackに番号通知) → IVR(自動音声ガイダンス)

以前は、着信するとIVRに繋がっていたのですが、その前にカスタム宛先の処理を割り込ませます。

カスタム宛先追加

カスタム宛先は、[アドミン] – [カスタム宛先]を選びます。

[Add Destination]ボタンをクリックし、Targetに「slack,s,1」と入力し、説明などは適宜わかりやすいものを入力します。

Returnは[Yes]、Destinationは今回は[IVR]にしますが、着信グループなども動作すると思います。

呼び出しスクリプトの追記

カスタム宛先に追加するとextensions_custom.conf内の処理が実行されます。

スクリプトのパスの部分にSlackのIncoming Webhookを呼び出す処理を書いたスクリプトのパスを記述します。

このとき、着信番号をコマンドパラメータとして渡しています。

[slack]
exten => s,1,System("スクリプトのパス" ${CALLERID(num)})
exten => s,n,Return()


うまく動けば、着信と同時にSlackに通知が届きます。お客様は音声ガイダンスに番号を入力いただきますので、Slackの着信通知から電話の鳴動までに数秒間、余裕ができBGMを消すとかの操作もできます。