クラウド型 ワークフロー

Twilio で電話の無いコールセンター!? (受電で業務プロセスを自動開始編)

Twilio を利用して、問い合わせの電話から自動的に「Questetra BPM Suite」のプロセスを開始する仕組みを実現

CTOなので、たまには技術の話題を…

ワークフローサンプル』で、FAX を受信すると同時にプロセスを開始するソリューションについて記載されています。FAX ではなく、電話で類似のことを実現できるでしょうか?

今回は

  • 問い合わせ電話を受けると、自動的にプロセスを起動する
  • 通話内容もプロセスに添付する

ということを考えたいと思います。

電話については、Twilioというサービスを使います。Twilio は電話に関する各種機能をWebベースで提供しているサービスで、

  • 電話をかける
  • SMSを送る
  • 指定の電話番号に着電があると、自動応答を行う

といったことができます。このサービスに加えて、Questetra BPM Suite との仲介を行う役割として Google App Engine を使用します。

全体の仕組みは以下の通りです。

0. 予め Twilio で電話番号を取得し、問い合わせ電話番号として公開する

予め Twilio で電話番号を取得しておきます。
そしてその電話番号を「問い合わせ電話番号」として公開します。

1. ユーザは問い合わせ電話番号に電話をかける

まずユーザは 0 で公開済みの問い合わせ電話番号に電話をかけます。
ユーザは、Twilio に電話をかけていることになります。

2. Twilio から Google App Engine へHTTPリクエスト

Twilio は電話を受けると、Google App Engine へ HTTP リクエストを送信します。
この時、どこに HTTP リクエストを送信するかも、予め Twilio に登録しておきます。
Twilio の管理画面では、「取得した電話番号に電話があったら、このURLにHTTPリクエストを送信する」という登録を行うことができます。

3. HTTPリクエストに対して、Google App Engine から 電話を転送するように応答する

Google App Engine では、Twilio から HTTPリクエストを受けると、以下のXMLを返すようにします。

<Response>
<Say>Please wait for few seconds.</Say>
<Dial record="true" action="http://questetra-twilio.appspot.com/callend" method="GET">+81752055007</Dial>
</Response>

このXMLは TwiML と呼ばれるもので、Twilio で定義されているものです。XMLの内容は、以下の通りです。

  • “Please wait for few seconds.” と自動応答する (<Say>…</Say>)
  • その上で、”+81752055007″ に電話を自動転送する (<Dial …>+81752055007</Dial>)
  • 転送した電話の内容を、録音する (record=”true”)
  • 電話が完了したら、指定のURLにHTTPリクエストをGETで送信する (action=”http://questetra-twilio.appspot.com/callend” method=”GET”)

4. ユーザと問い合わせ担当者が通話

Twilio は Google App Engine から応答を受け取ると、TwiML の内容に従って処理を行います。
ユーザの電話は問い合わせ担当者に転送され、かつその通話内容は録音されます。

5. 通話終了時に、Google App Engine へHTTPリクエスト

ユーザと問い合わせ担当者の通話が終了すると、Twilio は TwiML で指定されたURL にHTTPリクエストを行います。
この際、録音した通話内容をダウンロードできる URL がHTTPパラメータに含まれます。

6. Google App Engine は Twilio からの HTTP リクエストを解析し、Questetra BPM Suite へ HTTP リクエスト

Google App Engine は Twilio から HTTP リクエストを受け取ると、その内容を解析します。
その上で、Questetra BPM Suite のメッセージ開始イベントを呼び出して、プロセスを開始します。
そのプログラムを添付します。(拡張子がtxtになっていますが、このサイトの都合です。java のプログラムです。) ポイントを以下に記します。

String from = request.getParameter("From");
String recordingUrl = request.getParameter("RecordingUrl");
log(from);
log(recordingUrl);

response.setContentType("application/xml");
response.getWriter().print("<Response />");

if (from != null && recordingUrl != null) {
sendToQbpms(from, recordingUrl);
}

Twilio からの HTTP リクエストには、通話に関するデータがHTTPパラメータとして含まれています。プログラムではその内の2つを使用しています。

  • From: 誰からの通話であるか。
  • RecordingUrl: 通話内容が録音されているURL

プログラムではこのパラメータの値を取得し、Questetra BPM Suite のメッセージ開始イベントのURLへ HTTP リクエストを送信しています。

 

いかがでしたでしょうか。例外処理をまったくしていませんが、意外と簡単に実現できました。
ひと昔前なら、CTI サーバと PBX や CRM と連携させる大がかりなシステムでしたが、今ではクラウドだけでもソコソコのコールセンターシステムが作れそうです。ただこの仕組みにも、以下のような問題があります。

  • Twilio が米国のサービスであり、通話のレイテンシが大きい
  • 自動応答について、日本語に対応していない

しかし、この点については、近々、解決されそうです。KDDI Web Communications が Twilio と提携し、日本向けのサービスを本格的に開始するそうです。

今回は Twilio の一部機能を活用したのみです。色々試した上で、続編を書きたいと思います。
もしかしたら、近い将来、Questetra BPM Suite に電話に関連した機能が追加されるかも!?

 

★関連ブログ投稿

あわせて読みたい
15.野望・展望・志 の前の記事 NFC スマホの「かざす」で日常業務カイゼン!
15.野望・展望・志 の次の記事 ノン・プログラミング!!
Hatanaka Akihiro の他の記事 システム管理者の方は、時々、外部公開しているフォームの確認を

アーカイブ

 RSS