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

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

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

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

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

ChatWork

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

Q&A

解決済

2回答

959閲覧

【GAS×チャットワーク】Webhookを用いて doPostを起動したいが出来ない

socionix

総合スコア1

Google Apps Script

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

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

ChatWork

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

0グッド

1クリップ

投稿2023/09/10 06:13

編集2023/09/10 06:21

実現したいこと

営業時間外であれば「営業時間外です」と表示させたい

前提

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.デブロイボタンを押した

イメージ説明
2.URLのコピーを行い、その後完了ボタンを押した

イメージ説明

3、上記の設定を押した後にしたにある保存ボタンを押した。

4,別のアカウントから該当のルームにメッセージを送るが、営業時間外というのが返ってこなかった。

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

ここにより詳細な情報を記載してください。
・実験的なこともあるのでルームの部分も送信者もどちらも個人事業主のフリープランとして実行を行った。
・4の後のGASコートエディタの実行の履歴の確認では、実行を行ったデータはなかった。あってもエディタ時にWebhooktest()を行った記録とデブロイ関係のしかなかった。イメージ説明

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

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

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

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

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

YAmaGNZ

2023/09/10 08:18

ルームイベントに設定したらどうなりますか?
socionix

2023/09/10 12:20

回答ありがとうございます。
guest

回答2

0

webhookイベントの設定画面では、アカウントイベントではなく、「ルームイベント」を選択し、適切なルームIDを入力して保存
(メッセージ作成、メッセージ更新にチェックを入れる)
→再度GASをデプロイ設定してみてください。

イメージ説明

投稿2023/09/10 08:15

編集2023/09/10 08:16
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

socionix

2023/09/10 12:21

回答ありがとうございます。 設定後、後々に細かいエラーが出ましたが、 それは個人で解決できそうです。 ありがとうございます。
guest

0

自己解決

解決方法をいじった結果……
営業時間外を起動するには

アカウントイベントに指定した際
メッセージを送るだけではダメで
メンションをつけないといけなかった。

なので
→返信先を指定して送付しないといけなかったがしてなかったというミスでした。なので誠に大変申し訳ありませんでした。

投稿2023/09/11 01:47

編集2023/09/11 01:48
socionix

総合スコア1

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問