Cloudflare API で Waiting Room を確認

3 min read読了の目安(約2700字

概要

今回は CloudflareのWaiting Room、2021年6月現在コロナワクチン関連のみで使えるこちらのサービスのAPI利用について書いてみました。

※ Cloudflare Waiting Room についてはこちら
導入期間5分でワクチン予約サイトを落ちなくできるCloudflare Waiting Roomは最強のソリューション

直面した課題

ウチのサイトでも使わせていただいている「Cloudflare Waiting Room」いわゆるデジタル待合室なるサービスなのですが、デジタル だからこその悩みも・・・そう 待っている人の規模がわからない!
これがリアル待合室(?)ならパッと見で混んでるか混んでないかっていうのがわかりますし、なんならガヤガヤ音がするかしないかでもおおざっぱにはわかるようなものです。

これがデジタル待合室だとCloudflareの管理サイトにアクセスして、Waiting Roomの設定ページを見に行かないとわからない。

平常時(待ち人0の時)こういう画面なのですが、

混んでいるときはこんな感じになる・・・

これをね、ずっと見てないとダメなわけですよ。
ちょっと別の作業が入ったりしてウィンドウが裏の方に追いやられてしまっているときに実は混んでました!みたいなことになりかねないわけですよ。

そんなわけで定期的に監視して報告してくれるボットを作りました。

API利用

まずAPIを調べます・・・
ありました。

https://api.cloudflare.com/#waiting-room-properties

とてもわかりやすいです。

各種設定値など

zone_identifier

URLに含める情報。
「概要」のページを下にスクロールしていくと右側に「API」の項目が!
ここの「ゾーンID」がそれになります。

X-Auth-Email

ヘッダーに含める情報
自分のアカウントのEmailアドレス

X-Auth-Key

ヘッダーに含める情報
右上の「マイプロフィール」から「APIトークン」-「Global API Key」の「表示」を押してください。押すたびにロボットではないクイズ(hCaptcha)あります。

実装

これらがそろったら後はAPIを叩くだけです!
(実際にはこのあとさらに各Waiting Roomのステータス取得のAPIを叩いてSlackに通知するボットを作成しました)

const ZONE_ID  = 【zone_identifier】
const EMAIL    =X-Auth-Email】
const AUTH_KEY =X-Auth-Key】

const main = async () => {
    const result = await _requestGet(
        `https://api.cloudflare.com/client/v4/zones/${ZONE_ID}/waiting_rooms`,
        {'page':1, 'per_page': 5},
        {'X-Auth-Email':EMAIL, 'X-Auth-Key': AUTH_KEY, 'Content-Type': 'application/json'}
    );
    console.log(result['result']);
};

const _requestGet = async (URL, qs, headers = null) => {
    let options = {};
    
    options.method = 'GET';
    options.url    = URL;
    if(qs){
        options.qs     = qs;
    }
    if(headers != null){
        options.headers = headers;
    }
    
    return new Promise((resolve, reject) => {
        request(options, (err, response, res_body) => {
            if(err){
                reject(err);
            } else {
                resolve(JSON.parse(res_body));
            }
        });
    });
};

これで設定しているWaiting Roomの一覧が取得できます!
個人的には field みたいな取得できる情報を絞るパラメータがついてくれると嬉しいですね。「待機室のカスタマイズ」をしているとこのリスト取得時に各項目に設定しているhtmlもレスポンスの中に入ってくるので・・・。

APIのレート制限は 5分間に1,200リクエストまでとのことなので、よっぽど変な取り方しなければ超えることも無いと思います!