Skip to content

Instantly share code, notes, and snippets.

@hasegawayosuke
Created May 30, 2017 02:47
Show Gist options
  • Star 7 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hasegawayosuke/7276fa20729bced4b022f65c124c3abb to your computer and use it in GitHub Desktop.
Save hasegawayosuke/7276fa20729bced4b022f65c124c3abb to your computer and use it in GitHub Desktop.
Slackのチャンネル一覧とそれぞれのpurposeを取得して指定されたチャンネルに投稿する
// Slackのチャンネル一覧とpurposeを投稿
//[ファイル]→[プロジェクトのプロパティ]→[スクリプトのプロパティ]に以下の各プロパティを設定すること
// slack_api_token APIトークン。 https://api.slack.com/docs/oauth-test-tokens で Create Token を押すと生成される xxxx-1234567890-1234567890 のような値
// channel 投稿するチャンネル
function slackApi(token, path, params) {
if(!params) params = {};
var url = "https://slack.com/api/" + path;
var q = "?token=" + encodeURIComponent( token );
for( var key in params ){
q += "&" + encodeURIComponent( key ) + "=" + encodeURIComponent( params[ key ] );
}
url += q;
var res = UrlFetchApp.fetch( url );
var ret = JSON.parse( res.getContentText() );
if( ret.error ){
throw "GET " + path + ": " + ret.error;
}
return ret;
}
function slackPost (token, channel, text, attachments) {
var options = {
"method" : "POST",
"payload" : {
"channel" : channel,
"text" : text,
"username" : "bot"
}
};
if( attachments !== undefined ){
if( !attachments instanceof Array ){
attachments = [ attachments ];
}
options.payload.attachments = JSON.stringify( attachments );
}
return UrlFetchApp.fetch("https://slack.com/api/chat.postMessage?token=" + token, options);
}
function main(){
var channels, token, channel, text = "";
token = PropertiesService.getScriptProperties().getProperty("slack_api_token");
channel = PropertiesService.getScriptProperties().getProperty("channel");
if (channel.charAt(0) !== "#") channel = "#" + channel;
if (!token) {
throw 'You should set "slack_api_token" property from [File] > [Project properties] > [Script properties]';
}
channels = slackApi(token, "channels.list");
channels.channels.forEach( function (ch) {
text += "#" + ch.name + " " + ch.purpose.value + "\n";
});
slackPost(token, channel, text);
}
@KenMiz
Copy link

KenMiz commented Jun 8, 2018

こんにちは。
まさにこの作業が行いたかったので使わせていただきたいなと思っています。
質問させていただきたいのですが、
12行目がundefinedであるとエラーが出る場合、どう編集するのがよいでしょうか?
単純に消してしまって、実行してみました。
Slackの指定したチャンネルへの書き込みが見つからないので、上記含めた過不足な点があるのだと思いますが、ご教授願えますでしょうか。
たとえば、プロパティに指定するchannelは、目的のチャンネルの名称でよいのでしょうか?

よろしくお願いいたします。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment