

サポート終了通知: 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)を参照してください。

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

# プログラミングモデル
<a name="programming-model"></a>

*ボット*は、Amazon Lex のプライマリリソースタイプです。Amazon Lex には、他のリソースタイプとして、*インテント*、*スロットタイプ*、*エイリアス*、*ボットチャンネル関連付け*があります。

ボットを作成するには、Amazon Lex コンソールまたはモデル構築 API を使用します。コンソールのグラフィカルユーザーインターフェイスでは、アプリケーションの本番稼働準備が整ったボットを構築できます。必要に応じて、 AWS CLI または独自のカスタムプログラムを通じてモデル構築 API を使用してボットを作成できます。

作成したボットは、[サポートされているプラットフォーム](https://docs.aws.amazon.com/lex/latest/dg/chatbot-service.html)のいずれかにデプロイします。または、独自のアプリケーションに統合します。ユーザーがボットとやり取りする場合、クライアントアプリケーションは Amazon Lex ランタイム API を使用してボットにリクエストを送信します。例えば、ユーザーが「ピザを注文したい」と言うと、クライアントはランタイム API オペレーションのいずれかを使用して Amazon Lex にこの入力を送信します。ユーザーは、入力を音声またはテキストで提供できます。

インテントでは、Lambda 関数を作成して使用することもできます。これらの Lambda 関数コードフックを使用して、初期化、ユーザー入力の検証、インテントの達成などのランタイムアクティビティを実行できます。ここで示している各セクションで、さらに詳しく学習できます。

**Topics**
+ [モデル構築 API オペレーション](#programming-model-build-time-api)
+ [ランタイム API オペレーション](#programming-model-runtime-api)
+ [コードフックとしての Lambda 関数](#prog-model-lambda)

## モデル構築 API オペレーション
<a name="programming-model-build-time-api"></a>

ボット、インテント、スロットタイプをプログラムで作成するには、モデル構築 API オペレーションを使用します。ボットのリソースの管理、更新、削除にもモデル構築 API を使用できます。モデル構築 API オペレーションには以下が含まれます。
+ [PutBot](API_PutBot.md)、[PutBotAlias](API_PutBotAlias.md)、[PutIntent](API_PutIntent.md)、[PutSlotType](API_PutSlotType.md): それぞれ、ボット、ボットのエイリアス、インテント、スロットタイプを作成して更新します。
+ [CreateBotVersion](API_CreateBotVersion.md)、[CreateIntentVersion](API_CreateIntentVersion.md)、[CreateSlotTypeVersion](API_CreateSlotTypeVersion.md): それぞれ、ボット、インテント、スロットタイプのバージョンを作成して発行します。
+ [GetBot](API_GetBot.md)、[GetBots](API_GetBots.md): それぞれ、作成した特定のボット、複数のボットのリストを取得します。
+ [GetIntent](API_GetIntent.md)、[GetIntents](API_GetIntents.md): それぞれ、作成した特定のインテント、複数のインテントのリストを取得します。
+ [GetSlotType](API_GetSlotType.md)、[GetSlotTypes](API_GetSlotTypes.md): それぞれ、作成した特定のスロットタイプ、複数のスロットタイプのリストを取得します。
+ [GetBuiltinIntent](API_GetBuiltinIntent.md)、[GetBuiltinIntents](API_GetBuiltinIntents.md)、[GetBuiltinSlotTypes](API_GetBuiltinSlotTypes.md): それぞれ、ボットで使用できる特定の Amazon Lex 組み込みインテント、複数の Amazon Lex 組み込みインテントのリスト、複数の組み込みスロットタイプのリストを取得します。
+ [GetBotChannelAssociation](API_GetBotChannelAssociation.md)、[GetBotChannelAssociations](API_GetBotChannelAssociations.md): それぞれ、ボットと特定のメッセージングプラットフォームの関連付け、ボットと複数のメッセージングプラットフォームの関連付けを取得します。
+ [DeleteBot](API_DeleteBot.md)、[DeleteBotAlias](API_DeleteBotAlias.md)、[DeleteBotChannelAssociation](API_DeleteBotChannelAssociation.md)、[DeleteIntent](API_DeleteIntent.md)、[DeleteSlotType](API_DeleteSlotType.md): アカウントから不要なリソースを削除します。

モデル構築 API では、Amazon Lex リソースを管理するためのカスタムツールを作成できます。例えば、ボット、インテント、スロットタイプごとのバージョン数は 100 に制限されています。モデル構築 API を使用すると、ボットが制限に近づいたときに、古いバージョン自動的に削除するツールを構築できます。

リソースの更新が一度に 1 つのオペレーションでのみ実行されるように、Amazon Lex ではチェックサムを使用します。`Put` API オペレーション ([PutBot](API_PutBot.md)、[PutBotAlias](API_PutBotAlias.md)、[PutIntent](API_PutIntent.md)、または [PutSlotType](API_PutSlotType.md)) を使用してリソースを更新する場合は、リソースの最新のチェックサムをリクエストで渡す必要があります。2 つのツールで同時にリソースを更新しようとすると、両方から同じ最新のチェックサムが提供されます。最初に Amazon Lex に到達するリクエストは、リソースの最新のチェックサムと一致します。2 番目のリクエストが到着するまでには、チェックサムが異なっています。2 番目のツールは、`PreconditionFailedException` 例外を受け取り、更新は終了します。

`Get` オペレーション ([GetBot](API_GetBot.md)、[GetIntent](API_GetIntent.md)、[GetSlotType](API_GetSlotType.md)) には結果整合性があります。いずれかの `Put` オペレーションを使用してリソースを作成または変更した直後に `Get` オペレーションを使用すると、その更新は返されない場合があります。`Get` オペレーションは、前回の更新を返した後で再度リソースが変更されるまでの間に、必ず今回の更新されたリソースを返します。更新されたリソースが返されたかどうかは、チェックサムを調べて確認できます。

## ランタイム API オペレーション
<a name="programming-model-runtime-api"></a>

 クライアントアプリケーションは、以下のランタイム API オペレーションを使用して Amazon Lex と通信します。
+ [PostContent](API_runtime_PostContent.md) – 音声またはテキストの入力を受け取り、インテント情報とユーザーに伝えるテキストまたは音声のメッセージを返します。現在、Amazon Lex は以下の音声形式をサポートしています。

   

  入力音声形式 – LPCM および Opus 

  出力音声形式 – MPEG、OGG、および PCM

   

  `PostContent` オペレーションは 8 kHz と 16 kHz のオーディオ入力をサポートしています。エンドユーザーが電話で Amazon Lex と話す形式のアプリケーション (自動化されたコールセンターなど) は、8 kHz のオーディオを直接渡すことができます。

   
+ [PostText](API_runtime_PostText.md) – テキストを入力として受け取り、インテント情報とユーザーに伝えるテキストメッセージを返します。

クライアントアプリケーションは、ランタイム API を使用して特定の Amazon Lex ボットを呼び出し、発話 ( ユーザーによるテキストまたは音声の入力) を処理します。例えば、ユーザーが「ピザをください」と言ったとします。クライアントは、Amazon Lex のランタイム API オペレーションのいずれかを使用して、このユーザー入力をボットに送信します。Amazon Lex は、ユーザー入力から、ボットに定義されている `OrderPizza` インテントに関するリクエストであることを認識します。Amazon Lex は、ユーザーとの会話から必要な情報 (ピザのサイズ、トッピング、枚数など) をスロットデータとして集めます。ユーザーがすべての必要なスロットデータを指定すると、Amazon Lex はインテント設定に応じ Lambda 関数のコードフックを呼び出してインテントを達成するか、インテントデータをクライアントに返します。

ボットで音声入力を使用している場合は、[PostContent](API_runtime_PostContent.md) オペレーションを使用します。例えば、自動化されたコールセンターアプリケーションでは音声を Amazon Lex ボットに送信することができるので、エージェントが顧客の問い合わせに対応する必要がありません。電話から Amazon Lex に音声を直接送信するには、8 kHz オーディオ形式を使用できます。

Amazon Lex コンソールのテストウィンドウでは、[PostContent](API_runtime_PostContent.md) API を使用してテキストおよび音声のリクエストを Amazon Lex に送信します。このテストウィンドウは「[Amazon Lex の開始方法](getting-started.md)」の演習で使用します。

## コードフックとしての Lambda 関数
<a name="prog-model-lambda"></a>

Lambda 関数をコードフックとして呼び出すように Amazon Lex ボットを設定できます。コードフックは複数の目的で使用できます。
+ ユーザーとのやり取りをカスタマイズする - 例えば、Joe からピザのトッピングの種類を尋ねられたときに、Joe の好みに関する過去の知識に基づいてトッピングのサブセットを表示できます。
+ ユーザーの入力を検証する - Jen が営業時間外に花の受け取りを希望しているとします。Jen が入力した時間を検証して、適切なレスポンスを送信できます。
+ ユーザーのインテントを達成する - Joe からピザの注文に必要なすべての情報を得た後で、Amazon Lex は Lambda 関数を呼び出して最寄りのピザ店に注文できます。

インテントを設定する際に、以下の場所で Lambda 関数をコードフックとして指定します。
+ 初期化/検証用のダイアログのコードフック – この Lambda 関数はユーザー入力ごとに呼び出されます (Amazon Lex がユーザーのインテントを理解しているものとします)。
+ フルフィルメントコードフック – この Lambda 関数は、インテントを達成するために必要なすべてのスロットデータがユーザーから提供された後で呼び出されます。

次のスクリーンショットに示すように、インテントを選択して Amazon Lex コンソールでコードフックを設定します。

![Lambda 関数のコードフックを示す Amazon Lex コンソール。](http://docs.aws.amazon.com/ja_jp/lex/latest/dg/images/how-works-10.png)


コードフックは、[PutIntent](API_PutIntent.md) オペレーションの `dialogCodeHook` フィールドおよび `fulfillmentActivity` フィールドでも設定できます。

1 つの Lambda 関数で、初期化、検証、およびフルフィルメントを実行できます。Lambda 関数が受信するイベントデータには、呼び出し元をダイアログまたはフルフィルメントのコードフックとして識別するフィールドがあります。この情報を使用して、コードの該当部分を実行できます。

Lambda 関数では、複雑なダイアログ間をナビゲートできるボットを構築できます。Amazon Lex に特定のアクションを実行するように指示するには、Lambda 関数のレスポンスの `dialogAction` フィールドを使用します。例えば、必須ではないスロット値をユーザーから取得するよう Amazon Lex に指示するには、`ElicitSlot` ダイアログアクションを使用します。明確化プロンプトが定義されている場合、`ElicitIntent` ダイアログアクションを使用して、ユーザーが前のインテントを終了したときに、別のインテントを引き出すことができます。

詳細については、「[Lambda 関数を使用する](using-lambda.md)」を参照してください。