Amazon ConnectでLambdaのDurable Functionsを承認して動してみよう

こんにちは、エンジニアの君島です。

 

ギークフィード、クラスメソッドさん、ユニフォームネクストさん、AWSJさんの有志でAmazon ConnectのAdvent Calendarを開催しています。

今年もre:Invent前後でConnect関連で200以上ものアップデートがありました。

にも関わらず、ConnectではなくAWS Lambdaのアップデートをフィーチャーしつつ、Amazon Connectを入力チャネルに使ってみることにしました。

 

はじめに

AWS Lambdaに永続関数、Durable Functionsの機能が追加されました。

そこで、どんな時に利用できるか使いどころを思案していたのですが、シンプルなワークフローで人間の入力が介在するようなケースで使えそうではないかと考えました。せっかくなのでAmazon Connectで承認をする仕組みを考えてみることにします。

AWS Step Functionsでも同様のことができるわけですが、もっとシンプルなアーキテクチャでも実現できそうなので試してみることにしました。

なお、Durable Functionsは、つい最近までusリージョンでしか使用できなかったようですが、東京リージョンでも利用することができるようになっていました。

re:invent直後はusリージョンでしか使用できない機能が多いですが、2,3週もすると日本も対応しているのはありがたいですね。

Connectの3rd-party アプリの設定もMCP機能が東京リージョンでも追加されていたりました。

さて、話を戻してアーキテクチャを考えていきましょう。

 

アーキテクチャ

Durable FunctionsのLambda関数

ワークフロー処理の本体。LambdaのDurable Functionsとして実装します。

以下のような実装を行いました。

 

Durable Functionを再開させるためにはCallback Idが必要になるのですが、マネコン上からは表示されないようです。

そのため、コード上で取得したものをDynamoDBに保存するようにしました。

 

また、Durable Functionsの最後はSlack通知にしたため、以下のような通知結果となります。

 

Durable Functionsを再開させるLambda関数

Amazon Connectのフローから呼び出され、上記のDurable Functionsを再開させるLambda関数です。再開させるためにはDurable FunctionsのCallbackIDが必要となります。

こちらはDurable Functionとして作成する必要はありませんが、SendDurableExecutionCallbackSuccessCommandがLambda標準のAWS-SDKにはまだ含まれていないようなので、ローカル上で最新のSDKを利用してデプロイして下さい。

 

 

Amazon Connect

音声によるユーザーの入力を実現し、再開させるLambda関数をフローから呼び出します。

例えば、以下のようなフローを作成しておきます。

 

 

フローから呼ばれるLambda関数の設定も忘れないようにしておきましょう。

 

DynamoDB

通話ごとに一意に定まるContactIdと、Durable FunctionsのCallbackIdをキーに持つテーブルが必要となります。レコード自体はDurable Functionsでの待ち時間以上に保存する必要がないので、TTLでレコードを削除させるのが現実的かと思います。

 

ワークフローの実行

以下のような流れとなります。

  1. ワークフローを開始する代わりに、Durable FunctionsのLambda関数を実行します。
  2. Durable FunctionsのLambda関数からStartOutboundVoiceContactCommandで発信通話実行
  3. Durable FunctionsのLambda関数がDynamoDBに通話のContact IdとDurable FunctionsのCallback Idを保存
  4. ユーザーが通話に出た場合、DTMF入力によって承認を実施
  5. Amazon Connectのコールフロー設定により、Durable Functionsを再開させるLambda関数を実行
  6. Durable Functionsを再開させるLambda関数がContact IdをキーにDynamoDBを検索し、Callback Idを元にDurable Functionsを再開する
  7. Durable FunctionsのLambda関数が再度実行される

 

Durable Functions自体の実行結果は以下のように、Stepとタイムラインがマネコン上に表示されるようになっています。

 

まとめ

AWS LambdaでリリースしたばかりのDurable Functionsを使って、Amazon Connectで有人承認を行うワークフローを作成してみました。電話で追い立てられる承認は結果が素早く出ますね。自分が承認する側だったら、あると怖いなとも思いました。

複雑な遷移が発生しないで済むような場合であれば、このようなシンプルなサービス構成でもワークフローの実現が可能でした。

 

今回は考慮していないですが、ユーザーが承認できなかった場合のリトライも現実には必要になってくるでしょう。Durable Functionsでフローを定義しないといけないので、そのままの勢いで単純にStartOutboundVoiceContactCommandの実行にリトライを噛ませてしまうと、APIの実行自体のエラーハンドリングとなってしまうので注意です。ユーザーの操作に応じて変えるのであれば、DynamoDBのレコードを監視するか、コールフロー上で設定するようにする必要がありそうです。

また、承認相手が複数いる場合には、これまた新機能のConnectのデータテーブルで複数の電話番号を格納しておくことで活用することもできそうです。

この記事が気に入ったら
いいね ! しよう

Twitter で
The following two tabs change content below.
君島翔
AI事業部事業部長株式会社ギークフィード
Java, .NET系の言語が得意。Laravelも使います。 エディタはvim派。 自分が楽するためにテストやビルド、デプロイを自動化させたい。 2022-2023 AWS Ambassador / 2022-2023 Japan AWS Top Engineer / 2022-2023 Japan AWS ALL Certifications Engineer

【採用情報】一緒に働く仲間を募集しています

採用情報
ページトップへ