Slack 봇을 만드는 방법 Mendix | Mendix

메인 컨텐츠로 가기

Slack 봇을 만드는 방법 Mendix

Slack 봇을 만드는 방법 Mendix

안녕하세요 여러분, 환영합니다. 개발자 전도사로서 일하는 사람으로서 Mendix, 여기서 내 역할의 상당 부분은 다음을 모니터링하는 데 많은 시간을 할애하는 것입니다. Mendix 커뮤니티 슬랙 채널(여기를 클릭하세요!).

당연히 우리 작업 공간에는 몇 가지 놀라운 도구가 설치되어 있었는데, 이를 통해 Slack 봇을 만드는 데 정확히 무엇이 들어가고 이를 사용하여 수행할 수 있는지 생각하게 되었습니다. Mendix 홀로?

온라인에서 조사한 결과, 내가 찾은 모든 예는 매우 복잡했고 Java, Python 또는 Javascript에서 광범위한 코딩 기술이 필요했습니다. 그 경로로 진행할 수도 있었지만 저는 로우코드 방식으로 이 작업을 하기로 결심했습니다. 하지만 끈기 있게 노력한 것이 기쁩니다. 이제 저는 그것이 실제로 얼마나 쉬운지 모두에게 말할 수 있고 여러분도 다음을 사용하여 Slack 봇을 만들 수 있습니다. Mendix 그 외에는 아무것도 없습니다!

오늘은 무엇을 만들까요?

이 튜토리얼에서는 RESTful API를 사용하여 메시지를 보낼 수 있는 Slack 봇을 만들어 보겠습니다. 또한 채널 내의 이벤트에 구독되므로 봇은 채널에서 보낸 언급이나 특정 키워드에 답할 수 있습니다.

시작하기

시작하기 전에 Slack에 가입했고 Slack 작업 공간이 설정되어 있고 봇을 추가할 수 있는 채널이 있는지 확인하세요. 또한 Slack은 앱의 게시된 REST 서비스에 메시지를 게시하므로 개발 중에 로컬에서 앱을 테스트하려면 터널링 도구를 사용하여 로컬 호스트를 웹에 노출하는 것이 좋습니다(저는 다음을 사용합니다. 엔그록 이를 위해).

Slack에 봇 설정하기

시작하려면 다음으로 이동하세요. https://api.slack.com/apps?new_classic_app=1 를 클릭하고 "새 앱 만들기".

선택 "기스로부터"그리고 봇에 이름을 지정하세요. 새 봇을 만들어서 메시지 봇이라고 부르겠습니다. 앱을 개발하기 위해 만든 Slack 작업 공간을 선택하고 "를 클릭하세요.앱 생성".

앱이 생성되면 "OAuth 및 권한” 그리고 여기서 우리가 원하는 것은 봇에 대한 토큰입니다. 따라서 “작업 공간을 위한 OAuth 토큰” 클릭 “직장에 설치하세요” 이제 봇에 대한 범위를 추가해야 한다고 말할 것입니다. 페이지를 아래로 내려가면 "봇 토큰 범위”. 그게 우리에게 필요한 것이므로 “를 클릭하세요.OAuth 범위 추가”우리가 원하는 것은 바로 채팅:쓰기, 나에 대한 공개 채널 당신은 추가 할 수 있습니다 채팅:write.public.

이렇게 하면 봇이 실제로 채팅에 메시지를 게시할 수 있는 권한이 부여됩니다. 이제 무엇을 하려고 하는지에 따라 다른 범위를 추가해야 할 수도 있으므로 오류가 발생하면 이를 살펴보세요. 봇이 수행하도록 하려는 작업에 필요한 범위를 파악할 수 있어야 합니다.

이제 OAuth로 돌아가서 클릭하세요. “직장에 설치” 다시. 그런 다음 허용을 클릭하면 봇 토큰이 생성됩니다.

"와 같은 문구가 시작되면 봇 토큰임을 알 수 있습니다. xoxb- 귀하의 토큰 가치”.

일단 그걸 가지고 있으면, 채널 ID와 함께 그것을 사용하여 봇으로 채널에 메시지를 보낼 수 있습니다. 이를 위해 간단한 앱을 준비했고, 여기서 만들 것은 Slack의 API를 사용하여 봇으로 메시지를 보내는 방법을 여기에 추가하는 것입니다.

봇으로 메시지 보내기

이 빌드는 HTTP 메서드나 REST 호출(Java, JavaScript, Python 등)을 사용할 수 있는 대부분의 기존 프로그래밍 스택에서 작동합니다. 우편 집배원 앱 개발을 시작하기 전에. 우리가 해야 할 일은 Slack으로 앱에 대한 인증 시스템을 만드는 것뿐입니다. 그런 다음 메시지를 게시하기 위한 API를 통합해야 하고, Slack이 채널의 이벤트에 대한 메시지를 게시할 수 있는 REST 엔드포인트를 게시해야 합니다.

이벤트는 메시지, 반응, 채널에서의 언급 등 다양할 수 있으며 Slack 이벤트는 웹 후크와 유사하다고 생각하시면 됩니다.

서비스에 메시지를 보내려면 서비스의 엔드포인트를 제공해야 합니다. 이 경우에는 다음과 같습니다. https://slack.com/api/chat.postMessage

엔드포인트는 HTTP 메서드의 유형을 POST로 설명하므로 여기서도 POST를 사용해야 합니다.

또한 헤더도 필요합니다. 헤더를 추가하고 싶습니다. 컨텐츠 타입 그리고 이게 필요해요 '애플리케이션/json'. 다음으로 우리는 또 다른 헤더를 필요로 합니다. 권한 부여, 그리고 여기가 우리가 이전에 얻은 봇 토큰을 사용할 수 있는 곳입니다. 이 헤더의 값은 '교군꾼', 그 다음에 공간 ' ', 그리고 당신의 토큰 가치.

이제 메시지를 보내려면 POST HTTP 메서드이므로 JSON 본문을 제공해야 합니다. 사용할 단순화된 구조는 다음과 같습니다. 전체 API 문서 페이지를 확인할 수 있습니다. 여기에서 확인하세요..

{
  “channel”:”{1}”,
  “text”:”{2}”
}

Studio Pro에서는 다음이 필요할 수 있습니다. 추가 중괄호 {를 제공합니다. 요청 전.

이 요청은 가장 기본적인 것만 남았습니다. 문자열인 채널과 역시 문자열인 텍스트만 있습니다. 첨부 파일, 아이콘 및 기타 멋진 것들과 같이 사용할 수 있는 다른 옵션이 많이 있습니다. 따라서 문서 페이지를 확인하고 놀아보세요. 여기서 플레이스 홀더를 사용하여 표준을 사용하여 마이크로플로에서 요청으로 값을 전달합니다. Mendix REST 동작.

그러면 응답이 돌아오지만 여기서는 처리하지 않습니다. 대신 앱을 실행하여 테스트해 보세요. 성공하면 이 마이크로플로를 호출할 때 채널에 메시지가 표시됩니다.

메시지 전송을 테스트하려면 Slack 채널의 URL에서 얻을 수 있는 채널 ID가 필요합니다(채널 URL의 마지막 '/' 뒤에 있는 마지막 값). 그런 다음 봇으로 첫 번째 메시지를 보낼 수 있습니다! 먼저 봇이 채널에 추가되었는지 확인해야 합니다. 채널에서 봇 @멘션을 사용하여 봇을 추가하기만 하면 됩니다.

이제 귀하의 메시지가 귀하에게서 전송되어야 합니다. Mendix 이 마이크로플로를 실행할 때마다 앱을 Slack에 업로드하고 봇이 보낸 것처럼 채널에 나타납니다.

채널의 이벤트에 앱을 구독하세요

Slack에서 메시지를 게시하려면 Mendix 앱에서 Slack 봇 설정에서 이벤트를 활성화해야 합니다. 이 기능을 활성화하면 Slack이 앱의 게시된 REST 서비스에 업데이트를 게시합니다. 이를 사용하여 사용자가 채널을 사용할 때 트리거할 수 있는 다양한 유형의 이벤트를 처리하는 로직을 구현할 수 있습니다. 특정 이벤트를 구독하여 특정 엔드포인트를 설정하거나 모든 업데이트를 동일한 엔드포인트에 게시하고 각 고유 이벤트를 처리하기 위한 고유한 로직을 빌드할 수 있습니다. 예를 들어, 누군가가 메시지에 반응하거나 새 사용자가 채널에 가입할 때 봇이 무언가를 하도록 하는 것이 좋습니다. 내 빌드의 경우 이벤트 엔드포인트를 하나만 추가한 다음 내 게시된 REST 서비스에서 호출하는 마이크로플로에서 모든 로직을 처리했습니다. Mendix 앱.

이렇게 하려면 api.slack.com의 "이벤트 구독|"으로 이동하세요.

"이벤트 사용"을 켜기로 바꾸면 요청 URL 필드가 표시됩니다. 여기서 앞서 언급한 도구를 사용하여 터널을 열어야 합니다. 도구 NGROK는 로컬 호스트에서 보안 연결을 열고 안전한 방식으로 사용 가능한 엔드포인트로 웹에 노출합니다.

파일 탐색기를 열고 다운로드한 ngrok.exe 파일을 찾습니다. 이제 터미널이나 명령 프롬프트에서 이 exe 파일을 엽니다. exe 파일에서 열기를 클릭하여 터미널에서 열 수도 있습니다. 그런 다음 "ngrok http {당신의 MENDIX 앱 포트 번호}”, 나는 일반적으로 기본 포트로 8080을 사용합니다. Mendix 앱 구성이지만 예를 들어 "와 같이 선호하는 포트 번호를 사용하여 작동합니다.응록 http 5000”는 당신의 한 작동할 것입니다 Mendix 앱은 포트 5000에서도 실행되도록 설정되어 있습니다.

Enter 키를 누르면 ngrok이 엔드포인트를 열어 다음과 같은 내용을 보여줍니다.

이렇게 하면 HTTP와 HTTPS 엔드포인트가 모두 개방되고, Slack에서는 HTTPS를 사용해야 합니다.

이벤트 처리 Mendix

이제 Slack에서 사용할 수 있는 라이브 엔드포인트가 있지만 게시된 REST 서비스를 설정한 후 다시 돌아와야 합니다.

Studio Pro로 다시 전환하여 프로젝트 탐색기에서 마우스 오른쪽 버튼을 클릭하고 "기타" 아래에 게시된 REST 서비스를 추가하도록 선택합니다.

서비스 이름을 지정하세요. 저는 "SlackBot"이라고 이름을 지정하고 확인을 클릭합니다.

다음으로 "SlackEvent"라는 서비스에 리소스를 추가하고 확인을 클릭합니다.

그런 다음 서비스에 작업을 추가합니다. 여기서 API의 메서드(GET, POST, PUT, PATCH, DELETE)를 정의하고, 고유한 작업 경로를 구성하고, 엔드포인트의 논리를 처리하기 위한 마이크로흐름을 구성합니다.

작업 경로를 설정할 필요는 없습니다. 기본적으로 엔드포인트는 다음과 같습니다.

https://{LocalHost}/rest/{Service_Name}/{Version_Number}/{Resource_Name}/{Operation_Path}

다음은 작업을 설정하는 방법의 예입니다.

이제 요청을 수용할 수 있는 유효한 URL이 있지만 모든 이벤트 유형을 처리하기 전에 해야 할 일이 더 있습니다... 인증.

인증

처음에는 약간 혼란스러웠지만, 사실 꽤 쉽습니다. Slack에 이벤트 엔드포인트를 추가하면, 그들의 API는 여기에 표시된 것처럼 요청 본문에 "challenge" 값이 있는 엔드포인트로 챌린지를 보냅니다.

{
  "token":"your_token",
  "challenge":"your_ChallangeValue",
  "type":"url_verification"
}

당신이 해야 할 일은 처음으로 호출될 때 흐름 시작 시 이 챌린지 문자열을 그들에게 다시 보내는 것뿐입니다.

Slack에서 이벤트에 대한 RequestURL 설정하기

모든 것이 정확하다면 Slack Events Subscriptions 페이지에 추가할 수 있는 URL을 공식화할 수 있습니다. URL은 NGROK https 엔드포인트의 조합이어야 하며 나머지는 게시된 서비스에 대한 서비스 엔드포인트가 됩니다.

같은 것 : https://{NGROK_HTTPS_URL}/{Your_Published_Rest_Operation}

결국 내 것은 이렇게 생겼습니다.

https://ff98-86-181-134-55.ngrok.io/rest/slackbot/v1/SlackEvent/Event

NGROK는 개발 전용이므로 2시간마다 시간 초과가 발생합니다. 그 후에는 로컬 호스트에 대한 새 URL을 생성해야 합니다. 프로덕션에 들어가면 필요하지 않으며 클라우드 URL을 사용하면 됩니다.

이벤트 페이지에서 이 값을 요청 URL로 설정할 수 있습니다. 성공하면 Slack에서 엔드포인트를 확인했다고 알려줍니다.

문제가 발생하면 정상적으로 마이크로플로우를 디버깅하여 설정할 수 있습니다. REST 소비REST 게시 로그 수준을 통해 콘솔을 통해 무엇이 손상되었는지에 대한 더 자세한 통찰력을 얻는 데 도움이 될 수도 있습니다.

봇의 동작을 사용자 지정하기 전에 처리해야 할 마지막 작업은 봇이 자기 자신을 인식하는지 확인하는 것입니다. 그렇지 않으면 무한 루프가 생성될 수 있습니다. 채널에서 봇의 자체 활동을 필터링하지 않으면 봇이 그룹에 메시지를 게시할 때마다 봇이 스스로를 트리거할 수 있습니다.

이를 위해 Slack이 앱의 REST 서비스를 제공하는 요청 페이로드를 가져와야 합니다. 페이로드는 다음과 같습니다.

{
 "token":"dKyT4vmA1NJLt6vq8o1WurMd",
 "team_id":"T02LUP42T19",
 "api_app_id":"A02MJE1059N",
 "event":{
   "bot_id":"B02NK4L1XHN",
   "type":"message",
   "text":"Hello from Mendix",
   "user":"U02MEPHFY2K",
   "ts":"1637273612.003700",
   "team":"T02LUP42T19",
   "bot_profile":{
    "id":"B02NK4L1XHN",
    "deleted":false,
    "name":"message bot",
    "updated":1637253238,
    "app_id":"A02MEP8D37Z",
    "icons":{
     "image_36":"https://a.slack-edge.com/80588/img/plugins/app/bot_36.png",
     "image_48":"https://a.slack-edge.com/80588/img/plugins/app/bot_48.png",
     "image_72":"https://a.slack-edge.com/80588/img/plugins/app/service_72.png"
       },
      "team_id":"T02LUP42T19"
     },
    "channel":"C02LRPR0XGD",
    "event_ts":"1637273612.003700",
    "channel_type":"channel"
   },
   "type":"event_callback",
   "event_id":"Ev02MGFCNHP1",
   "event_time":1637273612,
   "authorizations":[
    {
     "enterprise_id":null,
     "team_id":"T02LUP42T19",
     "user_id":"U02LUPJ8T4J",
     "is_bot":true,
     "is_enterprise_install":false
    }
  ],
  "is_ext_shared_channel":false,
  "event_context":"4-eyJldCI6Im1lc3NhZ2UiLCJ0aWQiOiJUMDJMVVA0MlQxOSIsImFpZCI6IkEwMk1KRTEwNTlOIiwiY2lkIjoiQzAyTFJQUjBYR0QifQ"
}

JSON 구조를 만들고 JSON을 붙여넣은 다음 R을 클릭합니다.신선하다 구조 섹션에서 확인을 클릭하여 창을 닫을 수 있습니다.

다음으로 가져오기 매핑을 만들고 스키마 소스에서 만든 JSON 구조를 선택합니다. 원하는 모든 세부 정보를 얻으려면 모든 필드가 선택되었는지 확인하거나 필요한 것을 선택합니다.

확인을 클릭하여 창을 닫은 다음 매핑 편집기의 왼쪽 상단에서 "자동 매핑"을 선택합니다.

이제 다음과 같이 표시되어야 합니다.

마지막으로 이 매핑을 사용하여 HTTPRequest를 가져오고 메시지를 게시하는 사용자가 봇인지 확인하는 검사를 추가합니다. 봇인 경우 아무 작업도 하지 않고 빈 값을 반환합니다.

이제 원하는 방식으로 모든 이벤트를 처리할 수 있습니다. 이에 대한 나의 빠른 접근 방식은 다음과 같습니다. 포함Find 메시지 내용을 확인하기 위한 키워드입니다. 이 방법을 사용하면 원하는 만큼 많은 배타적 분할을 추가할 수 있으며, 이렇게 하면 마이크로플로에서 대화 트리를 만들 수 있습니다. 간단한 작업 방식입니다(하지만 더 나아가 각 응답을 데이터베이스에 저장하면 런타임에 이 설정을 구성할 수 있습니다). 이 응답을 보내려면 테스트 메시지를 보내는 데 이전에 사용한 postMessage API를 재사용하기만 하면 됩니다.

내 예는 다음과 같습니다.

슬래시 명령

슬래시 명령어가 뭐예요? 간단히 말해서 웹훅과 비슷해요. 사용자가 특정 키워드(Slack에서 설정)를 입력할 때 슬래시 '/'를 앞에 붙이면 Slack은 업데이트를 고유한 엔드포인트로 푸시합니다.

이벤트와 슬래시 명령의 가장 큰 차이점은 바로 이겁니다. 게시된 REST 서비스에 새로운 메서드를 추가하기만 하면 됩니다. 제 예에서는 간단하게 유지했습니다. 사용자가 /ping을 입력하면 봇이 pong으로 응답합니다. "Hello world"라고 약간 표현한 건 알지만, 저는 주로 여기서 놀았습니다.

새로운 엔드포인트를 추가하고, 작업 경로에 Ping을 입력합니다. 이것 역시 POST 메서드입니다.

그런 다음 논리를 처리하는 마이크로흐름에서 응답의 Content 속성을 'Pong'으로 설정하기만 하면 됩니다.

마지막으로 Slack에서 왼쪽 메뉴의 Slash 명령으로 이동하여 "새 명령 만들기"를 클릭합니다.

귀하의 종단점은 다시 URL의 조합이 됩니다. 엔그록 그리고 HTTP 메서드의 URL.

모두 완료

축하합니다. 끝까지 왔습니다. 이제 앱을 테스트하고 봇을 알아볼 수 있습니다! 잊지 마세요. 봇을 Slack 채널에 추가해야 이벤트 엔드포인트로 업데이트가 전송됩니다. Slack에서 @YourBotName을 보내면 봇을 추가해 달라고 요청할 것입니다. Slack의 API에는 사용할 수 있는 다른 기능이 있으므로 더 구체적인 내용이 필요하면 알려주세요.

가기 전에 내 봇과 나눈 간단한 대화를 소개합니다.

행복한 코딩!

언어를 선택하세요