はじめに
お問い合わせ番号などの複数の英数字をAmazon Lexで認識させたい場合、拡張型の組み込みスロットタイプAMAZON. AlphaNumericが利用できます。
(正式名称は分かりません。以降、拡張型のAMAZON. AlphaNumeric)
例えば、お問い合わせ番号が「小文字の英字3文字 + 数字3文字」の場合、拡張型のAMAZON. AlphaNumericで設定すると、「gher234」は認識しますが、指定した文字数でない「awsge12」などは、認識せずLex側で聞き返してくれます。
また、文字数は範囲指定も可能で、「小文字の英字3~5文字 + 数字2~3文字」と拡張型のAMAZON. AlphaNumericで設定すると、「awsge12」も正しく認識してくれるようになります。
文字数の範囲を指定することで、間違った値の場合、Lex側で聞き返してくれるメリットがあります。
今回は、拡張型のAMAZON. AlphaNumericの構築方法についてご説明します。
使用用途
拡張型のAMAZON. AlphaNumericを使う用途としては、以下をヒアリングしたいケースが挙げられます
- 複数の英数字を絡めたお問い合わせ番号
- 6桁から12桁の数字が羅列する電話番号
- 7桁の郵便番号
- 車両識別番号
- 運転免許証の番号
また、Lexには会話のログを残すことができますが、後述するスロットの難読化の設定を行うことで、機密情報をマスクしてログを残すことができ、セキュリティを高めることができます。
調査環境の作成
今回、作成したボットとインテントの作成方法を説明します。
ボットの作成
- Lexのコンソール画面から、[ボットの作成]をクリックします。
- [空のボットを作成します]を選択し、ボット名を記載し、下記画像の通りに入力します。
- 日本語を選択し、音声はTakumiを選択し、[完了]をクリックします。
これでボットが作成できました。
拡張型組み込みスロットタイプを作成
文字数の範囲を指定しつつ、英数字の文字列を認識するスロットタイプを作成します。
今回は、「小文字の英字3文字 + 数字3文字」で設定します。
- [スロットタイプの追加]から、[組み込み型を使用]を追加します。
- 組み込みスロットタイプは、
AMAZON. AlphaNumeric
にし、スロットタイプ名を記載します。 - 正規表現を
[a-z]{3}[0-9]{3}
と入力し、スロットタイプを保存します。
正規表現
Lexでは、正規表現で次の文字がサポートされています。
- A~Z
- a~z
- 0~9
例として、以下の正規表現が設定できます。
- 「大文字の英字3文字 + 数字3文字」
[A-Z]{3}[0-9]{3}
- 「大文字の英字3~5文字 + 数字3文字」
[A-Z]{3,4,5}[0-9]{3}
- 「大文字の英字のA~G、Y~Zを3文字 + 数字3文字」
[A-GY-Z]{3}[0-9]{1,3}
- 「JA + 大文字の英字3文字 + 数字3文字」
JA[A-Z]{3}[0-9]{3}
アスタリスク(*)は、使用できないようでした。
インテントの作成
- インテントの[インテントを追加]から[空のインテントを追加]をクリックします。
- インテント名を入力し、サンプル発話に「番号」を追加します。
- [スロットを追加]から、先程作成したスロットタイプ
3_alphabet-3_number
を選択します。プロンプトと名前も記載します。- スロット名を
Inquiry
としました。
- スロット名を
- [Confirmation]をアクティブにし、確認プロンプトに以下を記載します
{Inquiry}、でよろしいでしょうか?
- インテントを保存後、Buildすると、インテントのテストが行えます。
テスト
番号と入力後、例として、「drf276」と入力すると、Lex側で認識してくれました。
ちなみに、「sed12345」「sdr1234」などの指定した文字数でない場合、Lex側で聞き返してくれることも確認できました。
スロットの難読化設定
冒頭でご説明しました、Lexで認識したスロットが機密情報の場合、スロットの難読化を行うことで、Lexの会話のログをマスクできます。
- スロットの[詳細オプション]をクリックし、スロットの難読化を有効にするにチェックをいれます。
- スロットを更新後、Buildします
これで設定完了です。設定したスロットのみマスクされます。
マスク設定前
ログは、CloudWatch Logsに出力されています。
スロット値のdrf276
がログとして確認できますね。
"sessionState": {
"sessionAttributes": {},
"originatingRequestId": "a3b47eeb-e787-4b96-bab8-b58d939ff592",
"intent": {
"name": "Inquiry_number",
"state": "InProgress",
"confirmationState": "None",
"slots": {
"Inquiry": {
"value": {
"originalValue": "drf276",
"interpretedValue": "drf276",
"resolvedValues": [
"drf276"
]
},
"shape": "Scalar"
}
}
},
"dialogAction": {
"type": "ConfirmIntent"
}
},
"interpretations": [
{
"intent": {
"name": "Inquiry_number",
"state": "InProgress",
"confirmationState": "None",
"slots": {
"Inquiry": {
"value": {
"originalValue": "drf276",
"interpretedValue": "drf276",
"resolvedValues": [
"drf276"
]
},
"shape": "Scalar"
}
}
}
},
マスク設定後
スロット値のdrf276
が{Inquiry}
に変換されて、マスクされていることを確認できました。
"sessionState": {
"sessionAttributes": {},
"dialogAction": {
"type": "ConfirmIntent"
},
"originatingRequestId": "0d626042-8cfe-4126-a955-8d000569eba1",
"intent": {
"name": "Inquiry_number",
"state": "InProgress",
"confirmationState": "None",
"slots": {
"Inquiry": {
"value": {
"originalValue": "{Inquiry}",
"interpretedValue": "{Inquiry}",
"resolvedValues": []
},
"shape": "Scalar"
}
}
}
},
"interpretations": [
{
"intent": {
"name": "Inquiry_number",
"state": "InProgress",
"confirmationState": "None",
"slots": {
"Inquiry": {
"value": {
"originalValue": "{Inquiry}",
"interpretedValue": "{Inquiry}",
"resolvedValues": []
},
"shape": "Scalar"
}
}
}
},
Connectのコンタクトフロー内では利用できませんでした。
Connectのコンタクトフロー内でLexを連携させて、英数字を聞き取れるか検証しましたが、連携してもうまくいきませんでした。
理由は、英字3文字「DPC」を発話すると、inputTranscript
内は、d. p. c.
が入りますが、Lexで認識されないためです。
数字も同様で、「123」と発話すると、inputTranscript
内は、イチ に サン
が入りますが、Lexで認識されませんでした
原因は、拡張型のAMAZON. AlphaNumericでは、指定した文字列以外の「.」や「イチ に サン」の文字が入っているためだと推測します。
ただし、今回使用した拡張型のAMAZON. AlphaNumericではなく、通常のスロットタイプAMAZON. AlphaNumericだと、「DPC」を発話すると、Lexで認識してくれます。
以下の記事で設定方法を記載していますので、参考になればと思います。
最後に
拡張型のAMAZON. AlphaNumericで、英数字を組み合わせた文字列をLexで認識してくれることが確認できました。
チャットでの問い合わせ等で利用できるかと思いますので、参考になればと思います。