OpenProject Webhook에서 Rocket.Chat에 게시 할 때 설정

OpenProject를 사용하고 싶었기 때문에 시도했을 때의 메모입니다.

htps : // 코 m / 테루키 zm / ms / c94f06 아 40 55f65d4f9
이쪽을 참고로 기동해 보았습니다.

모처럼이므로 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 설정 스크립트에 다음과 같이 설정하면 됩니다.
"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'
    //   }
    // };
  }
}

결과





간단. 멋지네요.

기타 문제


  • 호스트 OS(CentOS7)의 Firewalld가 기동하고 있으면, 제대로 투고할 수 없다 (No route to host)가 되는 경우가 있었다.
  • 일시적으로 Firewalld를 정지해 동작 확인. 나중에 포트를 열어서 해결하십시오
  • OpenProject, Rocket.chat 모두 docker-compose에서 동일한 호스트로 시작되었습니다.

  • 왜인가 투고에 1분 정도 걸린다. 더 걸릴 수도 있다. . . . 수수께끼.
  • 좋은 웹페이지 즐겨찾기