はじめに
Microsoft Forms でイベントの参加受付をする事があります。
コミュニティイベントなら connpass 等のイベントサイトを使うのが良いのでしょうが、社内のローカルイベントの場合は、全員がアカウントを持っている事や、氏名/メールアドレスを自動的に収集出来る事から Forms の方が良い事もあります。
ですが、残念ながら Forms では申込数に上限を設ける事が出来ません。
そこで、Logic App を使って、申込数が上限に達した以降の申し込みにはお断りメールを自動的に送信する仕組みを作ってみます。
手順
空の Logic App を作成し、Forms トリガーの「新しい応答が送信されるとき」を選択します。
続けて、回答者のメールアドレスを取得する為に Forms トリガーの「応答の詳細を取得する」アクションを追加します。
レスポンスIDには上のトリガーで取得した responseId
を指定すれば良いのですが、動的プロパティで取得する事ができません。
なので、コードビューで編集します。
@triggerBody()['body']['resourceData']['responseId']
を queries.response_id
に指定します。
response_id は1から順に振られるので、これが閾値以下なら参加受付メールを、超えていれば受付締切メールを送る事にします。
「値の選択」では動的なコンテンツの追加が使えるので、「応答通知の一覧 応答ID」を選択します。
条件は「次の値以下」とし、「値」には任意の数値(申込上限値)を設定します。
メール送信アクションを追加します。
ここでは Office 365 Outlook で作成しますが、ここは何でも良いです。
ここでも動的プロパティが効かない為、コードビューで指定します。
メールアドレスは @body('応答の詳細を取得する')?['responder']
、レスポンスIDは @{triggerBody()['body']['resourceData']['responseId']}
で取得できます。
"actions": {
"メールの送信_(V2)": {
"inputs": {
"body": {
"Body": "<p>受付番号:@{triggerBody()['body']['resourceData']['responseId']}<br>\n<br>\n@{body('応答の詳細を取得する')?['responder']} さんの参加を受け付けました。<br>\n<br>\n</p>",
"From": "hoge@example.com",
"Importance": "Normal",
"Subject": "テストイベント申込確認",
"To": "@body('応答の詳細を取得する')?['responder']"
},
"host": {
"connection": {
"name": "@parameters('$connections')['office365']['connectionId']"
}
},
"method": "post",
"path": "/v2/Mail"
},
"runAfter": {},
"type": "ApiConnection"
}
}
同様に、falseの場合に受付られなかった旨のメールを送信します。
"actions": {
"メールの送信_(V2)_2": {
"inputs": {
"body": {
"Body": "<p>受付番号:@{triggerBody()['body']['resourceData']['responseId']}<br>\n<br>\n申し訳ありませんが、定員に達した為参加を締め切りました。<br>\n</p>",
"From": "hoge@example.com",
"Importance": "Normal",
"Subject": "あなたは補欠です(テストイベント参加申込)",
"To": "@{body('応答の詳細を取得する')?['responder']}"
},
"host": {
"connection": {
"name": "@parameters('$connections')['office365']['connectionId']"
}
},
"method": "post",
"path": "/v2/Mail"
},
"runAfter": {},
"type": "ApiConnection"
}
}
おわりに
Forms でイベント参加の上限を設ける為に、回答数に応じて受付/拒否のメールを送信する仕組みを Logic App で実装しました。
「受け付けました」と言っておきながら後で「定員を超えているのでやっぱり駄目でした」と連絡するよりはまだマシ・・・だと思います。
キャンセルやら繰り上がりやらを考えると、やっぱりイベントサイトを使いたいところではありますが。