ノンエンジニアでもできる🙌翌月のPRに役立つトピックを通知してくれるSlack botを作ったお話
広報やPRに欠かせないイベントカレンダー。
わたしはこれまで、自分でスプレッドシートにカレンダーを作り、祝日や記念日(創業記念日やサービスのリリース記念日など事業に関わるものから、〇〇の日のような小ネタ的なものまで)、社会の話題になりそうなトピック(××が開業、オリンピック、△△宣言から1年など)を入れ込んだオリジナルPRカレンダーを作っていました。
もちろん、自分一人で活用するならそれで十分なのですが、今ジョインしている会社は新規事業がポコポコと複数立ち上がっており、それぞれの事業責任者の方がSNS運用などをしている状況。
完成したのがコチラ。2月の頭に翌月(3月)のイベントトピックが通知されるような仕様になっています。
1.イベントトピックを管理するスプレッドシートを作る
日時とイベント名だけでも良いですが、プレスリリースやキャンペーンを打つ際には曜日も結構重要なポイントになるので、曜日も追加。言わずもがな、関数で曜日を出すようにしておくと楽です。
2.IncomingWebHooks設定(Slack)
ちなみに、一番下の"Customize Name" と "Customize Icon"を変更すると、一気に愛着のあるオリジナルbotに変身します。
3.Google Apps Script(GAS)でスクリプトを書く(というかコピペ)
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 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をポチッとしてみてください。成功していたら通知が飛びます🐣
4.トリガーで毎月1日に投稿するように設定する
虫眼鏡みたいなアイコンを押すと、トリガーをセットできるページに飛ぶので、そこで最後に通知の頻度を設定します。
今回は毎月1日(土日関係なく)に通知が飛べば良かったので、上記のような設定にしています。
時間手動の場合、選択肢は6つあるので、一番適切なタイミングを選んで保存すればOK。時刻は9時〜10時の間のどっかで飛ばすよ〜という割と雑な感じですので、厳密に時間指定したい場合は別の手段を取ってください。
0コメント