すべてのコレクション
案件管理
他ツールとの連携事例紹介
案件管理とSlackワークフローの連携方法(Google Apps Script使用)
案件管理とSlackワークフローの連携方法(Google Apps Script使用)
LegalForceサポートチーム avatar
対応者:LegalForceサポートチーム
一週間前以上前にアップデートされました

本ページはあくまで事例の紹介であり、貴社のポリシーによって手順は異なる場合があります。実際の連携方法については 貴社システム管理者またはサービス提供元(外部ツール)にご相談ください。

Google Apps Scriptを活用し、Slackのワークフロー機能で受け付けた依頼を案件管理に自動反映する方法を記載します。

コミュニケーションの中心がメールではない場合も、案件管理を活用して法務案件の管理やナレッジの蓄積などが可能です。

また、本連携方法では、Googleドライブに格納したファイルを添付ファイルとして案件管理に反映できるため、LegalForceへのファイル取り込みもスムーズに実施できます。

ご注意点

本連携方法では、Google Apps Scriptを使用し、Googleドライブの共有リンクからファイルを取得・添付する処理を行います。

そのため、共有リンク(Googleドライブに格納したファイル)の共有範囲には、スクリプト作成者(後述の「3. Google Apps Scriptの作成」の実行ユーザー)も含まれている必要があります。

※スクリプト作成者のアクセス権限がない共有リンクをSlackワークフローのフォームに貼った場合、案件上にファイルは添付されません。

事前準備

本連携を行うには、以下の製品が導入されている必要があります。

  • Slack

  • Google Workspace

    • Googleドライブ

    • Googleスプレッドシート

    • Google Apps Script

※Google Apps Scriptは、組織によっては利用を禁止されている場合があります。事前に情報システム部門にご相談いただくことをおすすめします。

なお、本連携には案件管理の「案件依頼用メールアドレス」が必要です。事前に案件依頼用メールアドレスをメモ帳などに控えてください。

※案件依頼用メールアドレスの確認方法はこちらをご覧ください。

設定手順

1. Googleスプレッドシートを作成する

①Googleスプレッドシートを新規作成し、任意のファイル名に変更する

※シート名も任意の名称に変更可能です(シート名を変更した場合は、「3. Google Apps Scriptの作成 手順⑥」でコードを修正する必要があります)。

②1行目に以下の通りに列名を入力する

※A1セルから入力してください。

日時

依頼者メールアドレス

依頼者

依頼者所属部署

相手方企業名

契約締結の背景

希望納期

契約類型

契約書リンク1

契約書リンク2

契約書リンク3

2. Slackワークフローを作成する

※審査依頼専用のチャンネルが必要な場合は、チャンネルを新設してからワークフローを作成してください。

①サイドバーの「ワークスペース名」→[ツール]→[ワークフロービルダー]の順にクリックする

②[作成]をクリックする

③任意の名前を入力し、[次へ]をクリックする

④「ショートカット」の[選択する]をクリックする

⑤チャンネルを選択し、短い名前を入力後[次へ]をクリックする

⑥[ステップを追加]をクリックする

⑦[フォームを送信する]をクリックする

⑧タイトルや質問を設定して[保存する]をクリックする

⑧-1 任意のタイトルを入力する

⑧-2 フォームの設問を下表の通りに作成する

※設問設定項目の「デフォルトのオプション」は本連携に影響はありません。必要に応じて設定してください。

回答形式

質問内容

オプション

これを必須に設定

メンバーを選択

依頼者名

-

ドロップダウン

依頼者所属

依頼元部署の名称の短縮形で選択肢を作成

短い回答

相手方企業名

-

長い回答

契約締結の背景

-

短い回答

希望納期 ※2023/01/01の形式で半角で入力

-

ドロップダウン

契約類型

頻繁に依頼がある類型で作成

短い回答

契約書リンク1 ※Googleドライブにアップロードの上、共有リンクを貼り付け

-

短い回答

契約書リンク2 ※Googleドライブにアップロードの上、共有リンクを貼り付け

-

短い回答

契約書リンク3 ※Googleドライブにアップロードの上、共有リンクを貼り付け

-

上表の「契約書リンク」について、運用上のご注意点

Google Apps Scriptでは、Googleドライブの共有リンクからファイルを取得・添付する処理を行います。

そのため、「契約書リンク」に貼る共有リンクの共有範囲には、スクリプト作成者(後述の「1. Google Apps Scriptの作成」の実行ユーザー)も含まれている必要があります。

※スクリプト作成者のアクセス権限がない共有リンクを「契約書リンク」に貼った場合、案件上にファイルは添付されません。

⑧-3 フォームの作成が完了したら、[保存する]をクリックする

⑨[ステップを追加]をクリックする

⑩[Add a spreadsheet row]をクリックする

⑪出力先のスプレッドシートとシートを指定し、各列に記載する値を設定後[保存する]をクリックする

⑪-1 「Select a spreadsheet」「Sheet」項目に「1. Googleスプレッドシートの作成 手順①」で作成したスプレッドシートを指定する

⑪-2 「Colum name」「Value」項目を下表の通りに設定する

[+Add Column]ボタンでカラムを追加し、下表すべての設定を行ってください。

※「Value」項目は、すべて[変数を挿入する]ボタンより変数を指定してください。

Column name

Value (変数を挿入する)

日時

ステップの完了時間

依頼者メールアドレス

「依頼者名」への回答(*)

依頼者

「依頼者名」への回答

依頼者所属部署

「依頼者所属」への回答

相手方企業名

「相手方企業名」への回答

契約締結の背景

「契約締結の背景」への回答

希望納期

「希望納期 ※2023/01/01の形式で半角で入力」への回答

契約類型

「契約類型」への回答

契約書リンク1

「契約書リンク1 ※Googleドライブにアップロードの上、共有リンクを貼り付け」への回答

契約書リンク2

「契約書リンク2 ※Googleドライブにアップロードの上、共有リンクを貼り付け」への回答

契約書リンク3

「契約書リンク3 ※Googleドライブにアップロードの上、共有リンクを貼り付け」への回答

(*)挿入する変数の補足説明

変数[「依頼者名」への回答]を挿入後、[名前]→[Eメール]→[更新]の順にクリック

⑪-3 設定が完了したら、[保存する]をクリックする

⑫[公開する]をクリックする

公開したワークフローからテスト送信し、指定したスプレッドシートの各列にフォーム内容が反映されるか確認してください。

3. Google Apps Scriptを作成する

①「1. Googleスプレッドシートの作成」で作成したスプレッドシートを開く

②[拡張機能]→[Apps Script]の順にクリックする

③プロジェクトタイトルを任意の名称に変更する

④テンプレートとして入力されているコードを削除し、以下のコードを入力する

以下のコードをコピーアンドペーストしてください。

function slackToLegalforce() {
//スクリプトに紐づくシートを指定
var activeSpreadSheet = SpreadsheetApp.getActiveSpreadsheet(); // 現在のスプレッドシートを取得

//修正箇所①
//シート名が「シート1」でない場合は""内をシート名に書き換える
var mySheet = activeSpreadSheet.getSheetByName("シート1");// 回答が記載されるシート名を指定

//シートの最終行を指定
var lastRow = mySheet.getLastRow();
Logger.log(lastRow);

//現在時刻を取得し、「2023/01/01 13:00」の形式にフォーマット
var today = new Date();
var todayStr = Utilities.formatDate(today,"JST","yyyy/MM/dd HH:mm");

//シートの最終行の値を変数に格納
//例えばgetRange(lastRow,2)は、最終行・2列目を指定する
var requesterMail = mySheet.getRange(lastRow,2).getValues();//依頼者のメールアドレス
var requesterName = mySheet.getRange(lastRow,3).getValues();//依頼者名
var department = mySheet.getRange(lastRow,4).getValues();//所属
var companyName = mySheet.getRange(lastRow,5).getValues();//相手先企業名
var background = mySheet.getRange(lastRow,6).getValues();//依頼背景
var deadLine = mySheet.getRange(lastRow,7).getDisplayValues();//納期
var typology = mySheet.getRange(lastRow,8).getValues();//類型
var documentUrl1 = mySheet.getRange(lastRow,9).getValues();//契約書リンク1
var documentUrl2 = mySheet.getRange(lastRow,10).getValues();//契約書リンク2
var documentUrl3 = mySheet.getRange(lastRow,11).getValues();//契約書リンク3


//修正箇所②
//以下の"legal.request@XXX.legalforce-cloud.com"の部分を、案件依頼用メールアドレスを記述する
let address = "legal.request@XXX.legalforce-cloud.com";

//メールの件名を記述する
//件名は以下の通りとなる
//【所属部署_依頼者名】相手先企業名_契約類型_納期:yyyy/MM/dd
let mailTitle = "【"+ department + "_"+ requesterName +"】"+companyName+"_"+typology+"_納期:"+deadLine;

//メール本文を記述する
//"\n"で改行を追加
let mailText =
"審査依頼がありました。" +"\n"+
"\n"+
"依頼日時:"+todayStr +"\n"+
"依頼者メールアドレス:"+requesterMail +"\n"+
"依頼者名:"+requesterName +"\n"+
"所属部署:"+department +"\n"+
"相手先社名:"+companyName +"\n"+
"依頼背景:"+"\n"
+background +"\n"+
"期限:"+deadLine +"\n"+
"契約類型:"+typology +"\n"+
"契約書リンク1:"+"\n"
+documentUrl1 +"\n"+
"契約書リンク2:"+"\n"
+documentUrl2 +"\n"+
"契約書リンク3:"+"\n"
+documentUrl3;

//Googleドライブのリンクから不要箇所を削除し、ファイルIDを取得する
//Word形式・Excel形式・PDFを想定、その他の形式の場合、ファイルIDが適切に抽出できず、メールへの添付ができない可能性あり
var documentId1 = documentUrl1.toString().replace("https://docs.google.com/document/d/","").replace("https://drive.google.com/open?id=","").replace("https://docs.google.com/spreadsheets/d/","").replace("https://drive.google.com/file/d/","");
var documentId1split = documentId1.split(/[/?&]/);
var documentId1 = documentId1split[0];
Logger.log(documentId1);


var documentId2 = documentUrl2.toString().replace("https://docs.google.com/document/d/","").replace("https://drive.google.com/open?id=","").replace("https://docs.google.com/spreadsheets/d/","").replace("https://drive.google.com/file/d/","");
var documentId2split = documentId2.split(/[/?&]/);
var documentId2 = documentId2split[0];
Logger.log(documentId2);

var documentId3 = documentUrl3.toString().replace("https://docs.google.com/document/d/","").replace("https://drive.google.com/open?id=","").replace("https://docs.google.com/spreadsheets/d/","").replace("https://drive.google.com/file/d/","");
var documentId3split = documentId3.split(/[/?&]/);
var documentId3 = documentId3split[0];
Logger.log(documentId3);

//添付ファイルを格納するための配列を作成
let attachFiles =new Array();

//添付ファイルの配列番号の変数を作成
var fileNum = 0;

//契約書リンク1~3のファイルIDを指定し、Googleドライブからファイルを取得し、配列に格納
//契約書リンク記載されていない場合や、リンクが不正な場合は例外処理の上、次の処理へ進む
try{
var doc1 = DriveApp.getFileById(documentId1).getBlob();
attachFiles[fileNum] = doc1;
fileNum =fileNum + 1 ;
}catch(e){
Logger.log("契約書1が添付できませんでした");
}

try{
var doc2 = DriveApp.getFileById(documentId2).getBlob();
attachFiles[fileNum] = doc2;
fileNum =fileNum + 1 ;
}catch(e){
Logger.log("契約書2が添付できませんでした");
}

try{
var doc3 = DriveApp.getFileById(documentId3).getBlob();
attachFiles[fileNum] = doc3;
}catch(e){
Logger.log("契約書3が添付できませんでした");
}

Logger.log(attachFiles);

//添付ファイル・CCを設定する
let options = {
"attachments":attachFiles,
//修正箇所③
//CCに追加したいアドレスがある場合、""内に記載の上、先頭の//を削除
//"cc":""
};

//MailAppで宛先、件名、本文、オプションを引数にしてメールを送付
MailApp.sendEmail(address, mailTitle, mailText, options);
}

⑥入力したコードを修正する

コピーアンドペーストしたコードの以下3箇所を修正してください。

⑥-1 【シート名を「シート1」以外としている場合】修正箇所① の””内を適切なシート名に修正する

//修正箇所①
//シート名が「シート1」でない場合は""内をシート名に書き換える
var mySheet = activeSpreadSheet.getSheetByName("シート1");// 回答が記載されるシート名を指定

例)シート名を「slack連携用」とした場合

//修正箇所①
//シート名が「シート1」でない場合は""内をシート名に書き換える
var mySheet = activeSpreadSheet.getSheetByName("slack連携用");// 回答が記載されるシート名を指定

⑥-2 修正箇所② の”"内を自テナントの「案件依頼用メールアドレス」に修正する

※案件依頼用メールアドレスの確認方法はこちらをご覧ください。

//修正箇所②
//以下の"legal.request@XXX.legalforce-cloud.com"の部分を、案件依頼用メールアドレスを記述する
let address = "legal.request@XXX.legalforce-cloud.com";

例)案件依頼用メールアドレスが「legal.request@abc123.legalforce-cloud.com」の場合

//修正箇所②
//以下の"legal.request@XXX.legalforce-cloud.com"の部分を、案件依頼用メールアドレスを記述する
let address = "legal.request@abc123.legalforce-cloud.com";

⑥-3 【案件をCCで受信したいアドレスがある場合】修正箇所③の""内にメールアドレスを記載し、行の先頭の//を削除する

//修正箇所③
//CCに追加したいアドレスがある場合、""内に記載の上、先頭の//を削除
//"cc":""

例)CCで「taro.legal@legalontech.jp」にも依頼メールを送信する場合

//修正箇所③
//CCに追加したいアドレスがある場合、""内に記載の上、先頭の//を削除
"cc":"taro.legal@legalontech.jp"

⑦「保存」マークをクリックする

⑧[実行]ボタンをクリックする

⑨[権限を確認]をクリックする

以下のポップアップが表示されたら、[権限を確認]をクリックしてください。

⑩スクリプトを実行するアカウントを選択し、[許可]ボタンをクリックする

許可が完了すると、画面下部に「実行ログ」が表示されます。正常に設定されている場合、数秒程度で「実行完了」のログが表示されます。

案件管理画面を開き、案件が新規作成されているかご確認ください。

※「2. Slackワークフローの作成 手順⑫」でテスト送信した内容が、新規案件として作成される想定です。

4. Google Apps Scriptのトリガーを設定する

Slackワークフローからフォームが送信され、スプレッドシートに反映される度にスクリプトが実行されるよう、トリガーを設定します。

①左メニューの[トリガー]をクリックする

②画面右下の[+トリガーを追加]をクリックする

③「イベントの種類を選択」のプルダウンリストで[変更時]を選択し、[保存]をクリックする

下図のように、トリガーが追加されたことを確認してください。

以上で設定は完了です。

公開したワークフローから再度テスト送信し、動作確認(Googleスプレッドシートへの書き込み、および案件管理での案件反映)のうえご利用ください。

おすすめポイント

・トリガーを設定すると、スプレッドシートに変更を加える度に依頼メールが送信され、案件が新規作成されます。そのため、スプレッドシートの内容を修正する場合は、設定したトリガーを事前に削除してシート内容の修正が完了した後に、再度トリガーを設定することをおすすめします。

・スプレッドシートに入力されているデータを台帳として活用する場合は、Importrange関数などを利用して別のスプレッドシートに当該データを取り込むことをおすすめします。

こちらの回答で解決しましたか?