Server & NAS/Synology

Synology Chat - 외부 연동 Webhook 기능

OVRock 2019. 9. 23. 02:25
반응형

Slack의 API 지원 페이지

Slack이나 텔레그램을 보면 외부 API를 이용해 다양한 외부 서비스를 연동하고 있습니다.

대부분은 목적 중심의 상황(트리거)이 발생했을때 Notification을 채팅 창으로 전송해주는 서비스 입니다.

회사에서 Chat을 주로 활용하도록 하고 있다보니, Synology에서도 이런 기능이 제공 되지 않을까?라는 아주 막연한 기대를 갖고 관련 자료를 찾다 보니, 가능성이 보였습니다. 해당 포스팅은 막연한, 목적을 두고 차근차근 접근하는 과정을 정리한 내용이며, 비 개발자이기 때문에 차근차근 접근해보는 과정을 기록하였습니다.

 

본 포스팅은 비 전문가의 포스팅으로, 기초적인 사전 지식이 없이 목표에 맞추어 탐구하고 문제를 해결하는 것에 집중하는 것을 목표로 하고 있습니다. 야매이기 때문에 본래의 사전적 이해, 활용 방법이 다를 수 있는 점 참고해 주시고 봐 주시길 당부드립니다. 오류에 대한 지적은 감사합니다. 

 

1. 무엇을 하고 싶은가?

  • 서버가 장애시에 알림을 받고 싶다.
  • 외국인 직원과 대화가 힘들다...번역기, 번역기를 넣어 달라.

 

2. 제품 설명서 보기

기본적인 사양으로 Synology 사이트에서 제공하는 인터그레이션 관련한 내용은 알사람만 알법한 내용을 위주로 설명하였습니다. (저는 이해가 안되는 부분이 많군요.)

 

https://www.synology.com/ko-kr/knowledgebase/DSM/help/Chat/chat_integration

 

DiskStation Manager - Knowledge Base | Synology Inc.

 

www.synology.com

Webhook 기반으로 외부와 연동되는 서비스를 구현할 수 있다. 내용입니다.

 

3. 제품 설명서 더 자세히 보기

Webhook 기반 기능을 활용해 4개의 외부와 연동해 메시지를 보내거나 받는 등의 명령을 처리할 수 다고 합니다.

 

  • 들어오는 Webhook
    외부에서 메시지를 수신받을 수 있도록 하는 기능이라고 하네요.
  • 나가는 Webhook
    트리거가 되는 단어를 입력 시 POST 통신으로 URL을 호출한다고 하네요.
  • 슬래시 명령
    '나가는 Webhook'보다 좀 더 편리하게 /를 입력해 목록상에서 호출하고 실행할 수 있다고 하네요. 
    '나가는 Webhook'과 차이는 트리거 내용을 다른 사람이 볼 수 없다는 데 있다고 합니다.

  • 봇은 외부 소스에게 메시지를 보내고 게시해서 사용자 대신 응답할 수 있게끔 하는 거라고 하네요.
    봇은 dialogflow 에서 만들 수 있을 듯하네요.

(Chat의 오른쪽 상단의 '프로필'을 클릭하고 '통합'을 클릭하면, 기본적인 내용을 확인할 수 있습니다.)

 

4. 이해하고, 테스트 해보기

외부 입출력 관점에서 보자면, 기본적인 구조는 아래와 같아 보입니다.

 

 

그렇다면, Chat이 지원하는 Webhook의 기본 사양은 어떻게 되어있는지 자세히 들여보도록 하겠습니다.

 

[들어오는 Webhook]

기본적인 Webhook URL 정보는 복사해서 활용하기 쉽도록 제공합니다.

들어오는 Webhook

 

Webhook URL 실제 구현 TEST

브라우저의 URL 입력창에 아래와 같이 입력해 봅니다.

 

텍스트와 이미지 전송

http://도메인:5001/chat/webapi/entry.cgi?api=SYNO.Chat.External&method=incoming&version=2&token=토큰&payload={"text": "테스트입니다.",  "file_url": "https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_92x30dp.png"}

텍스트만 전송

http://도메인:5001/chat/webapi/entry.cgi?api=SYNO.Chat.External&method=incoming&version=2&token=토큰&payload={"text":테스트입니다."}

브라우저 본문에 아래와 같이 표시되면 전송 성공입니다.

{"success":true}

 

Chat 창에서 출력 결과 확인

출력 결과 확인

 

[나가는 Webhook]

나가는 Webhook은 외부에서 수용 가능한 서비스가 준비되어야 합니다. (서비스가 없다면, 개발해야 한다는 이야기지요..)

정상적으로 외부로 전송이 되는지 테스트해 볼 수 있는 https://webhook.site 서비스를 이용해서 확인합니다.

 

Webhook 테스트 URL 복사

서비스에 접속하면, Webhook이 수신받을 수 있는 URL이 생성됩니다. URL을 복사합니다.

https://webhook.site

 

나가는 Webhook 생성

트리거 단어(채팅창에다 입력 시 실행)와 위에서 복사한 URL을 붙여 넣고 확인해줍니다.

나가는 Webhook 생성 화면

채팅창에 트리거 단어 입력

해당 채널의 채팅창에 트리거 단어와 메시지를 함께 입력해 봅니다.

 

Webhook 테스트 사이트 확인

POST로 해당되는 메시지와 상세 내용을 확인할 수 있습니다.

특히 Form values 안에 token, text , username 등을 활용하면 디테일하게 더 활용할 수 있으리라 생각됩니다.

Webhook 테스트 사이트 결과 확인

 

Webhook 활용 방안

나가는 Webhook의 경우에는 Chat의 정보가 외부로 나가는 부분이고 이를 알기 위해서는 POST 통신에 대한 개념을 이해야 할 것으로 보여집니다. 위의 테스트 사이트에서 표기된 Form values 안에 token, text , username 등을 활용할 수 있으리라 생각되네요. 

API를 하나 만들어 POST 된 내용에 따라서 명령을 처리하는 방식으로 개발 할 수 있을 듯 합니다.

이를 테면 '/서버 상태확인'라는 명령어를 입력하면 개발을 통해 웹API가 '상태확인' 이라는 text를 인식하여 결과를 확인한뒤, '들어오는 webhook'을 '서버 상태 정상' 등과 같은 메시지를 chat에 전달해 주는 것이죠.

php에서 $_POST['text'], $_POST['username'] 등으로 key value를 가져올 수 있다고 하네요.

 

 

반응형