Chatworkにlaravelからメッセージ送信(通知)


ログ等をChatworkに送信したい

現状ChatworkにはslackのようなIncoming Webhookが無いのでエンドポイントを使用します。

エンドポイントへはhttpsで接続してください、httpでは接続エラーになります。

php
<?php

namespace App\Utils;

class ChatworkRequest
{
    public static function postRequest($apiKey, $roomId, $body)
    {

        // ヘッダー
        header("Content-type: text/html; charset=utf-8");

        $params = array(
            "body" => $body //送信したいメッセージ
        );

        // cURLでPOST
        $ch = curl_init();

        // cURLの設定
        //{roomId}には取得したルームIDを入れる
        curl_setopt($ch, CURLOPT_URL, "https://api.chatwork.com/v2/rooms/{$roomId}/messages");
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('X-ChatWorkToken: ' . $apiKey));
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);    // 結果を文字列で返す
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);   // サーバー証明書の検証を行わない
        curl_setopt($ch, CURLOPT_POST, true);              // HTTP POSTを実行
        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params, '', '&'));

        $rsp = curl_exec($ch);

        curl_close($ch);

        $res = json_decode($rsp);

        return $res;
    }

}

ApiKey、送信先のルームID、メッセージ内容を引数にいれてバッチ処理等で実行する。
基本はこの形になります。

ルーム内の全員にメッセージを通知したい場合

簡単です。body内に[toall]を埋め込むと全員に通知されます。

$params = array(
            "body" => "[toall]\n".$body
        );

注意点

1.APIキーには有効期限がなく、第三者に知られてしまうと機能にフルアクセスが可能になるので
 DBに保存する際は必ず暗号化する。
2.送信されたメッセージは自分自身が送信している形になる。問題なければそのままでも大丈夫ですが
 通知botとして機能させたいのであれば通知用のアカウントを作成するのがおすすめです。