5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Amazon Connect】フローモジュールをMCPツール化してAIエージェントから呼び出してみた!

5
Posted at

はじめに

Amazon ConnectのMCPサポートでは、標準提供ツール(Out-of-the-box tools)、フローモジュールツール、サードパーティツール(Third-party MCP tools)の3種類のツールタイプが提供されています。以前の記事では標準提供ツールを検証しました。
本記事では、フローモジュールツールを実際に試してみたので、その手順を紹介します。

本記事の情報は2026年4月時点のものです。
最新情報については公式ドキュメントをご確認ください。

この記事でわかること

  • フローモジュールをMCPツール化する手順
  • MCPツール化したフローモジュールをAIエージェントに組み込む方法

前提条件

  • Amazon Connectインスタンスの初期設定(受架電可能な状態)が完了していること
  • Amazon Connect AI agentsが有効化されていること(セットアップ手順

目次

1. フローモジュールMCPツールとは

フローモジュールは、Amazon Connectのコンタクトフロー内で再利用可能なロジックをまとめる仕組みです。re:Invent 2025で発表されたアップデートにより、このフローモジュールを「ツール」として作成し、AIエージェントからMCPツールとして呼び出せるようになりました。

通常のフローモジュールとの違いは以下のとおりです。

項目 通常のフローモジュール ツールとしてのフローモジュール(以下、ツールモジュール)
呼び出し元 コンタクトフロー(「モジュールの呼び出し」ブロック) AIエージェント(MCPツール)
入出力の定義 カスタムブロックモジュールでJSON Schema v4による定義が可能 同左
利用可能ブロック フローモジュール用ブロック ツールモジュール用ブロック(一部制限あり)

2. システム構成図

以下は、本記事で構築するシステムの全体像です。

image.png

2.1 システムの流れ

  1. 検証用電話番号に発信
  2. ユーザーが現在時刻の回答を促す質問(例:「今何時?」など)を入力
  3. Connect AI agentsが発話内容を解釈し、フローモジュール(ツール)を呼び出す
  4. フローモジュール内のAWS Lambda関数が現在時刻を取得・返却
  5. Connect AI agentsが取得した現在時刻をもとに顧客へ回答

3. 構築方法

構築環境

本記事で使用する環境は以下のとおりです。

  • AWS リージョン:東京(ap-northeast-1)

3.1 Lambda関数の作成

ツールモジュール用に、現在時刻(JST)を返すシンプルなLambda関数を作成します。

  • 関数名:任意の文字列

  • ランタイム:Python 3.14

  • アーキテクチャ:x86_64

  • 実行ロール:デフォルトロール

  • ソースコード

    from datetime import datetime
    from zoneinfo import ZoneInfo
    
    def lambda_handler(event, context):
        """現在時刻(JST)を返すLambda関数"""
        now = datetime.now(ZoneInfo("Asia/Tokyo"))
        return {
            "current_date": now.strftime("%Y-%m-%d"),
            "current_time": now.strftime("%H:%M"),
        }
    

上記Lambda関数を対象のAmazon Connectインスタンスへ追加します。

image.png

3.2 ツールモジュールの作成

「Amazon Connect管理者ワークスペース」>「ルーティング」>「フロー」>「モジュール」タブより、フローモジュールを作成します。
新規作成の場合は「フローモジュールを作成 ▼」から「フローモジュールをツールとして作成」を選択します。

image.png

3.3 入出力スキーマの定義

「フローデザイナー」>「設定」タブで、入力(Input)と出力(Output)のスキーマをJSON Schema v4形式で定義します。定義方法はデザイナーモードとJSONスキーマモードの2通りがあります。

  • デザイナーモード
    image.png

  • JSONスキーマモード
    image.png

今回はLambda関数にリクエストパラメータを渡す必要がないため、入力スキーマの定義は不要です。
出力スキーマのみ、以下のように current_datecurrent_time(いずれも文字列型・必須)を定義します。

  • JSONスキーマ(出力)
{
    "type": "object",
    "properties": {
        "current_date": {
            "type": "string",
            "description": "現在の日付を返す"
        },
        "current_time": {
            "type": "string",
            "description": "現在の時間を返す"
        }
    },
    "required": [
        "current_date",
        "current_time"
    ]
}

デザイナーモードで確認した際に、以下のようになっていればOKです。

  • 入力
    image.png

  • 出力
    image.png

3.4 ツールモジュールの構築

ツールモジュールの全体像は以下の通りです。

image.png

①「AWS Lambda関数」ブロック

  • アクションを選択:Lambdaを呼び出す
  • 関数のARN:手動で設定
    • 作成したLambda関数
  • 実行モード:同期モード
  • タイムアウト:3秒
  • レスポンスの検証:文字列マップ
    image.png

②「戻る」ブロック

  • 出力(手動で設定)
    • current_date:$.External.current_date
    • current_time:$.External.current_time

注意: この出力設定を行わないと、AIエージェントにはフローモジュールの実行結果が一切返りません。根拠となるデータがないまま応答を生成するため、ハルシネーション(事実に基づかない回答)の発生リスクが高まります。

image.png

3.5 ツールモジュールの公開

ツールモジュールの構築と出力設定が完了したら、「公開」をクリックしてモジュールを公開します。

  • 説明:
現在の日付と時間(JST)を返すツールです。レスポンスにはcurrent_date(YYYY-MM-DD形式)とcurrent_time(HH:MM形式)が含まれます。顧客が現在の日付や時間を尋ねた際に使用してください。
  • 新しいバージョンを作成:チェック

image.png

公開時に入力する「説明」は、AIエージェントがツールの利用可否を判断する際の指標となります。ツールの用途や返却するデータの内容を具体的に記載しておくと、意図したタイミングでツールが呼び出されやすくなります。

また、「新しいバージョンを作成」にチェックを入れずに公開のみ行った場合、AIエージェントのツールとして選択できません。ツールモジュールを公開する際は、少なくとも1つバージョンの作成が必要です。

3.6 セキュリティプロファイルの設定

「Amazon Connect管理者ワークスペース」>「ユーザー」>セキュリティプロファイル > 「Admin」をクリックし、「フローモジュール」のアクセス権限を確認します。
3.5 ツールモジュールの公開で公開したフローモジュールのチェックボックスをクリックし、変更を保存します。

image.png

本記事では検証用途のため「Admin」プロファイルを使用しています。本番環境では最小権限の原則に従い、専用のセキュリティプロファイルを作成してください。

3.7 AIエージェントへの組み込み

作成したツールモジュールをAIエージェントに追加します。

  1. 「AIエージェントデザイナー」>「AIエージェント」>「AIエージェントを作成」より、検証用AIエージェントを作成する

    • 名前:任意の文字列
    • AIエージェントタイプ:オーケストレーション
    • 既存からコピー:SelfServiceOrchestrator

    image.png

  2. ロケール:Japaneseに設定

  3. セキュリティプロファイル:Adminに設定

    image.png

  4. ツール > 「ツールを追加」> 「Flow Modules」(名前空間)より、3.5 ツールモジュールの公開で公開したツールモジュールを選択

    image.png

    デフォルトではツール名がモジュールIDとなっているため、適宜変更します。

    image.png

  5. 指示テキストと例の追加

    image.png

指示テキスト

顧客が現在の日付や時間について質問した際に使用します。
実行結果として返される「日付(current_date)」「時間(current_time)」を必ず顧客に伝えてください。

例1(良い例)

Good example -日付を聞かれた場合: 返ってきたcurrent_dateを具体的に読み上げている
<message>
本日は2026年4月6日でございます。
</message>

例2(良い例)

Good example  - 時間を聞かれた場合: 返ってきたcurrent_timeを具体的に読み上げている
<message>
現在の時刻は14時30分でございます。
</message>

例3(悪い例)

Bad example  - 避けるべき: 取得した日付や時間を伝えずに完了してしまうパターンです。
<message>
お時間を確認いたしました。他にお手伝いできることはありますか?
</message>

「指示テキスト」と「例」は、AIエージェントがツールの実行結果をどのように顧客へ伝えるかを制御する重要な設定です。
これらが不十分だと、取得したデータを読み上げずに応答を終えてしまうなど、期待どおりの回答が得られない場合があります。

以上で、AIエージェントの設定は完了です。
保存・公開後、全てのツールの「Permissions」がSufficientに変更されていることが確認できます。

image.png

3.8 コンタクトフローの作成

AIエージェントを呼び出すコンタクトフローを作成します。
全体像は以下の通りです。
計6つのブロックで構成されていますが、必須なのは①「コネクトアシスタント」ブロックと②「顧客の入力を取得する」ブロックの2つのみです。

image.png

①「コネクトアシスタント」ブロック

  • ドメインを選択:インスタンスに関連付けられたQドメインARN
  • 他項目:デフォルト
    image.png

②「顧客の入力を取得する」ブロック

  • カスタマープロンプトまたはボットの初期化(テキスト読み上げ):ご用件をお伺いします。
  • AIエージェントを有効にする:チェック
  • ドメインを選択:インスタンスに関連付けられたQドメインARN
  • AIエージェント-セルフサービス:作成したAIエージェント

image.png

以上で、コンタクトフローの作成は完了です。

4. 動作確認

AIエージェントがフローモジュールMCPツールを正しく呼び出し、期待どおりの応答を返すかテストしました。

日時に関する質問と無関係な質問を含む計6パターンの文章を入力とし、ツールの呼び出し有無と期待する回答が出力されるかを確認しています。比較対象として、ツールを追加していないデフォルトのAIエージェントにも同じ質問を行い、応答の違いを確認しました。

テストの結果、ツールモジュールを組み込んだAIエージェントは6種類全てで想定どおりの挙動を示しました。
一方、ツールを追加していないデフォルトのAIエージェントでは、AIプロンプト内の dateTime 変数(UTC基準)をもとに回答するため、日本時間とずれた回答が出力されることを確認しました。

動作確認結果

検証日時:2026年4月7日 17:00〜18:00

# テスト内容 入力(発話) 期待する動作 ツールあり ツールなし(デフォルト)
1 日付の質問 「今日は何日?」 current_dateの値を含む回答 「本日は2026年4月7日でございます。他にお手伝いできることはございますか?」 「本日は2026年4月7日でございます。他にお手伝いできることはございますか?」
2 時間の質問 「今何時?」 current_timeの値を含む回答 「現在の時刻は17時40分でございます。他にお手伝いできることはございますか?」 「現在の時刻は8時46分でございます。他にお手伝いできることはございますか? 」
3 日付と時間の両方 「今日の日付と時間を教えて」 current_dateとcurrent_time両方を含む回答 「本日は2026年4月7日でございます。現在の時刻は18時08分でございます。他にお手伝いできることはありますか?」 「現在の日時は、2026年4月7日、午前8時52分頃でございます。他にお手伝いできることはございますでしょうか。」
4 相対日付(明日) 「明日は何日?」 current_dateから算出した翌日の日付を含む回答 「本日は2026年4月7日ですので、明日は2026年4月8日となります。」 「明日は2026年4月8日となります。」
5 相対日付(3日後) 「3日後は何日?」 current_dateから算出した3日後の日付を含む回答 「本日は2026年4月7日でございます。3日後は2026年4月10日となります。」 「3日後は2026年4月10日となります。」
6 無関係な質問 「おすすめの商品は?」 本記事で作成したツールが呼び出されないこと 「申し訳ございません。現在、おすすめの商品情報を取得できません。他の質問やご要望があれば、お手伝いいたします。」 「申し訳ございませんが、現在おすすめの商品情報を取得できません。技術的な問題が発生しているようです。他にお手伝いできることはありますか?」

チャット例

image.png

5. まとめ

本記事では、フローモジュールをMCPツール化し、AIエージェントからLambda関数を呼び出して現在時刻を返す仕組みを構築しました。

今回はLambda関数で現在時刻を取得するシンプルな例でしたが、同じ仕組みで外部APIの呼び出し結果やデータベースの検索結果など、さまざまなデータをAIエージェントに返すことが可能です。フローモジュールに蓄積してきたビジネスロジックをAIエージェントから再利用できるようになることで、より正確でパーソナライズされた顧客体験の実現につながると感じました。

6. 参考

5
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?