kun432's blog

Alexaなどスマートスピーカーの話題中心に、Voiceflowの日本語情報を発信してます。たまにAWSやkubernetesなど。

〜スマートスピーカーやVoiceflowの記事は右メニューのカテゴリからどうぞ。〜

ChromeでGoogle Meetを開いたら「ON AIR」ライトを点灯、家族に「リモート会議中」を知らせてみた

f:id:kun432:20211008151507j:plain

以前にやったこの記事

悪くはないんですけど、使っていくと音声で呼び出すことすら面倒になる。もっとシームレスにやりたいというのはみんな考えることみたい。ということで色々調べてみた。ちなみにうちの会社ではGoogle Meetを使っています。


会議中にカメラがONになると、カメラのプロセスのCPU使用率があがるのを検出する方法。残念ながら会社はWindowsなのでこれは採用できず。PowerShellとか使えばできるのかもしれないけどPowerShell知らん。


Google Meetをブラウザで開いてマイクかカメラがONになったらwebhookを投げるというChrome拡張。見つけたときは歓喜したのだけど、どうもうまく動かなかった。CORSかな。ちなみにコードはこちらで公開されている(アップデートはされているけど試してない)


数日前にTwitterのタイムラインで見つけた。Chromeでタブの一覧にMeetのURLがあればHTTPリクエスト投げる自前Chrome拡張を書かれた様子。こういう事ができるのね、なるほど。

上記の記事の中ではTP-Linkのスマートプラグを使っててIFTTT経由で操作されている。うちはSwitchBotを使っていて、前の記事でも書いたとおりSwitchBotはAPI経由で操作ができるので、少し書き換えるだけでかんたんに動く。

const sb_token = "SwitchBotのトークン";
const device_id = "デバイスID";

var sb_url = `https://api.switch-bot.com/v1.0/devices/${device_id}/commands`;

const on_json =
{
  "command": "turnOn",
  "parameter": "default",
  "commandType": "command"
};

const off_json =
{
  "command": "turnOff",
  "parameter": "default",
  "commandType": "command"
};

var isTurnOn = 0;

function watchTabs() {
  chrome.tabs.query({}, (tabs) => {
    const isOpeningMeets = tabs.some((tab) => {
      return tab.url.match(/meet.google.com/);
    });

    if (isOpeningMeets && !isTurnOn) {
      request(sb_url, on_json);
      isTurnOn = 1;
    }

    if (!isOpeningMeets && isTurnOn) {
      request(sb_url, off_json);
      isTurnOn = 0;
    }
  });
}

function request(url, data) {
  var req = new XMLHttpRequest();
  req.open("POST", url);
  req.setRequestHeader('Authorization', `${sb_token}`);
  req.setRequestHeader('Content-Type', 'application/json');
  req.send(JSON.stringify(data));
}

chrome.tabs.onUpdated.addListener(watchTabs);
chrome.tabs.onRemoved.addListener(watchTabs);

トークンの取得やデバイスIDの確認は前回の記事にリンクがあるのでそちらを参照。

manifest.jsonはpermissionsのところをSwitchBot APIのURLに置き換えるだけ。

(snip)
  "permissions": ["tabs", "*://api.switch-bot.com/*"]
(snip)

この2ファイルを同じフォルダに入れておいて、Chromeの拡張機能→デベロッパーモード有効→パッケージ化されていない拡張機能を読み込む、で使えるようになります。こんな感じです。

ChromeでMeetのURLを開くと点灯、閉じると消灯しているのがわかりますでしょうか。

音声でコントロールできるのも悪くないんだけど、Meetに参加するには当然ブラウザを開くので、これならとてもシームレス、かなり満足度が高い!よい記事をありがとうございます!>magamingさん。

いろいろ応用もききそうなので遊んでみよう。