https://d226lax1qjow5r.cloudfront.net/blog/blogposts/improve-your-automatic-speech-recognition-best-practices-for-ivrs/ivr_asr-1.png

自動音声認識を改善しましょう:IVRのベストプラクティス

最終更新日 December 11, 2021

所要時間:1 分

コールセンターのメニューをより使いやすいものにしたいのであれば、DTMF(キーパッドを使って番号を入力するオプション)をIVR(インタラクティブ・ボイス・レスポンス)に置き換えるのが良い手始めになるでしょう。しかし、「請求書を払え」などと電話に向かって叫ぶのが目立ち、不満を募らせたことがある人なら、IVRが完璧でないこともわかるだろう。Vonage Voice APIを使ってIVRを行う場合、エクスペリエンスを向上させるためにできることがいくつかあります。

コンテクストを与える

VonageでASR(自動音声認識)を使用してユーザー入力をキャプチャするには、コール・コントロール・オブジェクト(NCCO)に入力アクションを作成します。音声プロンプトのある基本的なNCCOは次のようになります:

const ncco = [{
      action: 'talk',
      text: 'Thank you for calling the North Pole. Have you been naughty or nice?'
    }
  ];

ASRを使用すると、プロンプトに対する回答を収集できます。ASRを使うには speechtype配列に追加し speechプロパティを指定します。には speech.contextでは、応答しそうなものの配列を指定します。

const ncco = [{
      action: 'talk',
      text: 'Thank you for calling the North Pole. Have you been naughty or nice?',
    },
    {
      action: 'input',
      type: ['speech'],
      eventUrl: [`https://${process.env.PROJECT_DOMAIN}.glitch.me/nice`],
      speech: {
        context: ['naughty','nice'],
        endOnSilence: 1,
        language: "en-US"
      }
    }
  ];

発信者がプロンプトに応答すると、ASRは推測の配列を返す。可能性のある各回答には信頼度があり、推測は信頼度によってランク付けされます:

[ { confidence: '0.5399828', text: 'naughty' },
  { confidence: '0.51581204', text: 'Eddie' },
  { confidence: '0.51581204', text: 'honey' },
  { confidence: '0.51581204', text: 'buddy' },
  { confidence: '0.51581204', text: 'Eddy' } ]

配列に含まれる単語の同音異義語で返答することで、その効果を試すことができる。 contextの配列に含まれる単語の同音異義語で返信することで、その効果を試すことができる。同音異義語でも信頼度は同じであることが多く、文脈中の単語を提供することで、興味のある単語がリストに含まれていることを保証することができます:

[ { confidence: '0.5402811', text: 'howdy' },
  { confidence: '0.51581204', text: 'naughty' } ]

エラーを予測する

人工知能は本当にまだ発展途上で、イライラしたりかんしゃくを起こしたりしがちです。使えるASRの結果が得られると思い込むことで、簡単に通話を切ってしまうことができる。

Vonageを使用してASRを行う場合、結果は次のように表示されます。 request.body.speech.results.配列で返されます。 results配列がエラーになった場合の動作は、あなたの期待とは異なるかもしれません。長さが0になるのではありません、 resultsは単なる未定義です。そのため、別のプロパティでチェックする必要があります、 request.body.speech.error..undefinedの存在は、あなたのコードに対して、次に何をすべきかの情報を持っていないというフラグを立てる役割を果たします:

if (req.body.speech.error) {
    res.json([{
      action: 'talk',
      text: 'We could not understand your request. Santa will bring you socks.'
    }]);
  }

繰り返されるエラーに注意

一度ASRの道を歩み始めたら、その道を歩み続けることを約束するわけではありません。電話をかけてきた人が何度も聞き返されたら、イライラしてしまうかもしれない。さらに悪いことに、複雑なシステムでは、エラーのひとつひとつが、何かが処理されていないという新たな可能性であり、発信者はロボットに怒鳴るのに5分も費やした挙句、捨てられようとしているのだ。

Vonageは、応答がどの会話に属するかを追跡するツールを提供します。エンドポイントへのリクエストのボディには、発信者と通話を一意に識別するためのUUIDがあります。しかし、エンドポイントはステートレスであるため、UUIDを使用するには、会話と発信者の成功レベルに関する情報を保存する必要があります。

データストアを管理することに比べれば、NCCOは非常にシンプルであり、繰り返されるプロパティを抽象化することでさらに軽くすることができる:

function sendNCCO(res, prompt, endpoint, context) {
  const ncco = [{
    action: 'talk',
      text: prompt,
    },
    {
      action: 'input',
      type: ['speech'],
      eventUrl: [`https://${process.env.PROJECT_DOMAIN}.glitch.me/${endpoint}`],
      speech: {
        context: context,
        endOnSilence: 1,
        language: "en-US"
      }
  }];

  res.json(ncco);
}

エンドポイントはいくつでも作ることができ、発信者が許容できると思うエラー数に対応することができる。エンドポイントには、そのシナリオに固有のデータだけが含まれていればよい:

app.post('/nice_error', function(req, res) {
  if (req.body.speech.error) {
    sendNCCO(
      res,
      `We still couldn't understand you. Please say "naughty" or "nice".`,
      'nice_repeat_error',
      ['naughty','nice']
    );
  } else {
    // branches for naughty or nice
  }
});

そろそろあきらめた方がいいと思うエンドポイントでは、DTMFまたはライブオペレーターに切り替えることができる。

さらに詳しく

IVRメニューの作成を開始するには、当社の ASRに関するドキュメントおよび 音声認識設定の詳細.また グリッチのIVRプロジェクト例.

私たちはいつでも、あなたのユースケースについて話し合い、私たちの コミュニティSlackチャンネル.

シェア:

https://a.storyblok.com/f/270183/250x250/f231d97f1b/garann-means.png
Garann Meansデベロッパー・エデュケーター

私はJavaScript開発者で、Vonageの開発者教育者です。長年にわたり、テンプレート、Node.js、プログレッシブ・ウェブ・アプリケーション、そしてオフライン・ファースト戦略に熱中してきましたが、私がいつも本当に愛しているのは、便利できちんと文書化されたAPIです。私の目標は、当社のAPIを使用するお客様の体験を、私がお手伝いできる最高のものにすることです。