質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

1回答

412閲覧

Slackの特定のチャンネルに自動投稿したい

maitohan

総合スコア14

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

1クリップ

投稿2019/03/17 11:54

編集2019/03/18 05:58

実現したいこと

・スプシからカレンダー自動作成(成功)
・自動作成した旨をslackの特定のチャンネルに自動投稿(今ココ)
・自動投稿した旨をスプシに入力

困っていること

・自動作成した旨を、slackの「特定のチャンネル」に自動投稿できない

(my_slackbotへの投稿ならできた)

今ある材料

投稿したいチャンネルのSlackIDはわかっています。これを指定する方法が間違っているのだと思うのですが、
エラーは出ないものの、投稿されない状態です。
https://mahan88.slack.com/messages/CGXNS98LQ

該当部分のコード

/* カレンダーへイベントを登録する /
function getsheet() {
/
-前準備-*/

   //シートの項目を以下変数定義
var sht, i, eventday, eventname, place,start, end, added, addedslack;

   //shtを定義
sht = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("カレンダー");

   //シートの2行目〜最終行まで処理を繰り返す
for(i = 2; i <= sht.getLastRow(); i++) {

/-前準備ここまで-/

/--スプレッドシートの値を取得して変数へ格納--/

//i行1列目の値(イベント日)をeventdayへ格納
eventday = sht.getRange(i, 1).getValue();

//開始日をUtilities.formatDateでフォーマットしてbへ格納
var b = Utilities.formatDate(eventday,"JST","yyyy/MM/dd");

//i行2列目の値(イベントの名前)をeventnameへ格納
eventname = sht.getRange(i,2).getValue();

//i行3列目の値(イベントの場所)をplaceへ格納
place = sht.getRange(i,3).getValue();

//i行4列目の値(開始時刻)をstartへ格納
var starttime = sht.getRange(i,4).getValue();

 var H = starttime.getHours();//starttimeの時間を取得してHへ格納
var M = starttime.getMinutes();//starttimeの時間を取得してMへ格納

//new Dateメソッドで開始日時「yyMMdd hh:mm」をstartへ格納
var start = new Date(b+" "+H+":"+M); 

//i行5列目の値(終了時刻)をendへ格納
var endtime = sht.getRange(i,5).getValue();

 var H1 = endtime.getHours();//endtimeの時間を取得してH1へ格納
var M1 = endtime.getMinutes();//endtimeの分を取得してM1へ格納

//new Dateメソッドで終了日時「yyMMdd hh:mm」をendへ格納
var end = new Date(b+" "+H1+":"+M1);

/--カレンダーへ登録--/

//i行6列目の値(イベント登録有無)をaddedへ格納
added = sht.getRange(i,6).getValue();

//addedの値が空白だったらカレンダー登録を実行
if(added == "") {
Cal = CalendarApp.getCalendarById('*******@*****.com');//<---ここを自分のgmailアドレス入れてます

//指定のカレンダーIDへイベント登録
Cal.createEvent(eventname,start,end,{location:place});//createEvent(タイトル、開始日時、終了日時、オプション)

//カレンダー登録が終わったイベントのaddedへ「登録完了」を記入
sht.getRange(i,6).setValue("登録完了");

  }   //ifを閉じる
}      //forを閉じる
}        //functionを閉じる

var token = 'xoxp-378845188965-378482081860-579451696117-24eb2*******************';

// slackAppインスタンスを取得
var slackApp = SlackApp.create(token);

// slackのチャンネル指定
var channel = PropertiesService.getScriptProperties().getProperty('お休み連絡網');

// slack送信時のタイトルを入れておく
var bot_title = 'お休み申請';

// slack送信時の画像URLを入れておく(「FLAT ICON DESIGN」さんの画像をアイコンとして利用しています)
var icon_url = 'http://flat-icon-design.com/f/f_object_100/s512_f_object_100_0bg.png';

// slackを送る関数を作る(トリガーから実行時間を指定)
sht = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("カレンダー");

for(i = 2; i <= sht.getLastRow(); i++) {

addedslack = sht.getRange(i,7).getValue();
var name = sht.getRange(i, 2).getValue();
var eventday = sht.getRange(i, 1).getValue();
var b = Utilities.formatDate(eventday,"JST","yyyy/MM/dd");

function postSlack(text) {
getsheet() ;

// もしaddedslackが空白だったら
if(addedslack == "") {
// my_slackbotにメッセージを送信する

var url = "https://***************/messages/CGXNS96LQ";
var options = {
"method" : "POST",
"headers": {"Content-type": "application/json"},
"payload" : '{"text":"' + text + '"}'
};
UrlFetchApp.fetch(url, options);
}

function test(){
postSlack(b+name+"いただきます!");
}

sht.getRange(i-1,7).setValue("Slack投稿完了");
}
}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

slack送信用ライブラリを使って送信するように書いてます(なぜかライブラリがあるのに、URLFETCHでやろうとしていましたが、そこはすみません、無視してます)

javascript

1/* カレンダーへイベントを登録する */ 2function getsheet() { 3 /*-前準備-*/ 4 5 //shtを定義 6 var sht = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("カレンダー"); 7 8 //シートの2行目〜最終行まで処理を繰り返す 9 for(var i = 2; i <= sht.getLastRow(); i++) { 10 11 /*-前準備ここまで-*/ 12 13 /*--スプレッドシートの値を取得して変数へ格納--*/ 14 15 //i行1列目の値(イベント日)をeventdayへ格納 16 var eventday = sht.getRange(i, 1).getValue(); 17 18 //開始日をUtilities.formatDateでフォーマットしてbへ格納 19 var b = Utilities.formatDate(eventday,"JST","yyyy/MM/dd"); 20 21 //i行2列目の値(イベントの名前)をeventnameへ格納 22 var eventname = sht.getRange(i,2).getValue(); 23 24 //i行3列目の値(イベントの場所)をplaceへ格納 25 var place = sht.getRange(i,3).getValue(); 26 27 //i行4列目の値(開始時刻)をstartへ格納 28 var starttime = sht.getRange(i,4).getValue(); 29 30 var H = starttime.getHours();//starttimeの時間を取得してHへ格納 31 var M = starttime.getMinutes();//starttimeの時間を取得してMへ格納 32   33 //new Dateメソッドで開始日時「yyMMdd hh:mm」をstartへ格納 34 var start = new Date(b+" "+H+":"+M);  35 36 //i行5列目の値(終了時刻)をendへ格納 37 var endtime = sht.getRange(i,5).getValue(); 38 39 var H1 = endtime.getHours();//endtimeの時間を取得してH1へ格納 40 var M1 = endtime.getMinutes();//endtimeの分を取得してM1へ格納 41   42 //new Dateメソッドで終了日時「yyMMdd hh:mm」をendへ格納 43 var end = new Date(b+" "+H1+":"+M1); 44 45 /*--カレンダーへ登録--*/ 46 47 //i行6列目の値(イベント登録有無)をaddedへ格納 48 var added = sht.getRange(i,6).getValue(); 49 50 //addedの値が空白だったらカレンダー登録を実行 51 if(added === "") { 52 Cal = CalendarApp.getCalendarById('***@*.com');//<---ここを自分のgmailアドレス入れてます 53 54 //指定のカレンダーIDへイベント登録 55 Cal.createEvent(eventname,start,end,{location:place});//createEvent(タイトル、開始日時、終了日時、オプション) 56 57 //カレンダー登録が終わったイベントのaddedへ「登録完了」を記入 58 sht.getRange(i,6).setValue("登録完了"); 59 60 }   //ifを閉じる 61 }      //forを閉じる 62}        //functionを閉じる 63 64function Trigger() { 65 getsheet(); 66 postSlack(); 67} 68function postSlack(text) { 69 text = text || "test message"; 70 var token = 'xoxp-378845188965-378482081860-579451696117-24eb2***************'; 71 72 // slackAppインスタンスを取得 73 var slackApp = SlackApp.create(token); 74 75 // slackのチャンネル指定 76 var channel = PropertiesService.getScriptProperties().getProperty('お休み連絡網'); 77 78 // slack送信時のタイトルを入れておく 79 var bot_title = 'お休み申請'; 80 81 // slack送信時の画像URLを入れておく(「FLAT ICON DESIGN」さんの画像をアイコンとして利用しています) 82 var iconUrl = 'http://flat-icon-design.com/f/f_object_100/s512_f_object_100_0bg.png'; 83 84 // slackを送る関数を作る(トリガーから実行時間を指定) 85 sht = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("カレンダー"); 86 87 for(i = 2; i <= sht.getLastRow(); i++) { 88 89 var addedslack = sht.getRange(i,7).getValue(); 90 var name = sht.getRange(i, 2).getValue(); 91 var eventday = sht.getRange(i, 1).getValue(); 92 var b = Utilities.formatDate(eventday,"JST","yyyy/MM/dd"); 93 text += "\n" + name + "さんは\n" + b + "にお休みを申請しました\n"; 94 // もしaddedslackが空白だったら 95 if(addedslack === "") { 96 // my_slackbotにメッセージを送信する 97 // var url = "https://***********/messages/CGXNS96LQ"; 98 // var options = { 99 // "method" : "POST", 100 // "headers": {"Content-type": "application/json"}, 101 // "payload" : '{"text":"' + text + '"}' 102 // }; 103 // UrlFetchApp.fetch(url, options); 104 slackApp.postMessage(channel, text, { 105 username : bot_title, 106 icon_url : iconUrl 107 }); 108 } 109 110 sht.getRange(i,7).setValue("Slack投稿完了"); 111 112 } 113} 114function test() { 115 postSlack(b+name+"いただきます!"); 116}

投稿2019/03/18 03:03

編集2019/03/18 08:14
papinianus

総合スコア12705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maitohan

2019/03/18 05:27

ややこしくて申し訳ありません。 質問を編集して、全コードを記載しました。 あらためて、宜しくお願い致しますmm
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問