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