よくあるお問い合わせ (FAQ)

Twilio で相手が人間か機械かを判別することはできますか ?

Twilio には留守番電話検知という実験段階の機能があります。Twilio API で発信した通話に人間が応答したか、または留守番電話が応答したかをおおまかに判別できます。詳細は、REST API: 通話を開始する/応答者による処理の切り替え セクションを御覧ください。

この機能はアメリカの電話文化に合せた実装のため、日本の電話文化には一致せず、日本の留守番電話検知には向いていないことをご理解ください。

 

  •  AMD (Answering Machine Detection) の仕組み

留守番電話検知 (略して AMD と呼びます) は、通話に最初の数秒間の音声を聞いて解析を行います。 通話の応答者が人間でも機械でも、シグナリングに差異はありません。このため、Twilio は通話の最初の数秒間の音声パターンを解析し、これに従って判定を行います。

応答者が人間の場合の典型的なパターンは、まず「もしもし」という発話があり、その後に相手が「もしもし」と応答するのを待つ間があります。 これは基本的に、音声の後に無音状態が続く、ということです。

一方、ボイスメールの典型的なパターンは、「もしもし、こちらは...です...」のように、発話が継続します。 音声が継続し、無音状態はありません。 AMD はこのパターンを検知します。 無音が続けば人間、音声が継続すればボイスメールということになります。

AMD は典型的な発話パターンを元にあいさつの発話を測定し、これによって判別を行います。 このため、成功率は 100% ではありません。

  • AMD の使いかた

AMD を使用するには、通話を発信する際の `POST` リクエストに `IfMachine` パラメーターを追加します。

`IfMachine` には 2 つの値があります。

 

Continue
Twilio が留守番電話を検知した場合、発信音が聞こえるまで待機し、その後コール フローを継続します。

Hangup
Twilio が留守番電話を検知した場合、すぐに電話を切ります。 このようにして切った通話は、課金されません。


通話をかける際の `POST` リクエストのサンプルは次の通りです。ここでは発信音が聞こえるまで待機し、その後コール フローを継続します。


POST /2010-04-01/Accounts/AC30947.../Calls
From=+19999779999&To=+19999889999&Url=http://example.com/twiml.php?IfMachine=Continue

リクエストに `IfMachine=Continue` パラメーターをつけて通話を発信した場合は、TwiML を取得するためにユーザー アプリケーションに発行する Twilio のリクエストに、`AnswerdBy` パラメーターを含めます。

`AnsweredBy` は 2 つの値を取ることができます。


machine 
Twilio は機械が応答したと判定しています。

human
Twilio は人間が応答したと判定しています。

 

これらの値を使って、ユーザーのアプリケーションの動作を決めることができます。次のようになります。


<?php 
header('Content-type: text/xml');
echo '<!--?xml version="1.0" encoding="UTF-8"?-->';
echo '';
switch($_POST['AnsweredBy']){
case 'machine':
echo "We're sorry you're not there. We will leave a message.";
break;
case 'human':
echo "So nice to talk to a real human!";
break;
}
echo '';
?>

  • AMD の代替機能

AMD はすべてのユース ケースに適切とは限りません。AMD が適切でない場合でも、これとは別の機能がユーザーのアプリケーションに適切である可能性があります。

「人間検知」

AMD の代替機能として、コール スクリーニング (「人間検知」とも呼びます) があります。

この方法では、人間に対してキーを押すように求め、キーが押されなければ相手はボイスメールであると想定します。 この場合は、アプリケーションに後で通話をリトライさせ、2 回目で人につながることがありえます。

「人間検知」は、メッセージを人間の相手に伝えるだけの場合は、信頼性が高い方法です。 ただし、ボイスメールにメッセージを残したい場合は、「人間検知」の使用はお勧めしません。 これは、ボイスメールの応答メッセージの長さは一定でないので、AMD と異なりボイスメールの録音が始まる前にコール フローが先に進んでしまう可能性が高いためです。

コール スクリーニングの簡単なサンプルです。

 

**index.xml**

 

<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Gather action="message.xml" method="get">
<Say>Press any key to hear an important message about your appointment.</Say>
</Gather>
</Response>

**message.xml**

<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Say>This is a message that you only want a person to hear.</Say>
</Response>

メッセージのループ

「こちらはフクロウ小学校です。今日は雪のため休校になりました」のような短いメッセージの場合は、メッセージをループさせてもよいかもしれません。 これなら相手が人間でも機械でも、メッセージを確実に伝えることができます。 この方法は、動詞の loop 属性を追加することで可能になります。

 

 
他にご質問がございましたら、リクエストを送信してください

0 コメント

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