[PHP] 초보자라도 쉽게 만들 수 있는 SlackBot~TechJack~

7704 단어 슬랙PHPbot

slack Bot을 만든 이야기



slack bot를 만든 이야기를 하려고 한다.
만든 녀석은 이런 ↓↓

TechJack





내용은
회사의 #tech 라는 채널에서, 9시부터 18시까지의 발언자가 내 소속 팀의 사람(기반 유닛)뿐이었을 경우,
위 이미지와 함께 Bot이 메시지를 게시합니다.
아직 개선의 여지는 크다고 생각하지만, 우선 해 보았다.

bot는 raspberry pi에 있으며,
cron을 사용하여 18시에 실행하는 것을 염두에두고 코드를 작성했습니다.

또, 하기 출현한다 "取得したAPI キー"https://api.slack.com/webGenerate Test Tokens 에서 취득했다.

코드는 이런 느낌
<?php
// 9時間前を計算する関数
// 18時にクーロンを回すので、朝9時からのデータが取れる。
function returnThisMorning()
{
    date_default_timezone_set('Asia/Tokyo');
    $now = time();
    $thisMorning = $now - (9 * 60 * 60);
    return urlencode($thisMorning);
}

$slackApiKey = "取得したAPI キー";
$thisMorning = returnThisMorning();

// チャンネルの履歴を取得
// チャンネル名ではなくチャンネルIDを登録する必要がある。
// oldest には、thisMorning のタイムスタンプを代入
$url = "https://slack.com/api/channels.history?token=${slackApiKey}&channel="チャンネルID"&oldest=${thisMorning}";

// $url を叩いて、結果をJsonDecode する。
// 第二引数を true にすることで、配列にdecodeされる。
// 参考: http://d.hatena.ne.jp/kasahi/20070806/1186419785
$results = json_decode(file_get_contents($url), true);

// うちのチームメンバーのID
$users = [
    "一人目",
    "二人目",
    "三人目",
    "四人目",
    "五人目",
    "六人目",
];

// techJack を初期化
$techJack = true;
// ここが結構ダサい。配列をぐるぐる回して、がんばって、メンバーを探している。
foreach ($results["messages"] as $key => $result) {
    // echo strtotime($result["ts"]);
    $user = $result["user"];
    if (!is_null($user)) {
        // 他のユーザーが混ざってたら $techJack を false にする
        if (!in_array($user, $users)) {
            $techJack = false;
        }
    }
}

// ここもださい!画像ファイルの貼付方法がわからなかったから、画像のURL を貼ってる。
$textTechJack = "TECH JACK ~ Tech Room Was Completely Jacked By 基盤ユニット :star: ~https://cdn-ak.f.st-hatena.com/images/fotolife/a/adiboy/20160901/20160901131203.jpg";
$textTechJack = urlencode($textTechJack);
if ($techJack) {
    $techJack = "https://slack.com/api/chat.postMessage?token=${slackApiKey}&channel="チャンネルID"&text=${textTechJack}&username=TechJack";
    file_get_contents($techJack);
}


이번에 사용한 slack API 메소드와 그 사용법



특정 채널의 기록을 얻기위한 API


https://slack.com/api/channels.history?token="取得したAPIキー"&channel="チャンネルID"&oldest=${thisMorning}
チャンネルID 라고 쓰고 있는 곳에 처음에는 채널명을 쓰고 있어 잘 움직이지 않았으므로, 조심해 주었으면 한다.
또한, oldest 에는, 언제로부터의 정보를 갖고 싶은지를 쓴다(타임 스탬프).

특정 채널에 메시지를 게시하는 API


"https://slack.com/api/chat.postMessage?token="取得したAPIキー"&channel="チャンネルID"&text=${textTechJack}&username=techJack
chat.postMessage는 특정 채널에 메시지를 게시하기위한 API
이미지를 보내는 방법을 모르기 때문에 이미지 링크를 붙이면 잘 움직였습니다. (물론 좋은 방법은 아니다.)

채널 ID를 얻기위한 API


https://slack.com/api/channels.list?token="取得したAPIキー"

덧붙여서, 이쪽이 チャンネルID 를 취득하는데 사용한 API이다.
브라우저에서 URL을 두드리고 command + F에서 검색했습니다.
수가 많아지면 힘들기 때문에 스크립트를 짜는 것이 좋다고 생각한다.

사용자 ID를 얻기위한 API


https://slack.com/api/users.list?token="取得したAPIキー"

를 브라우저로 두드려, 사용자 정보도 취득했다.
이번은 수동으로 취득했지만, 수가 많아지면, 이쪽도 스크립트를 짜는 편이 좋다고 생각한다.

덧붙여서, API 로 사용할 수 있는 메소드는, https://api.slack.com/methods 에 써 있다.
관심이 있다면 알아보십시오.

감상



Tech 채널이 활발하고, 전혀 Bot가 활약할 기회가 없는 것이 구슬에 하.
뭐든지, 잊었을 무렵에 TechJack 해 주는 것이 아닐까 생각하고 있다.
최종 목표는 Go 언어로 Slack Bot을 운영하는 것입니다.
서서히 등급이 올라갑니다! 기대하세요!

비화 (사내용)


#bot-test 라는 채널에서 실험 중입니다.
열심히 하고 있는 느낌이 나오고 있다고 생각합니다.

좋은 웹페이지 즐겨찾기