ノンエンジニアでもできる🙌翌月のPRに役立つトピックを通知してくれるSlack botを作ったお話

f:id:je_suis_h:20210428145333p:plain


広報やPRに欠かせないイベントカレンダー。
わたしはこれまで、自分でスプレッドシートにカレンダーを作り、祝日や記念日(創業記念日やサービスのリリース記念日など事業に関わるものから、〇〇の日のような小ネタ的なものまで)、社会の話題になりそうなトピック(××が開業、オリンピック、△△宣言から1年など)を入れ込んだオリジナルPRカレンダーを作っていました。

もちろん、自分一人で活用するならそれで十分なのですが、今ジョインしている会社は新規事業がポコポコと複数立ち上がっており、それぞれの事業責任者の方がSNS運用などをしている状況。

ならば、スプレッドシートからトピックを洗い出し、通知してくれるbotをslackに導入すれば、みんなで情報を活用できるのでは?と思い、エンヤコラと作ってみました。

完成したのがコチラ。2月の頭に翌月(3月)のイベントトピックが通知されるような仕様になっています。

スクリーンショット 2021-02-04 19.15.56

参考にしたのは、下記の2つのブログ記事です。
基本はほぼコピペで、一部分のみ書き換えました。

【Slack+GAS】子供の保育園行事をSlackに自動通知させてみた - ゆるりとねっと。 保育園で日々どんなイベントがあったかをリマインドする仕組みを、家庭用Slackに導入しました。年間行事予定をスプレッドシー www.yururito.net  

 

 

1.イベントトピックを管理するスプレッドシートを作る

スクリーンショット 2021-02-04 19.19.55

日時とイベント名だけでも良いですが、プレスリリースやキャンペーンを打つ際には曜日も結構重要なポイントになるので、曜日も追加。言わずもがな、関数で曜日を出すようにしておくと楽です。

2.IncomingWebHooks設定(Slack)

詳細な手順はコチラのnoteで確認しながらやってみてください(他力本願)

スクリーンショット 2021-02-04 19.26.38

ちなみに、一番下の"Customize Name" と "Customize Icon"を変更すると、一気に愛着のあるオリジナルbotに変身します。

3.Google Apps Script(GAS)でスクリプトを書く(というかコピペ)

1で作ったスプレッドシートの上部から「ツール」>「スクリプトエディタ」からスクリプトエディタを起動。

function postEvent() {
 var prop = PropertiesService.getScriptProperties().getProperties();
 var postUrl = 'webhookのURL';
 var botName = 'botの名前';
 var message = '';
 var events = [];

 var date = Moment.moment().add('months', 1).format("YYYY/MM");
 var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
 var dataRow = findRow(sheet,date,1);
 


 if(dataRow.length > 0){
   for(var i=0;i<dataRow.length;i++){
       var eventDay = sheet.getRange(dataRow[i], 1).getValue() ;
       var uHiduke = Utilities.formatDate(eventDay, "JST", "MM'/'dd");
       var youbi = sheet.getRange(dataRow[i], 2).getValue();
       var eventName = sheet.getRange(dataRow[i], 3).getValue();
   events.push("・" + uHiduke + "(" + youbi + ")" + eventName );
   }
   message = "来月" + date + "のイベントは\n" + events.push("\n") + "\nやで!しっかり広報するんやで!";
 }else{
   message = "来月" + date + "のイベントはないよって、別の戦略考えよか〜";
 }

 var jsonData =
 {
    "username" : botName,
    "text" : message
 };
 var payload = JSON.stringify(jsonData);

 var options =
 {
   "method" : "post",
   "contentType" : "application/json",
   "payload" : payload
 };

 try{
   UrlFetchApp.fetch(postUrl, options);  //Slackに投稿
 }catch(e){
   Logger.log("Message:" + e.message + "\nFileName:" + e.fileName + "\nLineNumber:" + e.lineNumber)
 }
}

/**
* スプレッドシートから特定の日付をもつデータの行数を取得
*/
function findRow(sheet,val,col){
 var dat = sheet.getDataRange().getValues();
 var result = []; 
 for(var i=1;i<dat.length;i++){
   if(Moment.moment(dat[i][col-1]).isSame(val,'month',1)){
     result.push(i+1);
   }
 }
 return result;
}

🐥変更した場所

元のコード(その日の日付を取得する仕様になっていた)

var date = Moment.moment().format("YYYY/M/D");

のを、翌月の年月データのみを取得するように変更。

var date = Moment.moment().add('months', 1).format("YYYY/MM");

また今回は、翌月のイベントを取得したかったので、一番下の部分「スプレッドシート から特定の日付を持つデータの行数を取得」の部分を一部変更。

if(Moment.moment(dat[i][col-1]).isSame(val,'day')){

こんな感じに↓

if(Moment.moment(dat[i][col-1]).isSame(val,'month',1)){

うまくいっているか不安な場合は、エディター>実行>関数を実行>postEventをポチッとしてみてください。成功していたら通知が飛びます🐣

スクリーンショット 2021-02-04 19.44.51

4.トリガーで毎月1日に投稿するように設定する

スクリーンショット 2021-02-04 19.44.19

虫眼鏡みたいなアイコンを押すと、トリガーをセットできるページに飛ぶので、そこで最後に通知の頻度を設定します。

スクリーンショット 2021-02-04 19.47.50

スクリーンショット 2021-02-04 19.47.58

今回は毎月1日(土日関係なく)に通知が飛べば良かったので、上記のような設定にしています。

時間手動の場合、選択肢は6つあるので、一番適切なタイミングを選んで保存すればOK。時刻は9時〜10時の間のどっかで飛ばすよ〜という割と雑な感じですので、厳密に時間指定したい場合は別の手段を取ってください。

スクリーンショット 2021-02-04 19.50.09

最後に

GASはサーバー代もかからず、手軽にいろいろなプログラムが組めるので、一度ハマるとあれもこれもやってみたくなるので、おこもり中の暇つぶしにはもってこいのものだと思います。

わたしは欲望のままに、『愛の不時着』のリ・ジョンヒョクが語りかけてくれるLINE botをGASで作って悦に浸ったりもしていました。

ただ自動化するだけでなく、推しを滑り込ませたり、botをキャラ化したりと遊び心を忘れないでいることが、無機質になりがちな仕事の情報共有をほっこり楽しい瞬間に変化させるコツなのかなと思います。

ぜひ、皆様もお試しください。

🎁おまけ

上記のプロセスで使用したカレンダースプレッドシートをおまけにつけておくので、自由にコピー・ダウンロードして使ってください🙏