見出し画像

非エンジニアがTrelloとGoogleフォームを自動連携してタスク二重管理を根絶する!

アンケートフォームとタスク管理ツールで二重管理が起きてしまう。これってあるあるではないですかね?Googleフォーム(スプレッドシート)とTrelloをGASで連携を実現する方法と、ノンコーディングで連携を実現する方法を実際にやってみました!

この記事はこんな人におすすめ!
・お問い合わせフォームとタスク管理ツールがバラバラ
・別のアプリケーションにコピペする、などのノンコア業務が多い
・業務を自動化したいけど、コーディングなんてできない

1. どうしても生まれてしまう二重管理問題

お手伝いさせていただいていた会社では、お問い合わせフォームをGoogleフォーム、お問い合わせ対応も含め、全てのタスク管理をTrelloで実施していました。

そのため、
スプレッドシートに反映されたお問い合わせを、Trelloで新しいカードとして発行し直す、という業務が発生。

これが面倒くさい。気づいた人がカード発行する、という暗黙のルールだったのですが、
1.だんだんとカードを作らなくなり
2.お問い合わせ対応のタスクだけスプレッドシート管理になり
3.Trelloで全て完結するという文化のためお問い合わせを見落とすことも
と、最悪の3ステップを踏んでしまっていました。

ということで今回は、noteに設定している下記の問合せフォームと弊社のTrelloを連携してみます!

スクリーンショット 2020-04-01 15.44.54

お問い合わせの内容を「担当振り分け前」にカード作成することを目指します。

2.Google Apps Scriptで実装してみる

今回も、いわゆる"GAS"で頑張って実装してみようと思い、下記の記事を参考に設定してみました。
(コーディングできないので参考にならない!という方は、3. ノーコーディングで実装してみるまで読み飛ばしてください!)

 2-1. Trelloの情報を集める

GoogleフォームとTrelloの連携するためには、Trelloの
・ユーザー名
・APIキー
・トークン
・ボードID
・リストID
が必要になります。
下2つはGASを実行させて取得するので、まず上3つを集めます。

◆ユーザー名
ユーザー名はアイコンをクリックすると下記のように表示されます。
hogehoge1234(h.hoge1234)
この( )内の部分をユーザー名として扱います!(下記画像の赤の方)

スクリーンショット 2020-04-01 17.57.12

◆APIキー名・トークン
右記リンクから取得します。https://trello.com/app-key
リンク先でAPIキーを取得したら、「トークン」のリンクからトークンを発行します。

スクリーンショット 2020-04-01 18.02.05

これでTrello上で行う準備は完了です。

 2-2. GASを書いてIDを取得する

次にGoogleフォームのスクリプトエディタを開き、「ボードID」「リストID」を取得するためのGASを記載します。

◆ボードIDの取得
下記を実行し、ログからボードIDを取得します。(ログの赤の箇所)

function getBoardId() {
 var trelloKey   = "取得したAPIキー";//keyを入力してください
 var trelloToken = "取得したトークン";//tokenを入力してください
 var userName = "取得したユーザー名";//ユーザ名を入力してください
 var url = 'https://trello.com/1/members/' + userName + '/boards?key=' + trelloKey + '&token=' + trelloToken + '&fields=name';
 res = UrlFetchApp.fetch(url, {'method':'get'});
 Logger.log(res);
}

スクリーンショット 2020-04-01 18.10.45

◆ボードIDの取得
下記を実行し、ログからボードIDを取得します。(ログの赤の箇所)

function getListId() {
 var trelloKey   = "取得したAPIキー";//keyを入力してください
 var trelloToken = "取得したトークン";//tokenを入力してください
 var boardId = "取得したボードID";//ボードIDを入力してください

 var url = "https://trello.com/1/boards/" + boardId + "/lists?key=" + trelloKey + "&token=" + trelloToken + "&fields=name";

 res = UrlFetchApp.fetch(url, {'method':'get'});
 Logger.log(res);
}

スクリーンショット 2020-04-01 18.15.41

今回は「担当振り分け前」のリストにカードを作成したいので、赤の箇所のIDを使います。

 2-3. カードを作成するGASを書く

ここまでで取得したIDなどを下記のGASに反映させます。

// ユーザー名
var user_name = 'ユーザー名';

// APIキーとトークン
var api_key = 'APIキー';
var api_token = 'APIトークン';

// ボードID
var board_id = 'ボードID';

// リストID
var list_id = 'リストID';


function addTrelloCard() {
 
// カード名にする列番号
var title_column_no = 2;
// カード詳細説明にいれる列番号
var description_column_no1 = 2;
var description_column_no2 = 3;
var description_column_no3 = 4;
var description_column_no4 = 5;
var description_column_no5 = 1;


 // 選択しているセルの開始行番号を取得
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = ss.getActiveSheet();
 var upper_left_cell = sheet.getActiveCell();
 var start_row = upper_left_cell.getRow();

 // 選択しているセルの行数を取得
 var range = SpreadsheetApp.getActiveRange();
 var rows = range.getNumRows();

 // カード作成
 for (var i = 0; i < rows; i++) {
   var row = start_row + i;
   var card_title = sheet.getRange(row, title_column_no).getValue();
   var card_description1 = sheet.getRange(row, description_column_no1).getValue();
   var card_description2 = sheet.getRange(row, description_column_no2).getValue();
   var card_description3 = sheet.getRange(row, description_column_no3).getValue();
   var card_description4 = sheet.getRange(row, description_column_no4).getValue();
   var card_description5 = sheet.getRange(row, description_column_no5).getValue();
   var url = 'https://api.trello.com/1/cards/?key=' + api_key + '&token=' + api_token;
   var options = {
     'method' : 'post',
     'muteHttpExceptions' : true,
     'payload' : {
       'name'      : card_title + 'さんからの問合せ',
       'desc'      : card_description2 + '\n' + card_description3 + '\n' + card_description4 + '\n' + card_description5 + '\n' + card_description1,
       'due'       : '',
       'urlSource' : ''
     }
   }
   var response = UrlFetchApp.fetch(url, options);

 }
}

◆動かしてみる

実際に動かしてみると、なんとかカードが生成されていました!

スクリーンショット 2020-04-01 18.49.56

スクリーンショット 2020-04-01 18.49.09

3. もっと簡単に、ノーコーディングで実装してみる

結構頑張っていろいろやってみたのですが、今回も最終的にはエンジニアの手を借りることになりました…。

と、いうことで、ここからが本番。弊社で開発したツールを使って、ノンコーディングでアプリケーションの連携+業務自動化を実現してみます。
おまけでSlackへの通知も行えるようにしてみました!

◆ 連携したいアプリケーションを選択する

GoogleフォームとTrello、Slackを選択

スクリーンショット 2020-04-01 14.57.49

◆ Googleフォームの設定を行う

トリガー(何を持ってこのフローを開始するのか)とアクション(どういう挙動をするのか)を選択。今回は、
・トリガー:新しい回答(Googleフォームで新しい回答を取得)
・アクション:データを取得する
を選択しました。

スクリーンショット 2020-04-01 14.58.47

該当するスプレッドシート(Googleフォームの回答を収集しているスプレッドシート)を指定し、抽出項目を選択。
フォームから問合せ入ると、スプレッドシートに新しく行が追加されるため、「追加された行」を選択。

スクリーンショット 2020-04-01 15.00.09

これでGoogleフォームの設定は完了です!

◆ Trelloの設定を行う

アクションを「カードを作成する」に設定

スクリーンショット 2020-04-01 15.42.31

アカウント認証を行い、カードを作成するボードとリストの選択を行う
今回は下記の「お問い合わせ対応」のボードの、「担当振り分け前」リストにカードを作成したいので、下記の通り設定。
・ボードの設定:お問い合わせ対応
・リストの設定:担当振り分け前

スクリーンショット 2020-04-01 15.44.54

スクリーンショット 2020-04-01 15.46.19

スクリーンショット 2020-04-01 15.48.32

次に作成するカードのタイトルを設定します。今回のお問い合わせフォームには「お問い合わせのタイトル」の記入欄がないため、「〇〇さんからのお問い合わせ」としました。
Googleフォームで取得したカラムの<お名前>を使って下記のように設定。

スクリーンショット 2020-04-01 15.52.21

最後に説明の設定を行います。こちらはGoogleフォームで取得した情報を羅列し、お問い合わせ内容をわかるように設定しました。

スクリーンショット 2020-04-01 15.54.21

これでTrelloの設定も完了しました!

◆ Slackの設定を行う

こちらは前回の記事、「スプレッドシートとSlackの連携」部分と同様に、「チャンネル」「メッセージ」を設定するだけ!
詳細は下記をご確認ください。

◆組んだフローを実行してみる

ページ下部のフォームから下記の内容で問合せしてみます。

スクリーンショット 2020-04-01 16.06.55

Trelloを確認すると、

スクリーンショット 2020-04-01 16.08.09

スクリーンショット 2020-04-01 16.13.13

きちんとカードが生成されていました!

さらにSlackにもしっかり通知が来ていました。

スクリーンショット 2020-04-01 16.12.40

およそ5分で自分1人で設定完了!問合せフォームの仕様を変更しても、「取得するデータ」「説明の内容」「メッセージの内容」を少し編集すれば対応可能です!

今回のケース以外にも、
・salesforceとマネーフォワードの連携
・スプレッドシートとクラウドサインの連携
・GmailとGoogle Driveの連携

などが簡単に実現できます!

「興味がある!」「使ってみたい!」という方、「こんなアプリケーション同士の連携はできないのか?」「こういうアプリケーションを使っているんだけど、どう連携したら業務が楽になるか?」といったご相談がある方、是非下記のページからお問い合わせください!

お問い合わせはこちらから!



自動化のお困りごとを解決するためのツール進化に活用させていただきます!