최근 유행하는 ojichat를 slackbot으로 만들었다.

4388 단어 5슬랙Webhookojichat

최근 유행하는 ojichat을 slackbot으로 한 이야기



최근 쉘 예보의 맹위에 의해 TL이 아저씨 투성이가 되어 버렸다.
우리 slack에도 아저씨로 활기차고 싶다~라고 생각했기 때문에 만들어 보았다.

greymd/ojichat
htps : // 기주 b. 코 m / g yymd / 할아버지 t

처리 흐름


  • OutGoing WebHooks를 사용하여 특정 게시물을 가져옵니다.
  • Slack 측에서 특정 서버로 요청을 보냅니다.
  • 서버에서 받고 이름을 꺼낸다!
  • 검색된 이름을 IncomingWebHooks에 지정된 URL에 JSON 형식으로 요청 보내기!
  • 아저씨 말한다!

  • Outgoing WebHooks



    지정한 문자의 투고가 있었을 때, Slack로부터 외부의 서버에 POST 보내는 녀석.
    각각의 설정 항목이 있으므로 넣어 간다.
    Channel    #general
    TriggerWord(s) 오지산
    URL (s)       http://X.X.X.X:8080

    이번에는 이 정도 밖에 설정 넣지 않습니다.
    URL(s)에는 요청을 받고 싶은 서버의 ip 주소 지정해 주세요.

    이제 ojisan 키워드가 게시되면 위 URL에 POST됩니다.

    Incoming WebHooks



    외부에서 Slack에 메시지를 보내는 사람. 이제 삼촌 메시지를 보냅니다.
    Outgoing WebHooks와 마찬가지로 설정 항목을 넣습니다.
    Post to Channel#general
    Customize Name 아저씨

    그 밖에도 아이콘 등도 바꿀 수 있습니다.
    항목의 Webhook URL에 있는 URL에 JSON 형식으로 요청을 보내
    Slack의 지정된 채널로 메시지를 보낼 수 있습니다.

    수신 서버



    최근 Go만 쓰고 있기 때문에, Go제 Web 어플리케이션 프레임워크의 gin/gonic 사용했습니다.
    htps : // 기주 b. 코 m / 긴 - 고니 c / 긴

    이미 여기까지 오면 거의 완성이라고 생각하고,
    우키 우키에서받은 데이터는 이것입니다 ...
    token=vFlRfdwGp9Nk5koVtSrbMxxx&
    team_id=T63EC9xxx&
    team_domain=xxx-network-club&
    service_id=652176051511&
    channel_id=CJSJ7TXXX&
    channel_name=general&
    timestamp=1559196598.002400&
    user_id=U643K5XXX&
    user_name=minatoo&
    text=ojisan&
    trigger_word=ojisan"
    

    무슨 형식이나 넨이 ....
    조사하면application/x-www-form-urlencoded: キーと値は、その間に '=' がある形でキーと値の組になり、 '&' で区切られてエンコードされます。 htps : //로 ゔぇぺぺr. 모잖아. 오 rg / 자 / 도 cs / 우 b

    라는 것으로 JSON 형식으로 변환하는 처리를 가키 같은 코드로 구현했다.
    htps : // 기주 b. 코 m/m tky/곤ゔ2J/bぉb/마s r/pkg/곤 v. 고

    이제 자유롭게 데이터를 다룰 수 있습니다 ... !!

    수신 서버 코드


    package main
    
    import (
        "fmt"
        "os/exec"
        "encoding/json"
    
        "github.com/gin-gonic/gin"
        "github.com/mntky/convA2J/pkg"
    )
    
    
    type ConvData struct {
        Token           string
        Team_id         string
        Team_domain     string
        Service_id      string
        Channel_id      string
        Channel_name    string
        Timestamp       string
        User_id         string
        User_name       string
    }
    
    func main() {
        g := gin.Default()
        g.POST("/", func(c *gin.Context) {
                buf := make([]byte, 2048)
                n, _ := c.Request.Body.Read(buf)
                b := string(buf[0:n])
    
                decode(b)
        })
        g.Run(":8080")
    }
    
    func decode(data string) {
        var convdata *ConvData = &ConvData{}
        resp := conv.Convert(data)
        err := json.Unmarshal([]byte(resp), convdata)
        if err != nil {
                fmt.Println(err)
        }
    
        fmt.Println(convdata.User_name)
        out, err := exec.Command("sh", "./send.sh", convdata.User_name).Output()
        if err != nil {
            fmt.Println(err)
        }
        fmt.Println(string(out))
    }
    

    꺼낸 이름은 exec에서 send.sh에 인수 전달하여 실행시킵니다.
    curl incomingwebhookの指定URL -X POST -H "Content-Type: application/json" -d '{"username":"おぢさん", "text":"'$(ojichat $1)'"}'
    

    요약



    이것으로 완성입니다.
    마지막으로 움직인 예를 ...


    변함없는 키모로 피로가 날아갔습니다.
    덧붙여 자신 이외 아무도 ojisan 쳐주지 않기 때문에 두 번 다시 차례가 없을 것 같습니다.

    꼭 여러분의 채널에도 어떻습니까?

    좋은 웹페이지 즐겨찾기