【Slack】ColdFusionからメッセージを送信する

凄く寒いので何となくColdFusionからSlackへアクセスする為の関数を作ってみました。
作って見たかっただけなので使いみちは無いと思います_(:3」∠)_

WebHook使ってるだけなので特段難しいことは何もしてません。

<!--- Slack接続用 --->
<cffunction name="SendSlackWebHook" returnType="boolean" access="public">
    <cfargument name="message" type="String" required="true">
    <cfargument name="attachmentsMessage" type="String" required="false" default="">

    <cfscript>
    try {
        // Web HookのURLを設定する
        hookUrl = "https://hooks.slack.com/services/…";

        // 送信用のデータを作成する
        payloadData = StructNew();
        StructInsert(payloadData, "text", ARGUMENTS.message);

        if (NOT attachmentsMessage EQ "") {
            StructInsert(payloadData, "attachments", StructNew());
            StructInsert(payloadData.attachments, "text", ARGUMENTS.attachmentsMessage);
        }

        // リクエストを送信する
        result = SendRequest(hookUrl, payloadData);
    } catch(any e) {
        WriteOutput("[Exception]:" & e.message);
        abort;
    } catch(CF4Slack e) {
        WriteOutput("[CF4Slack Exception]:" & e.message);
        abort;
    } catch(CF4Slack.SendRequest.ArgumentException e) {
        WriteOutput("[CF4Slack.SendRequest.ArgumentException]:" & e.message);
        abort;
    }

    return result;
    </cfscript>
</cffunction>

<!--- リクエスト送信関数 --->
<cffunction name="SendRequest" returnType="boolean" access="private">
    <cfargument name="hookUrl" type="String" required="true">
    <cfargument name="payloadData" type="struct" required="true">

    <cfscript>
    if (Len(hookUrl) EQ 0) {
        throw(type="CF4Slack.SendRequest.ArgumentException", message="URLが正しくありません。");
    } else if (StructCount(payloadData) EQ 0) {
        throw(type="CF4Slack.SendRequest.ArgumentException", message="パラメータエラー");
    }
    jsonData = serializeJSON(payloadData);

    var httpService = new http();

    // Webhook URLを設定
    httpService.setURL(hookUrl);
    httpService.setMethod("POST");
    httpService.setTimeout(5);

    // JSONデータ
    httpService.addParam(type="formfield",name="payload",value=jsonData);

    var reply = httpService.send().getPrefix();

    // ステータスがOKだった場合のみ
    if (reply.Statuscode EQ "200 OK") {
        return true;
    } else {
        throw(type="CF4Slack.SendRequest.RequestException", message="ErrorDetail:[#reply.ErrorDetail#] Filecontent:[#reply.Filecontent#]")
    }
    </cfscript>
</cffunction>

<cfoutput>
    <!--- 動作確認用 --->
    <cfif SendSlackWebHook("確認用メッセージ")>
        <p>送信完了</p>
    <cfelse>
        <p>送信失敗</p>
    </cfif>
</cfoutput>

やりたい事が色々とあって悩む。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です