Amazon Connectの問い合わせフローで多重ループ(ネストしたループ)を構築する
📅 2022-04-26
多重ループについて社内で質問がありました。
どなたかご存知であれば教えてください。
問い合わせフローで、多重ループ(ループ内のループ)を構築します。
外側のループが発生した場合に、内側のループカウントをリセットしたいのですが、上手い方法はあるでしょうか?ちなみに各3回のループで、最大9回という要望でした。
そういえば多重ループはやったことがないな。。ということで試してみました。
顧客から情報入力を複数回行う場合などのユースケースがあるかと思います。
フローの詳細
作成したフローやLambdaはこちらからダウンロードできます。
また、フローに着信した際の動作は以下の録音ファイルから確認することができます。
多重ループを実装したフローは以下になります。
どこでループの処理をしているかを色分けするとこのようになります。
ループカウントの実装はそれぞれ下記のブロックで行っています。
カウントのインクリメントは問い合わせ属性とLambdaで行う
ユーザー定義の問い合わせ属性でループカウントを制御します。
ループが進むとカウントをインクリメントする必要がありますが、問い合わせフロー内で直接インクリメントを行うことができないため、Lambdaに問い合わせ属性を渡してインクリメントを行いましょう。
外側のループ、内側のループをそれぞれインクリメントする必要があるため、「AWS Lambda関数を呼び出す」ブロックではパラメータとして、どちらのループカウントをインクリメントするかを指定します。
Lambda関数では、呼び出し時のパラメータを見て、
event.Details.ContactData.Attributes.パラメータで指定したカウント
から現在のカウントを取得し、インクリメントした値をリターンします。
exports.handler = async (event) => {
console.log(JSON.stringify(event));
let currentCount = event.Details.ContactData.Attributes[event.Details.Parameters.target];
currentCount++;
const response = {
responseCount: currentCount
};
return response;
};
上のサンプルのように自分で実装しても良いですが、
Amazon Connect Snippets - Contact Flow Helper
という、問い合わせフローで使うのに便利な処理がセットになったLambdaが公開されているので、そちらを利用するのも良いでしょう。
実際に利用する際のポイント
上記のサンプルは一つのフロー内で多重ループを実現していますが、
ループ内に処理をいれるとフローが肥大化して運用・保守性が下がってしまいます。
「フローへの転送」ブロックを利用してループ処理ごとに別のフローにするとより良いでしょう。
サンプルのフロー内には複数のフローで構築するパターンも入れているため参照ください。