こんにちは、クラウドエース編集部です。

皆さんは Google Meet でオンライン会議を開催する場合、どのように会議のURLを共有していますか? おそらく Google Meet の公式ページで会議URLを生成し、Slack やメールで共有したり、 Google カレンダの予定から会議の共有を行うケースがほとんどだと思います。今のままでも簡単に会議を共有できるものの、慣れてくると「もっと簡単に会議を共有できないだろうか」という考えが頭に浮かんできます。

しかし、王道的なやり方では Meet 会議の生成を自動化することはできません。なぜなら Google Meet はAPIを公開していないからです。「やはり無理なのか…」と思った皆さん、実は Meet 会議は裏技を使えば、自動生成することが可能なのです。というわけで、今回のコラムでは Google Apps Script を利用して Slack から Meet 会議を自動生成する方法をご紹介します。

Google Meet にはAPIが存在しない

以前、Google Meet がAPIを提供していないことはこちらの記事で紹介しました。記事内で紹介させていただいた通り Meet 会議を生成するにはカレンダーAPIを用いる必要があります。今回の記事では Google Apps Script を利用して Google Meet の会議を作成する Slack コマンドを作ります。

Google Apps Script は簡易的なサーバーとして利用できる

Google Apps Script (以下GAS)は Google が提供する Javascript ベースのプログラミング言語です。 G Suite の利用者は GAS を利用することで Google カレンダーやスプレッドシート、ドキュメントなど G Suite のサービスを手軽にカスタマイズすることができます。作成したプログラムは Google のサーバー上で実行され、GETやPOST等のHTTPメソッドでリクエストを受信することができるため、Webアプリケーションとして活用することも可能です。今回のように G Suite のサービスを外部サービスと連携して簡単な機能開発を行いたい場合には非常に便利です。

Meet 会議を自動生成する Slack Bot を作成してみる

以下の3つのステップで Slack と Google Meet を連携するSlackコマンドを作成してみます。具体的な仕様としては、ユーザーが Slack のチャンネルから以下コマンドを実行すると

/meet 会議テスト1 @ユーザー名

Slack Botが Meet の会議を自動作成し、URLを返してくれる動作を想定しています。コマンドで指定したユーザーは Meet 会議の参加者として登録されます。今回作成するアプリケーションの処理フローは以下の通りです。

それでは、実際に Bot を作成してみましょう。

GASで Meet 会議を自動生成するwebアプリを実装する

 Apps Script ダッシュボードにアクセスし、以下手順に従ってWebアプリケーションの設定を行います。

(1) 「新しいプロジェクト」をクリックします。

(2) プロジェクト画面に遷移したら、以下コードを貼り付けます。

※GASエディタ上にコードを貼り付けて、コードの整形(インデント)を行ってください。

const SLACK_TOKEN = "後でSlack画面で生成したトークンを貼り付け" ;
const SLACK_USERS_LIST_API = 'https://slack.com/api/users.list';
/* SlackのスラッシュコマンドからのPOSTを受けて実行される */
function doPost(e) {
// 引数のパース
let args = e.parameter.text.split(' ');
let summary = args[0];
let slackIds = [];
for (let i=1;i<args.length;i++){
slackIds.push(args[i].slice(1)); // ID部分だけ取得
}
let userEmails = getEmailsBySlackID(slackIds);
let response;
if (userEmails.length){
let hangoutLink = createMeet(summary, userEmails);
response = {
response_type : "in_channel", // channel内のメンバーが見られるように設定
text: summary + ' ' + hangoutLink
};
} else {
response = { text: "エラー: ユーザーが見つかりません。"}; // コマンドの送信者のみに表示されるエラー
}
return ContentService.createTextOutput(JSON.stringify(response)).setMimeType(ContentService.MimeType.JSON);
}
/* Slack APIを実行してメンバー一覧から参加者のメールアドレスを取得する。 */
function getSlackMembers(){
const payload = {
'token': SLACK_TOKEN,
}
const options = {
"method" : "GET",
"payload" : payload,
}
const response = UrlFetchApp.fetch(SLACK_USERS_LIST_API, options);
return JSON.parse(response).members;
}
/* Slackのdisplay name(@user1)が持っているメールアドレス(uers1@gmail.com)を読み出す */
function getEmailsBySlackID(slackIds){
let emails = [];
let members = getSlackMembers();
Object.keys(members).forEach(function (key) {
if (slackIds.includes(members[key].name)){
emails.push(members[key].profile.email);
}
});
return emails;
}
/* Meetの会議をカレンダーAPIで作成する */
function createMeet(summary, userEmails) {
const calendarId = 'primary';
// 日付の設定
let today = new Date();
let year = today.getFullYear();
let month = today.getMonth() + 1;
let day = today.getDate();
let hour = today.getHours();
let minutes = today.getMinutes();
let seconds = today.getSeconds();
// コマンドを送った時刻から1時間の会議を設定する
let start = year + '/' + month + '/' + day + ' ' +hour +':'+ minutes + ':' + seconds;
let end = year + '/' + month + '/' + day + ' ' +String(parseInt(hour)+1) +':'+ minutes + ':' + seconds;
// 参加者のemailをJSON形式で設定
let jsonUsers =[];
for (let i=0;i<userEmails.length;i++){
jsonUsers.push({email:userEmails[i]});
}
// カレンダーに登録するEventの設定
const detail = {
summary: summary,
start: {
dateTime: new Date(start).toISOString()
},
end: {
dateTime: new Date(end).toISOString()
},
attendees: jsonUsers,
};
const event = Calendar.Events.insert(detail, calendarId);
return event.hangoutLink;
}

(3) コード保存後、[公開]-[ウェブアプリケーションとして導入]を選択します。

(4) 設定ダイアログが表示されるので、以下のように設定して「Deploy」を押下します。

(5) 「Deploy」ボタンを押すと、Google Apps Script を実行する為の承認を求められるので、手持ちのアカウントでログインして認可を行います。

(6) すると Google Apps Script のエンドポイントを表すURLが表示されるので、これを控えておきます。 このURLは次のスラッシュコマンドの作成で利用します。

Slack スラッシュコマンドを作成する

次に Meet 会議作成のためのトリガーである Slack コマンドの作成を行います。

(1) まず初めに、 コチラで Slack アプリケーションを作成します。今回は「 Meet 会議Bot」という名前のアプリケーションを作成します。

(2) アプリケーションを作成したら、[Add features and functionality]-[Slash Commands]をクリックします。

(3) コマンドの作成画面が表示されたら、「Command」には Slack のスラッシュコマンドで利用したいコマンド名を、「Request URL」には先ほど「Current web app URL」に表示された Apps Script のURL を入力します。今回は meet という名前のスラッシュコマンドを作成します。

(4) ただし、「Escape channels, users, and links sent to your app」のボタンをチェックしないようにしましょう。

(5) Slash コマンドを作成したら、[Basic information]-[Add features and functionality]-[Permissions]から権限を設定します。[Scopes]-[Bot Token Scopes]には「Commands」の権限がすでにありますが、これに「users:read」と 「users:read.email」の二つを追加して以下のようにします。

(6) 権限を追加したら、このページの一番上部にある[OAuth Tokens & Redirect URLs]-[Install App to Workspace]をクリックし、Slack アプリをワークスペースにインストールします。

(7) インストールが完了すると「xoxb-」から始まるSlackのトークンが表示されるのでそれを控えておきます。このトークンは Google Apps Script から Slack APIを実行してユーザーのemailを取得する際に利用します。

以上でSlack スラッシュコマンドの作成とワークスペースへのインストールは完了です。

GAS コードにトークンを設定する

Slackのトークンを GAS のコードに設定する

(1) 一番最初にコピペ・保存したコードをGASエディタで開きます。

(2) 前節(7)で控えておいた「xoxb-」から始まるSlack AppのトークンをGASのコードに設定します。

const SLACK_TOKEN = “xoxb-xxxxxxxxxxxxx-xxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxx” ; // SlackのWorkspaceのトークン
Googleの拡張サービスを有効にする

[リソース]-[ Google の拡張サービス]から Calendar APIを選択し「ON」に切り替えたら「OK」ボタンを押下します。

プロジェクトの番号を更新する

(1) 先ほど GAS コードの更新を行ったので、ウェブアプリケーションのバージョンも更新します。

(2) プロジェクト画面のヘッダメニューから[公開]-[ウェブアプリケーションとして導入]を選択し、「Project version」から「New」を選んで「更新」ボタンを押下します。この際、URLは変更されないので Slack アプリケーションの追加設定は必要ありません。

Slackからコマンドを実行する

以上で設定は終わりです。Slackのチャンネルで以下のようにコマンドを実行してみましょう。コマンドを実行するのはuser1で、@user2にはSlackのユーザー名が入ります。コマンドを実行するチャンネルはどこでも構いません。

/meet 会議テスト1 @user2

コマンドを実行して以下のようになれば成功です。

Google Apps Script を利用すれば簡単に G Suite の拡張が可能

今回は Google Meet の会議を自動生成する Slack コマンドを作成しました。 Google Apps Script は Google カレンダーなど G Suite の機能を自分たちが運用するワークフローに合わせて、より便利に拡張することができるツールです。今回作成した Slack コマンド以外にも、アイディア次第で様々なアプリケーションを開発することができます。

吉積情報株式会社は G Suite の導入支援、及び拡張開発を支援しています

弊社グループ会社の吉積情報株式会社は G Suite の販売代理店として10年以上活動を行なっており、これまで数多くのお客様に G Suite を導入してきました。また、吉積情報株式会社は G Suite の導入支援だけでなく、 G Suite の拡張開発も得意としています( GAS や AppSheet による拡張開発も得意としています)。 G Suite に関するお問い合わせについてはコチラから行うことが可能です。是非 G Suite や GAS 、 AppSheet を利用して社内の業務効率化を促進しましょう!

合わせて読みたい