Using API Slack in ASP.Net MVC

Untuk menggunakan Method-method yang ada di API Slack, maka perlu integrasi dan authorization antara API Slack dan MVC Application, untuk mengintegerasikannya diperlukan sebuah penghubung antara keduanya, penghubung di sini berupa Slack Apps.
Berikut langkah-langkah untuk membuat Slack Apps

  1. klik link slack apps  untuk membuat aplikasi slack.
    create app
  2. Isi bagian Basic Information
    basic information
  3. Isi bagia Oauth & Permissions
    oauth
    isi field Redirect URL dengan Url web aplikasi kita, yang nantinya berfungsi sebagai penampung parameter code
    isi field Permissions Scope dengan Scope sesuai dengan kebutuhan kita untuk mengkases method.
  4. Selanjutnya masuk ke bagian Submit To App Directory, lengkapi field-field App Directory Submissions.
    app submission
  5. Selanjutnya klik button Submit App. 
  6. Setelah aplikasi ter-submit maka akan muncul tampilan seperti gambar di bawah
    App credential
    yang kita perlukan dari aplikasi ini adala Client Id dan Client Secret, untuk nantinya digunakan sebagai parameter dalam proses Authorization.
  7. Approve aplikasi yang telah kita buat di team Slack,
    contoh : https://ranzcrew.slack.com/apps/manage

 

Setelah kita selesai membuat Slack Apps dan mempunyai Client Id dan Client Secret, langkah selanjutnya adalah mengintegrasikan dengan aplikasi kita.
Berikut langkah-langkah untuk mengintegrasikannya :

 

1. Membuat Button Login Slack.

Untuk membuat button  Login Slack bisa meng-copy nya dari sini.
contoh code nya :

[code languange=”html”]
<a href="https://slack.com/oauth/authorize?scope=client,identify,read,post,client_id=140389083489.144862954198">
<img alt="Add to Slack" height="40" width="139" src="https://platform.slack-edge.com/img/add_to_slack.png" srcset="https://platform.slack-edge.com/img/add_to_slack.png 1x, https://platform.slack-edge.com/img/add_to_slack@2x.png 2x">
</a>
[/code]

perhatikan pada code ada parameter yg harus di isi,
– pertama parameter scope di isi dengan client,identify,read,post agar kita bisa mengakses semua methode yang ada pada API Slack.
– kedua parameter client_id di isi dengan data client id yang kita dapatkan ketika membuat Slack Apps.

setelah kita mendapat kan html code untuk button login Slack, paste code tersebut dalam Login Page aplikasi kita.
berikut hasil nya.

login page

 

2. Update MVC Controller

Membuat Mehode Authorization* sebagai penampung parameter code.
*disesuaikan dengan pengisian Redirect URL pada pembuatan Slack Apps.

[code language=”csharp”]
public ActionResult Authorization()
public ActionResult Authorization()
{
Session["code"] = Request.QueryString["code"];
if (Session["code"] != null)
{
HttpClient client = new HttpClient();
JavaScriptSerializer js = new JavaScriptSerializer();
string stateInfo = "";
string defaultPass = "123456";
string defaultQuestion = "Slack Real Name";
bool isSuccess = false;
string code = Session["code"].ToString();
HttpResponseMessage response = client.GetAsync("https://slack.com/api/oauth.access?client_id=140389083489.144862954198&amp;amp;amp;amp;amp;client_secret=5b365bf5aded92a1173abc7e2e1c7eb3&amp;amp;amp;amp;amp;code=" + code).Result;
if (response.IsSuccessStatusCode)
{
stateInfo = response.Content.ReadAsStringAsync().Result;
ApiResultModel apiResult = js.Deserialize&amp;amp;amp;amp;lt;ApiResultModel&amp;amp;amp;amp;gt;(stateInfo);
if (apiResult.ok)
{
response = client.GetAsync("https://slack.com/api/users.info?token=" + apiResult.access_token + "&amp;amp;amp;amp;amp;user=" + apiResult.user_id).Result;
if (response.IsSuccessStatusCode)
{
stateInfo = response.Content.ReadAsStringAsync().Result;
SlackUserModel apiUser = js.Deserialize&amp;amp;amp;amp;lt;SlackUserModel&amp;amp;amp;amp;gt;(stateInfo);
if (apiUser.ok)
{
MembershipUser user;
MembershipCreateStatus status;
if (membershipService.FindUsersByEmail(apiUser.user.profile.email).Count == 0)
{
user = membershipService.CreateUser(apiUser.user.name, defaultPass, apiUser.user.profile.email, defaultQuestion, apiUser.user.real_name, true, out status);
}

if (authenticationService.LogOn(apiUser.user.name, defaultPass, false))
{
CreateAuthenticationTicket(apiUser.user.name);
}

Session["token"] = apiResult.access_token;
isSuccess = true;
}
}
}
}
if (isSuccess)
{
return RedirectToAction("Index", "Home");
}
else
return RedirectToAction("Login", "SGAccount");
}
else
return RedirectToAction("Login", "SGAccount");
}
[/code]

 

Contoh penggunaan method API Slack

    • Method channels.list
      method
      yang digunakan untuk menampilkan daftar channel yang tersedia.

[code language=”csharp”]
HttpResponseMessage response = client.GetAsync("https://slack.com/api/channels.list?token=" + token).Result;
if (response.IsSuccessStatusCode)
{
stateInfo = response.Content.ReadAsStringAsync().Result;
SlackChannelModel apiResult = js.Deserialize&amp;amp;amp;lt;SlackChannelModel&amp;amp;amp;gt;(stateInfo);
if (apiResult.ok)
{
listChannels = apiResult.channels;
}
}
[/code]

      • Method chat.meMessage
        method
        yang digunakan untuk mengirim message.
      • Method channels.history
        method
        yang digunakan untuk menampilkan history chat pada channel tertentu.

 

[code language=”csharp”]
HttpResponseMessage response = client.GetAsync("https://slack.com/api/channels.join?token=" + token + "&amp;name=" + id).Result;
if (response.IsSuccessStatusCode)
{
response = client.GetAsync("https://slack.com/api/channels.history?token=" + token + "&amp;channel=" + id).Result;
if (response.IsSuccessStatusCode)
{
stateInfo = response.Content.ReadAsStringAsync().Result;
ChatRoomModel chatModel = js.Deserialize&lt;ChatRoomModel&gt;(stateInfo);
if (chatModel.ok)
{
chatModel.messages = chatModel.messages.Where(n=&gt;n.subtype != "channel_join").OrderBy(n =&gt; double.Parse(n.ts.Split(‘.’).First())).ToList();
chatRooms = new SlackChatRoomPresentationStub().MapList(chatModel.messages, token);
chatRooms = chatRooms.OrderBy(n =&gt; n.ChatDateTime).ToList();
isSuccess = true;
}
}
}
[/code]

untuk method lainnya bisa klik method-method API Slack.

Randy Kurnia has written 11 articles

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>