Hubot에서 Slack의 Channel과 Trello의 Board와 협력
정보계학과의 멤버가 많기 때문에, 슬랙 과 Trello 를 도입해, 탈LINE의 모던한 팀 운영을 목표로 하고 있습니다.
Hubot을 사용하여 Slack의 Channel과 Trello의 Board를 연계시켜 보았으므로 소개합니다.
전제 조건
Slack에서는 「stage(스테이지 기획)」나 「public(홍보)」등, 담당마다 Channel을 나누고 있습니다.
Trello에서는 실행위원회의 Organization을 작성해, 마찬가지로 「Stage」나 「Public」등, 담당마다 Board를 나누고 있습니다.
여기서 말하는 연계란, 「stage」Channel로 Hubot을 사용해 Trello를 조작했을 경우, 「stage」Board에 반영된다고 하는 것입니다.
Hubot에서 Board를 지정할 필요가 없어져, 직관적으로 연계할 수 있을까라고 생각합니다.
구현 방법
Hubot에서 Trello를 조작하기 위해 node-trello을 사용하고 있습니다.
이 절에서는
hubot trello list <list>
에서 지정된 목록의 카드 목록을 반환하는 명령을 보여줍니다.(List는 「Todo」 「Doing」 「Done」의 3단계로 설정하고 있습니다.)
node-trello는 비동기로 결과가 돌아오므로 API마다 함수를 나누어 배열에 쌓아 순서대로 처리하도록 하고 있습니다.
코드에 다소 코멘트를 붙이고 있으므로, 참고로 해 주세요.
trelloAPI = require('node-trello')
module.exports = (robot) ->
ORG = process.env.HUBOT_TRELLO_ORGANIZATION
trello = new trelloAPI(
process.env.HUBOT_TRELLO_API_KEY
process.env.HUBOT_TRELLO_API_TOKEN
)
# OrganizationのBoard一覧を取得
# https://trello.com/docs/api/organization/index.html#get-1-organizations-idorg-or-name-boards
getOrganizationsBoards = (msg, args) ->
url = "/1/organizations/#{ORG}/boards"
trello.get url, (err, data) =>
for board in data
# BoardをChannel名で特定 (Stage, Publicなど)
if board.name.toLowerCase() is msg.envelope.room
args['boardID'] = board.id
return args['callbacks'].shift()(msg, args)
# BoardのList一覧を取得
# https://trello.com/docs/api/board/index.html#get-1-boards-board-id-lists
getBoardsLists = (msg, args) ->
url = "/1/boards/#{args['boardID']}/lists"
trello.get url, (err, data) =>
for list in data
# Listを名前で特定 (Todo, Doing, Doneなど)
if list.name.toLowerCase() is args['listName']
args['listID'] = list.id
return args['callbacks'].shift()(msg, args)
# ListのCard一覧を取得
# https://trello.com/docs/api/list/index.html#get-1-lists-idlist-cards
getListsCards = (msg, args) ->
url = "/1/lists/#{args['listID']}/cards"
trello.get url, (err, data) =>
names = []
for card in data
names.push(card.name)
msg.reply("```¥n#{names.join('¥n')}¥n```")
robot.respond /trello\s+list\s+(\S+)$/i, (msg) ->
# getOrganizationsBoards, getBoardsLists, getListsCardsの順で呼出
getOrganizationsBoards(msg, {
callbacks: [getBoardsLists, getListsCards]
listName: msg.match[1]
})
Slack으로 움직이면 이렇게됩니다.
(실제로는 easy-table을 사용하여 표 형식으로 Due 및 Members를 표시하고 있습니다.)
카나시
위의 코드는 카나시이라는 Bot으로 작동 중입니다.
그 밖에도, 아래와 같은 Trello와의 제휴 기능을 실장하고 있으므로, 꼭 봐 주세요.
hubot trello list <list> - カードの一覧を表示
hubot trello add <list> <name> - カードをリストに追加
hubot trello move <list> <card> - カードをリストに移動
hubot trello show <card> - カードの詳細を表示
hubot trello archive <card> - カードをアーカイブ
hubot trello comment <card> <text> - カードにコメントを追加
hubot trello assign <card> <member> - カードに担当者を追加
hubot trello due <card> <date> - カードに締切を設定
hubot trello member - ボードのメンバーの一覧を表示
hubot trello member <name> - メンバーが担当するカードの一覧を表示
Hubot×ChatOps 공부회
08/22(토)에 고베에서 제2회 Hubot×ChatOps 공부회 를 개최합니다!
Hubot이나 ChatOps에 관심이 있는 분, Plugin을 개발하고 있는 분 등, 꼭 와 주세요.
발표해 주시는 분도 모집중이므로, @히코_호리우치 까지 부담없이 말씀해 주세요.
Reference
이 문제에 관하여(Hubot에서 Slack의 Channel과 Trello의 Board와 협력), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hiconyan/items/94941517b4df774bda4b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)