Golang의 Mattermost 챗봇 사용

3688 단어 gochatbotmattermost
Slack을 사용하는 모든 사람들이 Mattermost를 들은 적이 있을 뿐만 아니라, 심지어는 이를 내부/업무 메시지 전달 플랫폼으로 이 플랫폼으로 옮기려고 노력할 수도 있다.만약 네가 그들 중의 한 사람이 아니라면, 너는 잠시 후에 나에게 감사할 수 있다.그래, Mattermost는 시작된 메시지 플랫폼이야. 나는 네가 좋아하는 슬랙 앱을 상당히 잘 대체했다고 말할 수 있어.개인 채널과 공공 채널, 여러 개의 실행 영역, 언급 기능, 그리고 구독 기반 메시지 프로그램에서 놓칠 수 있는 것, 즉 관리 패널이 있습니다.너는 그곳의 뿌리이기 때문에 거의 모든 일을 할 수 있다.제가 말씀드렸듯이 기업판이 있나요?그것은 확실히 MIT 허가증을 가진 소스 플랫폼이다.그러나 우리가 알고 있는 바와 같이 모든 IT 부서나 조직이 코드를 깊이 연구하고 자신의 목적을 위해 필요한 기능을 추가할 수 있는 충분한'극객'이 있는 것은 아니다. 이것이 바로 기업 지원이 존재하는 이유다.
많은 다른 메시지 전달 응용 프로그램과 마찬가지로 Mattermost는 로봇 생성을 지원한다.웹소켓 클라이언트를 이용하여 메시지 전달 이벤트를 감청합니다.언어 귀속도python과golang 같은 프로그래밍 언어에 적용되지만 이번에는 golang을 언어로 선택했습니다.
Mattermost는 채널을 사용하여 메시지를 교환합니다.그래서 mattermost에서 발생하는 모든 대화는 통로를 통해 실행된다. 직접 통로, 개인 통로든 공공 통로든 소식이다.코드와 어떻게 작동하는지 설명해 드릴게요.이쪽으로 오세요.완전한 원본 코드에 대해 나는 실현의 중요한 부분만 설명하고 싶다. 그래서 우리는 시작한다...
우선, 분명히 로봇이 가장 중요한 기능을 방문하는 클라이언트 대상이다(골롱에서 이를'대상'이라고 부르는 것이 언어 설계 원칙에 부합되는지 확실하지 않다. 어쨌든 나는 너에게 힌트를 하나 주겠다. 그것은 하나의 구조일 뿐이다!)세그먼트는 다음과 같습니다.
client = model.NewAPIv4Client(URL)
그리고 우리는 방문 영패를 설정해야 한다. 우리는 영패를 사용하여 신분 검증을 해야 한다. 왜냐하면 우리는 사용자 이름과 비밀번호가 아니라'bot'계정을 사용하기 때문이지,bot의 실제 사용자 계정이 되기 때문이다.나는 네가 무슨 생각을 하는지 안다. mattermost에는 두 가지 유형의 사용자가 있다. '실제' 사용자와 로봇진정한'사용자'는 당신일 수도 있고, 이 순간에 숨을 쉬는 누구일 수도 있다. 그들은 mattermost를 사용한다. 그것은 인간이다.그럼 로봇은...좋아요.로봇 프로그램.Bot은 로그인할 수 없는 특수한 유형의 사용자이므로 암호가 없습니다.그래서 로봇이 mattermost에 들어가는 유일한 방법은 영패를 사용하는 것이라고 놀라지 않을 것 같다.이 행 코드는 다음 작업을 수행할 수 있습니다.
client.SetToken(BOT_TOKEN_SECRET)
다음 중요한 일은 채팅 이벤트를 감청하기 위해 웹소켓 클라이언트를 만드는 것입니다.
webSocketClient, err := model.NewWebSocketClient4("ws://localhost:8065", client.AuthToken)
if err != nil {
    println("We failed to connect to the web socket")
    PrintError(err)
}
우리는 이전 단계에서 설정한 클라이언트 대상에서 웹소켓 URL과 신분 검증 영패인 SetToken 함수를 전달해야 한다.오류가 발생하면 이 코드는 오류 대상을 되돌려줍니다. 그 중 오류는mattermost 모델의 한 종류입니다.나타나다더 잘 알 수 있도록, 모델.AppError에는 오류 id, 메시지, 세부 정보, http 상태 코드 등 몇 가지 유용한 속성이 있습니다.웹소켓 클라이언트를 만든 후 이벤트를 탐지하는 것을 잊지 마십시오.
webSocketClient.Listen()
이 말은 틀림없이 자기 해석 코드이기 때문에 우리는 우리의 여정의 핵심인 웹소켓 이벤트에 응답하는 것을 더욱 이해하게 된다.
go func() {
    for {
        select {
        case resp := <-webSocketClient.EventChannel:
            HandleWebSocketResponse(resp)
        }
    }
}()
웹소켓의 채널 가치를 포착하기 위한 무한한 과정이 시작되었는데 이 주제에서 가장 재미있는 부분은 바로 전송된 채팅에 응답하는 것이다.다음은 찾으려는 세그먼트입니다.
if post.ParentId == "" {
    if matched, _ := regexp.MatchString(`(?:^|\W)leave day(?:$|\W)`, post.Message); matched {
        SendMsgToChannel(dm.Id, "You have 16 leave days left.", post.Id)
        return
    } else {
        SendMsgToChannel(dm.Id, "I did not understand you!", post.Id)
    }
} else {
    form := url.Values{}
    form.Add("post_root", post.ParentId)
    form.Add("user_mm_id", post.UserId)
    form.Add("comment", post.Message)
    endpoint := "timesheet/broadcast_task_comment_except_user"
    response, _ := http.PostForm(API_URL+endpoint, form)
    defer response.Body.Close()
}
이런 상황에서 내가 직장에서 사용하는 것처럼 내 로봇은 채팅에 대한 회답과 포스터를 사용하는 새로운 채팅을 구분할 수 있다.Parent ID 변수내가 내게 준 로봇 프로그래밍은 사용자(직원)에게 현재 몇 년의 휴가가 있는지 알려주고 우리 내부 시스템의 잘못된 토론 라인에서 정보를 방송한다.보시다시피 완성된 코드가 내부 개인 저장소로 이동했기 때문에 일부 코드는 위조 코드입니다.그럼에도 불구하고, 이 모든 것들은 API 클라이언트를 시작하는 것부터 채팅 이벤트에 응답하는 로봇을 만드는 방법을 알려줄 것이다.이 예는 여전히 규칙을 바탕으로 하는 로봇 메커니즘을 사용한다. 물론 너는 더욱 선진적인 기술, 예를 들어 기계 학습을 사용할 수 있다. 이것은 사실상 너의 수요에 달려 있다.그 전에 해커가 즐거우시길 바랍니다!안녕히 가세요.

좋은 웹페이지 즐겨찾기