はじめに
C#でSlak APIを利用する際に、
Webhookを使用した記事を用いたメッセージ投稿のプログラムは
よくみるものの、
Tokenを使用したプログラムはあまり見られなかったので、
自分への備忘録も兼ねて記事を書きます。
Slack APIについて
基本は使用したいAPIの公式ドキュメントを見てください。
そこに全ては書いてあります。
今回は"files.upload"を使用するので、
以下URL先のドキュメントをしっかりよむ。
https://api.slack.com/methods/files.upload
C#側のコード
以下、今回紹介するソース全文
//外部ファイルより、投稿したいChannelとTokenを取得stringchannel=System.Environment.GetEnvironmentVariable("Channel");stringtoken=System.Environment.GetEnvironmentVariable("Token");//パラメータにTokenとChannelをセットvarparameters=newNameValueCollection();parameters["token"]=token;parameters["channels"]=channel;varclient=newWebClient();client.QueryString=parameters;byte[]responseBytes=client.UploadFile("https://slack.com/api/files.upload",Filename);//結果を取得StringresponseString=Encoding.UTF8.GetString(responseBytes);ReturnValueReturn=JsonConvert.DeserializeObject<ReturnValue>(responseString);Console.WriteLine(Return);classReturnValue{publicboolok{get;set;}publicStringerror{get;set;}publicSlackFilefile{get;set;}}classSlackFile{publicStringid{get;set;}publicStringname{get;set;}}外部ファイルより値の取得
System.Environment.GetEnvironmentVariable()では
外部ファイル(今回はAzure Functionで作成したので”localsetting.json”から)
TokenとChannel(正確にはChannelID)から値を引っ張ってきます。
Tokenの取得は以下、
https://dev.classmethod.jp/articles/search-messages-with-slack-api/
ChannelIDの取得は以下を参考にするとわかりやすい
https://qiita.com/unsoluble_sugar/items/603e51106d9632f3ea4f
//外部ファイルより、投稿したいChannelとTokenを取得stringchannel=System.Environment.GetEnvironmentVariable("Channel");stringtoken=System.Environment.GetEnvironmentVariable("Token");APIに渡す引数のセット
次に、NameValueCollection()をもちいて、
先ほど取得した
"parameters"にTokenとchannels(Slack APIに渡す引数)をセットする。
//パラメータにTokenとChannelをセットvarparameters=newNameValueCollection();parameters["token"]=token;parameters["channels"]=channel;クエリを作成し、WebClientで送信する
WebClientのクエリとして"parameters"をセットした後に、
"client.UploadFile"でSlack APIにクエリを投げかけます。
(変数"Filename"に投稿したいファイルパスが格納されています)
byte[] responseBytes にはSlack APIからの返信がバイトで格納されます。
varclient=newWebClient();client.QueryString=parameters;byte[]responseBytes=client.UploadFile("https://slack.com/api/files.upload",Filename);結果をコンソール出力
最後に、送信結果をコンソールに出力すると、便利かも。
(okのパラメータがTrueなら投稿できているはず)
//結果を取得StringresponseString=Encoding.UTF8.GetString(responseBytes);ReturnValueReturn=JsonConvert.DeserializeObject<ReturnValue>(responseString);Console.WriteLine(Return);最後に
今回で、Slcak APIについて色々わかってきたので、
他も触っていきたいと思う今日この頃