質問するログイン新規登録
Google カレンダー

Google カレンダーは、Google社が提供する無料のスケジュール管理ツールです。パソコンやスマートフォン、タブレットなどからアクセスし、スケジュールの追加・変更が可能。Googleアカウントがあれば誰でも使用できます。

Google Apps Script

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

ChatWork

業務の効率化を目的としたコミュニケーションツール。 グループチャット、ビデオ・音声通話、ファイル共有、タスク管理などの機能を備えています。マルチデバイス対応で、ブラウザだけでなくタブレットやスマートフォンでも利用可能です。

Q&A

解決済

1回答

508閲覧

googleカレンダーの予定をchatworkに通知|予定がない日は通知しないようにする

_Na

総合スコア2

Google カレンダー

Google カレンダーは、Google社が提供する無料のスケジュール管理ツールです。パソコンやスマートフォン、タブレットなどからアクセスし、スケジュールの追加・変更が可能。Googleアカウントがあれば誰でも使用できます。

Google Apps Script

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

ChatWork

業務の効率化を目的としたコミュニケーションツール。 グループチャット、ビデオ・音声通話、ファイル共有、タスク管理などの機能を備えています。マルチデバイス対応で、ブラウザだけでなくタブレットやスマートフォンでも利用可能です。

0グッド

3クリップ

投稿2023/06/16 03:11

0

3

前提・実現したいこと

googleカレンダーに登録したスケジュールを当日の指定した時間にChatworkに通知設定。
予定がない(0件)のときにもChatworkに通知がいく状態です。

これを予定がない(0件)のときにはChatworkへ通知がいかないようにしたいです。

該当のソースコード

/* 指定のカレンダーの本日の予定をチャットワークに送る */ function sendSchedule() { var myCals=CalendarApp.getCalendarById('XXXXXXXX@gmail.com'); //特定のIDのカレンダーを取得 var myEvents=myCals.getEventsForDay(new Date()); //カレンダーの本日のイベントを取得 /* チャットワークに送る文字列のヘッダー */ var strBody = "[info][title]本日の予定:" + Utilities.formatDate(new Date(), 'JST', 'yyyy/MM/dd') + " (roger)[/title]" /* イベントの数だけ繰り返し */ for(var i=0;i<myEvents.length;i++){ var strTitle=myEvents[i].getTitle(); //イベントのタイトル var strStart=_HHmm(myEvents[i].getStartTime()); //イベントの開始時刻 var strEnd=_HHmm(myEvents[i].getEndTime()); //イベントの終了時刻 strBody=strBody + strStart + ' - ' + strEnd + strTitle + 'n'; //チャットワークに送る文字列にイベント内容を追加 } strBody = strBody + '[/info]'; /* チャットワークにメッセージを送る */ var cwClient = ChatWorkClient.factory({token: ' XXXXXXXXXXXXXXXX'}); //チャットワークAPI cwClient.sendMessage({ room_id:XXXXXXXX, //ルームID body: strBody }); } /* 時刻の表記をHH:mmに変更 */ function _HHmm(str){ return Utilities.formatDate(str, 'JST', 'HH:mm'); }

補足情報(FW/ツールのバージョンなど)

下記のサイトを参考にしております。
毎朝、当日の予定をGoogleカレンダーから取得してチャットワークに送る

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

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

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

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

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

YellowGreen

2023/06/16 03:45

for(var i=0;i<myEvents.length;i++){ の5行下の } を cwClient.sendMessage({ room_id:XXXXXXXX, //ルームID body: strBody }); の下の行に移動してみるとどうなりますか? }を元の場所から削除して});の下の行に挿入です。
YAmaGNZ

2023/06/16 06:11 編集

イベントがないというのはmyEvents.length==0でしょうから myEvents.length!=0と0じゃないときに送信すればいいのでは? もしくはmyEventsを取得した時にmyEvents.length==0なら即returnとか
YellowGreen

2023/06/16 06:57

> イベントがないというのはmyEvents.length==0でしょうから for(var i=0;i<myEvents.length;i++){ このforループはそれを踏まえてこのようにしていると思いますよ。
YAmaGNZ

2023/06/16 07:06

だから0の時にループしないでstrBodyに予定の詳細のテキストが入らないままsendMessageを実行してるってことだと理解したので それをしないようにif文で回避すればどうかという提案だったのですが・・・
_Na

2023/06/16 07:31

YAmaGNZ さんからご教示いただいた for(var i=0;i<myEvents.length;i++){ の5行下の } を cwClient.sendMessage({ room_id:XXXXXXXX, //ルームID body: strBody }); の下の行に移動 で出来ました! 迅速ご回答いただき、ありがとうございます!
YellowGreen

2023/06/16 07:35

お役に立てたようで良かったです。 > だから0の時にループしないでstrBodyに予定の詳細のテキストが入らないままsendMessageを実行してるってことだと理解したので なのでメール送信をループ内で行えばという提案でした。
YAmaGNZ

2023/06/16 07:39

1っ回のメッセージにて通知するという意図があったのかと思いましたので、無いときには送らないという提案でした。 あとその方法ですとYellowGreenさんの提案かと
YellowGreen

2023/06/16 08:29 編集

> 1っ回のメッセージにて通知するという意図があったのかと思いましたので、 ↑ 私が質問者様に確認してませんでしたね。 _Na様 今の修正だと同じ日に複数の予定があるときは、予定ごとにメールが届きますので、それをまとめて1通のメールで送信したいときは}の位置を戻して、元のコードをYAmaGNG様のご提案のように修正された方がいいと思います。 具体的には、2つの修正を行います。 (1つ目の修正) } を元の場所に戻す。 (2つ目の修正) var myEvents=myCals.getEventsForDay(new Date()); //カレンダーの本日のイベントを取得 の次の行に if (!myEvents.length) { return; } を挿入です。
_Na

2023/06/16 09:27

> YAmaGNZ さん おっしゃる通り、1回のメッセージにて通知する方法でした。 気づいてくださりありがとうございます! > YellowGreen さん ご教示いただきました ===== var myEvents=myCals.getEventsForDay(new Date()); //カレンダーの本日のイベントを取得 の次の行に if (!myEvents.length) { return; } ===== で、希望どおり 「予定がない日には通知なし」 「1回のメッセージで複数の予定を通知」 にすることができました。 ご教示いただきました皆様ありがとうございます!
YellowGreen

2023/06/16 09:31

私の確認ミスですし、 解決方法のご提案はYAmaGNZ様です。
_Na

2023/06/16 10:11

お二方の迅速かつ丁寧なご対応に感謝しかありまん... 本当にありがとうございます!
guest

回答1

0

自己解決

YAmaGNZ さん
YellowGreen さん
ありがとうございました!

解決方法

var myEvents=myCals.getEventsForDay(new Date()); //カレンダーの本日のイベントを取得

の次の行に

if (!myEvents.length) {
return;
}

上記の方法で希望どおりの
「予定がない日には通知なし」
「1回のメッセージで複数の予定を通知」
にすることができました。

投稿2023/06/20 05:52

_Na

総合スコア2

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問