AppSheet→ZapierでOutlookカレンダー登録

## 経緯
* AppSheet上の予定データとOutlookカレンダーの連携が可能か？という課題が挙がった。
* Googleカレンダーの場合はAppSheetのデータソースとして選択するとできそう。
* しかし、Outlookカレンダーはデータソースにできないため工夫が必要そう。
* Zapierを使うと解決できそうだと思ったので検証してみた。

## AppSheetとは 
Googleが提供するノーコード開発ツール

https://www.appsheet.com/

#### AppSheet側の作業
Automation機能でCall a webhookを選択
Zapierで設定するトリガーにて発行されたwebhook URLに投げるだけでOK

## Zapierとは
ノーコードでワークフローを組むことができるWEBアプリケーション

https://zapier.com/

ワークフローを組む画面はAppSheetのAutomation画面に似ているので
AppSheetのAutomationを使える程度の人ならなんとなくで触れる印象

#### Zapier側の作業
Webhookを受け取る「トリガー」、トリガーから発生する「イベント」を作成する
手順通りに設定していくと、所々でテストが実行可能なので確認しながら進めるだけでOK
英語画面だけど翻訳機能でなんとかなる。

## どう作った
AppSheetからZapierのwebhook URLに1回JSONデータを投げたら勝手に構造を分析してくれる。
受け取ったリクエストデータを選択し、イベントに対して必要な項目にぽちぽちとデータ項目を選択していくだけでOutlookカレンダー予定作成のイベントが完成した。
できたフローは下図の通り トリガーと2ステップ

![スクリーンショット 2023-09-11 14.56.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233298/a1088d6a-dac0-a768-fe0d-d2044a5142d2.png)

フローの設定内容は以下の通り。

### 1. Catch Hook in Webhooks by Zapier
トリガーと呼ばれる部分。フローの最初
Webhooks by Zapierを使う。
Webhookは<strong>premium app</strong>らしい。実際に使う場合は課金が必要プラン。金額については後ほど記載。

EventはCatch Hookを指定する
![スクリーンショット 2023-09-11 14.57.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233298/8ce56ced-f30f-2419-b31f-e0d0f6d318b1.png)
Triggerはそのまま、Testに進むとwebhookURLが発行されているのでAppSheetから1回データを投げてみる。
データが届くと表示されるので良さそうならContinue
![スクリーンショット 2023-09-11 14.59.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233298/dae869cf-aba2-3228-28bb-d18aac46a98f.png)
↑バーチャルカラムのデータを修正して再送信、Find new recordsで必要なデータが渡っているか確認していたのでリクエストが増えてしまったけど良さそうなのでContinue。

### 2. Create Event in Microsoft Outlook
トリガーで実行されるアプリはたくさんあるし、選んだアプリによって動作できるイベントも異なる。
今回は、Outlookカレンダー予定を作成したいのでAppは「Microsoft Outlook」を選択し、Eventに「Create Event」を選択した。
![スクリーンショット 2023-09-11 15.16.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233298/28b42594-6954-6e23-7efb-e97835c6ce1f.png)
ContinueでAccount設定に流れる。
どのアカウントで動かすのか選ぶ必要があるので、アカウントを認証・選択する。
Zapierからの処理を行うアカウントが1個あると便利そう。

アカウントを選んだ後はActionにて、どのカレンダーに対してどんな情報を登録するか設定。
![スクリーンショット 2023-09-11 15.19.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233298/d4b21520-c6a8-e99a-3f69-330de8dea7d8.png)

Createでは設定できる項目が少ない。予定の作成だけならこのステップまでで完了する。
<strong>招待の追加やTeams会議の設定をする場合にはもう1ステップ必要になる。</strong>

Actionまで組めるとテストが実行可能。このテスト機能が地味に助かる（感想）
テストを行なって良さげにOutlookカレンダーに予定が登録されたので続ける。

### 3. Update Calendar Event in Microsoft Outlook
先に登録されたカレンダー予定に対して内容の更新を行う。
Appは「Microsoft Outlook」、Eventは「Update Calendar Event」
![スクリーンショット 2023-09-11 15.24.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233298/55d87b32-3229-53b3-1361-664eb5f2f398.png)

前実行したタスクのデータを使いまわせる（簡単に選択できる）のが賢い。
EventIDは2. Create Event in Microsoft Outlook で発行されたIDが選べる。
![スクリーンショット 2023-09-11 15.45.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233298/b73fc560-c81f-0ebe-873a-a9ae597635c9.png)
SubjectやStart Date、End Date〜など先に登録した値は空にしておけば更新はされない様子。
更新したい項目だけ追加で値を設定していく。

#### Teams会議の設定と招待
Updateの場合、下の方に<strong>Is Online Meeting?</strong>があるのでTrueにするとTeams会議がオンになる。
今回はWeb会議をつけたいので固定でオンにしたが、AppSheet側でTrue/Falseを渡しても良さそう。
![スクリーンショット 2023-09-11 15.27.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233298/7f1f65a3-b3d2-8a35-82a1-496deddffc8c.png)

さらに下の方に<strong>Attendees</strong>があるのでWebhookで投げてきたEmailアドレスの項目を選択する。


![スクリーンショット 2023-09-11 15.25.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233298/9ec137cd-ba08-0c0b-e227-d7b6f2a8d8c5.png)

:::note info 
AppSheetのList型Emailデータを割り当てたら複数ユーザーをまとめて招待に含むことも可能だった
::: 

ここまでActionを設定できると、テストが実行できる。
このテスト機能が大変助かる（2回目）

## 登録できた
テスト動作でOutlookカレンダーにWeb会議・ユーザー招待済みの予定が登録できているのが確認できた。
![スクリーンショット 2023-09-11 15.51.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233298/4052aeb2-ac62-3b06-1218-58123a8c5423.png)

## Zapier使うには（値段とか）
価格表

https://zapier.com/pricing

* AppSheet→Zapierを繋ぐためのトリガー「Webhooks by Zapier」はPremium app機能
* Premium AppはProfessionalプラン以上が必要そう
$49USD〜 （2023年9月現在）
* 無料はSingle-Step、１００tasks/mo
* 今回の場合はCreate → Updateの2ステップなので無料じゃ難しそう。
StartEndだけのTeamsなし招待なしの予定作成なら1ステップだけど実用性なさそう
* 日本の販売代理店はない。クレカ以外はPaypalが可能


## まとめ
* AppSheetのCall a webhookでは限界がある
* Asanaへのタスク登録など、AppSheetのAutomationにないサードパーティとの連携が豊富
* Zapierが面倒な接続全部やってくれる Automationに似ていて直感的に設定できる。
* ちょっと単語が独特なんかんじ（zapとかtaskｓ/moとか）以外は使いやすい
* Outlookの場合、ZapierのEventにない場合はGraphAPIを投げることもできるらしい
* まずは14日無料で試してみるのはあり。（無料期間後はFreeに移行）
* 連携できるサードパーティーは下記で確認できる

https://zapier.com/apps