前提
LINE-SDK-GOでLINEBotを作ろうとしてherokuで動かそうとしてるのですが、上手く行きません。原因はなんとなくわかっていて、func main()
のhttp.ListenAndServer
の部分だと思っています。
これを直せば動かせると思うのですが、herokuで動かすにはどうすればいいのか分かりません。
教えて頂けると幸いです。お願い致します。
実現したいこと
herokuで動かせるようにしたい
返されるステータスコード・エラー
503 2022-07-05T11:48:40.000000+00:00 app[api]: Build started by user ***@gmail.com 2022-07-05T11:48:52.727382+00:00 app[api]: Deploy 09f8b8c4 by user ***@gmail.com 2022-07-05T11:48:52.727382+00:00 app[api]: Release v18 created by user ***@gmail.com 2022-07-05T11:48:53.322318+00:00 heroku[web.1]: State changed from crashed to starting 2022-07-05T11:48:53.571027+00:00 heroku[web.1]: Starting process with command `go run main.go` 2022-07-05T11:48:55.151186+00:00 app[web.1]: bash: go: command not found 2022-07-05T11:48:55.259468+00:00 heroku[web.1]: Process exited with status 127 2022-07-05T11:48:55.388132+00:00 heroku[web.1]: State changed from starting to crashed 2022-07-05T11:49:20.000000+00:00 app[api]: Build succeeded 2022-07-05T11:50:04.649640+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=POST path="/callback" host=line1bots.herokuapp.com request_id=7352fd4a-7a7b-426c-9f87-fc0f3a4db01d fwd="147.92.150.193" dyno= connect= service= status=503 bytes= protocol=https
該当のソースコード
go
1package main 2 3import ( 4 "fmt" 5 "log" 6 "os" 7 "net/http" 8 9 "github.com/line/line-bot-sdk-go/linebot" 10) 11 12func main() { 13 http.HandleFunc("/callback", lineHandle) 14 http.HandleFunc("/", helloHandle) 15 16 port := os.Getenv("PORT") 17 addr := fmt.Sprintf(":%s", port) 18 http.ListenAndServe(addr, nil) 19} 20 21func helloHandle(w http.ResponseWriter, r *http.Request) { 22 fmt.Fprint(w, "HELLO!") 23} 24 25func lineHandle(w http.ResponseWriter, r *http.Request) { 26 bot, err := linebot.New( 27 "CHANNEL_SECRET", 28 "TOKEN", 29 ) 30 if err != nil { 31 log.Fatal(err) 32 } 33 events, err := bot.ParseRequest(r) 34 if err != nil { 35 if err == linebot.ErrInvalidSignature { 36 w.WriteHeader(400) 37 } else { 38 w.WriteHeader(500) 39 } 40 return 41 } 42 for _, event := range events { 43 if event.Type == linebot.EventTypeMessage { 44 switch message := event.Message.(type) { 45 case *linebot.TextMessage: 46 if _, err = bot.ReplyMessage(event.ReplyToken, linebot.NewTextMessage(message.Text)).Do(); err != nil { 47 log.Print(err) 48 } 49 case *linebot.StickerMessage: 50 replyMessage := fmt.Sprintf( 51 "sticker id is %s, stickerResourceType is %s", message.StickerID, message.StickerResourceType) 52 if _, err = bot.ReplyMessage(event.ReplyToken, linebot.NewTextMessage(replyMessage)).Do(); err != nil { 53 log.Print(err) 54 } 55 } 56 } 57 } 58}
試したこと
いろいろな人が載せてるソースコードでやってるのですが、できません。
補足情報(FW/ツールのバージョンなど)
Go: 1.18
LINE=SDK=BOT: v7
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/07/06 07:27
2022/07/06 12:32
2022/07/06 12:38
2022/07/21 10:56
2022/07/22 00:47