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

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

新規登録して質問してみよう
ただいま回答率
85.35%
プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Slack

Slackは、Tiny Speckという企業からリリースされたコミュニケーションツールです。GoogleDriveやGitHubなど、さまざまな外部サービスと連携することができます。

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

Q&A

解決済

1回答

2701閲覧

GAS カレンダー情報をSlackで通知させたい

narururu

総合スコア172

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Slack

Slackは、Tiny Speckという企業からリリースされたコミュニケーションツールです。GoogleDriveやGitHubなど、さまざまな外部サービスと連携することができます。

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

0グッド

0クリップ

投稿2020/03/31 14:54

編集2020/03/31 15:23

##◆解決したい課題
GAS カレンダー情報をSlackで通知させたい

##◆コード(Google App Script)

function getCalendar(){ const CALENDAR_ID = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; var myCalendar = CalendarApp.getCalendarById(CALENDAR_ID); var startDate = new Date(); var myEvents = myCalendar.getEventsForDay(startDate); myEvents.forEach(function(myEvent){ var title = myEvent.getTitle(); if(title.indexOf('休')!=-1){ Logger.log(title); } }); } function notifySlack() { var text = '【本日、以下のメンバがお休み】'; var payload = { // 'username':'お知らせ', 'text':text, 'channel':'gas-test' }; var options = { 'method':'post', 'contentType':'application/json', 'payload':JSON.stringify(payload) }; var url = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx' UrlFetchApp.fetch(url,options); }

◆現状

関数getCalendarを指定して実行すると、以下のエラーが表示される。

TypeError: Cannot read property 'getEventsForDay' of null

関数notifySlackを指定して実行すると、Slackに以下の文字が出力される。

【本日、以下のメンバがお休み】

◆想定結果

関数notifySlackを指定して実行すると、以下の出力がされる想定。

【本日、以下のメンバがお休み】 xxxさんお休み

関数notifySlackの中に関数getCalendarで取得したtitleが組み込まれていないため、「xxxさんお休み」という文字が記載されないのかなと思っております。しかし、どうすればいいのか分かりません(>_<)
もし、何かわかりましたらご教示願います。

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

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

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

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

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

guest

回答1

0

ベストアンサー

・TypeError: Cannot read property 'getEventsForDay' of null
完成系は後述。
エラーの原因は、そのカレンダーidで指示されるカレンダーが存在しない、カレンダーへのアクセス権限がない、カレンダーをサブスクライブしていない、のいずれか。コードの問題ではないのでteratailでは解決できない。

ドキュメント

Return
Calendar — the calendar with the given ID, or null if the calendar does not exist, if the user cannot access it, or if the user is not subscribed to the calendar

javascript

1const getCalendar = () => { 2 const calendarId = "********@gmail.com"; 3 const calendar = CalendarApp.getCalendarById(calendarId); 4 const now = new Date(); 5 const leaveEvents = calendar.getEventsForDay(now).map(e=>e.getTitle()).filter(e=>e.indexOf("休") !== -1).join("\n"); 6 notifySlack(leaveEvents); 7} 8const notifySlack = (message) => { 9 const header = `【本日、以下のメンバがお休み】\n${message.toString()}`; 10 const payload = { 11 // 'username':'お知らせ', 12 'text':header, 13 'channel':'gas-test' 14 }; 15 const options = { 16 'method':'post', 17 'contentType':'application/json', 18 'payload':JSON.stringify(payload) 19 }; 20 21 const url = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx' 22 UrlFetchApp.fetch(url,options); 23}

投稿2020/03/31 15:43

papinianus

総合スコア12705

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

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

narururu

2020/03/31 16:00 編集

ご回答ありがとうございます!papinianusさん☺ コードまで書いて下さり恐縮です。 早速頂いたコードで実行してみました! そしたら、以下のエラーが出てしまいました。 TypeError: Cannot read property 'toString' of undefined(行 9、ファイル「コード」) ドキュメントありがとうございます! 今後、こちらのドキュメントを参考に勉強したりトラシューしたりしていきます!
papinianus

2020/03/31 16:51

実行するのは getCalendar です。 もうテスト実行は確認できているので、メッセージを変更することのできない送信用の関数は役に立たないと思います。 メッセージを可変にするには、他の関数から呼ぶ必要があるので、それを単体で実行しても、エラーにしかなりません。
narururu

2020/04/01 01:52

ありがとうございます! イメージ通りに動きました! また、トリガーを設定して定期実行するようにしました☺ 本当にありがとうございます! いただいたドキュメントを基にGASについて、いろいろ勉強してみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問