Amazon LexをAmazon Connectから呼び出す際、SSMLによる音声スピード調整方法
はじめに
Amazon ConnectからAmazon Lexを呼び出し、LexのコードフックでLambdaを呼び出す設定にしている場合に、SSMLを使って音声スピードやイントネーションを調整する方法をご紹介します。
以前、Amazon ConnectとAmazon Lexで電話予約を自動化する方法をご紹介しました。
今回は、上記の記事をもとに、SSMLで音声スピードを調整する方法を解説します。
Lambdaのコードを修正
LexのコードフックでLambdaを呼び出す設定にしている場合、Lexボット側では制御できないため、Lambda側で設定する必要があります。
先ほど紹介したブログのコードの一部です。
def create_response(content, dialog_action='ElicitIntent', session_attributes=None):
response = {
'messages': [{'contentType': 'PlainText', 'content': content}],
'sessionState': {
'dialogAction': {'type': dialog_action},
'intent': {
'name': 'FallbackIntent',
'state': 'InProgress' if dialog_action == 'ElicitIntent' else 'Fulfilled'
}
}
}
if session_attributes:
response['sessionState']['sessionAttributes'] = session_attributes
return response
以下のとおり修正します。
def create_response(content, dialog_action='ElicitIntent', session_attributes=None):
+ # SSMLタグで音声速度を80%に固定
+ ssml_content = f'<speak><prosody rate="80%">{content}</prosody></speak>'
response = {
+ 'messages': [{'contentType': 'SSML', 'content': ssml_content}],
- 'messages': [{'contentType': 'PlainText', 'content': content}],
'sessionState': {
'dialogAction': {'type': dialog_action},
'intent': {
'name': 'FallbackIntent',
'state': 'InProgress' if dialog_action == 'ElicitIntent' else 'Fulfilled'
}
}
}
if session_attributes:
response['sessionState']['sessionAttributes'] = session_attributes
return response
修正内容は以下のとおりです。
- messagesのcontentTypeを
PlainText
からSSML
に変更 - content内にメッセージ内容とSSMLタグを設定
messagesのcontentTypeをPlainText
からSSML
に変更し、content内にメッセージ内容とSSMLタグを設定するだけです。
各フィールドの説明は以下のとおりです。
- contentType — 使用するメッセージのタイプ
- CustomPayload — アプリケーションのデータまたはメタデータを含むようにカスタマイズできる応答文字列
- ImageResponseCard — ユーザーが選択できるボタン付きの画像。詳細については、「ImageResponseCard」を参照してください
- PlainText — プレーンテキスト文字列
- SSML — 音声応答をカスタマイズするための音声合成マークアップ言語を含む文字列
- content — ユーザーに送信するメッセージ。メッセージタイプが PlainText、CustomPayload、または SSML の場合、このフィールドを使用します
SSMLタグのprosody
のrate
で音声スピードを調節できます。設定可能な範囲は20-200%です。
Amazon Connect でサポートされている SSML タグについては、以下のドキュメントにまとめられています。
注意点
今回紹介した方法では、Lexボットの応答すべてで音声スピードがゆっくりになります。
特定の内容(予約内容を確認後、最終確認時の復唱のみ)のみゆっくり話させる場合は、以下の方法を取るとよいでしょう。
- コード内で条件分岐を使用し、特定の内容のみ今回紹介したrateを設定
- それ以外はrateを設定しない(デフォルトは100%)
また、企業のサービス名をConnectで発話させるとイントネーションに違和感を持ってしまう場合も、同様に特定のワードのみSSMLで設定するよう条件分岐させるとよいでしょう。
イントネーションのテストは、Amazon Pollyのマネジメントコンソール上で行うと簡単に調節できます。
SSMLによるさまざまなチューニング方法については、以下のブログをご参照ください。