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

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

Twilio には留守番電話検知という機能があります。Twilio REST API で発信した通話に人間が応答したか、または留守番電話が応答したかをおおまかに判別できます。詳細は、留守番電話検出をご参照ください。

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

AMD (Answering Machine Detection) の仕組み

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

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

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

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

AMD の使いかた

AMD を使用するには、通話を発信する際の POST リクエストに MachineDetection パラメーターを追加します。有効な値には二種類が存在します。

Enable

Twilio が人間の通話もしくは留守番電話を判別すると、いずれの場合でもすぐに AnsweredBy パラメーターに判別結果を返します。

DetectMessageEnd

Twilio が人間の通話を判別した場合は、すぐに AnsweredBy パラメーターに判別結果を返します。しかし、留守番電話を判別した場合は、そのメッセージが終わってから AnsweredBy パラメーターに判別結果を返します。

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 と異なりボイスメールの録音が始まる前にコール フローが先に進んでしまう可能性が高いためです。

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

キー入力を促すための TwiML

<?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>

人間が応答した場合の TwiML

<?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人中0人がこの記事が役に立ったと言っています
他にご質問がございましたら、リクエストを送信してください

0 コメント

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