以前にやったこの記事
悪くはないんですけど、使っていくと音声で呼び出すことすら面倒になる。もっとシームレスにやりたいというのはみんな考えることみたい。ということで色々調べてみた。ちなみにうちの会社では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さん。
いろいろ応用もききそうなので遊んでみよう。