OpenProject の WebhookでRocket.Chatに投稿したいときの設定

OpenProject を使ってみたかったので試したときのメモです。

https://qiita.com/terukizm/items/c94f06a40be55f65d4f9
こちらを参考に起動してみました。

せっかくなので、OpenProjectのアクティビティをSlackやRocket.Chatに投稿したかったのですが、
デフォルトのままでは何も投稿されない(空投稿になる)ので、その時の設定を記録しておきます。
今回はRocket.chatの例。

## Rocket.Chatの場合
Incomming Webhook の Scriptを設定します。


### OpenProject > Rocket.Chat への投稿内容
```
{ action: 'work_package:updated', 
  work_package: { _type: 'WorkPackage', id: 24, lockVersion: 3, 
                  subject: '自宅環境整備',
                  description: { format: 'textile', raw: null, html: ''
}, startDate: null, dueDate: null, estimatedTime: null, spentTime: 'PT0S', percentageDone: 0, createdAt: '2018-08-15T14: 07: 52Z', updatedAt: '2018-08-17T23: 37: 44Z', laborCosts: '0.00 EUR', materialCosts: '0.00 EUR', overallCosts: '0.00 EUR', remainingTime: null, _embedded: { watchers: [Object
], attachments: [Object
], relations: [Object
], type: [Object  .....
```
のような内容のJSONがPOSTされているようです。ので、、、

### 設定Script (title だけ流した例)
Rocket.Chat のIncomming Webhookの設定のScriptに以下のように設定するだけ。

```"title": request.content.work_package.subject```

のように、request の適切な階層を指定して、パラメータを渡してあげればいいだけですね。

```
/* exported Script */
/* globals console, _, s */

/** Global Helpers
 *
 * console - A normal console instance
 * _       - An underscore instance
 * s       - An underscore string instance
 */

class Script {
  /**
   * @params {object} request
   */
  process_incoming_request({ request }) {
    // request.url.hash
    // request.url.search
    // request.url.query
    // request.url.pathname
    // request.url.path
    // request.url_raw
    // request.url_params
    // request.headers
    // request.user._id
    // request.user.name
    // request.user.username
    // request.content_raw
    // request.content

    // console is a global helper to improve debug
    // console.log(request.content);

    return {
      content:{
        //text: request.content.text
         "attachments": [{
           "color": "#FF0000",
           "author_name": "Rocket.Cat",
        //   "author_link": "https://open.rocket.chat/direct/rocket.cat",
        //   "author_icon": "https://open.rocket.chat/avatar/rocket.cat.jpg",
           "title": request.content.work_package.subject
        //   "title_link": "https://rocket.chat",
        //   "text": "Rocket.Chat, the best open source chat",
        //   "fields": [{
        //     "title": "Priority",
        //     "value": "High",
        //     "short": false
           }]
        //   "image_url": "https://rocket.chat/images/mockup.png",
        //   "thumb_url": "https://rocket.chat/images/mockup.png"
        // }]
       }
    };

    // return {
    //   error: {
    //     success: false,
    //     message: 'Error example'
    //   }
    // };
  }
}
```

### 結果

<img width="338" alt="スクリーンショット 2018-08-18 9.03.03.png" src="https://qiita-image-store.s3.amazonaws.com/0/131643/e8377b50-e13e-8efb-0a92-9e757aef1349.png">

簡単。素敵ですね。

## その他 トラブル
 - ホストOS(CentOS7)のFirewalldが起動していると、正しく投稿できない ( No route to host)になる場合があった。
    - 一時的にFirewalldを停止して動作確認。後ほどポートを開放してあげることで対処
    - OpenProject, Rocket.chat いずれも docker-compose で同一ホストに起動してました。
 - 何故か投稿に1分ぐらいかかる。もっとかかることもある。。。。謎。