ブログ|株式会社セシオス

LINEWORKSのトークBOTを使った定期報告ツールの構築例の紹介

作成者: 株式会社セシオス|Apr 3, 2020 4:00:13 AM

 

 

弊社では開発の進捗管理にGoogleスプレッドシートを利用しています。


管理そのものはシートのみで問題ありませんでしたが、個々人で日々の進捗を把握する際にシートを確認するのは手間が多く面倒でした。


そこで社内で利用しているLINEWORKに当日の作業予定を通知する仕組みを作り、日々の進捗を把握しやすくすることになりました。


ツール導入後、常に目を通すチャットツールに進捗が表示されることで作業漏れや期限の認識ずれがなくなり、効率よく作業が行えるようになりました。


この記事では上記のツールを作成する際に活用したGoogleスクリプトを使ってLINEWORKのトークBOTを動かすまでの手順を紹介します。

 

・LINEWORKS管理者アカウント:Botの登録、許可を行うため必須になります。
・Googleアカウント:実行するコードを登録します。任意のアカウントで実行可能です。

LINEWORKSの管理者アカウントからBOTの設定を行います。


開発者用のリンクからアクセスし、管理者用のID/パスワードにてログインします。
https://developers.worksmobile.com/console/openapi/main

 

APIの登録

「Console」の「API」設定画面で下記の情報を取得します。
未登録の場合は新規に作成してください。

 

・API ID
・Server API Consumer Keyの「Key」:サーバー API の利用範囲で「トークBot すべて」をチェックして保存
・Server List(ID登録タイプ)の「ID」
・Server List(ID登録タイプ)の「認証キー」:発効後にダウンロードできる認証鍵を保存しておきます。

 

BOTの登録

「Console」の「Bot」から「Bot登録」画面で下記の情報を設定します。

 

・プロフィール画像:好きな画像を設定
・Bot名:Googleとの連携用だとわかるように命名
・説明:Googleとの連携用だとわかるように記載
・Callback URL:offにチェック
・Botポリシー トークルームへの招待:「複数人のトークルームに招待可」にチェック
・管理者 主担当:BOTを主に管理する人を指定
・管理者 副担当:BOTの管理を依頼する予定の人を指定、空でもOK

 

BOT登録後に下記のパラメータを取得しておきます。

 

・Bot No

 

BOTの有効化

登録したBotは管理画面のサービス項目から有効化することで利用できるようになります。
管理者用のリンクからアクセスし、Botの有効化を行ってください。
https://bot-admin.worksmobile.com/

 

RoomIDの取得

Botの発言を指定したグループチャット内で行う場合、対象となるグループチャットのRoomIDが必要になります。
あらかじめBotでの定期報告を行う予定のグループチャットのRoomIDを取得しておいてください。

 

GoogleスクリプトでLINEWORKSのトークBOTを動かすためのコードを記述していきます。


Googleスプレッドシートのツールバー「ツール」メニューから「スクリプトエディタ」を選択し、シートと連携するスクリプトを生成します。

 

 

function myFunction() {
var apiId = "API ID";
var privateKey = "Server List(ID登録タイプ)の「認証キー」";
var serverId = "Server List(ID登録タイプ)の「ID」";
var botNo = "Bot No";
var roomId = "RoomID"

var text = "BOTに発言させるメッセージ内容";
var jwtToken = getJwtToken(privateKey, serverId); ※JsonWenToken(JWT)の生成
var accessToken = getAccessToken(apiId, jwtToken); ※AccessTokenの取得

postMessage(botNo, roomId, apiId, text, accessToken); ※メッセージの送信
}

 

各関数の詳細は下記を参照してください。

 

JsonWenToken(JWT)の生成

 

BOTの利用をするための認証に使うJWTを生成する関数を用意します。

 

function getJwtToken(privateKey, serverId) {
const header = Utilities.base64Encode(JSON.stringify({"alg":"RS256","typ":"JWT"}), Utilities.Charset.UTF_8);
const claimSet = JSON.stringify({
"iss": serverId,
"iat": Math.floor(Date.now() / 1000),
"exp": Math.floor(Date.now() / 1000 + 2000)
});
const encodeText = header + "." + Utilities.base64Encode(claimSet, Utilities.Charset.UTF_8).slice(0, -2);
const signature = Utilities.computeRsaSha256Signature(encodeText, privateKey);
const jwtToken = encodeText + "." + Utilities.base64Encode(signature).slice(0, -2);
return jwtToken;
}

 


AccessTokenの取得

 

生成したJWTを利用して認証を行いBOTを動かすためのトークン情報を取得する関数を用意します。

function getAccessToken(apiId, jwtToken) {
  const uri = 'https://auth.worksmobile.com/b/' + apiId + '/server/token';
  const payload = {
    "grant_type" : encodeURIComponent("urn:ietf:params:oauth:grant-type:jwt-bearer"),
    "assertion" : jwtToken
  };
  const options = {
    'method': 'post',
    'headers': {'Content-Type' : 'application/x-www-form-urlencoded'},
    "payload": payload
  };
  const body = UrlFetchApp.fetch(uri, options);
  return JSON.parse(body).access_token;
}

 

 

メッセージの送信

トークン情報とメッセージを送信してLINEWORKSでBOTに発言をさせます。

 

 

function postMessage(botNo, roomId, apiId, text, access_token) {
  const uri = 'https://apis.worksmobile.com/' + apiId + '/message/sendMessage/v2';

  const payload = {
    "botNo" : botNo,
    "roomId" : roomId,
    "content": {
      "type": "text",
      "text": text,
    }
  };
  var bodya = JSON.stringify(payload);
  const options = {
    'method': 'post',
    'headers': {
      'consumerKey' : 'コンシューマーキーを設定',
      'Authorization' : 'Bearer '+ access_token,
      'Content-Type' : 'application/json',
      'charset' : 'UTF-8'
      },
    'payload': bodya
  };
  const body = UrlFetchApp.fetch(uri, options);
}

 

マイトリガーからスクリプトを定期実行するように設定します。


Googleスクリプトのツールバー「編集」メニューから「現在のプロジェクトのトリガー」を選択し、任意のタイミングでBotの発言が行えるように設定します。

 

以上の設定を行うことでBOTを使った定期報告を行えるようになります。


定期連絡する内容はスプレッドシートのパラメータを取得して整形してから送信するなどの用途に利用できます。


LINEWORKSを社内利用しているのなら、試してみるのはいかがでしょうか。