FileMakerでZoom予約機能を作ったお話

2020年になって、オンライン会議はリモートワークの必須ツールとなりましたね。会議の日時が決まったらアプリを開いてURLを発行して、参加者に通知して、会議時間になったらメール等でURLを探してアクセス・・・という作業は、数が多くなってくるとかなり面倒ですよね・・・。というわけで(?)、FileMakerでZoomのURLが簡単に発行できる仕組みを作りました。
## やったこと
![zoom_filemaker.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603563/e7fb485d-f1aa-3a43-6902-d7c319551d9f.jpeg)
ボタンを押すと、指定したアカウント・日時・タイトルでZoomの会議URLが作られるので、２クリックで会議を始められる、というものです。

## STEP.1 Zoomでアカウント&Tokenを発行しましょう
[zoomアカウント](https://zoom.us/)(個人利用なら無料アカウントでOK)を作成して、そのアカウントでZoomのmarket placeに行ってください。

■ [zoom market place](https://marketplace.zoom.us/) (英語だけみたいです)

ログインして、右上にDevelopと書かれたところをクリックすると「Build App」がありますので、そちらを押してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603563/aa02f528-db8a-b509-9dac-3e4d44e3d5c1.png)
zoomの利用規約に同意する必要があるので、Zoom’s API License and Terms of Useのポップアップは「agree」でお願いします。

そうすると、Choose your app type とあるので、APIキーが作れる「JWT」を選択します。（Createボタンが出てくるはず）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603563/5fbf0d62-d241-bad0-d736-54a3121dba0b.png)

createボタンを押すと、appの情報を入れていく必要があるので、どんどん入れていきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603563/fe3800a9-d5b4-3007-378f-038422997432.png)
一応連絡先も入れて・・・
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603563/b71edbee-958b-c909-ad6e-9fea019b2550.png)
Links(Optional)はオプショナルなのですっ飛ばして、Continueへ。

次のページで、APIkeyやAPI Secretをもらえるのですが、それには目もくれず「View JWT Token」を押してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603563/ec6bf0bd-5e85-98b5-5acb-f5ca7c6829b7.png)
Expiration Time は90mins, 1day, 1weekと、どの選択肢も短すぎるのでOtherにして日時を自分で設定し、JWT Tokenをメモしておきます。(FileMaker側で使います)
※注意※　この設定をした後、「あ、設定大丈夫だったかな・・・」と不安になって再度「View JWT Token」を見てしまうと、JWT Tokenは変わってしまいます。設定も90minsに戻ってしまってます(涙)　見てしまったら最後、新しく今見えているJWT Tokenをメモし直しましょう。

## STEP.2 FileMaker側でAPIの設定をしましょう
長くなってしまってすみません。ようやく、FileMakerでZoomのURLを発行するための準備に入ります！

FileMakerで以下のフィールドを作成します。

1. JWT_Token(テキスト型)
- 会議日(日付型)
- 会議開始時刻(時刻型)
- 会議時間(数字型)
- 会議タイトル(テキスト型)
- c_zoom_request_json(zoomにrequestするjsonを作ってくれる計算フィールド)
- result_json(zoomから返ってきた結果を格納するフィールド)(テキスト型)

6 の c_zoom_request_jsonの計算フィールドに記述する内容は以下のような感じで、設定できるオプションは[zoom API documentation](https://marketplace.zoom.us/docs/api-reference/zoom-api)に記載されています。
■ [Create a meeting のRequest BodyのExample](https://marketplace.zoom.us/docs/api-reference/zoom-api/meetings/meetingcreate)

```
"{\"topic\":\"" & 会議タイトル & "\",\"type\":2,\"start_time\":\"" & Substitute( 会議日 ; ["/" ; "-"]; [" " ; ""]) & "T" & 会議開始時刻 & "\",\"duration\":" & 会議時間 & ",\"timezone\":\"Asia/Tokyo\",\"settings\":{\"host_video\":\"true\",\"participant_video\":\"true\",\"mute_upon_entry\":\"false\",\"audio\":\"voip\",\"waiting_room\":1}}"
```
※zoomのDocumentsにあるExampleは、改行やインデントがとても見やすいのですが、Filemakerで記述する時には、改行が入らないよう記述する必要があります。不要な改行やスペースが一つでもあると、requestが正しく処理されません。

## STEP.3 FileMakerでポチっとするスクリプトを作りましょう

スクリプトを１つ作ります。「URLから挿入」を選択し、歯車マークを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603563/33e95d9f-78ec-af4b-bbe3-e555ccc93663.png)
ターゲット：
　STEP.2でフィールド作成した、7の「結果を格納するresult_json」フィールド
URLを指定：
　"https://api.zoom.us/v2/users/me/meetings" (Zoom API Documents [Create a Meeting](https://marketplace.zoom.us/docs/api-reference/zoom-api/meetings/meetingcreate)より)
cURL オプションの指定：

```
"--header \"Content-Type: application/json\" --header \"Authorization: Bearer " & STEP.2で設定したJWT_Tokenフィールド & "\" --request POST --data " & STEP.2で設定したc_zoom_request_jsonフィールド
```
※ここも、不要なスペースや改行があると機嫌を損ねるのでご注意ください\:sweat_smile:

これでデータは取れるのですが、result_jsonに入ったデータがやや見づらいので、
JSONFormatElements関数を使って成形しておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603563/cb9b85c4-069c-3cc1-d74b-ef768fec0dde.png)

スクリプトステップはこの２つだけです！これでFileMakerからzoom APIにアクセスして会議URLを発行できました～！
![zoom_result_json.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603563/34ec5f09-7694-b8df-7afd-7429121eec00.jpeg)

## JSONGetElement関数で欲しいデータだけ抽出して完成☆
さすがに、このjsonだけポンと置いてあってもまだ見づらいですよね・・・
zoomから返ってきたresult_jsonには、「オーナー」として会議を開始できる(管理アカウントでログインするけどログイン作業はすっ飛ばせる)start_url、アカウントなしでも参加者として会議に参加できるjoin_url、会議にパスワードを設けると必要になるpassword などが記載されています。FileMakerのJSONGetElement関数を使った計算フィールドを準備すれば、欲しいデータを個々に持っておくことができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603563/8f58c483-d3a2-3137-e745-546993a6e274.png)

STEP.3で作ったスクリプトを「ZoomURL発行」ボタンに割り当てて、もう一つの「Zoom参加」ボタンに「URLを開く」の単一スクリプトで、URLにc_MTG_join_URLをセットしてあげれば、完成です☆

弊社内では、FileMakerでスタッフ全員が共有できるスケジュールがあり、この機能を連携させているので、会議の入力から5秒で会議URL発行～会議参加まで行えます。会議URLを忘れてもスケジュールを検索すれば会議URLが記録されているので、メール捜索で会議に遅れることもありません。（オーナーが会議URLを作り忘れていても、会議開始の10秒前にサッと作って何食わぬ顔で会議を始めることもできなくはないです\:alien:）

## おわりに・感想
長々と投稿失礼しました。初めてのQiita投稿で、わかりづらいところやミスっているところがあったらぜひお手柔らかにお知らせいただけましたら幸いです。FileMaker単体で十分便利に使えますが、他サービスと柔軟に連携していくとさらに便利になることを改めて認識しましたので、このサービスと連携したらさらにFileMakerが面白くなる！みたいなものを見つけていきたいなと思いました！