Backlog를 Slack과 연결할 때 알림을 받고 싶은 사람에게 Slack의 멘션을 날리는 쉬운 방법

Backlog에서 webhook을 사용할 수 있게 되어, Slack에 통지할 수 있게 되었다.

실장 방법은 하기의 2개가 매우, 매우 참고가 된다. heroku로 움직이는 방법도 써 있으므로 거의 이것을 흉내내면 좋다
  • webhook과 Hubot을 사용하여 Backlog를 slack 지원
  • Backlog에서 Webhook이 추가되었습니다! Hubot을 통해 Slack과 협력했습니다.

  • 단지 하나만 위 링크의 스크립트를 사용하면 문제가있다.

    그대로 스크립트를 복사하면 발생한 과제



    Backlog 사용자 이름과 Slack 사용자 이름이 같다고 티켓을 만든 사람에게 멘션이 날아 버린다.
    속에 말하는 멘션 지옥에 빠져 버려, Slack의 통지를 보지 않게 되어 버려 본말 전도인 것이다

    문제 캡처



    a
    노란색으로 강조되는 곳에서 멘션이 효과가 있습니다.

    문제 해결



    API 제휴해 Slack에 표시되는 캐릭터 라인에 Slack 유저명이 있으면 자동적으로 멘션이 붙는 특성을 살려,
    티켓 업데이트를 알리고 싶은 사람에게 멘션이 날 수 있도록

    Webhook 연계할 수 있는 Backlog의 API는 최근 업데이트 받기 하는 것으로, 링크처와 같은 JSON을 Hubot가 받는다

    이 위 링크를 확인하고 API의 사양을 보면 notifications에 있는 유저를 통지하고 싶은 사람으로 하면 좋을 것 같다.

    Backlog 티켓 업데이트 알림 필드에 멘션을 보내고 싶은 사용자를 지정하고 티켓을 업데이트하면 JSON의 notifications에 알림 대상 사용자가 들어온다

    Backlog 티켓 업데이트 위치의 알림 사용자 설정 위치



    a

    나중에 설명하는 스크립트를 배포하고 티켓 알림 필드에 사용자 이름을 지정하면 아래 이미지와 같이 연락하고 싶은 사람에게 Slack 위로 멘션이 날아갑니다.

    통보하고 싶은 사람에게 멘션 날아가는 캡쳐



    a

    대상 Hubot 스크립트



    기본은 처음의 링크에 있는 스크립트와 같지만, notifications를 취득해 송신하도록(듯이) 재기록하고 있다
    # Description:
    #   Backlog to Slack
    
    module.exports = (robot) ->
      robot.router.post "/room/:room", (req, res) ->
        room = req.params.room
        body = req.body
    
        console.log 'body type = ' + body.type
        console.log 'room = ' + room
    
        try
          switch body.type
              when 1
                  label = '課題の追加'
              when 2, 3
                  # 「更新」と「コメント」は実際は一緒に使うので、一緒に。
                  label = '課題の更新'
              else
                  # 課題関連以外はスルー
                  return
    
          # 投稿メッセージを整形
          url = "#{process.env.BACKLOG_URL}/view/#{body.project.projectKey}-#{body.content.key_id}"
          if body.content.comment?.id?
              url += "#comment-#{body.content.comment.id}"
    
          message = "*Backlog #{label}*\n"
          message += "[#{body.project.projectKey}-#{body.content.key_id}] - "
    
          # ここでチケットを作った作成者のユーザ名がbyの後ろについてしまい、知らせたい人じゃない人にメンションが飛んでしまいがち
          # message += "#{body.content.summary} _by #{body.createdUser.name}_\n>>> "
          message += "#{body.content.summary}"
    
          # notificatonに通知したい人がいればその名前をメンションしてくれる
          if body.notifications.length > 0
            message += "_to "
            for a in body.notifications
              console.log a.user.name
              message += "#{a.user.name} "
    
          if body.content.comment?.content?
              message += "#{body.content.comment.content}\n"
          message += "#{url}"
    
          console.log 'message = ' + message
          # Slack に投稿
          if message?
            robot.messageRoom room, message
            # robot.messageRoom room, message
            res.end "OK"
          else
              robot.messageRoom room, "Backlog integration error."
              res.end "Error"
        catch error
          console.log error
          robot.send
    
    

    좋은 웹페이지 즐겨찾기