티스토리 뷰

Mattermost를 연동하거나 메세지를 임의로 보내야할 경우 사용/연동할수 방법에 대하여 간단히 정리해보도록 하겠다.
먼저 Mattermost에서 제공하는 메세지 출력전 인증방법은 다음과 같다.

  1. webhook
  2. bot token
  3. personnal token

여기서는 3번을 제외한 나머지 두방법에 대하여 UI 화면과 함께 간략히 소개해보도록 하겠다.

webhook URL을 사용한 shell script로 attachment가 포함된 message 전달

기본적으로 webhook URL의 경우 별도의 인증과정을 거치지는 않는다.
(보안을 고려한다면 접속 IP를 ACL로 관리하는것을 추천한다.)

먼저 webhook URL 추가를 진행한다.
Mattermost App이나 Web Browser에서 Integrations 메뉴로 이동한다.(로그인된 사용자는 관리자 권한이 있어야 한다.)

integrations 메뉴에서 incoming webhooks를 선택한다.

incoming webhooks 화면에서 add incoming webhook버튼을 클릭하여 webhook을 생성하자.

아래와 같이 title을 작성하고 실제 webhook으로 출력될 Channel을 지정하자.

webhook 생성이 완료되면서 URL 링크가 제공되게 된다. 해당 URL을 통해 message를 전달할수 있다.

이제 webhook 생성이 완료되었고 이를 직접 호출해보도록 하자.
아래와 같이 할당받은 webhook URL을 직접 호출할수 있다.

#!/bin/bash

# for message with attachments
curl -i -X POST -H "Content-Type: application/json" \
 -d '{"username": "pythonbot", "channel":"staging", "attachments": [{"text":"send a test message :tada:"}]}' \
 http://192.168.56.20/hooks/q4d3ikpupfbidkuo9uh8j8za5h

이후 아래와 같은 메세지가 출력됨을 확인할수 있다.

API와 Bot token을 이용하여 message 전달

Bot 생성을 위해 system console에서 기본 설정을 변경해 준다.

Bot Accounts 메뉴에서 "Enable Bot Account Creation" 을 true로 변경해준다.

이후 앞선 webhook 생성과 같이 integrations 메뉴로 이동하여

Bot Accounts를 선택한다.

Bot Accounts 우측 상단에 Add Bot Account 버튼을 클릭하여 Bot Account 를 생성한다.

Bot Accounts에서 Display Name과 role, post:all, post:channel 등을 선택하자.

우선 DM(Direct Message)을 사용할 예정은 아니기에 member role에 post:channles만 선택하여 생성을 진행한다.
이제 bot이 생성되며 token을 추가로 생성해야 아래와 같은 bot과 token 정보가 출력되게 된다.

필히 알아두어야 하는것은 token 생성시에 생성되는 token은 한번만 출력되기에 note해두거나 clipboard에 복사해두어야 한다. 또한 지금 화면상에 보이는 Token ID는 실제 Token으로 사용할수 없기에 앞서 생성시 출력되는 Token정보를 잘 복사해야 한다.

이제 생성된 Bot의 Token을 이용해 실제 메세지를 mattermost상에 출력해보자.
간단하게 shell script으로 Bot의 Token을 이용해 다음과 같은 message를 전달할수 있다.

jacob@dubaekPC:~$ curl -i -X POST -H 'authorization: Bearer gnitmbt873rkdy9tdnps6kn3xa' -H 'Content-Type: application/json' -d '{"message": "test message by bot token", "channel_id":"j9m1fx3ktb8e8mzzokmqc7iora"}' http://192.168.56.20/api/v4/posts
HTTP/1.1 201 Created
Server: nginx
Date: Mon, 05 Jul 2021 09:51:50 GMT
Content-Type: application/json
Content-Length: 398
Connection: keep-alive
Vary: Accept-Encoding
X-Ratelimit-Limit: 101
X-Ratelimit-Remaining: 100
X-Ratelimit-Reset: 1
X-Request-Id: jz4775auzirszgeqhipipfas9h
X-Version-Id: 5.30.0.5.31.0.e11b53a6a39a6390168498be691871b5.false
X-Frame-Options: SAMEORIGIN
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block

{"id":"s6k1hfqqbidr8dqmbtw5z61cgh","create_at":1625478709912,"update_at":1625478709912,"edit_at":0,"delete_at":0,"is_pinned":false,"user_id":"i7i56cdxifryfxjpp8t8mfx6fh","channel_id":"j9m1fx3ktb8e8mzzokmqc7iora","root_id":"","parent_id":"","original_id":"","message":"test message by bot token","type":"","props":{"from_bot":"true"},"hashtags":"","pending_post_id":"","reply_count":0,"metadata":{}}

실제 아래와 같은 메세지가 출력됨을 확인할수 있다.

댓글
댓글쓰기 폼