[PHP] 초보자라도 쉽게 만들 수 있는 SlackBot~TechJack~
slack Bot을 만든 이야기
slack bot를 만든 이야기를 하려고 한다.
만든 녀석은 이런 ↓↓
TechJack
내용은
회사의 #tech
라는 채널에서, 9시부터 18시까지의 발언자가 내 소속 팀의 사람(기반 유닛)뿐이었을 경우,
위 이미지와 함께 Bot이 메시지를 게시합니다.
아직 개선의 여지는 크다고 생각하지만, 우선 해 보았다.
bot는 raspberry pi에 있으며,
cron을 사용하여 18시에 실행하는 것을 염두에두고 코드를 작성했습니다.
또, 하기 출현한다 "取得したAPI キー"
https://api.slack.com/web
의 Generate 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
라는 채널에서 실험 중입니다.
열심히 하고 있는 느낌이 나오고 있다고 생각합니다.
Reference
이 문제에 관하여([PHP] 초보자라도 쉽게 만들 수 있는 SlackBot~TechJack~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/gorogoroyasu/items/8c131ca547042fd3fa9e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
<?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);
}
https://slack.com/api/channels.history?token="取得したAPIキー"&channel="チャンネルID"&oldest=${thisMorning}
"https://slack.com/api/chat.postMessage?token="取得したAPIキー"&channel="チャンネルID"&text=${textTechJack}&username=techJack
https://slack.com/api/channels.list?token="取得したAPIキー"
https://slack.com/api/users.list?token="取得したAPIキー"
Reference
이 문제에 관하여([PHP] 초보자라도 쉽게 만들 수 있는 SlackBot~TechJack~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/gorogoroyasu/items/8c131ca547042fd3fa9e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)