
シェア:
ビクターはVonage Voice APIのプロダクト・マネージャーで、通信業界で7年の経験を持ち、幼少の頃からのソフトウェア開発者でもある。強力なAPIを自己記述的で一貫性のあるものにすることで、技術的に複雑なものを理解しやすく、使いやすくすることに情熱を注いでいる。発明やコーディング以外の時間は、模型を作ったり民族楽器を演奏したりする。
Voice API音声認識のご紹介
所要時間:1 分
私たちは最近、新しい 自動音声認識(ASR)この機能により、あなたのアプリケーションは、人間が話すときに何を言っているかを理解することができます。この機能により、音声ナビゲーションを備えたシンプルなIVRから洗練された音声ボットやアシスタントまで、あらゆる音声インタラクションを作成することができます。
ASRを使用することで、顧客に可能な限り迅速なサービスを提供し、音声ベースのセルフサービス業務を簡単に実現できるとともに、優れたユーザーエクスペリエンスを提供し、運用コストを削減することができます。この記事では、ユーザーが声だけで操作できるシンプルなIVRアプリを構築する方法を紹介します。
始める前に
まず始めに、Vonage API Accountをお持ちで、音声アプリケーションを作成済みであることをご確認ください。
私たちは Node.jsを使います。 エクスプレスと body-parser パッケージを使います。簡単にするために、以下のNPMコマンドを使ってプロジェクトにインストールすることができます:
この例ではNode.jsを使用していますが、以下に示すのと同じNCCOを使用することで、お好みのコード言語/フレームワークを使用して同じ機能を再現することが可能です。
コードを書く
音声認識はNCCO inputコマンドで有効化され、DTMFトーンのキャプチャにも適している。すでにアプリケーションに番号が割り当てられていると仮定して、次のような新しいファイルを作成します。 index.jsという新しいファイルを作成し answerを実装することから始めます:
'use strict'
const express = require('express')
const bodyParser = require('body-parser')
const app = express()
const http = require('http')
app.use(bodyParser.json())
app.get('/webhooks/answer', (request, response) => {
const ncco = [{
action: 'talk',
text: 'Thank you for calling Example Inc.! Please tell us how we can help you today. Say Sales to talk to the sales department, Support to get technical support.',
bargeIn: true
},
{
action: 'input',
eventUrl: [
`${request.protocol}://${request.get('host')}/webhooks/asr`
],
speech: {
uuid: [request.query.uuid],
context: ["Sales", "Support"]
}
}
]
response.json(ncco)
})
上のコード・スニペットでは
uuidはコール(レグ)識別子で、このアクションの必須パラメータです。このUUIDは、アンサーウェブフックのクエリパラメータから取得できます。
bargeIn: trueこれは、ユーザーが前の通話ですでにこのメッセージを聞いていた場合に適しています。
contextアクションで inputアクションは音声認識の精度を高め、IVRスタイルのケースに適しています。
ユーザーが部署名を言って、その単語がVonageに認識されると、Webhookコールバックが event_urlアクションで指定した inputアクションで指定した場所にコールバックされます。このコールバックのリクエストボディには音声認識結果が含まれ、以下のようになります:
{
"speech": {
"timeout_reason": "end_on_silence_timeout",
"results": [
{
"confidence": "0.9320692",
"text": "sales"
}
]
},
"dtmf": {
"digits": null,
"timed_out": false
},
"from": "15557654321",
"to": "15551234567",
"uuid": "abfd679701d7f810a0a9a44f8e298b33",
"conversation_uuid": "CON-64e6c8ef-91a9-4a21-b664-b00a1f41340f",
"timestamp": "2020-04-17T17:31:53.638Z"
}次に、ASRから返された情報をどうするかを決定するウェブフックを実装する必要がある:
app.post('/webhooks/asr', (request, response) => {
console.log(request.body)
var department = ""
if (request.body.speech.results)
department = request.body.speech.results[0].text
var departmentNumber = ""
switch (department) {
case 'sales':
departmentNumber = "15551234561"
break;
case 'support':
departmentNumber = "15551234562"
break;
default:
break;
}
var ncco = ""
if (departmentNumber != "") {
ncco = [{
"action": "connect",
"from": "15551234563",
"endpoint": [{
"type": "phone",
"number": departmentNumber
}]
}]
} else {
ncco = [{
action: 'talk',
text: `Sorry, we didn't understand your message. Please try again.`
}, {
action: 'input',
eventUrl: [
`${request.protocol}://${request.get('host')}/webhooks/asr`
],
speech: {
uuid: [request.body.uuid],
context: ["Sales", "Support"]
}
}]
}
response.json(ncco)
})
上のスニペットでは departmentNumberの値を他の電話番号に置き換えて、Nexmoのアカウント番号に着信できるようにします。
最後に、Node.jsサーバーを作成する:
const port = 3000
app.listen(port, () => console.log(`Listening on port ${port}`))
アプリケーションのテスト
ローカルでテストを始めるには、ローカルサーバーを世界中に公開する必要がある。 answerそして event_urlウェブフックにアクセスできるようにする必要があります。これを行うには Ngrok を使用します。 Ngrok を使ったテストガイドに従ってください。
アプリを起動した状態で、ダッシュボードで作成したアプリに関連する番号に電話をかけます。IVRオプションを含む挨拶メッセージが聞こえ、部署名を言うことでいずれかの番号に接続できます。
例えば、挨拶の中で選択肢を発表する代わりに、質問だけをごく一般的なものにしておき、「販売」、「サポート」、あるいは「購入」といった単語を検索してユーザーの回答を分析し、IVRをスマートアシスタントに変えるなど、他の選択肢やさまざまな単語を追加してみてください。
次はどうする?
ご質問やご意見がございましたら、コミュニティSlackまたは下記までご連絡ください。 support@nexmo.com