Amazon Connect のフローモジュールで入力、出力、分岐を明示的に定義できるようになりました
はじめに
Amazon Connect の Flow modules(フローモジュール)で、カスタムの入力、出力、ブランチを定義できるようになりました。
これまでフローモジュールは、複数のフローで共通処理を再利用するために利用できました。今回のアップデートにより、モジュールに渡す入力、モジュールから返す出力、モジュールの処理結果に応じた分岐を、モジュールのインターフェースとして明示的に定義できるようになりました。
これにより、呼び出し元フローから見ると「このモジュールには何を渡せばよいか」「処理後にどの値を受け取れるか」「どのような結果に分岐するか」が分かりやすくなります。
例えば、認証処理をモジュール化した場合、電話番号や PIN を入力として受け取り、処理結果に応じて authenticated / unauthenticated のようなブランチで呼び出し元フローへ戻せます。
呼び出し元フローでは、モジュール実行後に属性値を判定するブロックを追加せず、authenticated や unauthenticated のブランチをそのまま後続処理へ接続できます。
また、認証成功後に顧客 ID や顧客名を後続処理で使いたい場合は、出力として返せます。モジュールの入力、出力、分岐が明確になるため、複数のフローから共通部品として利用しやすくなります。
本記事では、認証モジュールを例に、カスタム入力、出力、ブランチの使い方を紹介します。
フローモジュールとは
フローモジュールは、Amazon Connect のフロー内で再利用できる部品です。
例えば、以下のような共通処理をモジュール化できます。
- 顧客認証
- SMS 送信
- 会員ステータス確認
- コールバック番号の確認
- 共通の営業時間判定
公式ドキュメントでは、フローモジュールはフロー内で再利用できるセクションとして説明されています。
Flow modules are reusable sections of a flow.
フローモジュールは、フロー内で再利用できるセクションです。
https://docs.aws.amazon.com/connect/latest/adminguide/contact-flow-modules.html
複数のフローで同じ処理を使っている場合、フローモジュールに切り出すことで保守しやすくなります。今回のアップデートでは、このフローモジュールに対して、入力、出力、ブランチを定義できるようになりました。
今回作成する認証モジュール
今回は、認証モジュールを例にします。
このモジュールでは、呼び出し元フローから電話番号と PIN を受け取り、認証結果に応じて authenticated または unauthenticated のブランチで呼び出し元フローへ戻します。
認証成功後に後続処理で顧客情報を利用したいケースを想定し、出力として顧客 ID と顧客名を返す例も扱います。
今回の例で扱うフローモジュールの内容は以下です。
| 種類 | 内容 |
|---|---|
| 入力 | phoneNumber、pin |
| 出力 | customerId、customerName |
| カスタムブランチ | authenticated、unauthenticated |

以降では、この認証モジュールをもとに、入力、出力、カスタムブランチを順番に確認します。
カスタム入力、出力、ブランチを定義する
フローモジュールの Settings(設定)タブで、モジュールの入力、出力、カスタムブランチを定義できます。
公式ドキュメントでは、入力と出力のスキーマは Object 型を基本とし、その配下のプロパティには String、Number、Integer、Boolean、Object、Array、Null を利用できると説明されています。また、カスタムブランチは最大 8 個まで定義できます。
カスタム入力を定義する
まず、認証モジュールに渡す入力を定義します。
以下の画像では、認証モジュールの Settings 画面で、電話番号と PIN を入力として受け取るスキーマを定義しています。

以下は、入力スキーマの例です。
{
"type": "object",
"properties": {
"phoneNumber": {
"type": "string"
},
"pin": {
"type": "string"
}
}
}
モジュール内では、渡された入力を以下のように参照できます。
$.Modules.Input.phoneNumber
$.Modules.Input.pin
認証処理では、電話番号や PIN などの入力値を Lambda 関数に渡して照合する構成が考えられます。
以下の画像では、Invoke AWS Lambda function(AWS Lambda 関数を呼び出す)ブロックで、モジュール入力の pin を Lambda 関数の入力パラメータとして渡しています。

この例では、Lambda 関数のイベントに pin というキーでモジュール入力の値が渡されます。同様に、必要に応じて phoneNumber も Lambda 関数の入力パラメータとして渡せます。
カスタム出力を定義する
認証成否だけを呼び出し元フローで分岐したい場合は、カスタムブランチだけで十分です。
一方で、認証成功後に顧客 ID や顧客名を後続処理で利用したい場合は、カスタム出力を定義します。
以下の画像では、認証モジュールの出力スキーマを定義しています。

以下は、顧客 ID と顧客名を返す出力スキーマの例です。
{
"type": "object",
"properties": {
"customerId": {
"type": "string"
},
"customerName": {
"type": "string"
}
},
"required": [
"customerId",
"customerName"
]
}
呼び出し元フローでは、モジュールの出力データを $.Modules.ResultData から参照できます。
$.Modules.ResultData.customerId
$.Modules.ResultData.customerName
例えば、認証モジュールの後続で別の Lambda 関数を呼び出す場合、モジュール出力の customerId を Lambda 関数の入力パラメータとして渡せます。
以下の画像では、Invoke AWS Lambda function(AWS Lambda 関数を呼び出す)ブロックで、$.Modules.ResultData.customerId を Lambda 関数の入力パラメータ customerId として渡しています。

このように、モジュールの実行結果として後続処理に渡したい値がある場合は、出力として定義しておくと扱いやすくなります。
カスタムブランチを定義し、Return ブロックで返す
最後に、モジュールの処理結果に応じて返すカスタムブランチを定義します。
以下の画像では、認証モジュールのカスタムブランチを定義しています。

認証モジュールであれば、例えば以下のようなブランチを定義できます。
authenticated
unauthenticated
これにより、呼び出し元フローでは、認証成功と認証失敗をモジュールの分岐として扱えます。
Invoke flow module: AuthenticationModule
├─ authenticated
├─ unauthenticated
└─ Error


次に、モジュール内で処理結果に応じて到達する Return ブロックを分けます。
以下の画像では、認証成功時は authenticated を返す Return ブロックへ、認証失敗時は unauthenticated を返す Return ブロックへ接続していることを確認できます。

イメージとしては以下の流れです。
Entry
↓
Invoke AWS Lambda function
↓
Check contact attributes
├─ 認証成功
│ ↓
│ Return from module: authenticated
│
└─ 認証失敗
↓
Return from module: unauthenticated
カスタムブランチは、$.Modules.Result に値を直接代入して返すのではなく、Return ブロック側で返すブランチを選択します。そのため、モジュール内の条件分岐で、どの Return ブロックに到達させるかを制御します。
Return ブロックは、フローモジュールの終端として使うブロックです。
Use the Return block to mark the terminal action or terminal step of a flow module.
Return ブロックは、フローモジュールの終端アクションまたは終端ステップを示すために使用します。
https://docs.aws.amazon.com/connect/latest/adminguide/return-module.html
つまり、認証成功、認証失敗のような業務結果を、Return ブロックを通じて呼び出し元フローの分岐として返せます。
カスタムブランチと従来の属性判定方式の違い
カスタムブランチを使わない場合、モジュール内で認証結果を属性に保存し、呼び出し元フローでその属性を判定する構成になりがちでした。
Invoke flow module
↓
Check contact attributes
├─ authResult = OK
└─ authResult = NG
カスタムブランチを使うと、モジュールの結果を呼び出し元フローの分岐として直接扱えます。
Invoke flow module
├─ authenticated
├─ unauthenticated
└─ Error
認証成功、認証失敗のような大きな業務結果はカスタムブランチで返し、顧客 ID や顧客名のような後続処理で使う値は必要に応じて出力データで返す、という組み合わせが使いやすそうです。
注意点
モジュールの Result や ResultData は、直近のモジュール呼び出し結果で上書きされます。
公式ドキュメントでは、フローモジュールの Output と Result 属性は、直近の Invoke Module ブロックの呼び出し結果で返され、モジュール呼び出しごとに上書きされると説明されています。
Flow modules Output and Result attributes are returned from the most recent invocation of an Invoke Module block. Module Output and Result attributes are overwritten with each invocation of the Module function.
フローモジュールの Output と Result 属性は、直近の Invoke Module ブロックの呼び出しから返されます。また、Module Output と Result 属性は、モジュールを呼び出すたびに上書きされます。
https://docs.aws.amazon.com/connect/latest/adminguide/connect-attrib-list.html
また、これらの属性はコンタクトレコードには含まれず、次のモジュール呼び出しにも自動では渡されません。
後続処理やレポートで利用したい値がある場合は、必要に応じて Set contact attributes(コンタクト属性を設定)ブロックでユーザー定義属性にコピーします。
まとめ
Amazon Connect のフローモジュールで、カスタム入力、出力、ブランチを定義できるようになりました。
カスタム入力により、呼び出し元フローからモジュールへ渡す値を明示できます。カスタムブランチにより、authenticated や unauthenticated のような業務結果を、呼び出し元フローの分岐として直接扱えます。
カスタム出力は、分岐だけでは足りず、後続処理で顧客 ID などの値を使いたい場合に有効です。認証成否だけを分岐したい場合は、カスタムブランチだけでも十分です。
フローモジュールを共通部品として利用している場合、呼び出し元フローをより分かりやすくできる便利なアップデートだと感じました。







