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

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

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

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

Slack

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

Q&A

解決済

1回答

3036閲覧

GASでSlackのメッセージを監視したい!

antiwebhook

総合スコア7

Google Apps Script

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

Slack

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

0グッド

0クリップ

投稿2021/08/24 11:14

編集2021/08/24 11:16

前提・実現したいこと

1.Slack上でつぶやかれたメッセージをGASで取得する
2.取得したい情報は本文、スレッドID、リアクション有無
3.取得した情報をGoogleスプレッドシートに書き込む
4.メッセージにリアクションがついた場合、リアクション有無のセルを変更する
5.スプレッドシート上で、リアクションが無いメッセージに対してGASからSlackへリプライを飛ばす

完成形は上記のようにしたいのですが、この質問では1,2について質問させていただきたいです。

https://techblog.raccoon.ne.jp/archives/1603237171.html

今回は上記URLの機能を実現したいのですが、説明の通りSlackAPPを作成し、コードを一部書き換えてデバックし実行すると実行は成功しました。
すると、Slack上でも自分が作ったアプリが以下のように発言していました。

nCannot read property 'length' of undefined

該当のソースコード

上記サイトでlengthが使われている箇所が問題かと思います。

GAS

1ソースコード 2for (var i=0; i<res.messages.length; i++) { 3 if(!res.messages[i].reactions && !res.messages[i].thread_ts && !res.messages[i].bot_id){ 4 // リアクション無し 且つ スレッドブロードキャスト投稿ではない 且つ botの投稿では無い 5 sendmessage = sendmessage + res.messages[i].text + '\n' 6 break; 7 }

試したこと

似たような質問を検索した。
https://teratail.com/questions/220911

https://qiita.com/KONTA2019/items/768348ee0ac5462648bd

上記事例を参考にmessagesを定義してみたが、解決できず…

ご教授いただければと思います。よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

エラー時には以下のようなレスポンスが返ってくるようですので、SlackAPIで何らかのエラーが発生しています。(この例はチャンネルがなかった時のエラーのようです。)

json

1{ 2 "ok": false, 3 "error": "channel_not_found" 4}

※パット見た感じ、参考にしたコードは信頼性が低いコードのように見えます。
※本来であれば見ての通りokの値を確認してから次の処理に進むべきです。

var res = JSON.parse(json); で取得したresをログなり、Slackなりに投げてみてどういうレスポンスが返ってきているか確認してみてはどうでしょうか。

尚、正しいレスポンスの場合messagesはList型で返ってくるようなのでここ自体は問題なさそうです。
詳細は以下ドキュメントをご確認ください。
https://api.slack.com/methods/conversations.history

投稿2021/08/24 14:30

編集2021/08/24 14:31
yamap55

総合スコア1376

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

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

antiwebhook

2021/08/25 01:23 編集

ご回答ありがとうございます。 Slackに投げるというのは UrlFetchApp.fetch(res)で送信すればできますでしょうか? この機能でなくてもSlackの特定のチャンネルのメッセージ情報を取得するだけでもいいのですが、Slackのデータ受け取りのやり方が理解できず足踏みしています。(なので自分がやりたい機能に近いものをコピペするくらいしかできない状況です。)具体的にわからないのは、Slackの情報をGasで取得する際にdopost(e)関数を使用している例と使用していない例があることです。(challengeを返すくらいの関数程度しかわかってないです…) 色々と調べてはいますが回答者様イチオシのわかりやすいサイトなどあれば教えていただければ幸いでございます。 また、公式推奨ではないですがOutgoingwebhookを使って情報取得をしようとして失敗したのでSlackApiで行うしかないと思っております。
yamap55

2021/08/25 02:59

ログ出力は↓(console.log)で行うようです。 https://developers.google.com/apps-script/guides/logging#using_cloud_logging Slackに投げて確認するのであればfinaly句の部分をそのまま使用するなりコピペするなりすれば投げれるかと思います。 オススメのサイトは公式ドキュメントになります。 JavaScriptのコードも乗っているのでそのまま使用可能という認識です。 https://api.slack.com/methods/conversations.history/code
antiwebhook

2021/08/26 03:45

ありがとうございます。 参考にさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問