質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.65%

slackAPIから取得したユーザーIDをhubotで読み込む方法【CoffeeScript】

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 2,118

tarou212

score 7

backlogの課題が追加&更新された時に、hubotを通じてslackのチャンネルに投稿できるようにしました。
個人通知出来るように、slackAPIのuser.list(https://api.slack.com/methods/users.list/test)を使用し、
backlogから取得した通知相手の名前を元にユーザーIDをslackに投稿したいのですが、
下記の①と②の記述を使用して、①のコメントアウトの「ユーザー名を取得」の部分を元に、②ユーザー名からユーザーIDを投稿する方法ってありますか?
どちらも動作は正常です。

①backlogの課題が更新&追加された時にslackのチャンネルに投稿

# Description:
#   Backlog to Slack

backlogUrl = 'https://backlog.jp/'

module.exports = (robot) ->
 robot.router.post "/slackroom/: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 = "#{backlogUrl}view/#{body.project.projectKey}-#{body.content.key_id}"
     if body.content.comment?.id?
         url += "#comment-#{body.content.comment.id}"
     message = "*Backlog #{label}*\n"
     # notificatonに通知したい人がいればその名前をメンションしてくれる
     if body.notifications.length > 0
       for a in body.notifications
         console.log a.user.name
         console.log a.user.id
         message += "#{a.user.name} #ユーザー名を取得
     message += "\n[#{body.project.projectKey}-#{body.content.key_id}] - "

     message += "#{body.content.summary} _by#{body.createdUser.name}_\n>>> "

     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

②slackAPI [test 名前] でusers.listから一致する名前のユーザーIDを投稿

request = require('request')

module.exports = (robot) ->
robot.hear /test (.*)?/, (msg) ->
  text = msg.match[1]
  request.get
    url: "https://slack.com/api/users.list?token=#{process.env.HUBOT_SLACK_TOKEN}"
    , (err, response, body) ->
    # Slack APIからメンバーを取得      
      memberid = (member.id for member in JSON.parse(body).members when member.profile.display_name is text)
      msg.send "<@#{memberid}>"
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.65%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る