この記事でのバージョン
Unity 2017.2.0f3
はじめに
今回はタイトル通り、UnityからSlackにメッセージを送ってみよう!という記事です。
Unityで作ったゲームに組み込むというよりは、エディタ拡張等の開発中に使う感じになると思います。
アクセストークンの取得
まずはアクセストークンを取得していきます。
こちらにアクセスし、Create An Appから新たにアプリを作成します。
AppNameを適当に設定し、メッセージを送信したいワークスペースも設定します。
次に権限を設定します。
「OAuth & 権限」の「権限スコープの選択」から今回は「メッセージを送信」の権限を追加します。
権限を設定するとワークスペースへのインストールが可能になるので、インストールします。
インストール完了後、アクセストークンが取得出来るようになります。
メッセージの送信
アクセストークンが取得出来たら実際にメッセージを送って見ましょう。
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); | |
} | |
} | |
} |
UnityWebRequestの使い方については以下の記事を参照の事。
使い方は、SlackNotifierのTOKENにアクセストークンをコピペし、SlackNotifier.Sendを実行するだけ。
なお、チャンネル名と送信するテキストは必須で、他のパラメータはparamDictを使って指定します。
StartCoroutine(SlackNotifier.Send( channel : "unity", //チャンネル名の設定 text : "送信!" //テキストの設定 ));
StartCoroutine(SlackNotifier.Send( channel : "unity", //チャンネル名の設定 text : "送信!", //テキストの設定 //パラメータの設定 paramDict : new Dictionary<string, string>(){ {"username", "ボット"}//ユーザ名の設定 } ));