Firebase って使うと色々な効能があるというのを見かけたんです。
Firebaseすごすぎるプレゼン聞いてる pic.twitter.com/tkXHFBRhSY
— Tecco@新宿の暇人 Go (@tecco_master) July 5, 2018
じゃぁ Azure Functions を使ってこれらのメリットのどれか実現できないか!?と思ったので作ってみました。とりあえずモテるというやつを実現してみましょう!
恋人を作るには告白して返事をもらわないといけない
そういうワークフローを回せば OK ですね! Azure Functions の中でも特にイケてる機能に Durable Functions というのがあります。
この Durable Functions には人の承認が入るワークフローを処理するための機能があります。 外部イベントがそれです。
以下のようにコードを書くだけで、Approval という外部イベントが来るまで、そこで処理が止まったような動きになります。 実際には処理が止まるわけではなく、賢く何度も再実行されてイベントが来てなかったらそこで終わるみたいな動きになってるみたいなので、外部イベント待ってる間コンピューターを占有して課金対象になるということはありません。
// Approval というイベントが来るまで待つみたいな動きをする var approved = await context.WaitForExternalEvent<bool>("Approval");
そして、別のところでこんな風にイベントを発火できます。
await client.RaiseEventAsync(instanceId, "Approval", approved);
ということで、チャットで告白したい相手のメールアドレスを伝えるとラブレターをメールで送信して相手から OK/NG の返事がきたら返答をくれるチャットボットを作ってみました。 告白のワークフローは Azure Functions の Durable Functions を使ってチャットボットは Azure Functions で Bot Builder SDK を使って作ってみました。
Slack に繋いで動かしてみるとこんな感じです。
ここまでやると、入力したメールアドレスの先にこんなメールが飛びます。
このメールのリンクをクリックすることで Azure Functions の関数が呼ばれて、その中で RaiseEventAsync が呼び出されて WaitForExternalEvent で待ってたところの処理が先に進むようにしています。
Slack 側にこんな風に通知が来ます!!
やったね!これで Slack や Skype とかのチャットからメアドを知ってる人相手にラブレターが送れますね!
まとめ
Azure Functions の Durable Functions を使うと人の承認が必要なワークフローのような処理を簡単に直感的に書くことが出来ますね!凄い。
コードはここにあげておきました。