Blue PrismからZoom会議を設定する #blueprism #zoom

# やりたいこと
Blue Prismのプロセスから会議設定をしたい。
設定したあとにほしいものは、設定した会議のURLとパスコード。

手でやるときはこの画面でやります。
![手で会議設定する画面.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142092/36991d31-8859-dac6-65ec-a4a9f1706710.png)

# どうやるのか
公式のこのページ「[Zoom APIの使用](https://developers.zoom.us/docs/api/rest/using-zoom-apis/)」の図が一発でわかるので転載します。
![s2s-auth-flow-opt-640.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142092/622167b3-ce6b-2619-c01a-86040a3297b0.png)

1. BPプロセスからZoom認証サーバへ、認証のリクエストを投げる
2. アクセストークンが返ってくる
3. そのトークンを使って、Zoom APIに、会議作成のリクエストを投げる
4. 会議が作成されて、会議の情報が返ってくる

# まずアプリを作成する
[Zoom App Marketplace](https://marketplace.zoom.us/) に行って、Server-to-Server-OAuth のアプリを用意します。
Zoomのアカウントは無料のやつでも会社のでもとりあえずオッケー。そのアカウントで会議を作成します。
サインインしたら右上のメニューから、Develop→Build Server-to-Server Appを選択。
![マケプレメニュー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142092/33bb7f8d-3866-e038-09cd-4a376abc9a15.png)
そんなにいろいろ設定するところはないのですぐできます。公開はしないでアクティベートだけしたらいいです。

アプリを作成したら、認証情報（アカウントID、クライアントID、クライアントシークレット）をメモっておきます。

# Blue Prismで認証情報を作成する
クライアントID、クライアントシークレットを、OAuthクライアント認証で作成します。
![MicrosoftTeams-image (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142092/57749de8-2d93-4e77-af1c-9bdeeb3556ad.png)

# 認証情報取得アクションを作成する
認証情報を取得するのはいつものアレ。
この認証情報を投げてトークンを取得するのですが、投げる前にBase64エンコードする必要があります。
エンコードのVBOはDXにあります。 [Utility - Encode Decode](https://digitalexchange.blueprism.com/cardDetails?id=127854)

アクションの中身はこうです。
![VBOトークン生成の認証情報取得.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142092/f2e12cc4-d6ec-3049-84f8-25266e059ec4.png)
変換するテキストの中身はこんな感じです。これをエンコードのステージの入力にします。
![VBOトークン生成のエンコード前.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142092/233647d5-b5aa-5b34-c85c-5e89db0e5494.png)
出力引数は、「クライアントID:クライアントシークレット」をBase64エンコードしたテキストです。


# トークン生成アクションを作成する
中身はこうです。
入力引数は
- アカウントID：アプリを作成したときにメモったやつ
- 認証情報取得アクションの出力引数であるテキスト（クライアントID:クライアントシークレット）

出力引数は生成したトークンが入っているコレクションです。
生JSONだと扱いにくいので、コレクションに変換してから返します。Utility - JSONは標準VBOです。
![VBOトークン生成1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142092/77ebfeae-fba1-d4e2-489f-cf5a13b08568.png)

Utility - HTTPも標準VBO。これのPostアクションを使います。中身はこう。
投げるヘッダがBasicなので、Use Bearer TokenはFalseにしておきます。
URLは「https://zoom.us/oauth/token?grant_type=account_credentials&account_id={アカウントID}」
![VBOトークン生成のPOST.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142092/8bf1404a-e8e9-9dbe-2536-43e087943348.png)
HeadersはAuthorizationの1行だけ。設定する値は「Basic Base64エンコードしたテキスト」です。
![VBOトークン生成のヘッダ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142092/d885a162-2a98-98d0-58b1-71e881e50134.png)

# 会議を作成する

材料は揃ったので、会議を作成します。
先述の認証情報取得やトークン生成のアクションは公開せず、このアクションだけ公開にしておきます。
入力引数は
- アカウントID
- 認証情報名
- 会議タイトル：テキスト
- 開始日時：日時
- 所要時間（分）：数値

アクションの中身はこんな感じ。
認証情報取得→トークン生成→開始日時をテキストに変換→リクエストを投げる
開始日時をテキストに変換するときの形は「yyyy-MM-ddTHH: mm:ss」。日と時の間に「T」が入ります。
![VBO会議作成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142092/7fee4f65-09c9-5dac-0b6a-91e31a9b68e5.png)

Post JSONステージの中身はこう。
Bearer Tokenに、トークン生成アクションの出力で受け取ったトークンを設定し、Use Bearer TokenをTrueにします。
![POST_JSON.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142092/3aeb7210-be36-b335-2c6c-fa5a056d6dc9.png)

Bodyの中身。各値を入力引数の値にReplaceします。
```JSON
{
"topic": "<会議タイトル>",
"start_time": "<開始日時>",
"duration": <所要時間>,
"timezone": "Asia/Tokyo"
}
```

返ってきたJSONをコレクションに変換して、会議URLとパスコードを返します。
コレクションの項目で使いそうなのは以下。

- start_url：ホストとして参加するときのURL
- join_url：普通の参加者にお知らせするURLはこっち
- password：パスコード。これは半角英数で、「H323_password」「pstn_password」のほうは数字です。H323とかpstnって何やねんというかたは、私も知識が薄くて上手に説明できないので、VoIPの説明とかをググってください。

これらを使って会議設定のプロセスを作成し、会議設定したあとに参加者にメールを送信するとかの処理を追加したらいいと思います。

# 終わりです

今回はタイトルと時間だけで設定しましたが、手で設定するときの項目はだいたい全部設定できます。
BodyのJSONに書くときの項目など、詳しくは公式資料を参照してください。→ [Zoom API の概要](https://developers.zoom.us/docs/api/)