システム運用業務における重要な作業として、システムの障害対応があります。監視システムからの異常通知を受けるために、昔はポケベル、最近は電話での音声通知や電子メール、メッセージングアプリなどが利用されています。特に通知を見逃さないための呼び出し手段として、電話は今でもなお重要な手段となっています。
ただし音声での電話通知の機能を構築するには、かつては PBX を含む大がかりなシステムが必要でした。最近は各社より電話 API が提供されるようになり、電話での音声通知のシステムが比較的簡単に導入できるようになりました。
当社フィックスポイントでも Kompira Pigeon という、システム運用における通知に特化した自動電話サービスを提供しております。本記事では Kompira Enterprise のジョブフローから Kompira Pigeon を使って電話通知を行う手順をご紹介します。
動作確認環境
| ソフトウェア | バージョン |
|---|---|
| Kompira Enterprise | 1.5.5.post11 |
| OS | CentOS 7.8.2003 |
または
| ソフトウェア | バージョン |
|---|---|
| Kompira Enterprise | 1.6.2.post4 |
| OS | CentOS 7.8.2003 |
または
| ソフトウェア | バージョン |
|---|---|
| Kompira Enterprise | 1.6.8 |
| OS | CentOS Stream 8 |
Kompira cloud のアカウントの取得
自動電話サービス Kompira Pigeon を利用するためには、Kompira cloud のアカウント取得と電話 API 機能の開始登録が必要になります。以下の URL から必要事項を記載の上、アカウントを取得してください。”スペースID” は Kompira cloud のユーザーを識別する固有の文字列であり、URL に使われます。例えばスペース ID が “shibuya” の場合、アクセス先は https://shibuya.cloud.kompira.jp/ となります。
https://register.cloud.kompira.jp/

登録が完了すると、Kompira cloud のスペース ID ごとに個別の URL が発行されますので、アクセスの上、認証してください。
Kompira Pigeon の設定
続いて自動電話の設定を登録していきます。登録内容は
(1) 連絡先
(2) コールフロー (電話をかける順番)
(3) ガイダンス (読み上げるメッセージの内容など)
となります。ここでは最低限の設定を行っていきます。
※ Kompira Pigeon の詳しい設定方法は「Kompira Pigeon 基本マニュアル」をご参照ください。
※ Kompira cloud 全般の画面操作方法については「Kompira cloud 共通メニュー利用ガイド」をご参照ください。
連絡先の登録
まず画面左の「連絡先」メニューページから、右上の + ボタンをクリックします。

表示名の名前と電話番号を入力して「保存」をクリックします。

コールフローの登録
同様に画面左の「コールフロー」ページから、右上の + ボタンをクリックして登録します。
表示名、最大ループ回数、連絡先を指定して「保存」をクリックします。

ガイダンスの登録
同様に画面左の「ガイダンス」ページから、右上の + ボタンをクリックして登録します。
表示名、メッセージテンプレート (読み上げるメッセージ) 、応答を入力します。

「メッセージテンプレート」中の {{}} でくくられたキーワードは、API 呼び出しの際にパラメータとして指定できます。
ID の取得
API を呼び出す際の API トークン、コールフロー ID 、ガイダンス ID を取得します。
まず API トークンを取得します。右上のユーザーアイコン > 設定をクリックしてください。
※ API トークンは特権ユーザーでのみ作成可能です。予め特権ユーザーでログインしておいてください。

API トークン画面の右上の + ボタンをクリックしてください。

トークンを識別する表示名と失効させる日付を指定して保存をクリックしてください

次の画面で以下のようにトークン文字列が表示されます。
文字列が表示されるのは、この画面が最初で最後です。必要に応じてメモ帳などに転記してください。以後、トークン文字列を紛失した場合には削除の上、新しい API トークンを発行する必要があります。

コールフロー ID の取得
コールフロー画面で設定したいコールフローを選択します。画面右上の半角英数字の文字列が該当するコールフロー ID ですので、これを転記してください。

ガイダンス ID の取得
コールフロー ID と同様に、呼び出したいガイダンスの画面を選択し、画面右上の文字列を転記します。

ここまでで、Kompira Pigeon の設定はできました。
Kompira Enterprise のジョブフローの作成
続いて、Kompira Enterprise のジョブフローから Kompira Pigeon の API を呼び出して、電話をかけてみます。
今回作成するジョブフローでは、以下の Kompira Pigeon API のエンドポイントを使用します。
架電処理実行のエンドポイント
POST /api/apps/pigeon/chain/invoke
架電処理結果取得のエンドポイント
GET /api/apps/pigeon/results/{resultId}
上記の API を使用して、「障害コール」という名前のジョブフローを作成します。
ジョブフロー「障害コール」
| wait_time = 15 |
[
head = {
"X-Authorization": "Token (API トークン文字列)",
"Content-Type": "application/json"
},
data = {
"params": {
"callflowId": "(コールフロー ID 文字列)",
"guidanceId": "(ガイダンス ID 文字列)",
"parameters": {
"server": "テスト用サーバー",
"incident": "軽度の障害"
}
}
}
] ->
# 架電処理
urlopen(
url="https://(スペース ID).cloud.kompira.jp/api/apps/pigeon/chain/invoke",
http_method="POST",
headers=head,
data=data,
encode="json"
) ->
[
decoded_content = decode($RESULT.content),
res = json_parse(decoded_content)
] ->
# 結果取得処理
# 結果が取得できるまでポーリングを行う
[is_active = true, result = {}] ->
{ while is_active |
sleep(wait_time) ->
urlopen(
url='https://(スペース ID).cloud.kompira.jp/api/apps/pigeon/results/{}'.format(res.resultId),
headers=head,
quiet=true
) ->
[
decoded_content = decode($RESULT.content),
result = json_parse(decoded_content)
] ->
[is_active = result.isActive]
} ->
print('架電で入力されたボタン: ', result.keyInput) ->
print('ステータス: ', result.status)
上記ジョブフローにおける (API トークン文字列) 、(コールフロー ID 文字列) 、(ガイダンス ID 文字列) 、(スペースID) は、お使いのものにカッコを含めて置き換えてください。
また、 “parameters” の “server” と “incident” には、Kompira cloud のガイダンス設定画面において {{}} で指定したキーワードを置換する文字列を指定してください。
また、このジョブフローでは、架電実行をした後に、結果が取得できるまでポーリング処理を行っています。架電結果は架電実行時に生成された “resultId” を参照して API から取得します。ポーリング間隔はジョブフロー引数で設定した “wait_time” の秒数間隔で結果取得を行います。
このジョブフローを実行しますと、指定の電話番号に「テスト用サーバーに軽度の障害を検出しました。…」とメッセージが再生されます。
架電処理が完了したとき、 ジョブフローのコンソール画面に以下のような結果が出力されます。今回のジョブフローでは架電で入力されたボタンとステータスを出力しています。

他にも各架電の時刻、コールフロー、ガイダンス内容などを結果から取得することができます。詳細な取得可能なデータにつきましては Kompira cloud の API ドキュメントを参照ください。
このようにして、 ジョブフローで架電処理を実行し、架電結果を取得することができます。応用することで、架電結果に応じて処理を分岐させることもできます。








