AppSheetでフォーム埋め込みメールを送信する
以前、多階層のワークフローアプリをAppSheet + Google Apps Scriptにて構築しました。メール通知が簡素なのでもう少しなんとかならないかなと思っていましたが、どうやら特定のレコードについてフォームをメールに埋め込んで送信出来るらしい・・・
ということで、AppSheetからのメール送信でメールにフォームを埋め込んで直接、承認作業出来ないか?というチャレンジをしてみました。
目次
今回利用する素材
- AppSheetでフォーム埋め込みメール - AppSheet
- 埋め込みメールを送る - Google Spreadsheet
この機能、埋め込みアプリビューと呼ばれるようで、2021年10月19日にはリリース済みの機能だったようで。ちっとも知らなかったので、早速うまいこと特定のレコードだけ承認するようなものを作ってみました。
特殊なメールであるため、GASでは実現できない機能の1つですね。
事前準備
スプシを用意する
スプレッドシートを用意してAppSheetアプリを作成しますが、今回はシンプルな設計です。workflowシートを用意して以下の列を用意します。
- ID列:ユニークなUUIDの値。UNIQUEID関数により自動入力されます。
- 申請タイトル:ワークフローのタイトル入力欄
- 申請者メアド:USEREMAIL関数にて自動入力されます。
- 利用目的:利用目的入力欄
- 金額:金額入力欄
- 承認者:承認者のメアドが入る予定
- ステータス:承認時に選択した項目が入る
- UserTrigger : ユーザーが申請時にアクションによってUUIDの値が入る。
- AdminTrigger : 承認者が承認時にアクションによってUUIDの値が入る予定。
ただし、この回実装してみて一部に問題があったので、そこは課題として残っています。
図:シンプルなスプシ設計
ユーザー側の準備
今回の仕組みは動的メールという仕組みを利用する為、最低でも承認者はGmailの設定上から以下の手順で設定変更をしてもらう必要があります。
- Gmailの右上の歯車をクリックする
- すべての設定を表示をクリックする
- 全般の中の「動的メール」にある「動的メールを有効にする」のチェックを入れる
- 同じく「メッセージ内の画像」についても、「外部画像を常に表示する」にチェックを入れる
- 一番下にある変更を保存ボタンをクリックする
この設定をしないと、Gmail上でAppSheetのフォームが表示されません。
図:動的メールを有効化
構築方法
今回は、この埋め込みビューメールに必要な箇所だけ、構築手順を掲載しています。
アクションの作成
申請時用のアクションを作ります。
- 名前を申請者用としておく
- Do thisは「set the values of some columns in this row」を選択する
- Set these columnsはUserTriggerを選択し、値はUNIQUEID関数を指定します。
- 右上のSAVEボタンをクリックして保存する
図:アクションを用意しておく
アクションボタンをセットする
申請者用_Formの保存ボタンを押した時にActionが作動するようにボタンをセットします。
- 申請者用_Formビューを開く
- Behaviorの項目を開く
- Event ActionsのForm Savedを作っておいた「申請者用」というアクションを指定します。
これで保存ボタンを押すと、アクションが作動してUserTriggerの列に値が入り、Automationをトリガーすることが出来ます。
図:イベントアクションを変更する
埋め込み用ビューを用意する
workflowというテーブルに対してもう一個手動でビューを作成します。但しちょっと特殊なビューになります。
- ビューの画面で新規にworkflowを元にビューを作成(名前は承認用としました)
- このビューはmenu navigationの側に移動させておきます。
- view nameは承認者用として、View typeは「Detail」に変更する
- Quick edit columnsは、Addボタンを押して「ステータス」列だけを追加する
- Column OrderはManualにして必要な列だけにして他は削除する
- 右上のSAVEボタンをクリックして保存する
これにより、ステータス欄だけが編集可能なフォームがメールに埋め込まれるようになります。View TypeがFormの場合はすべての欄が編集可能になります。
図:特殊な設定を施します
Automationの作成
ここまで作成したら、あとはUserTrigger列に値が入ったら作動するAutomationにて埋込ビューメールを送信するフローを作成します。
- 新規にAutomationにBotを追加する
- 発火するイベントはAdd, Updateのチェックをオンにして、Condition式には以下のような数式を入れます。
[_THISROW_BEFORE].[UserTrigger] <> [_THISROW_AFTER].[UserTrigger]
- イベントを追加してSend an emailの状態にします。
- Email Typeを「Embedded app view」に変更します。
- ToやSubject、Email bodyは普通に値を入れておきます。
- App view to embed in email bodyでは、前述で作成しておいた「承認用」というビューを指定します。
- 右上のSAVEボタンをクリックして保存する
これで、Toに指定した承認者宛に埋め込みビューメールが送信出来るようになりました。
図:Email Typeの変更が重要
図:作成しておいたビューを指定する
課題点
今回実装してみたのですが、承認者が承認してもこれまでのような、フォームビューのBehaviorにはForm Savedは無い為、アクションで申請者のメアドとAdminTriggerに値を入れて承認実行の場合のAutomationが作動しません。
故に、スプシの2つの欄が空のまま。これがView TypeをDetailではなくFormにしてもBehaviorのForm Savedに設定したアクションは作動しないことも確認しています。よって、承認者が承認 => Automationで作動させるには「ステータス欄の値が承認 or 却下の場合」というAutomationも別に用意して、Actionにて値をセットするように仕掛けを別途作る必要があります。
また、差し戻し後にこの欄は空っぽにすべきなので、承認時Actionには合計3つの列の値の変更をさせる必要があります。
使い方
今回のアプリは申請側だけ表向きビューを用意していますが、メール上で承認用のフォームはMenu Navigationのほうに入れてあります。
ユーザが申請フォームで普通に申請を実行するとAutomationが発動してフォーム付きメールが承認者宛に送信されます。すると、承認者はメールを開くと以下のスクリーンショットのような、メール上で承認実行出来るものが到着します。
あとはAppSheetを開くこと無く、そのまま承認もしくは却下のどちらかをクリックするだけでオッケー。動的にAppSheet側で処理が行われてステータス欄が書き換わり、承認作業は完了です。完了すると「Nothing to see here! Go to the app to see more.」というメッセージの表示のみとなり、再度の承認作業はできなくなります。
図:承認者に届く動的メール








