Zoom APIを試してみる OAuth編

「Zoom APIを試してみる JWT編」
https://qiita.com/nanbuwks/items/ed74a76a0f294c0bf4ed
では ユーザ情報を取得してみました。

さて、 Zoom の Chat と連動する何かを作ろうかと思いましたが、Chat関係のAPI は OAuth のみ対応

> Note: This API only supports user-managed .
「List User's Chat Messages - Chat Messages - Zoom API - API Reference」
https://marketplace.zoom.us/docs/api-reference/zoom-api/chat-messages/getchatmessages

ということらしいです。ということで OAuth を試してみます。

(なお、後述しますがこのAPIは目的に適合しませんでした)


# アプリの登録と API Key の取得

https://marketplace.zoom.us/

で以下のページを開きます。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/8070d3b6-9ed2-a006-7dc9-e30f26c7074d.png)

「Develop」のボタンを押してメニュー中の「Build App」を押します。
ボタンは画面の横幅がないと出てこないので注意。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/d8a9b285-4bc9-dc48-7ff2-d0d5d1367d7f.png)

今度は OAuth を選びます


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/cffdef2a-fb2b-1436-0031-0795c5f92db9.png)

アプリ名を入力して「Create」。
「Would you like to publish this app on Zoom App Marketplace?」
は今回はOFFにしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/4c6b3c2e-cd36-3f79-4b16-76015b134c0d.png)

OAuth のリダイレクト先を入力します。しかしながらこれだけの入力だと・・・


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/317abda1-82cd-3c3d-b613-6de570a2001c.png)

後述のプログラムを試してみるとエラーが出ました。あれーおかしーなーとおもっていたら

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/b4e9c6a6-9e25-ff1c-a4c5-51b3c6196a1e.png)

Whitelist URL に Redirect URL for OAuth を含めた値を指定しないといけませんでした。ブラウザ画面キャプチャ用にウィンドウを小さくしすぎて気が付いてませんでしたとさ。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/09e4d07c-f1eb-c5a5-3729-827f9fdc87d1.png)

イベントを取得したいので Event Subscriptions を選んで。 Continue。



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/1001a849-2075-1ec8-679f-7bd22bcf50d9.png)

購読設定に名前を付けます。イベントを受け取るURLと Event types で何のイベントを受け取るかを決めて「Continue」。

(なお、ここで設定はしましたが後述するように今回は使いませんでした)。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/3ca65112-c046-f18b-e838-b66502c14a13.png)
使用するAPIを登録します。


# リダイレクト元のページを作る


```

<html>
<body>
<?php

$CLIENTID="i8NJn5vETrCUX5TUCru3Pw";
$REDIRECTURI="http://www..../rcvauth.php";
$REQUESTURI="https://zoom.us/oauth/authorize?response_type=code&client_id=" . $CLIENTID . "&redirect_uri=" . $REDIRECTURI;

echo("<a href=" . $REQUESTURI . "> Go! </a>")

?>

</body>
</html>
```


上記のプログラムを作ってブラウザでリンクを押すとZoomのOAuth認証ページに移ります。



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/e9e7d90f-897b-b1f3-b76f-7bad98de1c77.png)


# リダイレクト先のページを作る

「Zoomのアプリケーションの作成 | 記録程度」
https://1507t.xyz/zoom-app-create
にある
「リダイレクト後、アクセストークンを得る例」
のプログラムをそのまま使い、パラメータ $Client_ID や ＄Redirect_URL を今回用に直してリダイレクト先ページのアドレスとして配置。

リダイレクトするとエラーが出ます。

```


[Sat May 09 11:02:47.109571 2020] [:error] [pid 17326] [client 126.161.11.84:21283] PHP Fatal error:  Call to undefined function curl_init() in /mnt/xvdf/home/nanbu/public_html/zoom/rcvauth.php on line 11
```

と出たので、

```

$ sudo apt install php5-curl
```

として

```

$ sudo /etc/init.d/apache2 reload

apt install php5-curl
Reading package lists... Done

```

とすると動作して、以下のトークンが得られました。

```

{
"access_token":"eyJzPxX6VHZhmZqwoC-KrXn  〜(中略)〜  4J7V9fCJQJo9tGYkN4KQ",
"token_type":"bearer",
"refresh_token":"eyJhbGciOiJIUzUxMiIsIn  〜(中略)〜  RvVUozvhfayLsy0F1Tsw",
"expires_in":3599,
"scope":"chat_message:read"
}

```

ここで得られたトークンを

「Zoom APIを試してみる JWT編」
https://qiita.com/nanbuwks/items/ed74a76a0f294c0bf4ed

と同じ Python プログラムに適用しました。

```

import http.client

conn = http.client.HTTPSConnection("api.zoom.us")

headers = {
    'authorization': "Bearer eyJzPxX6VHZhmZqwoC-KrXn  〜(中略)〜  4J7V9fCJQJo9tGYkN4KQ",
    'content-type': "application/json"
    }

conn.request("GET", "/v2/chat/users/me/channels?page_size=30&page_number=1", headers=headers)

res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
```
これはチャットチャンネルを取得します。

実行すると以下が得られました。

```

{"total_records":0,"page_size":0}

```

チャンネルが取得できませんね。meetingを立ち上げて、チャットに適当に書いても、取得データはゼロのまま。あれれ？？？


# In Meeting Chat

ここまでやって気がついた。今までやってきたAPIの示す Chat とは、これらしい。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/707e6340-c9e9-748a-d088-1c7d3406a48f.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/26ed844c-e94a-1816-8fbe-764a429b4fb8.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/6c558e6b-6cc0-a790-2295-1ca9af007446.png)


ミーティングでやっているチャットは、「In Meeting Chat」と呼ばれていて別物であるというのをようやく理解した。


「ミーティング内チャット - Zoom ヘルプセンター」
https://support.zoom.us/hc/ja/articles/203650445-%E3%83%9F%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%E5%86%85%E3%83%81%E3%83%A3%E3%83%83%E3%83%88

# SDK

In Meeting Chat をコントロールするには SDK を使うとできるらしい。

ZOOM Windows SDK: IMeetingChatCtrlEvent Class Reference
https://zoom.github.io/zoom-sdk-windows/class_i_meeting_chat_ctrl_event.html

Macsdk in-meeting chat interfaces? - macOS - Zoom Developer Forum
https://devforum.zoom.us/t/macsdk-in-meeting-chat-interfaces/9142

ということで OAuth へのチャレンジはここまで。機会があれば SDK をチャレンジしてみます。