Golang에서 Slack에 이미지 게시

8663 단어 5슬랙slackbotbot

Golang에서 Slack API를 사용하여 이미지 게시



Overview



golang을 사용하여 이미지 파일을 슬랙에 게시합니다.
slack api를 사용하지만 텍스트를 게시하는 것과는 약간 다른 준비가 필요하기 때문에 이미지 게시까지의 절차를 정리했습니다.

Contents


  • 사전 준비
  • 이미지를 게시하는 코드
  • 텍스트를 게시하는 코드
  • 주의사항
  • 참조 사이트

  • 사전 준비



    게시에 필요한 권한 정보



    slack에 이미지를 게시하려면 files.upload 범위가있는 api token이 필요합니다.
    *files.upload의 경우 여기



    상기를 만족하는 스코프는
    1. bot
    2. files:write:user

    의 2 종류가 있으므로, 이번은 bot 스코프를 이용합니다.
    참고로 files : write : user의 범위를 사용하면 slack에 대한 이미지 게시자가 토큰 작성자가됩니다.
    작성자에 의한 투고와 api에 의한 투고의 구별이 없어져 버리기 때문에, bot 스코프에 의한 투고를 추천합니다.

    slack api token 얻기



    Slack API | Slack로 이동하여 Your Apps에서 bot를 생성하십시오.
    생성이 완료되면 다음 Bot User OAuth Access Token에서 bot 권한을 가진 api token을 얻을 수 있습니다.
    이 토큰을 사용하여 slack에 이미지를 게시합니다.



    이미지를 게시하는 코드



    취득한 bot 스코프를 가지는 api token 과, 이미지를 투고하는 채널명을 설정합니다.
    실제 환경에서 작동하는 경우 환경 변수로 설정 한 다음 os.Getenv ()를 통해 api token을 수신하십시오.
    package main
    
    import (
        "os"
    
        "github.com/nlopes/slack"
    )
    
    var (
        slackAPIToken = "<先ほど取得した, bot スコープを持つ api token>"
        slackChannel  = "<画像を投稿するチャンネル名>"
    )
    
    
    func main() {
    
        if err := postImage(slackAPIToken, slackChannel); err != nil {
            panic(err)
        }
    
    }
    
    func postImage(slackAPIToken, slackChannel string) error {
    
        file, err := os.Open("<投稿する画像へのパス>")
        if err != nil {
            return err
        }
    
        api := slack.New(slackAPIToken)
    
        _, err = api.UploadFile(
            slack.FileUploadParameters{
                Reader:   file,
                Filename: "upload file name",
                Channels: []string{slackChannel},
            })
    
        return err
    }
    

    위의 코드를 호출하면 변수 slackChannel에 지정된 slack channel에 이미지가 게시됩니다.

    텍스트를 게시하는 경우



    bot 범위에는 이미지를 게시 할 수있는 권한 (chat.postMessage)도 있습니다.
    따라서 이전에 설정한 환경에서 텍스트를 게시 할 수 있습니다.



    텍스트를 게시하는 코드


    package main
    
    import (
        "os"
    
        "github.com/nlopes/slack"
    )
    
    var (
        slackAPIToken = "<bot スコープを持つ api token>"
        slackChannel  = "<画像を投稿するチャンネル名>"
    )
    
    func main() {
    
        if err := postText(slackAPIToken, slackChannel); err != nil {
            panic(err)
        }
    
    }
    
    func postText(slackAPIToken, slackChannel string) error {
    
        text := "This is test."
    
        api := slack.New(slackAPIToken)
    
        _, _, err := api.PostMessage(
            slackChannel,
            slack.MsgOptionText(text, false))
    
        return err
    }
    

    주의사항



    이번 slakc api에서는,
  • api token 작성자의 게시물
  • api token을 이용한 게시물

  • 두 가지를 구별하기 위해 bot 권한을 사용했습니다.

    그러나 지금까지 보았듯이,
    “이미지를 업로드할 수 있는 권한을 주면 텍스트를 올릴 수 있게 되었다”
    의도하지 않은 권한 부여가 발생하기 때문에 bot 범위의 남용에는주의하십시오.

    참조 사이트


  • Slack API
  • 좋은 웹페이지 즐겨찾기