Mattermost 읽지 않은 멤버 조회
읽지 않은 멤버 조회
사내에
Slack
을 대체 할 솔루션이 필요했고
예전부터 미루고 미루던Mattermost
를 설치하여 운영하기로 했다
그런데 공지용 쓰레드를 올렸을 때 누가 읽었는지 확인이 되지 않았다
카카오톡에 이미 길들여져있던 나는 간절하게 기능이 필요했다
API & Plug-in 검색
API 또는 Plug-in이 있나 검색하던 중에 해당 글을 발견!!!!
API를 활용하여 개발하기로 했다
Plug-in은 모바일에서는 사용할 수 없었다😥
https://github.com/mattermost/mattermost/issues/20510
구현방식
Mattermost
의 봇을 생성하고 그 봇의 토큰으로Mattermost
API 호출 시 사용한다AWS Lambda
를 활용하여 자체 API를 제공한다Slash Command
를 활용
프로세스
Slash Command
를 호출하게 되면 아래와 같은 흐름으로 동작한다
Slash Command -> AWS API Gateway -> AWS Lambda -> Mattermost API
구현시작🍟
1. 봇 생성
봇을 생성한다
시스템 관리자권한과 모든 채널에 게시할 수 있는 권한을 부여했다
토큰 생성
📢 토큰을 생성하게 되면 만든 직후에만 획득 할 수 있으니 관리에 주의한다
2. Lambda 생성
node로 만들어 주었다
스크립트는 대충 저런 구조로 작성하였다
최신 포스트를 가져와 채널멤버를 조회하고 작성일과 접속일을 비교하여
작성일 이전에 접속한 멤버는 읽지 않은 멤버로 식별하였다
/*
* 가장 최근 포스트의 생성일자 조회
* 가장 최근 포스트가 없다면 오늘날짜 반환
*/
const getLatestPost = async (options, channel_id){...}
/*
* 채널 멤버 조회
*/
const getChannelMembers = async (options, channel_id) => {...}
/*
* 채널 멤버 조회(+이름)
*/
const getChannelMemberNames = async (options, channel_id) => {...}
/*
* 읽지 않은 멤버 판별
*/
const getUnreadMember = (members, latestPostDate) => {...}
사용한 API
채널 조회
/api/v4/channels채널 포스트 조회
api/v4/channels/:channel_id/posts채널 멤버 조회
/api/v4/channels/:channel_id/members채널 멤버 이름 조회
/api/v4/users
3. API Gateway 생성
Slash Command
로 발생한 Request는 Content-Type이 application/x-www-form-urlencoded
이고
Accept-Content-Type은 application/json
이다
그래서 REST API로 생성해야 한다
Post로 메서드를 생성하고 이전에 생성한 Lambda 함수를 지정한다
Content-Type
과 application/x-www-form-urlencoded
을 추가한다
다시 Lambda의 구성-트리거를 확인해 보면 API Gateway의 URL을 확인 할 수 있다
Slash Command
가 입력되면 이 URL로 요청이 발송되도록 해야 한다
4. Slash Command
생성
Mattermost의 통합
메뉴로 접속한다
아래처럼 Slash Command
를 생성한다
요청 URL에 반드시 API Gateway
의 URL을 입력해야 한다