

サポート終了通知: 2025 年 9 月 15 日、 AWS は Amazon Lex V1 のサポートを終了します。 V1 2025 年 9 月 15 日を過ぎると、Amazon Lex V1 コンソールまたは Amazon Lex V1 リソースにはアクセスできなくなります。Amazon Lex V2 を使用している場合は、代わりに [Amazon Lex V2 ガイド](https://docs.aws.amazon.com/lexv2/latest/dg/what-is.html)を参照してください。

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon Lex V1 から Amazon Lex V2 への Lambda 関数の移行
<a name="message-lambda"></a>

Amazon Lex V2 では、ボット内の言語ごとに Lambda 関数を 1 つだけ許可します。Lambda 関数とその設定は、実行時に使用するボットエイリアスに対して構成されます。

インテントでダイアログとフルフィルメントコードのフックが有効になっている場合、その言語のすべてのインテントに対して Lambda 関数が呼び出されます。

Amazon Lex V2 Lambda 関数は、Amazon Lex V1 とは異なる入出力メッセージ形式を持っています。Lambda 関数の入力形式の違いは次のとおりです。
+ Amazon Lex V2 では、`currentIntent` と `alternativeIntents` の構造が `interpretations` の構造に置き換えられます。各解釈には、インテント、インテントに対する NLU 信頼度スコア、およびオプションのセンチメント分析が含まれます。
+ Amazon Lex V2 では、Amazon Lex V1の `activeContexts`、`sessionAttributes` が統一された `sessionState` 構造に移行されます。この構造は、発信元のリクエスト ID など、会話の現在の状態に関する情報を提供します。
+ Amazon Lex V2 は `recentIntentSummaryView` を返しません。代わりに `sessionState` 構造の情報を使用してください。
+ Amazon Lex V2の入力では、`bot` 属性に `botId` と `localeId` を用意しています。
+ 入力構造には、入力のタイプ (テキスト、スピーチ、DTMF) に関する情報を提供する `inputMode` 属性が含まれています。

Lambda 関数の出力形式の違いは次のとおりです。
+ Amazon Lex V1 の `activeContexts` および `sessionAttributes` 構造は、Amazon Lex V2 の `sessionState` 構造に置き換えられています。
+ `recentIntentSummaryView` は出力には含まれません。
+ Amazon Lex V1 `dialogAction` 構造は、`sessionState` 構造の一部である `dialogAction` と、`dialogAction.type` が `ElicitIntent` の時に必要となる `messages` の 2 つの構造に分かれています。Amazon Lex は、この構造からユーザーに表示するメッセージを選択します。

Amazon Lex V2 API でボットを構築する場合、インテントごとに Lambda 関数を用意するのではなく、言語別にボットのエイリアスごとに 1 つの Lambda 関数しか用意しません。別の機能を引き続き使用する場合は、インテントごとに個別の機能を有効にするルーター機能を作成できます。次に、アプリケーションで使用または変更できるルーター機能を示します。

```
import os
import json
import boto3

# reuse client connection as global
client = boto3.client('lambda') 

def router(event):
    intent_name = event['sessionState']['intent']['name']
    fn_name = os.environ.get(intent_name)
    print(f"Intent: {intent_name} -> Lambda: {fn_name}")
    if (fn_name):
        # invoke lambda and return result
        invoke_response = client.invoke(FunctionName=fn_name, Payload = json.dumps(event))
        print(invoke_response)
        payload = json.load(invoke_response['Payload'])
        return payload
    raise Exception('No environment variable for intent: ' + intent_name)
    
def lambda_handler(event, context):
    print(event)
    response = router(event)
    return response
```

## 更新されたフィールドのリスト。
<a name="lambda-migrating"></a>

次の表は、Amazon Lex V2 Lambda リクエストとレスポンスの更新されたフィールドに関する詳細情報を示しています。これらのテーブルを使用して、バージョン間のフィールドをマッピングできます。

### リクエスト
<a name="migrating-lambda-request"></a>

以下のフィールドが Lambda 関数リクエスト形式で更新されました。

#### アクティブコンテキスト
<a name="lambda-migrating-contexts"></a>

これで、`activeContexts` 構造は `sessionState` 構造の一部になりました。


| V1 構造 | V2 構造 | 
| --- | --- | 
|  activeContexts  |  sessionState.activeContexts  | 
|  activeContexts[\$1].timeToLive  |  sessionState.activeContexts[\$1].timeToLive  | 
|  activeContexts[\$1].timeToLive.timeToLiveInSeconds  |  sessionState.activeContexts[\$1].timeToLive.timeToLiveInSeconds  | 
|  activeContexts[\$1].timeToLive.turnsToLive  |  sessionState.activeContexts[\$1].timeToLive.turnsToLive  | 
|  activeContexts[\$1].name  |  sessionState.activeContexts[\$1].name  | 
|  activeContexts[\$1].parameters  |  sessionState.activeContexts[\$1].contextAttributes  | 

#### 代替インテント
<a name="lambda-migrating-alternative"></a>

インデックス 1 から N までの解釈リストには、Amazon Lex V2 によって予測された代替インテントのリストとその信頼スコアが含まれています。`recentIntentSummaryView` は Amazon Lex V2 のリクエスト構造から削除されました。`recentIntentSummaryView` から詳細を確認するには、[GetSession](API_runtime_GetSession.md) オペレーションを使用します。


| V1 構造 | V2 構造 | 
| --- | --- | 
|  alternativeIntents  |  interpretations[1:\$1]  | 
|  recentIntentSummaryView  |  該当なし  | 

#### ボット
<a name="lambda-migrating-bot"></a>

Amazon Lex V2 では、ボットとエイリアスには識別子があります。ボット ID はコードフック入力の一部です。エイリアス ID は含まれますが、エイリアス名は含まれません。Amazon Lex V2 は同じボットに対して複数のロケールをサポートしているため、ロケール ID が含まれます。


| V1 構造 | V2 構造 | 
| --- | --- | 
|  ボット  |  ボット  | 
|  bot.name  |  bot.name  | 
|  該当なし  |  bot.id  | 
|  bot.alias  |  該当なし  | 
|  該当なし  |  bot.aliasId  | 
|  bot.version  |  bot.version  | 
|  該当なし  |  bot.localeId  | 

#### 現在のインテント
<a name="lambda-migrating-intent"></a>

`sessionState.intent` 構造には、アクティブインテントの詳細が含まれています。Amazon Lex V2 は、代替インテントを含め、`interpretations` 構造内のすべてのインテントのリストも返します。解釈リストの最初の要素は常に `sessionState.intent` と同じです。


| V1 構造 | V2 構造 | 
| --- | --- | 
|  currentIntent  |  sessionState.intent OR interpretations[0].intent  | 
|  currentIntent.name  |  sessionState.intent.name OR interpretations[0].intent.name  | 
|  currentIntent.nluConfidenceScore  |  interpretations[0].nluConfidence.score  | 

#### ダイアログアクション
<a name="lambda-migrating-dialog"></a>

これで、`confirmationStatus` フィールドは `sessionState` 構造の一部になりました。


| V1 構造 | V2 構造 | 
| --- | --- | 
|  currentIntent.confirmationStatus  |  sessionState.intent.confirmationState OR interpretations[0].intent.confirmationState  | 
|  該当なし  |  sessionState.intent.state OR interpretations[\$1].intent.state  | 

#### Amazon Kendra
<a name="lambda-migrating-kendra"></a>

`kendraResponse` フィールドは `sessionState` および `interpretations` 構造の一部になりました。


| V1 構造 | V2 構造 | 
| --- | --- | 
|  kendraResponse  |  sessionState.intent.kendraResponse OR interpretations[0].intent.kendraResponse  | 

#### 感情
<a name="lambda-migrating-sentiment"></a>

`sentimentResponse` 構造は新しい `interpretations` 構造に移動されました。


| V1 構造 | V2 構造 | 
| --- | --- | 
|  sentimentResponse  |  interpretations[0].sentimentResponse  | 
|  sentimentResponse.sentimentLabel  |  interpretations[0].sentimentResponse.sentiment  | 
|  sentimentResponse.sentimentScore  |  interpretations[0].sentimentResponse.sentimentScore  | 

#### Slots
<a name="lambda-migrating-slots"></a>

Amazon Lex V2 は、解決された値、解釈された値、およびユーザーが発言内容の元の値を含む単一の `slots` オブジェクトを `sessionState.intent` 構造内に提供します。Amazon Lex V2 では、`slotShape`を `List` として設定し、`values` リストを設定することで、複数値のスロットもサポートしています。`value` フィールドでは単一値スロットがサポートされており、その形状は `Scalar` になるとみなされています。


| V1 構造 | V2 構造 | 
| --- | --- | 
|  currentIntent.slots  |  sessionState.intent.slots OR interpretations[0].intent.slots  | 
|  currentIntent.slots[\$1].value  |  sessionState.intent.slots[\$1].value.interpretedValue OR interpretations[0].intent.slots[\$1].value.interpretedValue  | 
|  該当なし  |  sessionState.intent.slots[\$1].value.shape OR interpretations[0].intent.slots[\$1].shape  | 
|  該当なし  |  sessionState.intent.slots[\$1].values OR interpretations[0].intent.slots[\$1].values  | 
|  currentIntent.slotDetails  |  sessionState.intent.slots OR interpretations[0].intent.slots  | 
|  currentIntent.slotDetails[\$1].resolutions  |  sessionState.intent.slots[\$1].resolvedValues OR interpretations[0].intent.slots[\$1].resolvedValues  | 
|  currentIntent.slotDetails[\$1].originalValue  |  sessionState.intent.slots[\$1].originalValue OR interpretations[0].intent.slots[\$1].originalValue  | 

#### その他
<a name="lambda-migrating-other"></a>

Amazon Lex V2 `sessionId` フィールドは、Amazon Lex V1 の `userId` フィールドと同じです。Amazon Lex V2 では、発信者の `inputMode` (テキスト、DTMF、または音声) も送信します。


| V1 構造 | V2 構造 | 
| --- | --- | 
|  userId  |  sessionId  | 
|  inputTranscript  |  inputTranscript  | 
|  invocationSource  |  invocationSource  | 
|  outputDialogMode  |  responseContentType  | 
|  messageVersion  |  messageVersion  | 
|  sessionAttributes  |  sessionState.sessionAttributes  | 
|  requestAttributes  |  requestAttributes  | 
|  該当なし  |  inputMode  | 
|  該当なし  |  originatingRequestId  | 

### 応答
<a name="migrating-lambda-response"></a>

以下のフィールドが Lambda 関数レスポンスメッセージ形式で更新されました。

#### アクティブコンテキスト
<a name="lambda-migrating-resonse-context"></a>

`sessionState` 構造に移動した `activeContexts` 構造。


| V1 構造 | V2 構造 | 
| --- | --- | 
|  activeContexts  |  sessionState.activeContexts  | 
|  activeContexts[\$1].timeToLive  |  sessionState.activeContexts[\$1].timeToLive  | 
|  activeContexts[\$1].timeToLive.timeToLiveInSeconds  |  sessionState.activeContexts[\$1].timeToLive.timeToLiveInSeconds  | 
|  activeContexts[\$1].timeToLive.turnsToLive  |  sessionState.activeContexts[\$1].timeToLive.turnsToLive  | 
|  activeContexts[\$1].name  |  sessionState.activeContexts[\$1].name  | 
|  activeContexts[\$1].parameters  |  sessionState.activeContexts[\$1].contextAttributes  | 

#### ダイアログアクション
<a name="lambda-migrating-response-dialog"></a>

`sessionState` 構造に移動した `dialogAction` 構造。1 つのダイアログアクションで複数のメッセージを指定できるようになり、`genericAttachments` 構造は `imageResponseCard` 構造になりました。


| V1 構造 | V2 構造 | 
| --- | --- | 
|  dialogAction  |  sessionState.dialogAction  | 
|  dialogAction.type  |  sessionState.dialogAction.type  | 
|  dialogAction.slotToElicit  |  sessionState.intent.dialogAction.slotToElicit  | 
|  dialogAction.type.fulfillmentState  |  sessionState.intent.state  | 
|  dialogAction.message  |  メッセージ  | 
|  dialogAction.message.contentType  |  messages[\$1].contentType  | 
|  dialogAction.message.content  |  messages[\$1].content  | 
|  dialogAction.responseCard  |  messages[\$1].imageResponseCard  | 
|  dialogAction.responseCard.version  |  該当なし  | 
|  dialogAction.responseCard.contentType  |  messages[\$1].contentType  | 
|  dialogAction.responseCard.genericAttachments  |  該当なし  | 
|  dialogAction.responseCard.genericAttachments[\$1].title  |  messages[\$1].imageResponseCard.title  | 
|  dialogAction.responseCard.genericAttachments[\$1].subTitle  |  messages[\$1].imageResponseCard.subtitle  | 
|  dialogAction.responseCard.genericAttachments[\$1].imageUrl  |  messages[\$1].imageResponseCard.imageUrl  | 
|  dialogAction.responseCard.genericAttachments[\$1].buttons  |  messages[\$1].imageResponseCard.buttons  | 
|  dialogAction.responseCard.genericAttachments[\$1].buttons[\$1].value  |  messages[\$1].imageResponseCard.buttons[\$1].value  | 
|  dialogAction.responseCard.genericAttachments[\$1].buttons[\$1].text  |  messages[\$1].imageResponseCard.buttons[\$1].text  | 
|  dialogAction.kendraQueryRequestPayload  |  dialogAction.kendraQueryRequestPayload  | 
|  dialogAction.kendraQueryFilterString  |  dialogAction.kendraQueryFilterString  | 

#### インテントとスロット
<a name="lambda-migrating-response-slots"></a>

`dialogAction` 構造の一部であったインテントフィールドとスロットフィールドが `sessionState` 構造の一部になりました。


| V1 構造 | V2 構造 | 
| --- | --- | 
|  dialogAction.intentName  |  sessionState.intent.name  | 
|  dialogAction.slots  |  sessionState.intent.slots  | 
|  dialogAction.slots[\$1].key  |  sessionState.intent.slots[\$1].key  | 
|  dialogAction.slots[\$1].value  |  sessionState.intent.slots[\$1].value.interpretedValue  | 
|  該当なし  |  sessionState.intent.slots[\$1].value.shape  | 
|  該当なし  |  sessionState.intent.slots[\$1].values  | 

#### その他
<a name="lambda-migrating-response-other"></a>

これで、`sessionAttributes` 構造は `sessionState` 構造の一部になりました。`recentIntentSummaryReview` 構造は削除されました。


| V1 構造 | V2 構造 | 
| --- | --- | 
|  sessionAttributes  |  sessionState.sessionAttributes  | 
|  recentIntentSummaryView  |  該当なし  | 