読者です 読者をやめる 読者になる 読者になる

GoのLINE BOT APIライブラリを作った

先日、LINE BOT API公開されたので、この波に乗らねば、というわけでいろいろ遊んでいます。最近はGoが手に馴染んでいるのでGoでbotを書いているのですが、皆さんもご存知の通り、JSONAPIをGoで扱うのはなかなか辛いものがあるので、ライブラリにしてみました。

github.com

こんな感じでecho botを書けます。まだテキスト部分しか実装してないので、これから画像などは実装していきます。 herokuで動かすことを想定していますので、お試しの際はLINE BOT をとりあえずタダで Heroku で動かす - Qiitaあたりを参考にデプロイしてみてください。

LINE BOT APIのアカウントの取得方法やcallbackが来ない!といったトラブルシュートは他にもいろいろ情報あがってますので、そちらでどうぞ。

package main

import (
    "fmt"
    "log"
    "net/http"
    "os"

    line "github.com/stanaka/line-bot-api"
)

func main() {
    http.HandleFunc("/callback", handler)
    port := os.Getenv("PORT")
    if port == "" {
        port = "8080"
    }
    addr := fmt.Sprintf(":%s", port)
    http.ListenAndServe(addr, nil)
}

func handler(w http.ResponseWriter, r *http.Request) {
    api := line.New(
        os.Getenv("LINE_CHANNEL_ID"),
        os.Getenv("LINE_CHANNEL_SECRET"),
        os.Getenv("LINE_MID"),
    )
    err := api.SetProxy(os.Getenv("PROXY_URL"))
    if err != nil {
        log.Println(err)
    }
    msg, err := api.DecodeMessage(r.Body)
    if err != nil {
        log.Println(err)
    }
    for _, result := range msg.Results {
        from := result.Content.From
        text := result.Content.Text
        err := api.SendMessage([]string{from}, text)
        if err != nil {
            log.Println(err)
        }
    }
    fmt.Fprintf(w, "OK")
}