実現したいこと
営業時間外であれば「営業時間外です」と表示させたい
前提
GASで 営業時間外に「ChatWork」にメッセージが来たら自動的に「営業時間外です」という表示をしたいのだが、対応しているルームに営業時間外でメッセージを送るが「営業時間外です」というメッセージが表示されません。このコード自体は下記のサイトをほぼそのまま利用して作ったのだが、どういうわけかGASエディタ内では動くものの、Webhookに設定を変えた途端上手く出来ません。
セキュリティ関連で何か起きているのかそれともなにか見逃しているのか見当がつきません。
お願いします。
・下記のサイトを基にしてプログラムを作成した
https://creators-note.chatwork.com/entry/gas-auto-reply
パソコン スペック windows10
以下試した事
・webhooktest()を作成し、そのコードをGAS上のエディタで実行を行ってみると該当の
ルームに「営業時間外」と表示させる事が出来た。
発生している問題・エラーメッセージ
// 【編集対象】Chatwork API Token const token = 'aaaa';//(※実際は違うものを記載しています) // 【編集対象】営業時間(数字4桁、例:8時→0800、20時30分→2030) const open_time_hhss = '0900'; const close_time_hhss = '1000'; // 【編集対象】自動応答対象グループチャットのルームID const target_room_id = '1111';//(※実際は違うものを記載しています) // 【編集対象】自動応答メッセージ const replay_message = '申し訳ございません、営業時間外となります。'; function doPost(e) { Logger.log('Received Request: ' + JSON.stringify(e)); let json = JSON.parse(e.postData.contents); let from_account_id = json.webhook_event.from_account_id; let message_id = json.webhook_event.message_id; let room_id = json.webhook_event.room_id; let send_time = new Date(json.webhook_event.send_time*1000); // メッセージ送信時間 let open_time = getDateFromString(open_time_hhss); // 営業時間(開始) let close_time = getDateFromString(close_time_hhss); // 営業時間(終了) if(send_time < open_time || close_time < send_time){ // 営業時間外か if(checkRoomID(room_id)){ // 自動応答対象のグループチャットの場合、定型文を送信 var message = ''; message += '[rp aid=' + from_account_id; message += ' to=' + room_id + '-' + message_id + '] '; message += replay_message; var client = ChatWorkClient.factory({token: token}); client.sendMessage({ room_id: room_id, body: message }); } } } // 文字列(hhss)をDate型にして返却する function getDateFromString(hhss){ let date = new Date(); date.setHours(hhss.substr(0,2)); date.setMinutes(hhss.substr(2,2)); date.setSeconds(0); return date; } // 指定したグループチャットのルームIDか判断する function checkRoomID(room_id){ if(target_room_id.split(',').includes(String(room_id))){ return true; } return false; } function testWebhook() { // テストデータを作成します。これは実際のWebhookデータを模倣します。 var testData = { postData: { contents: JSON.stringify({ webhook_event: { from_account_id: '12345', // 送信元アカウントID message_id: '67890', // メッセージID room_id: '1111', // ルームID(※実際は違うものを記載しています) send_time: Math.floor(Date.now() / 1200) // 現在時刻(UNIXタイムスタンプ) } }) } }; // doPost関数を呼び出してテストを実行します doPost(testData); }
試したこと
・webhooktest()を実行して該当のルームに「営業時間外」というメッセージはちゃんと届いていた
・ちなみにdoPostの最初にあるログは以下のようなのが出ました
15:04:38 情報 Received Request: {"postData":{"contents":"{"webhook_event":{"from_account_id":"12345","message_id":"67890","room_id":"1111","send_time":1411938232}}"}}
・設定や操作のミスの可能性もあるので以下どういう手順で行ったかも写真つきで説明します。
1.デブロイボタンを押した
3、上記の設定を押した後にしたにある保存ボタンを押した。
4,別のアカウントから該当のルームにメッセージを送るが、営業時間外というのが返ってこなかった。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
・実験的なこともあるのでルームの部分も送信者もどちらも個人事業主のフリープランとして実行を行った。
・4の後のGASコートエディタの実行の履歴の確認では、実行を行ったデータはなかった。あってもエディタ時にWebhooktest()を行った記録とデブロイ関係のしかなかった。
回答2件
あなたの回答
tips
プレビュー