Hubot에서 Slack 초대 양식 구현

7499 단어 슬랙Hubot
JANOG36 에서 직원을 함께하던 분들로부터, Slack의 숨겨진 API의 존재를 가르쳐 받았습니다.
이렇게하면 관리자가 수동으로 수행 한 사용자를 초대할 수 있습니다.
이미 초대 양식을 제공하는 웹 앱이 몇 가지 있습니다만, 이번은 Hubot상에서 구현해 보았습니다.
  • Slack API를 사용하여 팀 초대 작업 자동화 - Qiita
  • rauchg/slackin · GitHub

  • 초대 API 개요



    Slack API에는 나타나지 않았으며 Invite 페이지의 소스에서 발견 된 것 같습니다.
  • How I hacked Slack into a community platform with Typeform

  • curl 명령이라면 다음과 같이 호출 할 수 있습니다 (URL의 TEAM은 없어도 괜찮습니다).
    또한 TOKEN은 Admin 권한을 가진 사용자가 발급해야합니다.
    $ curl -X POST 'https://TEAM.slack.com/api/users.admin.invite' \
    --data 'email=EMAIL&token=TOKEN&set_active=true' \
    --compressed
    

    Hubot에서 구현



    Typetalk 용으로 개발하고 있었다 Huboco에서도 비슷한 초대 기능을 구현했습니다.
    이 경우 API 호출에 Typetalk Adapter이 가진 TOKEN을 유용했습니다.
  • huboco/invite.coffee at master · hico-horiuchi/huboco · GitHub



  • 그러나 슬랙 어댑터의 TOKEN은 Admin 권한이 없으므로 별도로 발급해야합니다.
    이번에는 HUBOT_SLACK_ADMIN_TOKEN라는 환경 변수로 설정하기로 결정했습니다.
    실제 코드는 길기 때문에 GitHub에 대한 링크를 나타냅니다.
  • kaonashi/invite.coffee at master · hico-horiuchi/kaonashi · GitHub

  • Hubot /slack/form에 액세스하면 이메일 주소 입력 양식이 표시됩니다.
    또한 /api/team.info를 사용하여 팀 이름을 표시 할 수 있습니다.



    양식을 제출하면 /api/users.admin.invite가 호출되고 결과가 표시됩니다.
    이미 초대 된 등 오류의 경우 오류 페이지가 표시됩니다.



    invite 명령



    양식과 마찬가지로 명령을 사용하여 사용자를 팀에 초대할 수 있습니다.
    (구현 후 /invite_people 명령이 있음을 알았습니다 ....)
    querystring = require('querystring')
    request = require('request')
    urler = require('url')
    
    module.exports = (robot) ->
      robot.respond /invite\s+(\S+)$/i, (msg) ->
        email = msg.match[1]
        options = {
          url: "https://slack.com/api/users.admin.invite"
          qs:
            'token': process.env.HUBOT_SLACK_ADMIN_TOKEN
            'email': email
            'set_active': true
        }
        request.post options, (err, res, body) ->
          json = JSON.parse(body)
          unless json.ok
            return msg.reply("```\n#{json.error}\n```")
          msg.reply("#{email} を招待しました")
    

    카나시



    위의 코드는 카나시이라는 Bot으로 작동 중입니다.



    Hubot×ChatOps 공부회



    08/22 (토)에 고베에서 제2회 Hubot×ChatOps 공부회를 개최합니다!
    Hubot이나 ChatOps에 관심이 있는 분, Plugin을 개발하고 있는 분 등, 꼭 와 주세요.
    발표해 주시는 분도 모집중이므로, @히코_호리우치까지 부담없이 말씀해 주세요.

    좋은 웹페이지 즐겨찾기