みなさん、こんにちは!
今回はGoogle Apps ScriptとChatworkのAPIを活用したファイルの送信方法を紹介します。
Google Driveを活用していて、チャットワークと連携をしたい方必見です。
クラウド上からチャットワークにファイルをいちいちPCに保存せずとも送れるようになります。
Google Drive上のクラウド管理している業務の場合、いちいちダウンロードしてチャットワークに送信し直すなんて作業もあるのではないでしょうか。
そんな面倒な作業ともおさらばです。本記事を最後まで読むと自動化できるようになります。
- 1 チャットワークAPIのトークンを取得する
- 2 Google Apps Scriptの導入
- 3 GASにチャットワークのライブラリを導入する(ChatWorkClient)
- 4 Drive上に送りたいデータを用意
- 5 ファイルのIDを取得
- 6 Drive上のファイルのリンクをコピー
- 7 シート名を変更
- 8 スクリプトを開く
- 9 スクリプト説明①:スプレッドシートから指定のシート内の全データを取得する
- 10 スクリプト説明②:各データを変数に格納
- 11 スクリプト説明③:Driveのファイルを取得
- 12 スクリプト説明④:BLOBデータを作成
- 13 スクリプト説明⑤:BLOBデータを作成
- 14 スクリプト説明⑥:APIに送信する
- 15 スクリプトまとめ
- 16 まとめ
![](https://add-luck18.com/wp-content/themes/the-thor/img/dummy.gif)
![](https://add-luck18.com/wp-content/themes/the-thor/img/dummy.gif)
チャットワークAPIのトークンを取得する
まずはチャットワークAPIの利用準備から始めましょう。
当サイトでも以前チャットワークのトークンの取得の仕方を記事にしていますので、下記をご参考にしてください。
Google Apps Scriptの導入
お手持ちのGoogleアカウントを用いて、Googleドライブ上にスクリプトを作成します。
スプレッドシートを作成してから、拡張機能でApps Scriptを作成する、コンテナバインド型のスクリプトを起動してください。
GASの導入方法も当サイトでは細かく説明しておりますので、やり方に困ったらこちらをご参照ください。
GASにチャットワークのライブラリを導入する(ChatWorkClient)
外部APIを使う場合はURLやパラメーターなど細かな設定が必要です。
今回、チャットワークのAPIをGASで使いやすいようにライブラリが用意されているため、そちらを活用していきます。
AppsScript画面左のサイドバーから「ライブラリ」の「+」アイコンをクリックします。
ライブラリの追加のポップアップが表示されるため、そこに下記のスクリプトIDを挿入してください。
1nf253qsOnZ-RcdcFu1Y2v4pGwTuuDxN5EbuvKEZprBWg764tjwA5fLav
「検索」をクリックするとChatWorkClientがヒットします。
続いて「追加」をクリックします。
これでGoogle Apps ScriptでチャットワークのAPIが簡単に使えるライブラリを導入することができます。
※ソースコードを確認したい場合は下記githubからclient.jsをご覧ください。
ChatrowkClientのGASファイルを提供しているgithub
Drive上に送りたいデータを用意
まずはチャットワークに送信したいファイルをGoogle Drive上にアップロードしていきましょう。
ファイルは画像でもPDFでもテキストファイルでも構いません。
ファイルのIDを取得
今回、チャットワークにファイルを送信することをメインに行いますので、ファイルのIDは手動で抽出します。
アップロードしたファイルを右クリックし、リンクを取得してください。
Drive上のファイルのリンクをコピー
リンクをコピーしたら続いてスプレッドシートへ連携していきます。
今回使っていくのはリンクのうち、Googleが個別で割り当てるファイルのIDを抽出します。
「https://drive.google.com/file/d/」と、「/view?usp=sharing」の間にある文字列のみを抽出してください。
https://drive.google.com/file/d/1xymzO9N2vwSjpfrrcSkZjiyKSQl8FxQ_/view?usp=sharing
スプレッドシートに必要なデータを入力
今回は下記4つのデータをスプレッドシートに入力してGASで読み取る方法で説明します。
- Chatwork API TOKEN
- チャットワークの送信先のルームID
- ファイルと同時に送信するメッセージ
- 送信するファイルのID
Chatwork TOKENの取得の仕方は上記、「チャッ
トワークAPIのトークンを取得する」にて解説しています。こちらより取得したAPIのトークンを記載してください。
チャットワークの送信先のルームIDはチャットワークにログインした後、対象のルームを開くとURLに「#!rid」から始まる数字列がありますので、そちらを抽出します。
メッセージは送信時に投稿される文字列です。
ファイルIDは先ほど取得したDrive上のファイルURLからIDを抽出して記載してください。
※別途URLでも動作する方法もありますが、長くなるので別の記事でご紹介します。
シート名を変更
今回、プログラムを分かりやすくするためにシート名を「ファイル送信」へ変更しています。
スプレッドシート下部のタブよりシート名を「ファイル送信」へ変更しておくと、この後で記載するプログラムと整合性が取れます。
スクリプトを開く
スプレッドシートの「拡張機能」より「Apps Script」を選択してスクリプトを開きます。
※GASの導入方法で説明しています。
プログラムは順序だてて説明します。
完成形のプログラムは当記事をさらにスクロールしてください。
スクリプト説明①:スプレッドシートから指定のシート内の全データを取得する
// ファイル送信シートから記入がある範囲の全データを取得
const VALUES = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("ファイル送信").getDataRange().getValues();
SpreadSheetAppにてGoogleのスプレッドシートを操作するクラスを呼び出します。
.getActiveSpreadsheet() で現在起動中のスプレッドシートのことを指定します。
.getSheetByName(“ファイル送信”) は指定したスプレッドシートから「ファイル送信」という名前のシートを抽出します。
.getDataRange() でファイル送信シートのデータが挿入されてる全ての範囲を指定しています。
.getValues() では選択した範囲から値を二次元配列で取得しています。
少し長くなりましたが、1つずつ分解すると簡単ですね!
スクリプト説明②:各データを変数に格納
抽出した2次元配列から必要な値のみ取り出します。
// B1セルからトークンを取得
const TOKEN = VALUES[0][1]; // B1
// B2セルからルームIDを取得
const ROOM_ID = VALUES[1][1]; // B2
// B3セルからメッセージを取得
let message = VALUES[2][1]; // B3
// B4セルからファイルIDを取得
let file_id = VALUES[3][1]; // B4
スクリプト説明③:Driveのファイルを取得
上記で抽出したファイルIDを元に、Drive上のファイルを取得します。
// ファイルを取得します。
const FILE = DriveApp.getFileById(file_id);
DriceAppはGoogle Drive上のあらゆる操作が可能なクラスを呼び出します。
.getFileById(file_id) にて引数に指定されたファイルIDを元にしてのファイルを呼び出すことができます。
スクリプト説明④:BLOBデータを作成
取得したDriveのファイルをチャットワークAPIに送信するためのBLOB型へと変換します。
※このとき、日本語ファイル名は上手く文字コードがUTF-8に変換されないため注意してください。
const BLOB = Utilities.newBlob(
FILE.getBlob().getBytes(),
FILE.getMimeType(),
FILE.getName()
);
Utilities にてGASで扱える様々な機能を持つクラスを呼び出します。
newBlob()でBOLB型のオブジェクトを作成しますが、
第1引数がBLOBのバイト(データ)、
第2引数がファイルのタイプ(textやpdf、pngなど)
第3引数がファイル名となっています。
newBlobの引数の取り方は公式ドキュメントが分かりやすいです。
英語が苦手でも日本語翻訳を使いながらGoogle Apps Scriptのドキュメントを参照してみましょう。
スクリプト説明⑤:BLOBデータを作成
APIに送信するためのパラーメーターを作成します。
ヘッダーにはAPIのトークンを設定。
methodは「post」です。
payloadにfileのBLOBとmessageのテキストを設定しましょう。
let params = {
headers : {
'X-ChatWorkToken' : TOKEN,
},
method : 'post',
payload : {
file: BLOB,
message: message,
}
};
ChatworkClientはこれらのparamsを細かく設定しなくても良いライブラリとなっていますが、
今回のファイル送信には対応しておらず、細かく設定する必要があります。
スクリプト説明⑥:APIに送信する
APIに送信するためのURLを生成し、実際にデータを送信します。
const URL = 'https://api.chatwork.com/v2/rooms/' + ROOM_ID + '/files';
UrlFetchApp.fetch(URL, params);
ファイル送信に対応したAPIのエンドポイントをURLにて設定をします。
UrlFetchApp.fetch() は第1引数にURL、第2引数にオプションとしてパラメーターを付与できます。
これにより、設定したパラーメーターをURLに送信することができます。
これらをまとめるとこうなります。
スクリプトまとめ
function sendFileToChat() { // ファイル送信シートから記入がある範囲の全データを取得 const VALUES = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("ファイル送信").getDataRange().getValues(); // B1セルからトークンを取得 const TOKEN = VALUES[0][1]; // B1 // B2セルからルームIDを取得 const ROOM_ID = VALUES[1][1]; // B2 // B3セルからメッセージを取得 let message = VALUES[2][1]; // B3 // B4セルからファイルIDを取得 let file_id = VALUES[3][1]; // B4 // ファイルを取得します。 const FILE = DriveApp.getFileById(file_id); const BLOB = Utilities.newBlob( FILE.getBlob().getBytes(), FILE.getMimeType(), FILE.getName() ); let params = { headers : { 'X-ChatWorkToken' : TOKEN, }, method : 'post', payload : { file: BLOB, message: message, } }; const URL = 'https://api.chatwork.com/v2/rooms/' + ROOM_ID + '/files'; UrlFetchApp.fetch(URL, params); }
function sendFileToChat()という関数にまとめました。
これを実行することで、スプレッドシートからデータを読み取り、
チャットワークにファイルを送信することができます。
まとめ
今回はGoogle Apps ScriptにてGoogle Drive上のファイルをダウンロードすることなくチャットワークに送信する方法を解説してきました。
GASではこういった少しの手間を自動で行うことができます。
当サイトでは他にも実務で使ったGASの便利な機能を紹介していきます。
Google Workspaceを活用している場合はGoogle Apps Scriptを覚えると業務の効率化および自動化ができます。
Google Apps Scriptが学べるスクールはコチラで紹介しています。よかったら見てみてください。
Google Apps Scriptが学べたらコチラの記事で収益化してみてはいかがでしょうか?
最後までお読みいただきありがとうございました。