(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

UnityからSlackにメッセージを送る【Unity】【Slack】



この記事でのバージョン
Unity 2017.2.0f3


はじめに

今回はタイトル通り、UnityからSlackにメッセージを送ってみよう!という記事です。

Unityで作ったゲームに組み込むというよりは、エディタ拡張等の開発中に使う感じになると思います。


アクセストークンの取得

まずはアクセストークンを取得していきます。

こちらにアクセスし、Create An Appから新たにアプリを作成します。


f:id:kan_kikuchi:20171228083509j:plain


AppNameを適当に設定し、メッセージを送信したいワークスペースも設定します。


f:id:kan_kikuchi:20171228083647j:plain


次に権限を設定します。

「OAuth & 権限」「権限スコープの選択」から今回は「メッセージを送信」の権限を追加します。


f:id:kan_kikuchi:20171228083840j:plain
f:id:kan_kikuchi:20171228083848j:plain


権限を設定するとワークスペースへのインストールが可能になるので、インストールします。


f:id:kan_kikuchi:20171228083933j:plain


インストール完了後、アクセストークンが取得出来るようになります。


f:id:kan_kikuchi:20171228084014j:plain


メッセージの送信

アクセストークンが取得出来たら実際にメッセージを送って見ましょう。

Slackのチャットにメッセージを送るためのMethodはchat.postMessageというのですが、

これをUnityで簡単に使えるように、SlackNotifierというものを作ってみました。


// SlackNotifier.cs
// http://kan-kikuchi.hatenablog.com/entry/SlackNotifier
//
// Created by kan.kikuchi on 2017.12.12.
using UnityEngine;
using UnityEngine.Networking;
using System.Collections;
using System.Collections.Generic;
/// <summary>
/// UnityからSlackに通知を送るクラス
/// </summary>
public static class SlackNotifier {
//アクセストークン
private const string TOKEN = "ここにアクセストークンを設定してね!";
/// <summary>
/// Slackに通知を送る
/// </summary>
public static IEnumerator Send(string channel, string text, Dictionary<string, string> paramDict = null) {
//基本のURL作成
string url = string.Format(
"https://slack.com/api/chat.postMessage?token={0}&channel={1}&text={2}",
TOKEN, channel, WWW.EscapeURL(text)
);
//パラメータの設定
if(paramDict != null){
foreach (KeyValuePair<string, string> param in paramDict) {
url += "&" + param.Key + "=" + param.Value;
}
}
//UnityWebRequestを生成し、送信
UnityWebRequest request = UnityWebRequest.Get(url);
yield return request.SendWebRequest();
//通信エラー判定
bool isError = request.isNetworkError || request.isHttpError;
//通信エラー内容の表示
if(isError) {
Debug.LogWarning(request.url + "\n" + request.responseCode + "\n" + request.error + " \n" + request.downloadHandler.text);
}
//レスポンスの表示
else{
Debug.Log(request.responseCode + "\n" + request.downloadHandler.text);
}
}
}
view raw SlackNotifier.cs hosted with ❤ by GitHub


UnityWebRequestの使い方については以下の記事を参照の事。



使い方は、SlackNotifierのTOKENにアクセストークンをコピペし、SlackNotifier.Sendを実行するだけ。

なお、チャンネル名と送信するテキストは必須で、他のパラメータはparamDictを使って指定します。

StartCoroutine(SlackNotifier.Send(
  channel : "unity", //チャンネル名の設定
  text    : "送信!"   //テキストの設定
));

f:id:kan_kikuchi:20171228084604j:plain

StartCoroutine(SlackNotifier.Send(
  channel : "unity", //チャンネル名の設定
  text    : "送信!",  //テキストの設定
  //パラメータの設定
  paramDict : new Dictionary<string, string>(){
    {"username",  "ボット"}//ユーザ名の設定
  }
));

f:id:kan_kikuchi:20171228084610j:plain