自動音声応答 (IVR)
自動音声応答 (IVR) は、APIまたはWebインターフェイスを介して利用できる Voice機能です。Webインターフェイス上では、NTT CPaaSの顧客エンゲージメントプラットフォームであるMoments を介してご利用いただけます。
IVRは、1つ以上の呼び出し先番号 (固定電話または携帯電話) へのアウトバウンドコールを開始したり、エンドユーザーからVoice番号へのインバウンドコールを受信したり (インバウンドIVR) する時に使用できます。エンドユーザーがコールに応答すると、お客様の方で以前に作成されているIVRシナリオが実行されます。
IVRは、ビジネスの音声通話プロセスを自動化します。この双方向通信オプションを使用すると、通話中に顧客に様々なアクションを設定できます。
設定できるIVRアクション (および非IVRアクション) の数に制限はありません。
IVRは、以下の種類のVoiceコールで使用できます:
- インバウンドコール - IVRシナリオを作成し、選択したVoice番号に合わせて構成します。顧客がこのVoice番号に対してインバウンドコールを開始するたびに、そのコールへの応答にはインバウンドIVRシナリオが使用されます。
- アウトバウンドコール - 顧客への通話を開始する時に、より複雑なシナリオを作成します。
応答コード
応答コードは、デュアルトーン多重周波数 (DTMF) コード とも呼ばれます。これらのコードは、Momentsを使ってフロー内のIVR を活用する時も、ブロードキャスト を使って複数の顧客と対話し、通話中に次のステップを設定する時に送信するブロードキャスト音声メッセージにも使用できます。
エンドユーザーが電話で事前定義された応答コードを入力すると、ブロードキャストの作成時に定義された方法に従ってNTT CPaaSプラットフォームがアクションを実行します。
Moments内のIVR
IVRならびにコミュニケーションに使用できるIVRエレメントの詳細については、Momentsのフロー内のIVR について詳述しているドキュメントをご参照ください。
Momentsを購入するには、専任のアカウントマネージャーに連絡するか、 サポート (opens in a new tab)にお問い合わせください。
Conversationsへのダイヤル
Dial to Conversations (Conversationsへのダイヤル) IVRエレメントを使用すると、通話中のコールをConversationsにリダイレクトできます。
API経由のIVR
お客様がお使いのプラットフォームをNTT CPaaSプラットフォームと統合し、特定のイベントによってトリガーされたエンドユーザーへのコールを開始する場合、または独自のWebインターフェイスをお使いの場合は、API経由のIVRを使用できます。
以下の機能がAPI経由のIVRでご利用いただけます:
-
Text-to-Speech
-
留守番電話検出
-
音声認識
-
API経由でIVRを使用するには、IVRシナリオを作成 (opens in a new tab)する必要があります。詳細については、 Voice APIドキュメント (opens in a new tab)をご参照ください。 様々なエレメントを組み合わせることによって、ビジネスニーズに合ったマルチレベルのシナリオを作成できます。
-
Launch API (APIの起動) (opens in a new tab)を使用してアウトバウンドIVRコールを開始するか、お使いのVoice番号用のIVRシナリオを構成します。インバウンドIVR APIを使用するには、お使いのVoice 番号でIVR APIを構成します。詳細については、Create Voice Setup on a Number (番号で音声セットアップを作成) (opens in a new tab) について詳述しているドキュメントをご参照ください。IVRシナリオを作成したい時は、Forward To IVR (IVRに転送) と応答で受け取った シナリオキー を使用します。
利用可能なAPI経由のIVRエレメント:
- Call API (コールAPI) – お使いのプラットフォームのURLに接続し、エレメントパラメーターで定義されている値を送受信します。
- Capture (キャプチャー)– 顧客が送信した音声応答を変数に保存します。これは後でIVRシナリオをさらに分岐させるために使用できます。詳細については、音声認識 について詳述しているドキュメントをご参照ください。
- Collect (収集) – 顧客がキーパッドをタップしてDTMFコードを再生します。入力した値は、指定した変数に格納されます。これは、If Then や While Do などの他のエレメントで使用される場合があります。
- Dial (ダイヤル) – 通話中のコール別の電話番号にリダイレクトします。
- Dial to Conversations (Conversationsにダイアル) – 通話中のコールを Conversations にリダイレクトします。
- Dial to Many (複数にダイアル) – 通話中のコールを複数の電話番号に並列または順番にリダイレクトします。複数の電話番号の1つがコールに応答すると、他の番号へのダイヤルは停止します。
- For-Each (値ごと) – 値のリストに含まれる各値に対してループ内で使用される変数名を定義します。
- Go To (移動) – IVRシナリオを続行する場所を定義します。
- Hang-up (終話) – これは疑似アクションです。これでIVRフローが終了し、通話も終了します。
- If-Then-Else (真偽に応じた条件分岐) – 式が true か false かを判定し、IVRコールを分岐します。
- Machine Detection (留守番電話検出) – アウトバウンドIVRコールの開始時に留守番電話があるかどうかを検出します。
- Play (再生) –事前に録音されたオーディオファイルを再生します (URLとして利用可能にします)。URLをパラメーターとしてペーストします。
- Play from recording (録音から再生) – [録音]エレメントを使用して録音されたオーディオファイルを再生します。現在のコールの通話中に生成された録音ファイル、または別のコールの通話中に生成された録音ファイルを使用できます。
- Repeat-While (処理 → 条件判定 → 条件が真なら同じ処理を繰り返す) - コードブロックに設定された条件が true である限り、そのブロックを繰り返し実行します。無限ループを引き起こす条件を指定しないようにしてください。
- Say (話す) – テキストを音声に変換し、顧客に再生します。
- Send SMS (SMSを送信) – 事前定義されたテキストを含むSMSを送信します。
- Set Variable (変数を設定) – 変数値を設定します。
- Switch-Case (switch文) – 変数値を判定し、IVRコールを分岐します。
- While-Do (先に条件判定→真なら実行) – 式が true か false かを判定し、IVRコールを分岐します。
-
IVRシナリオを事前に構成 (作成) したら、新しいシナリオを作成しなくても、 PUTメソッド (opens in a new tab)を使って更新できます。また、以前に構成したIVRシナリオを 削除 (opens in a new tab) することもできます。コールが終了したら、アナライズ からWebインターフェイス経由のレポート (opens in a new tab)、API経由の配信レポートまたはログ (opens in a new tab) で、コールの詳細を確認できます。
-
すべての配信レポートを取得 (opens in a new tab)することができます。また、NTT CPaaSプラットフォームがご指定のURLにこれらの配信レポートを送信するように 構成 (opens in a new tab)することも可能です。
詳細については、レポートをご参照ください。
音声認識
NTT CPaaSの音声認識機能は、IVRを使ってコミュニケーションを取り合っているエンドユーザーの音声をキャプチャーします。NTT CPaaSプラットフォームでは、入力された音声データを保存して、事前定義された単語や語句と照合できます。次に、事前に設定した構成に応じて、さらにIVRアクションが必要な場合はそれを実行します。これにより、エンドユーザーはキーパッドの数字をタップするだけに限定されることなく、より高い柔軟性が得られます。
可用性
音声認識機能はAPI 経由でのみ使用できます。NTT CPaaSのWebインターフェイスではご利用いただけません。
エンドユーザーの音声入力を (Capture IVR (IVRをキャプチャー) アクションを使って) キャプチャーするためのIVRシナリオを作成する場合 、必ず以下の手順に従うようにしてください:
- [キャプチャー]アクションを使って音声認識をセットアップする手順の中で最も重要なステップの1つは、エンドユーザーが話すと予想される言語を選択することです。
- その後、一致させる必要のあるいくつかのキーフレーズと、timeout、silence timeoutなど、使用可能な追加のパラメーターを設定できます。
- また、キーフレーズを一致させるのではなく、エンドユーザーが話すあらゆることをキャプチャーし、追加のIVRアクションを使ってその入力をテキストとしてお使いのプラットフォームにAPI経由で送信することもできます。
IVRシナリオの事前構成や音声認識の活用法の詳細については、APIドキュメント (opens in a new tab) をご参照ください。
ベストプラクティス
ここでは、音声認識をより効果的に活用するためのヒントとコツをいくつか紹介します。
ヒント 1 - ユースケースを把握する
音声認識を効率的に使用するには、いくつかの要因を考慮する必要があります:
- 常に特定のユースケースについて考え、エンドユーザーのニーズに合わせて調整する努力を重ねるようにします。
- IVRでサポートされている言語の最も適したバリエーションを使用するようにします。
- 電話と通話の品質に違いがある可能性があると想定します。到達が困難な特定の地域のエンドユーザーにリーチする方法について計画を立てます。
- バックグラウンドノイズがあることを想定しておきます。エンドユーザーが通りを歩いている時、混雑した場所にいる時やラッシュアワーの時間帯などに携帯電話を使用している可能性があります。
- 短く簡潔な質問を用意しておきます。どのような返信を受け取ることを見込んでいますか?複雑な用語は使わず、エンドユーザーが容易に理解できるように、簡単な言葉を使用するようにします。
- 音声認識の持続時間にご注意ください。5秒、10秒、または20秒以内の返信を期待するのは妥当でしょうか?
ヒント 2 - timeoutとmaxSilenceを慎重に調整する
最も重要なことの1つは、エンドユーザーが質問に返信するのに必要な時間を考慮することです。
例えば、次のようなユースケースで考えてみることにします:
{
"capture": "myVar",
"timeout": 10,
"speechOptions": {
"language": "en-US",
"keyPhrases": ["info", "update"]
}
}
この例では、IVRオプションが10秒に設定されています。この10秒間に次のフレーズ ("info" または "update") をキャプチャーする必要があります。次に、テストと調整を行います。10秒で十分か、それとも長すぎるかを確認します。これは、単語の長さ、エンドユーザーの音声パターン、反応時間などの複数の要因によって変わってきます。
言うまでもなく、エンドユーザーが次のアクションに移るのに時間がかかりすぎたり、キーワードを言うのに十分な時間がないことに腹を立てたりすることは望ましくありません。
maxSilence (以下を参照) を使用すると、どうなるでしょう?
{
"capture": "myVar",
"timeout": 10,
"speechOptions": {
"language": "en-US",
"maxSilence": 3,
"keyPhrases": ["info", "update"]
}
}
この例では、エンドユーザーに10秒、そして3秒のmaxSilenceオプションが設定されています。これは何を意味するかというと、IVRが3秒間の無音を検出するとキャプチャーを停止する、ということです。
但し、エンドユーザーが1秒以内にキーワードを言った場合、IVRは次のアクションに進む前に2秒待つ必要があります。
エンドユーザーが考えるのをやめて、3秒以上一時停止した場合はどうなるでしょう?その場合、IVRはユーザーの入力をキャプチャーしません。
誰にでも当てはまるような一般的なアドバイスを提示するのは無論、容易ではないですが、以下のような対応策が考えられます:
- 可能であれば、簡単な質問をし、簡潔でシンプルな回答をユーザーに提案します。
- 様々な
timeoutとmaxSilenceのバリエーションを試し、エンドユーザーに提供する前に音声キャプチャーの動作テストをしておきます。
ヒント 3 - 簡単なキーフレーズを使用する
keyPhrases は、キャプチャーされた音声と指定されたテキストを照合し、その照合結果に基づいてIVRシナリオを分岐させます。
例:
{
"capture": "myVar",
"timeout": 5,
"speechOptions": {
"language": "en-US",
"maxSilence": 3,
"keyPhrases": ["yes, I want more info", "no, I do not want more info", "I am not sure"]
}
},
{
"if": "${myVar == 'yes, I want more info'}",
"then": [
{
"say": "Ok. I will send you more details"
}
],
"else": []
}
ここで注意が必要です。エンドユーザーが常に正確なキーワードを口にするとは限りません。
エンドユーザーが例えば、定義したキーフレーズの代わりに「はい、より詳細な情報が欲しい」と言ったとします。これだとキーフレーズと一致しないため、IF 式はトリガーされません。
キーフレーズが長ければ長いほど、エンドユーザーがその特定のキーワードを正しく一致させる確率は低くなります。
例:
{
"capture": "myVar",
"timeout": 5,
"speechOptions": {
"language": "en-US",
"maxSilence": 3,
"keyPhrases": ["more info", "exit", "maybe"]
}
},
{
"if": "${myVar == 'more info'}",
"then": [
{
"say": "Ok. I will send you more details"
}
],
"else": []
}
上記の例を少し調整してみました。これで、キーフレーズが一致する確率が高くなりました。
キーフレーズは、エンドユーザーが話す内容を制限しません。エンドユーザーは、単なるキーフレーズよりも多くのことを言うことができます。但し、キーフレーズは、IVRシナリオを正しく照合して分岐するためのキーです。 例えば、エンドユーザーが 「はい、より詳細な情報が欲しい」または「はい、より詳細な情報をください」と言ったとします。どちらの場合も、myVar は より詳細な情報であるため、キーフレーズが一致します。
音声を完全にキャプチャーすることに興味がある場合は、myVar_Full変数を使用してみてください (「myVar」はあくまで一例であり、どのような名前でもお好きに付けることができます)。
最後に、両方の例をさらに短いフレーズに縮めることができます:
{
"capture": "myVar",
"timeout": 5,
"speechOptions": {
"language": "en-US",
"maxSilence": 3,
"keyPhrases": ["yes", "no", "maybe"]
}
},
{
"if": "${myVar == 'yes'}",
"then": [
{
"say": "Ok. I will send you more details"
}
],
"else": []
}
キーフレーズの照合は常に、完全にキャプチャーされた音声テキストと指定されたキーフレーズとを比較する形で行われます。
それでは、このヒントの最後の例を見ていきましょう:
{
"say": "Do you want discount?"
},
{
"capture": "myVar",
"timeout": 5,
"speechOptions": {
"language": "en-US",
"maxSilence": 3,
"keyPhrases": ["discount"]
}
},
{
"if": "${myVar == 'discount'}",
"then": [
{
"say": "Ok. I will send you more details"
}
],
"else": []
}
キーフレーズにする特定の単語の選び方にご注意ください。例えば、キーフレーズを「割引」に設定したとします。
あるエンドユーザーは「いいえ、割引は不要」と言い、別のエンドユーザーは「はい、割引が欲しい」と言うとします。その場合、どこに問題があるか、お分かりでしょうか?
どちらも「割引」というキーフレーズが一致するため、両エンドユーザーとも「割引」に関する詳細情報を受け取ることになります。この例からも分かるとおり、混乱を防ぐためには、常に短く、明確で、シンプルなキーフレーズを使用し、考えられるすべてのユースケースを想定しておく必要があります。
ヒント4 - 音信号 (ビープ音) の後にキャプチャーを開始する
エンドユーザーに、音信号 (ビープ音) を聞いた後に話し始める必要があることを知らせます。
例:
{
"say": "If you want more info, say: info. If you want to reach our agent, say: agent"
},
{
"capture": "myVar",
"timeout": 5,
"speechOptions": {
"language": "en-US",
"maxSilence": 3,
"keyPhrases": ["info", "agent"]
}
},
{
"if": "${myVar == 'info'}",
"then": [
{
"say": "Ok. I will send you more details"
}
],
"else": []
}
最初のオーディオメッセージが完全に再生し終わる前にエンドユーザーが「info」と発声した場合、音声はキャプチャーされません。このような状況が発生する場合は、エンドユーザーに対し、音信号が鳴り終わってから話し始めるようお伝えください。
{
"say": "If you want more info, after the beep signal say: info. If you want to reach our agent, after the beep signal say: agent"
},
{
"capture": "myVar",
"timeout": 5,
"speechOptions": {
"language": "en-US",
"maxSilence": 3,
"keyPhrases": ["info", "agent"]
}
},
{
"if": "${myVar == 'info'}",
"then": [
{
"say": "Ok. I will send you more details"
}
],
"else": []
}
ヒント 5 - DTMFフェールオーバーを提供する
エンドユーザーが強い訛りがある場合、発話しづらい場合、信号強度が弱い場合、あるいはエコーが発生している場合など、音声入力を正常にキャプチャーできないことがあります。このような場合は、フェイルオーバーのオプションとしてDTMFを代わりにご使用ください。
これは即ち、音声入力の形式で、または電話のキーパッドで事前定義された数字を押すことで応答できることを意味します。
{
"say": "Say discount or press 1 to get discount. Say exit or press 0 to exit."
},
{
"capture": "myVar",
"timeout": 5,
"speechOptions": {
"language": "en-US",
"model": "DEFAULT",
"keyPhrases": ["discount", "exit"]
},
"dtmfOptions": {
"maxInputLength": 1
}
},
{
"if": "${myVar == 'discount' || myVar == '1'}",
"then": [
{
"say": "You will get discount"
}
],
"else": [
{
"say": "Goodbye"
}
]
}
この例では、エンドユーザーが言葉を発する代わりに 1 または 0 をタップできることを示しています。
DTMFフェールオーバーが有効になると、音声認識よりも優先されます。例えば、エンドユーザーが何かを言って 1 をタップすると、音声の代わりに myVar が録音されます。
但し、エンドユーザーが「割引」というキーフレーズを発し、キーパッドで何もタップしない場合は、通常どおりmyVarとmyVar_Fullがキャプチャーされます。
ヒント 6 - DTMFのキャプチャーに maxInputLength を使用する
電話機のキーパッドの数字を押してDTMFフェールオーバーを使用する場合、IVRキャプチャーを停止するタイミングを決定する必要があります。
この点について、先ほど挙げた例に少し変更を加えて説明します:
{
"capture": "myVar",
"timeout": 5,
"speechOptions": {
"language": "en-US",
"model": "DEFAULT",
"keyPhrases": ["discount", "exit"]
},
"dtmfOptions": {}
}
maxInputLength が設定されていないと、IVRは入力される桁数が分からないため、timeout が切れるまで待機します。
この例では、IVRは5秒間待機して、押されたすべての数字をキャプチャーします。maxInputLength を使用すれば、IVRは指定された桁数のキャプチャーを終え次第、キャプチャーを停止してシナリオを続行できるようになります。
maxInputLength が 1 の場合、IVRは最初の桁が押されるとすぐにシナリオを続行できます。なお、この場合でもtimeout は尊重されますので、エンドユーザーには5秒以内に何かを言ったり数字を押したりする時間が与えられます。
例:
{
"capture": "myVar",
"timeout": 5,
"speechOptions": {
"language": "en-US",
"model": "DEFAULT",
"keyPhrases": ["discount", "exit"]
},
"dtmfOptions": {
"maxInputLength": 1
}
}
音声認識対応言語
早期アクセス期間中は、対応言語が以下の表に記載されている言語に限定されます(近い将来、対応言語の拡充を予定しています)。
APIリクエストで特定の言語を選択する際に、どの略語を使用すべきかについては、表をご確認ください。以下の表をご確認ください。
| 言語 | 略語 |
|---|---|
| アフリカーンス語 (南アフリカ) | af-ZA |
| アルバニア語 (アルバニア) | sq-AL |
| アムハラ語 (エチオピア) | am-ET |
| アラビア語 (アルジェリア) | ar-DZ |
| アラビア語 (バーレーン) | ar-BH |
| アラビア語 (エジプト) | ar-EG |
| アラビア語 (イラク) | ar-IQ |
| アラビア語 (イスラエル) | ar-IL |
| アラビア語 (ヨルダン) | ar-JO |
| アラビア語 (クウェート) | ar-KW |
| アラビア語 (レバノン) | ar-LB |
| アラビア語 (リビア) | ar-LY |
| アラビア語 (モロッコ) | ar-MA |
| アラビア語 (オマーン) | ar-OM |
| アラビア語 (カタール) | ar-QA |
| アラビア語 (サウジアラビア) | ar-SA |
| アラビア語 (パレスチナ国) | ar-PS |
| アラビア語 (シリア) | ar-SY |
| アラビア語 (チュニジア) | ar-TN |
| アラビア語 (アラブ首長国連邦) | ar-AE |
| アラビア語 (イエメン) | ar-YE |
| アルメニア語 (アルメニア) | hy-AM |
| アゼルバイジャン語 (アゼルバイジャン) | az-AZ |
| バスク語 (スペイン) | eu-ES |
| ベンガル語 (バングラデシュ) | bn-BD |
| ベンガル語 (インド) | bn-IN |
| ボスニア語 (ボスニア・ヘルツェゴビナ) | bs-BA |
| ブルガリア語 (ブルガリア) | bg-BG |
| ビルマ語 (ミャンマー) | my-MM |
| カタロニア語 (スペイン) | ca-ES |
| 中国語 (広東語、繁体字) | zh-HK |
| 中国語 (北京語、簡体字) | zh-CN |
| 中国語 (北京語、台湾) | zh-TW |
| クロアチア語 (クロアチア) | hr-HR |
| チェコ語 (チェコ共和国) | cs-CZ |
| デンマーク語 (デンマーク) | da-DK |
| オランダ語 (ベルギー) | nl-BE |
| オランダ語 (オランダ) | nl-NL |
| 英語 (オーストラリア) | en-AU |
| 英語 (カナダ) | en-CA |
| 英語 (ガーナ) | en-GH |
| 英語 (イギリス) | en-GB |
| 英語 (香港) | en-HK |
| 英語 (インド) | en-IN |
| 英語 (アイルランド) | en-IE |
| 英語 (ケニア) | en-KE |
| 英語 (ニュージーランド) | en-NZ |
| 英語 (ナイジェリア) | en-NG |
| 英語 (パキスタン) | en-PK |
| 英語 (フィリピン) | en-PH |
| 英語 (シンガポール) | en-SG |
| 英語 (南アフリカ) | en-ZA |
| 英語 (タンザニア) | en-TZ |
| 英語 (米国) | en-US |
| エストニア語 (エストニア) | et-EE |
| フィリピノ語 (フィリピン) | fil-pH |
| フィンランド語 (フィンランド) | fi-FI |
| フランス語 (ベルギー) | fr-BE |
| フランス語 (カナダ) | fr-CA |
| フランス語 (フランス) | fr-FR |
| フランス語 (スイス) | fr-CH |
| ガリシア語 (スペイン) | gl-ES |
| グルジア語 (グルジア) | ka-GE |
| ドイツ語 (オーストリア) | de-AT |
| ドイツ語 (ドイツ) | de-DE |
| ドイツ語 (スイス) | de-CH |
| ギリシャ語 (ギリシャ) | el-GR |
| グジャラート語 (インド) | gu-IN |
| ヘブライ語 (イスラエル) | he-IL |
| ヒンディー語 (インド) | hi-IN |
| ハンガリー語 (ハンガリー) | hu-HU |
| アイスランド語 (アイスランド) | is-IS |
| インドネシア語 (インドネシア) | id-ID |
| アイルランド語 (アイルランド) | ga-IE |
| イタリア語 (イタリア) | it-IT |
| イタリア語 (スイス) | it-CH |
| 日本語 (日本) | ja-JP |
| ジャワ語 (インドネシア) | jv-ID |
| カンナダ語 (インド) | kn-IN |
| カザフ語 (カザフスタン) | kk-KZ |
| クメール語 (カンボジア) | km-KH |
| 韓国語 (韓国) | ko-KR |
| ラオス語 (ラオス) | lo-LA |
| ラトビア語 (ラトビア) | lv-LV |
| リトアニア語 (リトアニア) | lt-LT |
| マケドニア語 (北マケドニア) | mk-MK |
| マレー語 (マレーシア) | ms-MY |
| マラヤーラム語 (インド) | ml-IN |
| マルタ語 (マルタ) | mt-MT |
| マラーティー語 (インド) | mr-IN |
| モンゴル語 (モンゴル) | mn-MN |
| ネパール語 (ネパール) | ne-NP |
| ノルウェー語 (ブークモール) (ノルウェー) | no-NO |
| ペルシャ語 (イラン) | fa-IR |
| ポーランド語 (ポーランド) | pl-PL |
| ポルトガル語 (ブラジル) | pt-BR |
| ポルトガル語 (ポルトガル) | pt-PT |
| パンジャブ語 (グルムキー語、インド) | pa-Guru-IN |
| ルーマニア語 (ルーマニア) | ro-RO |
| ロシア語 (ロシア) | ru-RU |
| セルビア語 (セルビア) | sr-RS |
| シンハラ語 (スリランカ) | si-LK |
| スロバキア語 (スロバキア) | sk-SK |
| スロベニア語 (スロベニア) | sl-SI |
| スペイン語 (アルゼンチン) | es-AR |
| スペイン語 (ボリビア) | es-BO |
| スペイン語 (チリ) | es-CL |
| スペイン語 (コロンビア) | es-CO |
| スペイン語 (コスタリカ) | es-CR |
| スペイン語 (キューバ) | es-CU |
| スペイン語 (ドミニカ共和国) | es-DO |
| スペイン語 (エクアドル) | es-EC |
| スペイン語 (エルサルバドル) | es-SV |
| スペイン語 (赤道ギニア) | es-GQ |
| スペイン語 (グアテマラ) | es-GT |
| スペイン語 (ホンジュラス) | es-HN |
| スペイン語 (メキシコ) | es-MX |
| スペイン語 (ニカラグア) | es-NI |
| スペイン語 (パナマ) | es-PA |
| スペイン語 (パラグアイ) | es-PY |
| スペイン語 (ペルー) | es-PE |
| スペイン語 (プエルトリコ) | es-PR |
| スペイン語 (スペイン) | es-ES |
| スペイン語 (米国) | es-US |
| スペイン語 (ウルグアイ) | es-UY |
| スペイン語 (ベネズエラ) | es-VE |
| スンダ語 (インドネシア) | su-ID |
| スワヒリ語 (ケニア) | sw-KE |
| スワヒリ語 (タンザニア) | sw-TZ |
| スウェーデン語 (スウェーデン) | sv-SE |
| タミル語 (インド) | ta-IN |
| タミル語(マレーシア) | ta-MY |
| タミル語 (シンガポール) | ta-SG |
| タミル語 (スリランカ) | ta-LK |
| テルグ語 (インド) | te-IN |
| タイ語 (タイ) | th-TH |
| トルコ語 (トルコ) | tr-TR |
| ウクライナ語 (ウクライナ) | uk-UA |
| ウルドゥー語 (インド) | ur-IN |
| ウルドゥー語 (パキスタン) | ur-PK |
| ウズベク語 (ウズベキスタン) | uz-UZ |
| ベトナム語 (ベトナム) | vi-VNの |
| ズールー語 (南アフリカ) | zu-ZA |
IVR変数
変数を使用すると、、IVRシナリオを動的かつ柔軟に設計できます。変数を活用すれば、挨拶をパーソナライズしたり、顧客の応答に応じて異なる経路へ分岐させたり、IVRをデジタルエコシステムと連携させたりすることができます。
変数は、発信者の名前、顧客ID、APIの呼び出し結果といった情報の一時的な格納場所です。
IVRはこれらの変数を読み取り、新しい値を書き込むことができます。変数を使用することで、IVRは以下のことが可能になります:
-
外部システムとの通信。
-
通話中に何が起こっているかの追跡。
-
発信者の体験のパーソナライズ化。
変数の設定方法
IVRシナリオで変数を設定するには、次のオプションを使用できます:
変数を使ったアウトバウンドIVRの起動
アウトバウンドIVRの場合は、シナリオを開始するHTTPリクエストで変数を送信できます。例えば、顧客の名前を含めることができます:
{
"messages": [
{
"from": "41793026700",
"destinations": [
{
"to": "41793026727"
}
],
"scenarioId": "6298AA7707903A4ED680B436929681AD",
"parameters": {
"name": "John"
}
}
]
}
その後、シナリオで変数を参照できます (例えば、Say アクションでは):
{
"say": "Hello ${name}"
}上記のように、 $``{name} を使用して変数をテキストに挿入できます。IVR は、Unified Expression Language (UEL) (opens in a new tab) に基づく $``{} 形式を使用した変数式に対応しています。
変数の設定アクション
Set Variable (変数の設定) アクションを使用して、シナリオの実行時に変数を更新できます。この変数は、コールの通話中に情報を作成または更新する場合に便利です。
API応答の解析
シナリオで外部APIを呼び出すと、応答で返される各フィールドは、シナリオ内の他の場所で使用できる変数になります。例えば、バックエンドから注文ステータスを取得した場合、それを変数としてコールの残りの部分でいつでも参照できるようになります。
DTMFの収集
Collect (収集) アクションを使用して一部の数字をキャプチャーしたり、 Capture(キャプチャー) アクションを使用して音声をキャプチャーしたりすると、結果はシナリオの後半で使用できる変数に格納されます。
暗黙的変数
どのシナリオにも、常に利用可能な組み込み変数が含まれています:
from:発信者の番号 (インバウンド) またはfrom番号 (アウトバウンド)。to: 呼び出し先の番号。startTime:コールが開始された時刻。answerTime: コールに実際に応答された時刻。__externalMessageId: 起動パラメーターで設定され、配信レポートに含まれる一意のコールID。
暗黙的変数はシナリオ内のどこでも使用できますが、変更することはできません。
アクション変数
一部のアクションでは、独自の特殊変数が生成されます。例えば、外部APIを呼び出した後、次のような変数が利用可能になります:
__apiResponseStatusCode: APIの呼び出しに失敗または成功したかによって、次にどのような処理を行うかを決定できるようにするHTTP応答コード。__callApiCurrentTimestamp: APIの呼び出しが開始された時のタイムスタンプ。
配信レポートへのIVRの連携
IVRシナリオをバックエンドシステムに連携するには、clientCallbackData 変数を設定します。この変数は配信レポートに表示され、ユーザーIDまたはその他のカスタム識別子を監視システムに渡すことができます。
アウトバウンドIVRを起動する場合は、このデータをcallbackDataという起動パラメーターに含めることもできます。
変数の振る舞い
Type: すべての変数は文字列です。Nulls: nullは存在しません。設定されていない変数を使用しようとすると、空の文字列 ("") が返されます。Expressions: 簡単な式を使用できます。例えば、Ifアクション内で押された数字を処理するには、${digit == '2'}を使用します。
ベストプラクティス: IVR変数
- シナリオ内のどこでも変数を参照できるようにしたい時は、
${variableName}を使用します。 - 組み込み変数を使えば、コールに関する情報を無料で得ることができます。
- すべての変数は文字列です。未設定の変数は空の文字列を返します。
- 変数をコールの開始時に渡したり、フローの途中で設定したり、APIの応答から取得したりできます。
変数を使用すると、コールのフローをカスタマイズしたり、自動化したりすることが可能になり、よりスマートで連携性の高いIVRのシナリオを設計できるようになります。