質問するログイン新規登録
Google Apps Script

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

Slack

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

Q&A

解決済

1回答

542閲覧

SlackAPIでチャンネルIDからチャンネル名を取得する

mbcztpw

総合スコア31

Google Apps Script

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

Slack

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

0グッド

0クリップ

投稿2024/01/19 03:24

編集2024/01/19 06:18

0

0

SlackのAPIでチャンネルIDからチャンネル名を取得したいと思っています。
https://api.slack.com/methods/conversations.info
https://teratail.com/questions/364590
を参考に下記コードを作成したのですが、エラーメッセージが出てうまくいきません。
どのように修正したらよいでしょうか。
Bot tokensのスコープは、
channels:read
groups:read
im:read
mpim:read
を設定しています。(不要なものもあるかも知れません。)
よろしくお願いします。

GAS

1function testFunc(){ 2 console.log(getName("***")) 3} 4 5function getName(id) { 6 const url = "https://slack.com/api/conversations.info" 7 const token = "xoxb-***" 8 const param = { 9 "method": "get", 10 "contentType": "application/x-www-form-urlencoded", 11 "payload": { 12 "token": token, 13 "channel": id 14 } 15 } 16 const response = UrlFetchApp.fetch(url, param) 17 const json = JSON.parse(response) 18 const name = json.channels[0].name 19 return name 20} 21 22--- 23エラー 24TypeError: Cannot read properties of undefined (reading '0') 25getName @ 無題.gs:18 26testFunc @ 無題.gs:2

jsonは
ok: false
error: "channel_not_found"
となっています。
チャンネルIDはチャンネルの画面の「チャンネルID」からコピー&ペーストしています。

コードの修正箇所を示していただきありがとうございます。
const name = json.channel.name;
に修正しました。
しかし、

GAS

1エラー 2TypeError: Cannot read properties of undefined (reading '0') 3getName @ 無題.gs:18 4testFunc @ 無題.gs:2

は変わりませんでした。

User Token Scopesに
channels:read
groups:read
im:read
mpim:read
を設定して、tokenをBot User OAuth TokenからUser OAuth Tokenに設定変更するとチャンネル名を取得しました。Bot User OAuth Tokenで処理がうまくいかないのは、チャンネルIDで指定するチャンネルにボットを追加していないからかなと思いました。もしそうだとすると事前にボットを追加したチャンネルしかチャンネル名を取得できないことになります。

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

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

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

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

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

YAmaGNZ

2024/01/19 03:35

どのようなjsonが返ってきているか確認してはどうでしょうか
guest

回答1

0

ベストアンサー

参考にされているページのレスポンス例には

json

1{ 2 "ok": true, 3 "channel": { 4 "id": "C012AB3CD", 5 "name": "general", 6 "is_channel": true, 7 "is_group": false, 8 "is_im": false, 9 "created": 1449252889, 10 "creator": "W012A3BCD", 11 "is_archived": false, 12 "is_general": true, 13

とあります。なのでJSONからチャンネル名を取得する場合は

javascript

1const name = json.channel.name;

ではないですか?

また
error: "channel_not_found"
となるとのことですが、提示されたコードの上記部分のみを修正して実行してみましたがチャンネル名を取得できました。
なので、チャンネルIDを間違えているのではないかと考えられます。

試しに実行したコードは以下になります。

javascript

1function testFunc(){ 2 console.log(getName("C**********")) 3} 4 5function getName(id) { 6 const url = "https://slack.com/api/conversations.info" 7 const token = "xoxb-*************-*************-************************" 8 const param = { 9 "method": "get", 10 "contentType": "application/x-www-form-urlencoded", 11 "payload": { 12 "token": token, 13 "channel": id 14 } 15 } 16 const response = UrlFetchApp.fetch(url, param) 17 const json = JSON.parse(response) 18 const name = json.channel.name 19 return name 20} 21

追記

TypeError: Cannot read properties of undefined (reading '0')
こちらのエラーに関しては取得失敗時のjsonにはchannelという項目が含まれていない為、そこにアクセスしようとしてエラーとなっています。

javascript

1 const json = JSON.parse(response) 2 if(json.ok === true) { 3 return json.channel.name 4 } else { 5 return'ERROR : ' + json.error 6 }

といった感じでエラー処理すれば、実行時のエラーに関しては出なくなります。

投稿2024/01/19 05:36

編集2024/01/19 07:55
YAmaGNZ

総合スコア10688

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

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

YAmaGNZ

2024/01/19 07:25

Bot Token Scopesにchannels:readのみを設定し、ボットをどのチャンネルにも所属させずに実行していますがチャンネル名は取得できていますね
mbcztpw

2024/01/19 09:03

自分の場合は、ボットをチャンネルに追加すると 追加したチャンネルのチャンネル名を取得できるようになります。 難しいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.29%

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

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

質問する

関連した質問