LINE WORKS に Google カレンダーの予定を同期する

#Google や Office 365 のカレンダーを LINE WORKS と併用したい
LINE WORKS のカレンダーと Google や Office 365 などのカレンダーと併用したいという話しはよくあります。

LINE WORKS は、標準ではそれらと自動で同期する機能の提供はありません。

ですが、共有用の URL 経由で、LINE WORKS の画面にそれらのカレンダーを表示する機能が、2021 年 2 月のアップデートから使えるようになっています。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr"><a href="https://twitter.com/hashtag/LINEWORKS?src=hash&amp;ref_src=twsrc%5Etfw">#LINEWORKS</a> で Google や Office 365 のカレンダーの予定を表示する機能があります。2021 年 2 月のアップデートで追加されました。<br><br>設定方法はこちらのとおりです。<a href="https://t.co/BStZXBDRlc">https://t.co/BStZXBDRlc</a></p>&mdash; iwaohig (@iwaohig) <a href="https://twitter.com/iwaohig/status/1465913311380209667?ref_src=twsrc%5Etfw">December 1, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

ただ、あくまでも表示されるだけなので、LINE WORKS のカレンダーにデータが複製されるわけではなく、空き時間の情報にも反映はされません。

いや、Google カレンダーに追加した予定を LINE WORKS のカレンダーにも反映したいんだ、という場合はカレンダー API を使う方法があります。

この記事では、Microsoft PowerAutome のフローで Google カレンダーの予定を LINE WORKS に反映してみます。
#LINE WORKS のカレンダー API

今回はこちらのページに記載の カレンダー Server API を利用します。

予定作成
https://developers.worksmobile.com/jp/document/100702703?lang=ja

予定変更
https://developers.worksmobile.com/jp/document/100702704?lang=ja

予定削除
https://developers.worksmobile.com/jp/document/100702705?lang=ja

#PowerAutomate のフロー

PowerAutomate では、Google カレンダーのコネクターで Google カレンダーの予定の追加や変更、削除をトリガーにフローを開始します。

HTTP のコネクタで LINE WORKS のカレンダー Server API のリクエストを実行します。

なお、日時の書式の変更に日時コネクタを利用しています。

###フローの作成
Google カレンダーのイベントがカレンダーに追加されたときをトリガーに指定します。
![l_1517737_1464_1638328328426.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/9dde6fc7-d531-4f3c-f4a1-edefde70d15b.png)

![l_1517737_1465_1638328351933.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/4c618f7b-6a97-4f2e-4854-cbfd046e1e2b.png)

連携する Google カレンダーのアカウントでサインインして接続を作成します。
![l_1517737_1466_1638328365454.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/d4019fb3-a9d1-fb7c-3399-7f779bfc566e.png)

連携する Google カレンダーを選択します。
![l_1517737_1468_1638328516312.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/63f19282-85f4-150a-4da7-6051b9e01313.png)


フローの次のステップを作成します。
![l_1517737_1469_1638328539352.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/597beaa1-d2cc-760b-69b9-1fefd9926258.png)

日時コネクタを日時の書式変更のために使用します。
![l_1517737_1470_1638328565909.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/c7135fea-f36a-d65a-d79a-7e41ca1c1db0.png)
タイムゾーンは変換しないのですが、書式変更にも使えます。
![l_1517737_1471_1638328586605.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/7cb1374d-135c-ec0e-d0a6-d8779392a987.png)
まずはイベント開始日時。
![l_1517737_1472_1638328656086.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/e93a80db-0eb5-1b1a-3fc7-1e6181e8acc8.png)
タイムゾーンは適宜選択してください。書式はカスタム値を指定します。
![l_1517737_1473_1638328755482.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/5f024e93-b8b1-b0a6-77bc-af0b5e5606ff.png)
書式は以下のとおり指定します。

```
yyyyMMddTHHmmssZ
```
数種類の日時を扱うので判別できるように名前を付けてください。
![l_1517737_1474_1638328920535.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/3dcf116a-0513-b90c-ce70-73f8fa794764.png)

同様に予定の終了日時と、作成日時を処理します。作成日時は現在時刻を基にしています。
![l_1517737_1475_1638328933779.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/babab4e9-ed51-c37e-86b5-d674c7cf9418.png)

![l_1517737_1477_1638329057256.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/f66776de-5ad7-20b8-c578-e2dcaf20f296.png)

次のアクションを作成します。HTTP コネクタで LINE WORKS のカレンダー API を実行します。
![l_1517737_1478_1638329111405.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/c725f69d-bd3e-4f0f-aafb-4e8939d02a8c.png)

LINE WORKS Developers サイトのドキュメントの説明に沿って、リクエストの URI やヘッダー、本文を入力します。
https://developers.worksmobile.com/jp/document/100702703?lang=ja
![l_1517737_1479_1638330905468.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/77dff3f7-91e0-3fa8-5cef-dac923654514.png)
本文は iCalendar 形式で記述します。
https://developers.worksmobile.com/jp/document/1007011?lang=ja
Google カレンダーのトリガーから取得した予定の情報を含めます。
![l_1517737_1480_1638331099384.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/734c0548-3075-2461-ce9b-51bf4e7e17e6.png)

iCal 記述例

```
{
  "ical": "BEGIN:VCALENDAR\r\nVERSION:2.0\r\nPRODID:Naver Calendar\r\nCALSCALE:GREGORIAN\r\nBEGIN:VTIMEZONE\r\nTZID:Asia/Tokyo\r\nBEGIN:STANDARD\r\nDTSTART:19700101T000000\r\nTZNAME:GMT+09:00\r\nTZOFFSETFROM:+0900\r\nTZOFFSETTO:+0900\r\nEND:STANDARD\r\nEND:VTIMEZONE\r\nBEGIN:VEVENT\r\nSEQUENCE:0\r\nCLASS:PUBLIC\r\nTRANSP:OPAQUE\r\nUID:@{triggerOutputs()?['body/id']}\r\nDTSTART;TZID=Asia/Tokyo:@{body('イベント開始日時')}\r\nDTEND;TZID=Asia/Tokyo:@{body('イベント終了日時')}\r\nSUMMARY:@{triggerOutputs()?['body/summary']}\r\nDESCRIPTION:@{triggerOutputs()?['body/description']}\r\nLOCATION:@{triggerOutputs()?['body/location']}\r\nCREATED:@{body('作成日時')}\r\nEND:VEVENT\r\nEND:VCALENDAR"
}
```

PowerAutomate のフローは以上です。保存してフローを有効化します。
![l_1517737_1481_1638337331223.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/648d9c26-eeba-d49b-e395-3f0a01aa382f.png)

フローのトリガーには、予定追加の他に変更や、削除もあります。
また、LINE WORKS のカレンダー API も、PUT や DELETE メソッドが使えます。
これらを用いて、予定の新規作成だけでなく、変更や削除を反映するフローも作成できます。

#動作確認

Google カレンダーに予定を作成すると、LINE WORKS のカレンダーに複製されることを確認します。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">Google カレンダーに追加した予定が、しばらくすると <a href="https://twitter.com/hashtag/LINEWORKS?src=hash&amp;ref_src=twsrc%5Etfw">#LINEWORKS</a> のカレンダーに反映されます。 <a href="https://t.co/dUW4V8Bgcq">pic.twitter.com/dUW4V8Bgcq</a></p>&mdash; iwaohig (@iwaohig) <a href="https://twitter.com/iwaohig/status/1465921727557345281?ref_src=twsrc%5Etfw">December 1, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

以上です。