ボイスメール検出(自動機械検出)
Vonage Voice APIを使用してアウトバウンドの音声体験を作成する場合、誰が、あるいは場合によっては何が電話に応答するかを考慮する必要があることがあります。もしかすると、構築する必要があるエクスペリエンスは人間専用で、その場合、ボイスメールシステムが電話に出たときに通話を切断する必要があるかもしれません。あるいは、ボイスメールシステムが電話に出た場合、ビープ音の後にカスタムメッセージを残す必要があるかもしれない。
Vonageは機械検出のユースケースとして2つの異なる機能を提供している:
- 標準マシン検出 - は、基本的な機械検出機能を備えており、自動的に通話を切断するオプションや、ボイスメールで応答があったことをアプリケーションに通知するオプションがあります。追加料金なし。
- 高度な機械検出 - は、より正確な検出と、あらゆるコールフローを構築するための完全な柔軟性を提供します。 また、ビープ音の検出や、より優れた通話制御を可能にする非同期モードの機能も提供します。アドバンスト・マシン・ディテクションは有料機能です。 Voice API価格 ページの「プログラマブル機能」の下にある。
注:同じ通話で両方の方法を使用しようとすると、高度な機械検出が優先され、標準オプションは使用されません。
通話確立とマシン検出
使用される機械検出のタイプ(標準または高度)に関係なく、同じ原則が適用される。VonageのVoice APIが、
成功した通話は、マシン検出の前に必ず以下の状態を経る:
- スタート
- 呼び出し音
- 回答済み
通話が応答状態になると、機械検出が開始される。機械検出を開始するには、通話が確立され、音声がVonageに流れ始める必要がある。Vonageはこの音声の分析に基づいて、通話に応答したのが人間か機械かを判断する。
Vonageは、常にイベントウェブフックに結果を送信します。 status フィールド 人間/機械タイプのウェブフック.
これを念頭に置いて、各タイプのマシン検知の使い方に入る前に、検知と通話処理に関わる一連のイベントについて説明しよう。
同期と非同期の実装
コール処理とNCCOアクションに関して、実装には同期と非同期の2つのオプションがある。
同期モードでは、マシン検出に関連するすべてのアクティビティが実行され、それらが終了した後にのみ、VonageはNCCO命令の処理を開始する。
これが意味するのは、通話に応答した後、以下のことが順次起こるということである:
- 回答イベント
- 人間/機械イベント(アプリケーションの場合はビープ音を含む
- 最初のNCCO命令を処理する
- (オプション)NCCOの指導に関連するイベント(該当する場合)
- さらなるNCCOの指示
リモート・パーティが機械か人間かの識別には最大4~5秒かかるため、識別が完了するまでVonage側の通話は無音となる。
機械検出が行われない場合、通話に応答した後、NCCOがフェッチされ、直ちに処理が開始される。これは、人間が通話に応答する場合、通話開始時の無音状態がないことを意味し、エンドユーザー体験を向上させる。機械検知なしと機械検知の間のギャップを埋めるために、Vonageは新しい高度な機械検知サービスで非同期モードを開発した。
非同期モードでは、マシン検出ステップはNCCO処理と並行して行われる。従って、コールに応答した後、アプリケーションはこのようにしてイベントが到着し、処理されることを期待できる:

この場合、NCCOの最初のアクションはアンサーイベントの後に開始される。このアクションがトークアクションである場合、検出が行われている間、チャネルに無音がないことを意味する。さらに、最初のアクションが終了すると、Vonageは検出が行われている間、NCCOからのさらなるアクションの処理を続けます。
標準マシン検出
標準的な機械検出が有効になっている場合、アプリケーションは、ボイスメール/機械または人間が通話に応答したかを知ることができます。開発者は、機械が検出されたときの2つの動作のうち1つを定義する必要があります: continue または hangup.
たとえば、機械が応答した場合に電話を切る機械検知機能付きの通話を作成したり、NCCOを answer_url それ以外の場合。どちらの場合でも、アプリケーションは検出結果のイベントを受け取るので、相手が電話に出たかどうかを知ることができます。
これを実現するには、次のように
https://api.nexmo.com/v1/calls/認証方法としてJWTを使用する。 リクエストの本文は次のようなものでなければならない:
{
"answer_url": [
"https://example.com/answer"
],
"answer_method": "POST",
"to": [
{
"type": "phone",
"number": "14155550100",
}
],
"from": {
"type": "phone",
"number": "14155550100"
},
"event_url": [
"https://example.com/event"
],
"event_method": "POST",
"machine_detection": "hangup"
}
の代わりに hangup, continue が使用された場合、NCCOはフェッチされるが、アプリケーションは結果イベントを 人間/機械コールバック をイベントURLに追加してください。
標準的なマシン検知は同期的に行われることに注意することが重要である。つまり、検知は、最初のNCCOアクションをフェッチして処理する前に行われる。検出が行われている間、呼を受けたユーザーと対話することは不可能である。
Voice APIを使った電話のかけ方の例については、以下を参照してください。 このコード・スニペット
また、機械探知も可能である。 NCCOコネクトアクションのオプションは同じである。 hangup そして continue:
{
"action": "connect",
"eventUrl": ["https://example.com/events"],
"timeout": "45",
"from": "447700900000",
"machineDetection": "hangup",
"endpoint": [
{
"type": "phone",
"number": "447700900001"
}
]
}
高度な機械検出
Vonageの高度な機械検出機能は、検出の精度とVonageが提供できる音声体験の両方を向上させるために構築されました。
注:これはプレミアム機能で、高度機械検出が有効になっている通話1件につき0.0070ユーロの追加料金がかかります。
新規通話時に高度な機械検出を使用するには、次のように
https://api.nexmo.com/v1/calls/認証方法としてJWTを使用する。 リクエスト本文には advanced_machine_detection コンフィギュレーション
{
"answer_url": [
"https://example.com/answer"
],
"answer_method": "POST",
"to": [
{
"type": "phone",
"number": "14155550100",
}
],
"from": {
"type": "phone",
"number": "14155550100"
},
"event_url": [
"https://example.com/event"
],
"event_method": "POST",
"advanced_machine_detection": {
"behavior" : “continue”,
"mode": “default”,
"beep_timeout": 45
}
}
これは NCCOコネクトアクションのオプションは同じである。 hangup そして continue:
{
"action": "connect",
"eventUrl": ["https://example.com/events"],
"timeout": "45",
"from": "447700900000",
"advancedMachineDetection": {
"behavior" : “continue”,
"mode": “default”,
"beep_timeout": 45
}
"endpoint": [
{
"type": "phone",
"number": "447700900001"
}
]
}
例に見られるように、 advanced_machine_detection (または advancedMachineDetection)には3つの設定可能なパラメーターがある:
behavior- これは、マシンに遭遇したときにVonageプラットフォームが何をすべきかを定義します。指定できる値は以下の通りです:continue- 機械に遭遇した場合は、通話を続行する。hangup- 機械に遭遇した場合は、通話を終了する。
beep_timeout- これにより、ボイスメールのビープ音を待つ時間を定義し、ビープ音を受信しなかった場合に対応するWebhookイベントを生成することができます。mode- の主な動作のほかにhangup対continueコールを処理する際に、3つのモードのいずれかを定義することも可能である。これらの詳細については後述する。
default モード
について default モードは、通話に対して最高レベルの制御を提供する。このモードは非同期で動作するため、Vonageは検出フェーズ中にNCCOアクションの処理を開始する。
例として、このNCCOが次のNCCOフェッチに応答してVonageに返されたと仮定します。 answer_url:
[
{
"action": "talk",
"text": "Hello from Vonage Voice API. We would like to inform you of a very important message",
"language": "en-GB",
"loop": 3
}
]
通話に応答すると、このメッセージはすぐに再生され始め、機械検出アルゴリズムがリモートパーティーの音声を並行して処理している間、3回繰り返されます。
このトークアクションの間に、マシン検知結果が発生する可能性があり、その場合はウェブフックが event_url.
ウェブフックは次のようになります。 human または machine ステータスとして):
{
"from": "442079460000",
"to": "447700900000",
"status": "human/machine",
"call_uuid": "aaaaaaaa-bbbb-cccc-dddd-0123456789ab",
"conversation_uuid": "CON-aaaaaaaa-bbbb-cccc-dddd-0123456789ab",
}
人間や機械のイベントがアプリケーションに送信されるのとは無関係に、アプリケーションは2つの方法のいずれかでそのようなウェブフックに答えることができます。を返す。 204 を返す。 200 を、従来のNCCOに代わる新たなNCCOに変更する。
これは、アプリケーションが動作を区別できることを意味する。人間であれば、通話は同じNCCOで続行され、DTMF入力の要求や処理など、さらなるアクションを完了することができる。
機械であれば、ビープ音が鳴るのを待ち、カスタマイズしたボイスメールメッセージを残すことができる。A マシンイベント と sub_state beep_start はボイスメールのビープ音の始まりを示す。これに対して beep_timeout sub_state は、指定された時間待ってもビープ音が受信されなかったことを示す。また、アプリケーションは 200 ボイスメールに入れるべきメッセージを添えて、新しいNCCOでOK。
アプリケーションで実行されるコードの次のスニペットは、マシンが検出された場合に新しいトークアクションを使用し、プラットフォームがビープ音を待つべきであることを述べている(説明のため、実際の例では 204 を代わりに使うこともできる)。 sub_state は beep_start ビープ音の後に実際のボイスメールメッセージが残る。
app.post('/onEvent', (req, res, next) => {
try {
…
if(req.body.status == 'machine' && !(req.body.sub_state == 'beep_start') ) {
const ncco = [{
action: 'talk',
text: 'Oh, it\'s actually a machine. Let’s wait for beep'
}];
console.log(req.body);
res.json(ncco);
}
else if(req.body.status == 'machine' && req.body.sub_state == 'beep_start' ) {
const ncco = [{
action: 'talk',
text: 'This is a very important message Vonage will leave in the voicemail after the beep'
}];
console.log(req.body);
res.json(ncco);
}
else {
console.log(req.body);
res.send(204);
}
と default モードでは、ビープ音の直後にボイスメールメッセージを残すことができ、メッセージが切り捨てられるのを防ぐことができる。
detect モード
について detect モードは、Standard Machine Detectionと同じ動作で、より正確にマシンを識別します。これにより、Standard Machine Detectionの上に構築された古い音声アプリケーションを移行したい開発者は、最小限のコード変更で移行することができます。
通常、このモードは、マシンの存在下で通話を切断することが望ましい動作である 場合に使用されるべきである。同期なので、もし continue の代わりに hangup からのNCCOの処理を開始するのは、人間または機械が検知されるまで待つ。 answer_url それが
detect_beep モード
について detect_beep モードは detect モードでは、ビープ音の直後にボイスメールメッセージを預けることができます。このモードは continue の動作が望まれる。もし human が検出されると、次のように動作する。 detect モードでは、同期的に実行され、NCCOまたは次のNCCOアクションを処理する前にマシン検出が終了するのを待つ。
このモードの主な違いは、マシンが検出されるとVonageは beep イベント(または beep_timeout)を使用してから、NCCO または次の NCCO アクションを処理します。これにより、Vonageは効果的にメッセージを人間に届けたり、ビープ音の後にボイスメールメッセージに残したりすることができます。