クラウド型 ワークフロー

電話をかけてワークフローを開始する方法

twilio → Google Apps Script(GAS) → Questetra BPM Suite の連携事例です。

 

今回は少し変わった連携事例を紹介します。

電話をかけて必要な番号をプッシュするだけでプロセスを開始したい。

このような要望をいただき、対応したケースがあります。
年配の方が利用されるということで、スマホ(のブラウザ)で操作させるのも避けたいというものでした。
今回はその事例をベースにして、電話との連携を実現する方法をご紹介します。

1.具体的な利用イメージ

  1. 所定の番号に電話をかける
  2. 開始したいプロセスモデルと番号の対応付けの説明音声が流れるので、起動したいプロセスモデルの番号とシャープをプッシュ
  3. 指定されたプロセスモデルが開始されて、そのプロセスの id が音声で流れるのでメモ(例えば経費精算のプロセスの場合なら、その番号を領収書にメモする)

Call_push_memo

2.仕組みの説明

処理の仕組みは以下の通りです。

  1. [人の操作] twilio で付与された電話番号に電話をかける。
  2. [twilio] 指定された URL にアクセス(Google Apps Script で作成した Web アプリケーションにデータ送信)する。
  3. [Google Apps Script] 電話の発信元番号等をチェックして、電話での音声説明させる内容を含む XML(TwiML) を返す。
  4. [twilio] 返ってきた XML に沿って音声で内容を伝え、番号がプッシュされるのを待つ。
  5. [人の操作] 説明を聞いて電話で番号をプッシュする。
  6. [twilio] プッシュされた番号をデータとして、指定された URL にアクセスする。
  7. [Google Apps Script] API を通じて Questetra BPM Suite のプロセス開始を行い、最後に開始したプロセス id を音声説明させる XML を返す
  8. [twilio] 返ってきた XML に沿って音声でプロセス id を伝える。

twilio_GAS_QBPMS

3.設定方法

以下がそれぞれ必要となる。指定するパラメータが決まる順番を考慮して、下層より設定していく。

  • twilio → 電話がかかったら Google Apps Script を呼び出すよう設定
  • Google Apps Script → twilio から呼び出されたら、必要な処理を行って、XML を返すプログラムを準備
  • Questetra BPM Suite → Google Apps Script からプロセス開始できるよう http リクエストを受信できるよう設定

3.1 Questetra BPM Suite 側の準備

Google Apps Script からデータが送られてきたら起動するプロセスモデルを準備する。
「メッセージ開始イベント(HTTP)」というデータの受け口が必要となる。
BPMN-message-start-event-http

※Google Apps Script と接続するための URL はプロセスモデルをリリースをしないと確定されないので注意してください。リリース済で「メッセージ開始イベント(HTTP)」のプロパティの「URL・パラメータ詳細」を開くと以下のような画面が表示されますので、その内容にあわせて次の Google Apps Script 側の準備を進めてください。

message-start-event-http-property

3.2 Google Apps Script 側の準備

Google Apps Script(GAS)で以下の処理を準備する。

  • twilio からの URL アクセス(http リクエスト)を受ける処理
  • (Google Spreadsheet 上のデータを使って発信者番号等をチェックする処理)
  • 電話とのやりとりのフェーズにあわせて、電話でしゃべらせる説明のための XML(TwiML) をレスポンスとして返す処理
  • API を通して Questetra BPM Suite のプロセス開始を行う処理
サンプルコード
var GAS_URL = "https://script.google.com/macros/s/xxxxxx/exec"

var Q_URL = "https://xxxxxxx.questetra.net/System/Event/MessageStart/start";
var Q_KEY = "xxxxx";
var Q_PROCESS_MODEL_NAME_1 = "経費精算";
var Q_PROCESS_MODEL_INFO_ID_1 = "1";
var Q_NODE_NUMBER_1 = "0";
var Q_PROCESS_MODEL_NAME_2 = "接待精算";
var Q_PROCESS_MODEL_INFO_ID_2 = "2";
var Q_NODE_NUMBER_2 = "0";

var ADMIN_EMAIL = "test@example.com"

/**
* http リクエスト受信
*/
function doGet(e) {
  return  receive_(e);
}

function doPost(e) {
  return  receive_(e);
}

function receive_(e) {
//  var caller = e.parameter['Caller']; //電話をかけてきた番号
  var digits = e.parameter['Digits']; //プッシュされた番号
  var phase = e.parameter['phase']; //処理フェーズ判断フラグ

  //あらかじめ登録された電話番号以外なら無視する処理をはさむのがベター
  //また、電話番号から処理担当ユーザがひもづけられるよう Questetra に電話番号に対応したメールアドレスを送る処理をはさむべき(サンプルでは割愛)

  var out;
  switch (phase) {
    case '1':
      out = ContentService.createTextOutput(buildXmlGuide());
      break;

    case '2':
      var id = startProcess(digits);
      if (id == "") {
        out = ContentService.createTextOutput(buildXmlError());
      } else {
        out = ContentService.createTextOutput(buildXmlResult(id));
      }
      break;

    default:
      out = ContentService.createTextOutput(buildXmlError());
      break;
  }

  out.setMimeType(ContentService.MimeType.XML);
  return out;
}

/**
* Questetra BPM Suite プロセス開始
*/
function startProcess(process_model_no) {
  var payload = "";

  if (process_model_no == 1) {
    payload += "processModelInfoId=" + Q_PROCESS_MODEL_INFO_ID_1;
    payload += "&nodeNumber=" + Q_NODE_NUMBER_1;
  } else if (process_model_no == 2) {
    payload += "processModelInfoId=" + Q_PROCESS_MODEL_INFO_ID_2;
    payload += "&nodeNumber=" + Q_NODE_NUMBER_2;
  } else { //プッシュ番号がおかしい場合はエラー
    return "";
  }

  payload += "&key=" + Q_KEY;
  var params = {
    method: 'post',
    payload: payload
  };

  try {
    var response = UrlFetchApp.fetch(Q_URL, params);
    return response.getContentText()
  } catch (e) {
    MailApp.sendEmail(ADMIN_EMAIL, 'GAS  error', e);
    return "";
  }
}

/**
* twilio 向け TwiML 生成
*/
function buildXmlGuide() {
  var out_string = '';

  out_string += '<Response>';
  out_string += '<Gather finishOnKey="#" action="' + GAS_URL + '?phase=2" method="post" timeout="30">';
  out_string += '<Say language="ja-jp" voice="woman">';
  out_string += 'こちらは電話自動処理システムです。';
  out_string += '「' + Q_PROCESS_MODEL_NAME_1 + '」は1を、';
  out_string += '「' + Q_PROCESS_MODEL_NAME_2 + '」は2を、';
  out_string += '押した後、シャープを押してください。';
  out_string += '</Say>';
  out_string += '</Gather>';
  out_string += '</Response>';

  return out_string;
}

function buildXmlResult(id) {
  var out_string = '';
  var id_string = String(id);

  out_string += '<Response>';
  out_string += '<Say language="ja-jp" voice="woman">';
  out_string += '結果アイディーは';
  out_string += '</Say>';
  out_string += '<Pause length="1"/>';
  out_string += '<Say language="ja-jp" voice="woman">';
  for (i = 0; i < id_string.length; i++) { //idの数字を1けたずつ読ませる
    out_string += id_string[i] + "、";
  }
  out_string += 'です';
  out_string += '</Say>';
  out_string += '</Response>';

  //繰り返してidを読ませた方がベター

  return out_string;
}

function buildXmlError() {
  var out_string = '';

  out_string += '<Response>';
  out_string += '<Say language="ja-jp" voice="woman">';
  out_string += 'エラーが発生したので再実行してください。';
  out_string += '</Say>';
  out_string += '</Response>';

  return out_string;
}

サンプルコードから編集すべき部分は以下の通り。

    • 1行目、GAS を Web アプリケーションとしてデプロイした時に付与される URL に変更。(デプロイ手順は後述)
var GAS_URL = "https://script.google.com/macros/s/xxxxxx/exec"
    • 3~10行目、対象の Questetra BPM Suite 環境にあわせて変更。
var Q_URL = "https://xxxxxxx.questetra.net/System/Event/MessageStart/start";
var Q_KEY = "xxxxx";
var Q_PROCESS_MODEL_NAME_1 = "経費精算";
var Q_PROCESS_MODEL_INFO_ID_1 = "1";
var Q_NODE_NUMBER_1 = "0";
var Q_PROCESS_MODEL_NAME_2 = "接待精算";
var Q_PROCESS_MODEL_INFO_ID_2 = "2";
var Q_NODE_NUMBER_2 = "0";
    • 12行目、自分で受信できるメールアドレスに変更。
var ADMIN_EMAIL = "test@example.com"

Google Apps Script にバージョンを付与して、Web アプリケーションとしてデプロイする。またデプロイした後に処理実行のための承認が必要となるので、一度仮実行まで行って、承認処理を行う。

※Google Apps Script の基本的な操作方法については割愛します。こちらを参考にしてください。また画面キャプチャが英語のものになってますが、日本語でもメニュー位置は同じですので、読み替えてください。

1. まず、デプロイを行う。「File」メニューから「Manage versions」を選択
gas1_

2. コメントを入れて「Save New Version」をクリック(コメントは空欄でも可)
gas2

3. 新たに Save されたバージョンが表示されるので「OK」をクリック
gas3

4.「Publish」メニューから「Deploy as web app」を選択
gas4_

5. 「Project version」は先ほど Save したバージョンを指定し、「Who has access to the app」は「Anyone, even anoymous」(一番下の選択肢、許容範囲が一番広い)を選択して「Deploy」をクリック
(Google Drive の設定で外部公開が許可されていないと「Anyone, even anonymous」が選択肢に出てこないので注意)
gas5

6. web app URL が表示されるので、クリップボードにコピーしておいて、「OK」をクリック。
gas6

7. コピーした URL をサンプルコードの1行目に設定・保存して、再度 Managed version から deploy まで行う。すでに deploy 済の場合は、deploy 時の画面は以下のように少し変わり、Project version を変更しないといけないので注意
gas6_2

8. 次に、仮実行を行う。「Select function」から「doGet」を選択
gas7_

9. 実行ボタンをクリック
gas8

10. 承認を求められるので「Continue」をクリック
gas9

11. 承認内容の詳細が表示されるので「Accept」をクリック。(この後、doGet のパラメータがないことによるエラーが表示されるが無視)
gas10

※Questetra BPM Suite の API 詳細については、こちらを参照ください。
「ソフト開発API: ワークフローAPIs (Workflow APIs)」の中の「プロセス開始API / Process Start API」・「タスク処理API / Task Handling API」と「ソフト開発API: 認証を要するAPI通信における認証方式」が今回必要な部分になります。

3.3 twilio 側の準備

Google Apps Script で準備した Web アプリケーションを呼び出すよう URL(リクエストパラメータを含む)を設定する。
※動きを確認するためのテストのレベルであれば、無料版の範囲で十分行えます。

1. アカウントポータルで「Now, configure it to receive calls and messages.」をクリック
(もし twilio にサインインした直後の場合は、電話番号の右横の「始めましょう」をクリックして、「アカウントポータルに移動」をクリックすると、この画面に移動します)
twi1

2. 左の方にある赤字の電話番号をクリック
twi2

3. 「Request URL」に Google Apps Script で付与された URL に「?phase=1」を付加したものを入れて「保存」クリック
twi3

設定が完了したら twilio で付与された電話番号にかけてみて、Google Apps Script でコーディングされている内容が音声で流れるか、Questetra BPM Suite のプロセスが開始されるかを確認してみてください。

以前に、Google Apps Engine を使った twilio との連携を実現する方法をこのブログで紹介させていただいたこともありますので、こちら(twilio 関連の記事)も参考にしていただければと思います。

今回のような電話との連携を使うことで、例えば以下のような電話での資料請求&営業フォローの仕組みも構築可能となります。

  1. 電話をかけた人は、番号をプッシュして請求したい資料を選ぶ。
  2. 同時に、資料を送信する FAX 番号も入力する。
  3. その後、選ばれた資料が FAX で 2. の FAX 番号宛に送信される。
  4. 営業マンは 1. で電話をかけた人の番号宛に電話をして、フォローする。

 

もし電話との連携を行うプロセスモデル実現をご要望の場合には、お問合せフォームから日下(くさか)宛てにご連絡ください。

Kusaka Tsuyoshi の紹介

営業をやってますが、もともとエンジニアなので、プログラミングもやります。
Kusaka Tsuyoshi の投稿をすべて表示

あわせて読みたい
50.Questetra Tips の前の記事 Googleカレンダー上の予定からワークフローを開始する方法
50.Questetra Tips の次の記事 FAQ. ワークフローAからワークフローBに連携できますか?
Kusaka Tsuyoshi の他の記事 クレジット決済代行サービス stripe とクラウドワークフローとの連携

アーカイブ

 RSS