
クエステトラユーザのみなさん、こんにちは。開発責任者の畠中です。
今日は、11.7 の新機能「受信タスク (Webhook)HTTP レスポンス内容を設定できるように対応」と、Twilio を組み合わせて、ワークフローの途中で自動的に電話をかけることを実現したいと思います。
Ver.11.7 ワークフロー途中で入力を受け付ける公開フォームに対応 (2018年6月11日)
メールや SNS の発達で、めっきり電話をかける機会が減りました。しかし緊急時の連絡には、やはり電話だとか。
即時性が高いのと、相手の反応を要求できるという点で、優れているのですね。通知機能として電話は、まだまだ現役です。
さて、ワークフローの途中で電話をかける、簡単なワークフローアプリを作ります。
が、その前に Twilio と「電話をかける API」について、少し説明をします。
Twilio は、電話・SMS・ビデオ電話といった、電話関係のコミュニケーションを支援するクラウドサービスです。Twilio の API を活用することで、コンピュータシステムに電話等の機能を組み込むことができます。日本国内向けには、KDDI の子会社が代理店をしています。
今回、Twilio の API の中でも「電話をかける API」を使用しています。
以下、2ステップで実現されます。
- Twilio の API に対して、POST リクエストを送り、「電話をかける」指示を送る。自身の Twilio アカウントと、発信先電話番号を伝える。この時点では、話す内容は含まれない。
- 電話がつながると、特定の URL に対して、Twilio からコールバックの HTTP リクエストがある。そのリクエストに対して、話す内容 (TwiML という XML) を応答で返す。コールバックのある URL は、1 のリクエスト時に指定します。
さて、話は戻ってワークフロー図です。
大枠として、以下の処理の流れになっています。
- 「入力」工程で、「発信先電話番号」と「通話内容」を入力します。
- AND ゲートウェイで、上下2つの流れに分流しています。上の流れが、先の「電話をかける API」のステップ 1 に、下の流れがステップ 2 に相当します。従って、実際の処理の流れとしては「上の流れ」が先に行われ、「下の流れ」が後に行われます。
- サービスタスク(データ設定)で、コールバック URL を計算します。コールバック URL は、5 の受信タスク (Webhook)の URL です。
- メッセージ送信中間イベント (HTTP) で、Twilio の API へリクエストを行います。この時点で、Twilio 経由で電話の発信が行われます。
- 電話がつながると、受信タスク (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 形式に従っています。
<Say>
は、中身のテキストを自動読み上げするタグです。他にも音声ファイルを再生する <Play>
などがあります。voice
は声の種類、language
は言語を指定しています。日本語の場合、この組み合わせ以外、動作しません。loop
は自動読み上げの繰り返し回数を指定しています。
今回は以上となります。
最後に1つ注意点。
Twilio はグローバルなサービスですので、電話番号は国際電話の形式で指定する必要があります。
「入力」工程で指定する「電話番号」も、日本の電話番号宛の場合、”+81″ から指定しなければなりません。
ピンバック: 申込フォームで、電話番号の存在確認をはさむ – Questetra Support
ピンバック: クラウド BPM ワークフローの他システム連携事例集(2019年6月版) - Questetra