ワークフローの途中で、自動的に電話をかける

クエステトラユーザのみなさん、こんにちは。開発責任者の畠中です。

今日は、11.7 の新機能「受信タスク (Webhook)HTTP レスポンス内容を設定できるように対応」と、Twilio を組み合わせて、ワークフローの途中で自動的に電話をかけることを実現したいと思います。

Ver.11.7 ワークフロー途中で入力を受け付ける公開フォームに対応 (2018年6月11日)

メールや SNS の発達で、めっきり電話をかける機会が減りました。しかし緊急時の連絡には、やはり電話だとか。

即時性が高いのと、相手の反応を要求できるという点で、優れているのですね。通知機能として電話は、まだまだ現役です。

さて、ワークフローの途中で電話をかける、簡単なワークフローアプリを作ります。
が、その前に Twilio と「電話をかける API」について、少し説明をします。

https://www.twilio.com/

Twilio は、電話・SMS・ビデオ電話といった、電話関係のコミュニケーションを支援するクラウドサービスです。Twilio の API を活用することで、コンピュータシステムに電話等の機能を組み込むことができます。日本国内向けには、KDDI の子会社が代理店をしています。

https://twilio.kddi-web.com/

今回、Twilio の API の中でも「電話をかける API」を使用しています。

Twilio Voice API Call

以下、2ステップで実現されます。

  1. Twilio の API に対して、POST リクエストを送り、「電話をかける」指示を送る。自身の Twilio アカウントと、発信先電話番号を伝える。この時点では、話す内容は含まれない。
  2. 電話がつながると、特定の URL に対して、Twilio からコールバックの HTTP リクエストがある。そのリクエストに対して、話す内容 (TwiML という XML) を応答で返す。コールバックのある URL は、1 のリクエスト時に指定します。

さて、話は戻ってワークフロー図です。

大枠として、以下の処理の流れになっています。

  1. 「入力」工程で、「発信先電話番号」と「通話内容」を入力します。
  2. AND ゲートウェイで、上下2つの流れに分流しています。上の流れが、先の「電話をかける API」のステップ 1 に、下の流れがステップ 2 に相当します。従って、実際の処理の流れとしては「上の流れ」が先に行われ、「下の流れ」が後に行われます。
  3. サービスタスク(データ設定)で、コールバック URL を計算します。コールバック URL は、5 の受信タスク (Webhook)の URL です。
  4. メッセージ送信中間イベント (HTTP) で、Twilio の API へリクエストを行います。この時点で、Twilio 経由で電話の発信が行われます。
  5. 電話がつながると、受信タスク (Webhook) に Twilio からのコールバックがあります。受信タスク (Webhook) で話す内容を Twilio に返します。Twilio はその内容を、通話者に話します。

続いてデータ項目です。「件名」は特に使っていません。
人間にとっては、「電話番号」と「通話内容」の2つです。
「API Key」は受信タスク (Webhook) で使うものであり、「callback url」は受信タスク (Webhook) の URL を一時的に保持するために使います。

データ項目 タイプ 必須 「入力」ヒューマンタスク
件名 編集可
電話番号 文字型単一行 編集可
通話内容 文字型複数行 編集可
API Key 文字型単一行 表示のみ
初期値 #{#randomString(20)}
callback url 文字型単一行 表示のみ

続いて、サービスタスク(データ設定)の設定です。 受信タスク (Webhook) の URL を計算しています。
#{data['1']} は、「API Key」の値を参照しています。

データ項目 callback url
値もしくは式
https://XXXXXXXX.questetra.net/System/ReceiveTask/Http/1234/5/#{processInstanceId}/#{data['1']}/receive

続いて、メッセージ送信中間イベント (HTTP) の設定です。Twilio の API にアクセスし、電話の発信をします。
その前に、アプリ内で設定している変数の一覧を示します。

変数
AccountSID Twilio のアカウント ID (アカウント SID)
AuthToken API へのアクセスに使用するトークン (AUTHTOKEN)。パスワードのようなもの。
PhoneNumber 発信用電話番号。Twilio で購入したもの。国際電話の形式で指定。

今回、Twilio を使用しますので、Twilio のアカウントが必要です。
Twilio のアカウントを取得し、ログインすると、ログイン直後のダッシュボードにて、

  • アカウント SID
  • AUTHTOKEN

を確認することができます。AUTHTOKEN の値を確認できるのは、”View” をクリックした先です。

発信用電話番号は、サイドメニューの “All Products & Services” から “Phones” に移動し、そこから電話番号を購入してください。電話番号によってできることが異なりますが、日本の電話番号の場合、すべて音声通話 (VOICE) と FAX の機能を持っていると思います。音声通話ができる番号を購入してください。

Twilio はグローバルなサービスですので、電話番号は国際電話の形式で指定する必要があります。日本の電話番号を購入した場合は、”+81″ から指定してください。

それでは、メッセージ送信中間イベント (HTTP) の設定です。Twilio の電話をかける API にアクセスします。

 

アクセス URL https://api.twilio.com/2010-04-01/Accounts/${var[AccountSID]}/Calls.json
HTTP Method POST (application/x-www-form-urlencoded)
セキュリティ Basic 認証で接続する
ユーザ名 ${var[AccountSID]}
パスワード ${var[AuthToken]}

送信パラメータについては以下の通りです。

パラメータ名
From ${var[PhoneNumber]}
To 「電話番号」
Url 「callback url」

最後に受信タスク (Webhook) の設定です。Twilio のコールバックに対して、「話す内容」を返します。
#{data['3']} は、「通話内容」の値を参照しています。#escapeXml() で、XML エスケープしています。

API キーの値を指定する文字型データ項目 「API Key」
受信する HTTP リクエストのメソッド POST
受信する HTTP リクエストの Content-Type application/x-www-form-urlencoded
リクエストボディ保存先の文字型データ項目
HTTP レスポンスの Content-Type text/xml;charset=UTF-8
HTTP レスポンスの内容
<?xml version="1.0" encoding="UTF-8"?>
<Response>
    <Say voice="alice" language="ja-JP" loop="3">#{#escapeXml(data['3'])}</Say>
</Response>

話す内容は、TwiML という XML 形式に従っています。

TwiML for Programmable Voice

<Say> は、中身のテキストを自動読み上げするタグです。他にも音声ファイルを再生する <Play> などがあります。voice は声の種類、language は言語を指定しています。日本語の場合、この組み合わせ以外、動作しません。loop は自動読み上げの繰り返し回数を指定しています。

今回は以上となります。

最後に1つ注意点。
Twilio はグローバルなサービスですので、電話番号は国際電話の形式で指定する必要があります。
「入力」工程で指定する「電話番号」も、日本の電話番号宛の場合、”+81″ から指定しなければなりません。

「ワークフローの途中で、自動的に電話をかける」に2件のコメントがあります

  1. ピンバック: 申込フォームで、電話番号の存在確認をはさむ – Questetra Support

  2. ピンバック: クラウド BPM ワークフローの他システム連携事例集(2019年6月版) - Questetra

コメントは受け付けていません。

%d人のブロガーが「いいね」をつけました。