クラウド型 ワークフロー

Twilio で電話の無いコールセンター!? (プッシュ入力で注文プロセスを開始編)

電話からの自動受注システムも Twilio と Questetra で実現!

Twilio の日本での正式サービス開始を記念して、Twilio ネタをもう少し頑張りたいと思います。

今回はこれまでと趣きを変えて、会社は商品を注文するための専用電話窓口を設けている、ユーザは電話をかけてプッシュ入力で商品を注文する、ということを考えたいと思います。シナリオとしては単純に、以下のようなものとします。

  • ユーザが注文専用窓口に電話をかけると、Twilio が注文数の入力を自動応答で促す
  • ユーザは注文数をプッシュ入力で入力し、最後に * を入力する
  • Twilio は入力された注文数を自動応答し、電話を終了する
  • Twilio はユーザの注文数を、Questetra BPM Suite に渡して、注文プロセスを開始する

questetra-twilio2

1. ユーザは注文専用窓口に電話をかける

Twilio で予め電話番号を1つ取得し、それを注文専用窓口の電話番号とします。ユーザが注文専用窓口に電話をかけるところから、シナリオは始まります。

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

Twilio は電話を受けると、事前登録した Google App Engine の URL に HTTP リクエストを送信します。

3. Google App Engine から TwiML を応答

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

<Response>
  <Gather finishOnKey="*" action="http://questetra-twilio.appspot.com/ivr" method="post" timeout="30">
    <Say voice="woman" language="ja-jp">注文数を入力し、最後に * を入力してください。</Say>
  </Gather>
</Response>

<Gather> はプッシュ入力の値の取得を指示するタグです。finishOnKey 属性で入力の終了を表すキーを指定、action 属性で終了時に行われる HTTP リクエストのURL、method 属性はその時のHTTPリクエストの種類を指示しています。timeout はユーザの入力を受け付ける最大時間です。

4. Twilio と ユーザがやり取り

Twilio は Google App Engine から TwiML を受けると、その内容に従って処理をします。まず「注文数を入力し…」と、ユーザに自動応答します。ユーザはそれを受けて注文数をプッシュ入力し、最後に「*」を入力します。

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

ユーザから「*」の入力を受けると、Twilio は Google App Engine へ HTTP リクエストを送ります。それは先程の TwiML 内、<Gather>タグのaction 属性で指定した URL です。

6. Google App Engine は Questetra BPM Suite へ HTTP リクエスト

Google App Engine は Twilio から HTTP リクエストを受けると、その内容を解析します。そのプログラムを添付します。拡張子がtxtになっていますが、このサイトの都合です。java のプログラムです。ポイントを以下に記します。

String from = request.getParameter("From");
String digits = request.getParameter("Digits");
int order = 0;
try {
  order = Integer.parseInt(digits);
} catch (NumberFormatException e) {}
log(from);
log(digits);

TwiMLResponse twiml = new TwiMLResponse();
try{
  Say say = new Say("注文数は" + order + "ですね。ご注文ありがとうございました。");
  say.setLanguage("ja-jp");
  say.setVoice("woman");
  twiml.append(say);
} catch (TwiMLException e) {
  throw new IOException(e);
}

response.setContentType("application/xml; charset=UTF-8");
response.getWriter().print(twiml.toXML());

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

From は発信元電話番号が含まれるリクエストパラメータ、Digits はプッシュ入力した値が含まれるリクエストパラメータです。これらの値を取得し、 Questetra BPM Suite のメッセージ開始イベントに対して、HTTP リクエストを送っています。

またここでも TwiML を応答しているのですが、今回は Twilio のライブラリを使用して、動的にTwiML を作成しています。応答している TwiML の内容は以下のようなものです。注文数の「2」の部分は、ユーザのプッシュ入力の値に応じて、動的に変わります。

<Response>
    <Say voice="woman" language="ja-jp">注文数は2ですね。ご注文ありがとうございました。</Say>
  </Gather>
</Response>

 

いかがでしたでしょうか。この仕組みにはちょっと嬉しくないところがあって、「注文数」をTwilio が「ちゅうもんかず」と読んでくれるところです。Twilio の音声自動合成のバージョンアップに期待したいですね!

 

★関連ブログ投稿

あわせて読みたい
15.野望・展望・志 の前の記事 「業務プロセス」 って、なんですか??
15.野望・展望・志 の次の記事 コンソーシアム加盟はビジネスソフト輸出の近道になるか?
Hatanaka Akihiro の他の記事 Questetra と Cacoo の連携プレー(その3)

アーカイブ

 RSS