Bitbucketの更新をHubot経由でSlackに通知する

# 1.概要
- Bitbucketの更新をHubot経由でSlackに通知する
- 通知対象：PullRequest, Issue, Repositoryの各イベント

# 2.動機
- 既存のSlack Bitbucket Integrationでは、Repository Push のみしか対応していない
    + どうせなら、全部通知してほしい(特にPullRequest周り)
- とういうことで、作った

# 3.導入方法
## 前提
- Hubot => Slackの連携はできている(ping -> pongができればok)
    + [backlog→hubot→slack連携](http://qiita.com/yo-iida/items/c69fe7b6afb2c082b822)がわかりやすいと思うので参考にしてください
 
## npm導入
- hubotディレクトリ内(binとかpackage.jsonがあるとこ)で下記コマンド

```shell-session
npm install bitbucket2slack --save
```
- `external-scripts.json` に下記を追加する

```json:external-scripts.json
"bitbucket2slack"
```

## Bitbucketのwebhook設定
<img width="951" alt="bb_webhook.png" src="https://qiita-image-store.s3.amazonaws.com/0/72388/218a8c40-876e-5c12-001d-25f51678cab7.png">

- Tilteは適当にわかりやすいものを入力 例)「slack_notification」
- URLには以下を設定する

```
{hubot_url}/bitbucket2slack

例）http:example.com:8080/bitbucket2slack
```
- **通知してほしい更新のみ** Triggersから選択する

## 通知先指定(2つの方法)


- Getパラメータでの指定(**優先**)
`http:example.com:8080/bitbucket2slack?destination=bb-notification-channel`
`http:example.com:8080/bitbucket2slack?destination=t_mimura`

- 環境変数での指定
`export HUBOT_BITBUCKET2SLACK_DESTINATION = "bb-notification-channel"`
`export HUBOT_BITBUCKET2SLACK_DESTINATION = "private-kosokoso-heya"`

通知先(destination)はCHANNEL, PRIVATE_GROUP, DM(user_name)に対応している

# 4.通知例
<img width="326" alt="bitbucket2slack.png" src="https://qiita-image-store.s3.amazonaws.com/0/72388/bea57a8e-99af-0bdb-7c15-829b852002bb.png">
色はデフォルトから変更している(後述)

# 5.オプション(追加機能)
## 色の指定方法
|Action|Type|defaultColor|
|:-----|:--:|:----------:|
|Pullrequest Create|information|LightBlue|
|Pullrequest Approved|good|Green|
|Pullrequest Approval Removed|danger|Red|
|Pullrequest Merged|good|Green|
|Pullrequest Declined|danger|Red|
|Pullrequest Comment...|warning|Orange|
|Issue ...|information|LightBlue|
|Repository Push|information|LightBlue|
|Repository Fork|information|LightBlue|

- Getパラメータでの指定(**優先**)   
`http:example.com:8080/bitbucket2slack?good_color=000000`  
`http:example.com:8080/bitbucket2slack?warning_color=ff0000&danger_color=f0f`

※　colorに `#` は含めない
ダメな例)`.../bitbucket2slack?warning_color=ff0000&danger_color=#f0f`

- 環境変数での指定  
`export HUBOT_BITBUCKET2SLACK_GOOD_COLOR = "000"`  
`export HUBOT_BITBUCKET2SLACK_INFOMATION_COLOR = "ffff00"`


# 6.雑多
- Slack通知の整形や通知情報の追加などは継続的に続ける予定
- [Github](https://github.com/mito5525/bitbucket2slack)に投稿したので、変な英語あったら教えてください(英語力のなさが露呈してる...)
- 今後の課題として、Bitbucket-Slack間のユーザー名の差異をどうやって吸収するか(対応マップをJSONで書いておくくらいしか思いつかない)
- [Backlog版](https://github.com/mito5525/backlog2slack)も作りました( ~~記事にするかは未定~~ [Backlogの更新をHubot経由でSlackに通知する](http://qiita.com/t_mimura/items/6856613563ae9e162e9d))

# 6.参考/利用したURL
- [backlog→hubot→slack連携](http://qiita.com/yo-iida/items/c69fe7b6afb2c082b822)
- [Atlassian Documentation](https://confluence.atlassian.com/bitbucket/event-payloads-740262817.html)
- [npm:hubot-bitbucket-pr](https://www.npmjs.com/package/hubot-bitbucket-pr)
- [SlackAPI](https://api.slack.com/docs/attachments)

# 7.追記(2/26)
- Slack公式がBitbucketのすべてのWebHookに対応したらしい
    + https://twitter.com/SlackHQ/status/702986170116911104
- Bitbucket2Slackの存在意義がほとんどなくなりました

（アリガトウゴザイマシター

[![LGTM](http://lgtm.in/p/4CWRzMfhn)](http://lgtm.in/i/4CWRzMfhn)