みなさんSlack使っていますか?
自分はもうSlackの虜です。
タイムラインチャンネルって何よ
簡潔に言うと、全てのpublicチャンネルを1つのチャンネルに集約し
Twitterのようなタイムラインを形成するチャンネルです。
以下の記事が参考になります。
・Slackに #timeline channelをつくった話
・Slack上にTimelineを形成して全チャンネルの発言をゆるく眺める
実際に導入して見た
npmのパッケージとして以下が出ていたのでこれを導入しようとしたら詰みました
・npm - hubot-slack-timeline
・github - hubot-slack-timeline
積んだところをご紹介します。
事前準備
・Heroku上でHubotを飼っている
・npmがインストールされている
🚨SLACK_API_TOKENを勘違いした【詰んだ】🚨
HubotのAPI_TOKENかと思いきや
SLACKのAPIのTOKENだったとは…。
以下取得方法をご紹介します。
トークンキーを過去に作成したことがない場合
上記のリンクをクリックすると
[ Create Token ]
と言う部分が出ているはずなのでクリックすることでキーを発行することができます。
トークンキーを発行したことがある場合
上記リンクをクリックすると
[ Create Token ]
と言う部分が出ているはずなのでクリックすることでキーを発行することができます。
その後
herokuの方に以下のようなコマンドでtokenを登録してください。(webページからでも可能)
$ heroku config:add SLACK_API_TOKEN="発行したTOKEN"
🚨タイムラインbotの使い方が分からない【詰んだ】🚨
すごく初歩的なことだったのですが、
タイムラインチャンネルに表示したいチャンネル上にhubotをinviteさせるだけでした。
自分はtimelineチャンネルにもhubotをjoinさせてしまったせいで以下のような悲惨な状態になりました。
いわゆるループです。
🚨(at channel)がリンクされない【詰んだ】🚨
Hubot API V3からV4に変わったことにより
channel = msg.envelope.room
ではIDを取得するようになりました。
その為素のhubot-slack-timelineではどうしようもないので変更する必要があります。
timeline.coffeeの以下の部分を追加することで対応することができます。
request = require 'request'
module.exports = (robot) ->
robot.hear /.*?/i, (msg) ->
channel = msg.envelope.room
+ room_name = robot.adapter.client.rtm.dataStore.getChannelGroupOrDMById(channel).name
message = msg.message.text
username = msg.message.user.name
user_id = msg.message.user.id
reloadUserImages(robot, user_id)
user_image = robot.brain.data.userImages[user_id]
if message.length > 0
message = encodeURIComponent(message)
link_names = if process.env.SLACK_LINK_NAMES then process.env.SLACK_LINK_NAMES else 0
timeline_channel = if process.env.SLACK_TIMELINE_CHANNEL then process.env.SLACK_TIMELINE_CHANNEL else 'timeline'
- request = msg.http("https://slack.com/api/chat.postMessage?token=#{process.env.SLACK_API_TOKEN}&channel=%23#{timeline_channel}&text=#{message}%20(at%20%23#{channel}%20)&username=#{username}&link_names=#{link_names}&pretty=1&icon_url=#{user_image}").get()
+ request = msg.http("https://slack.com/api/chat.postMessage?token=#{process.env.SLACK_API_TOKEN}&channel=%23#{timeline_channel}&text=#{message}%20(at%20%23#{room_name}%20)&username=#{username}&link_names=1&pretty=1&icon_url=#{user_image}").get()
request (err, res, body) ->
上記のように修正することで
以下のようになります
Before
After
最後に
このような素晴らしいnpmパッケージを公開してくれたHikaru Tooyama
さんありがとうございます。
良さそうなパッケージを見つけたら教えていただけると幸いです。