Go 경력 0일이지만 Go/beego에서 SDK 사용하지 않고 LINEBot 만들어 보자
17907 단어 5LINEmessagingAPIlinebotbeego
소개
안녕하세요, 이번에는 Go의 입문에서 LINEBot을 만들고 싶습니다.
Go에게는 이것! 가 되는 웹 프레임워크는 존재하지 않는 것 같습니다만, 필자의 얕은 조사에 의하면 Gin이라고 하는 프레임워크가 인기가 있는 것 같습니다.
또, 같은 얕은 조사에 의해 beego라고 하는 Web 프레임워크도 비교적 인기가 있다고 하는 것으로.
어느 쪽으로 할까 헤매었습니다만, 어쩐지 정보가 적은 beego쪽을 사용하기로 했습니다.
LINEBot의 기본 키인 대담한 반환 Bot을 만듭니다.
Go의 쓰는 방법으로 뭔가 이상한 부분이나 이쪽이 에엔 버리는 것이 있는 것이 있으면, 쌀란에서 살짝 가르쳐 주세요.
beego 공식
htps : // 베에고. 메/
이번 Go의 쓰는 방법은 이하의 기사를 참고로 노력합니다.
다른 언어 프로그래머가 golang의 기본을 누르기위한 요약
LINE Developers에 등록/채널 등록
↓여기에서 등록
ぇぺぺrs. 네. 비 · 자 /
다양한 현재의 상황과 다릅니다만 아래의 기사를 참고로 채널의 등록을 실시합니다
htps : // 이 m / n kjm / ms / 38808 bc97d6927837cd
Go 설치
저는 Mac 사용자이므로 아래에서 수행하는 설치 절차는 모두 Mac 사용자 전용입니다.
원래 Go가 설치되어 있지 않으므로 설치합니다.
$ brew install go
$ go version #これでversionが出ればインストールOKです
beego 설치
go get -u github.com/astaxie/beego
go get -u github.com/beego/bee
다음을 참고로 패스를 통과합니다.
Beego (Golang Framework) 사용법 메모
$ export GO15VENDOREXPERIMENT=1
$ export GOPATH=$HOME/go
$ export PATH=$PATH:$GOPATH/bin
$ export PATH=$PATH:$GOROOT/bin
$ source ~/.bashrc
beego 프로젝트 만들기
$ bee new linebot
다음과 같은 구성입니다.
linebot
├── conf
│ └── app.conf
├── controllers
│ └── default.go
├── main.go
├── models
├── routers
│ └── router.go
├── static
│ ├── css
│ ├── img
│ └── js
├── tests
│ └── default_test.go
└── views
└── index.tpl
아래에서 서버를 시작할 수 있습니다.
$ bee run
http://localhost-8080.com/
방문하여 다음 화면이 나오면 성공합니다.
라우팅
LINEBot에 새롭게 다음을 추가합니다.
router/router.gopackage routers
import (
"linebot/controllers"
"github.com/astaxie/beego"
)
func init() {
beego.Router("/", &controllers.MainController{})
beego.Router("/line", &controllers.LineController{}) //追加
}
json 처리
json의 취급에 대해서는 이하의 기사가 참고가 되었습니다
htps : // 코 m / 나유네코 / ms / 2 에c20 69804 8bf7 또는 3
Go는 이렇게 json이 취급하기 어려운 것이군요. .
PHP라면 5행으로 쓸 것 같은 처리군요.
아니 정말.
우선 구조체로 여러가지 정의해 갑니다.
LINEAPI에서 사용하는 json은 중첩되어 있으므로 다음 기사의 패턴 1로 이동합니다.
htps : // 이 m / msh5 / ms / dc524 에 38073 에 d8 에 3831b
line_controller.gotype LineMessageBodyJson struct {
ReplyToken string `json:"replyToken"`
Messages LineMessageMessageJsons `json:"messages"`
}
type LineMessageMessageJson struct{
Type string `json:"type"`
Text string `json:"text"`
}
type LineMessageMessageJsons []LineMessageMessageJson
type LineMessageFromJson struct {
Events []struct{
ReplyToken string `json:"replyToken"`
Message struct{
Text string `json:"text"`
} `json:"message"`
} `json:"events"`
}
이런 식으로 구조체를 정의했습니다.
컨트롤러 작성
이전 구조의 정의를 포함하여 컨트롤러를 만듭니다.
htps : // 베에고. 메/도 cs/쿠이 cks한 rt/안 t 로트 r. md
htps : // 베에고. 메/도 cs/mvc/안 t롯ぇr/안 t롯ぇr. md
파라미터의 받는 방법에 대해서는 이하의 페이지가 참고가 됩니다.
htps : // 베에고. 메/도 cs/mvc/안 t 롯ぇr/파라 ms. md
line_controller.gopackage controllers
import (
"github.com/astaxie/beego"
"encoding/json"
"net/http"
//"net/url"
"bytes"
"log"
"io/ioutil"
)
type LineController struct {
beego.Controller
}
type LineMessageBodyJson struct {
ReplyToken string `json:"replyToken"`
Messages LineMessageMessageJsons `json:"messages"`
}
type LineMessageMessageJson struct{
Type string `json:"type"`
Text string `json:"text"`
}
type LineMessageMessageJsons []LineMessageMessageJson
type LineMessageFromJson struct {
Events []struct{
ReplyToken string `json:"replyToken"`
Message struct{
Text string `json:"text"`
} `json:"message"`
} `json:"events"`
}
func (this *LineController) Post() {
// request内容の受け取り処理
var received_message LineMessageFromJson
body, err := ioutil.ReadAll(this.Ctx.Request.Body)
if err != nil {
log.Fatal(err)
}
if err := json.Unmarshal(body, &received_message); err != nil {
log.Fatal(err)
}
// eventごとに処理(今回は1つだけ)
for _, event := range received_message.Events{
message := event.Message
//source := event.Source
reply_token := event.ReplyToken
text := message.Text
//replyするデータの用意
data := new(LineMessageBodyJson)
data.ReplyToken = reply_token
to_send_message := LineMessageMessageJson {
Type: "text",
Text: text,
}
var to_send_messages LineMessageMessageJsons
to_send_messages = append(to_send_messages, to_send_message)
data.Messages = to_send_messages
json_data, _ := json.Marshal(data)
//request作成
endpoint_uri := "https://api.line.me/v2/bot/message/reply"
req, err := http.NewRequest(
"POST",
endpoint_uri,
bytes.NewBuffer(json_data),
)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Authorization", "Bearer hogehoge") //自分のアクセストークン
client := &http.Client{}
resp, err_in_req := client.Do(req)
if err_in_req != nil {
log.Fatal(err_in_req)
}
log.Print(resp)
defer resp.Body.Close()
}
}
내가 익숙하지 않기 때문일지도 모릅니다만, Go는 Post 리퀘스트의 수신이거나, 방금 전 나온 json의 취급이거나, 여러가지 힘들군요. .
구현은 이것으로 끝입니다!
ngrok을 사용하여 테스트
ngrok 설정
실제로 시도해 보겠습니다.
WebhookURL에 localhost를 지정할 수 없으므로 ngrok을 사용합니다.
아래 기사를 참고하여 ngrok을 설치하십시오.
ngrok이 너무 편리합니다.
설치가 끝나면
$ ngrok http 8080
그렇다면
이렇게 시작할 수 있습니다.
이것보다 나중에 나오는 ngrok URL을 적절하게 자신의 URL로 바꾸십시오.
WebhookURL 설정
MessagingAPI 설정|>Webhook 설정|>WebhookURL
에서https://5fb80f51.ngrok.io/line
를 입력합니다.
테스트
이제 준비가 되었습니다!
서버를 기동해 아래와 같이 대충 돌려주면 성공입니다!
끝에
저는 여러 언어에 입문할 때 시험에 LINEBot을 만들어 보겠습니다만, Go는 제일 힘들었습니다.
Go는 SDK가 준비되어 있기 때문에 성인 SDK를 사용해야한다고 느꼈습니다.
(SDK 사용하지 않고 Flex 메세지라든지 작성하려고 한다면 일대 고생이군요 아마..)
Web 용도에 한하지 않고 앞으로 열심히 Go 공부하고 싶습니다!
Reference
이 문제에 관하여(Go 경력 0일이지만 Go/beego에서 SDK 사용하지 않고 LINEBot 만들어 보자), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sanpo_shiho/items/7a550e0eb620e4f5daaf
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
↓여기에서 등록
ぇぺぺrs. 네. 비 · 자 /
다양한 현재의 상황과 다릅니다만 아래의 기사를 참고로 채널의 등록을 실시합니다
htps : // 이 m / n kjm / ms / 38808 bc97d6927837cd
Go 설치
저는 Mac 사용자이므로 아래에서 수행하는 설치 절차는 모두 Mac 사용자 전용입니다.
원래 Go가 설치되어 있지 않으므로 설치합니다.
$ brew install go
$ go version #これでversionが出ればインストールOKです
beego 설치
go get -u github.com/astaxie/beego
go get -u github.com/beego/bee
다음을 참고로 패스를 통과합니다.
Beego (Golang Framework) 사용법 메모
$ export GO15VENDOREXPERIMENT=1
$ export GOPATH=$HOME/go
$ export PATH=$PATH:$GOPATH/bin
$ export PATH=$PATH:$GOROOT/bin
$ source ~/.bashrc
beego 프로젝트 만들기
$ bee new linebot
다음과 같은 구성입니다.
linebot
├── conf
│ └── app.conf
├── controllers
│ └── default.go
├── main.go
├── models
├── routers
│ └── router.go
├── static
│ ├── css
│ ├── img
│ └── js
├── tests
│ └── default_test.go
└── views
└── index.tpl
아래에서 서버를 시작할 수 있습니다.
$ bee run
http://localhost-8080.com/
방문하여 다음 화면이 나오면 성공합니다.
라우팅
LINEBot에 새롭게 다음을 추가합니다.
router/router.gopackage routers
import (
"linebot/controllers"
"github.com/astaxie/beego"
)
func init() {
beego.Router("/", &controllers.MainController{})
beego.Router("/line", &controllers.LineController{}) //追加
}
json 처리
json의 취급에 대해서는 이하의 기사가 참고가 되었습니다
htps : // 코 m / 나유네코 / ms / 2 에c20 69804 8bf7 또는 3
Go는 이렇게 json이 취급하기 어려운 것이군요. .
PHP라면 5행으로 쓸 것 같은 처리군요.
아니 정말.
우선 구조체로 여러가지 정의해 갑니다.
LINEAPI에서 사용하는 json은 중첩되어 있으므로 다음 기사의 패턴 1로 이동합니다.
htps : // 이 m / msh5 / ms / dc524 에 38073 에 d8 에 3831b
line_controller.gotype LineMessageBodyJson struct {
ReplyToken string `json:"replyToken"`
Messages LineMessageMessageJsons `json:"messages"`
}
type LineMessageMessageJson struct{
Type string `json:"type"`
Text string `json:"text"`
}
type LineMessageMessageJsons []LineMessageMessageJson
type LineMessageFromJson struct {
Events []struct{
ReplyToken string `json:"replyToken"`
Message struct{
Text string `json:"text"`
} `json:"message"`
} `json:"events"`
}
이런 식으로 구조체를 정의했습니다.
컨트롤러 작성
이전 구조의 정의를 포함하여 컨트롤러를 만듭니다.
htps : // 베에고. 메/도 cs/쿠이 cks한 rt/안 t 로트 r. md
htps : // 베에고. 메/도 cs/mvc/안 t롯ぇr/안 t롯ぇr. md
파라미터의 받는 방법에 대해서는 이하의 페이지가 참고가 됩니다.
htps : // 베에고. 메/도 cs/mvc/안 t 롯ぇr/파라 ms. md
line_controller.gopackage controllers
import (
"github.com/astaxie/beego"
"encoding/json"
"net/http"
//"net/url"
"bytes"
"log"
"io/ioutil"
)
type LineController struct {
beego.Controller
}
type LineMessageBodyJson struct {
ReplyToken string `json:"replyToken"`
Messages LineMessageMessageJsons `json:"messages"`
}
type LineMessageMessageJson struct{
Type string `json:"type"`
Text string `json:"text"`
}
type LineMessageMessageJsons []LineMessageMessageJson
type LineMessageFromJson struct {
Events []struct{
ReplyToken string `json:"replyToken"`
Message struct{
Text string `json:"text"`
} `json:"message"`
} `json:"events"`
}
func (this *LineController) Post() {
// request内容の受け取り処理
var received_message LineMessageFromJson
body, err := ioutil.ReadAll(this.Ctx.Request.Body)
if err != nil {
log.Fatal(err)
}
if err := json.Unmarshal(body, &received_message); err != nil {
log.Fatal(err)
}
// eventごとに処理(今回は1つだけ)
for _, event := range received_message.Events{
message := event.Message
//source := event.Source
reply_token := event.ReplyToken
text := message.Text
//replyするデータの用意
data := new(LineMessageBodyJson)
data.ReplyToken = reply_token
to_send_message := LineMessageMessageJson {
Type: "text",
Text: text,
}
var to_send_messages LineMessageMessageJsons
to_send_messages = append(to_send_messages, to_send_message)
data.Messages = to_send_messages
json_data, _ := json.Marshal(data)
//request作成
endpoint_uri := "https://api.line.me/v2/bot/message/reply"
req, err := http.NewRequest(
"POST",
endpoint_uri,
bytes.NewBuffer(json_data),
)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Authorization", "Bearer hogehoge") //自分のアクセストークン
client := &http.Client{}
resp, err_in_req := client.Do(req)
if err_in_req != nil {
log.Fatal(err_in_req)
}
log.Print(resp)
defer resp.Body.Close()
}
}
내가 익숙하지 않기 때문일지도 모릅니다만, Go는 Post 리퀘스트의 수신이거나, 방금 전 나온 json의 취급이거나, 여러가지 힘들군요. .
구현은 이것으로 끝입니다!
ngrok을 사용하여 테스트
ngrok 설정
실제로 시도해 보겠습니다.
WebhookURL에 localhost를 지정할 수 없으므로 ngrok을 사용합니다.
아래 기사를 참고하여 ngrok을 설치하십시오.
ngrok이 너무 편리합니다.
설치가 끝나면
$ ngrok http 8080
그렇다면
이렇게 시작할 수 있습니다.
이것보다 나중에 나오는 ngrok URL을 적절하게 자신의 URL로 바꾸십시오.
WebhookURL 설정
MessagingAPI 설정|>Webhook 설정|>WebhookURL
에서https://5fb80f51.ngrok.io/line
를 입력합니다.
테스트
이제 준비가 되었습니다!
서버를 기동해 아래와 같이 대충 돌려주면 성공입니다!
끝에
저는 여러 언어에 입문할 때 시험에 LINEBot을 만들어 보겠습니다만, Go는 제일 힘들었습니다.
Go는 SDK가 준비되어 있기 때문에 성인 SDK를 사용해야한다고 느꼈습니다.
(SDK 사용하지 않고 Flex 메세지라든지 작성하려고 한다면 일대 고생이군요 아마..)
Web 용도에 한하지 않고 앞으로 열심히 Go 공부하고 싶습니다!
Reference
이 문제에 관하여(Go 경력 0일이지만 Go/beego에서 SDK 사용하지 않고 LINEBot 만들어 보자), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sanpo_shiho/items/7a550e0eb620e4f5daaf
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
$ brew install go
$ go version #これでversionが出ればインストールOKです
go get -u github.com/astaxie/beego
go get -u github.com/beego/bee
다음을 참고로 패스를 통과합니다.
Beego (Golang Framework) 사용법 메모
$ export GO15VENDOREXPERIMENT=1
$ export GOPATH=$HOME/go
$ export PATH=$PATH:$GOPATH/bin
$ export PATH=$PATH:$GOROOT/bin
$ source ~/.bashrc
beego 프로젝트 만들기
$ bee new linebot
다음과 같은 구성입니다.
linebot
├── conf
│ └── app.conf
├── controllers
│ └── default.go
├── main.go
├── models
├── routers
│ └── router.go
├── static
│ ├── css
│ ├── img
│ └── js
├── tests
│ └── default_test.go
└── views
└── index.tpl
아래에서 서버를 시작할 수 있습니다.
$ bee run
http://localhost-8080.com/
방문하여 다음 화면이 나오면 성공합니다.
라우팅
LINEBot에 새롭게 다음을 추가합니다.
router/router.gopackage routers
import (
"linebot/controllers"
"github.com/astaxie/beego"
)
func init() {
beego.Router("/", &controllers.MainController{})
beego.Router("/line", &controllers.LineController{}) //追加
}
json 처리
json의 취급에 대해서는 이하의 기사가 참고가 되었습니다
htps : // 코 m / 나유네코 / ms / 2 에c20 69804 8bf7 또는 3
Go는 이렇게 json이 취급하기 어려운 것이군요. .
PHP라면 5행으로 쓸 것 같은 처리군요.
아니 정말.
우선 구조체로 여러가지 정의해 갑니다.
LINEAPI에서 사용하는 json은 중첩되어 있으므로 다음 기사의 패턴 1로 이동합니다.
htps : // 이 m / msh5 / ms / dc524 에 38073 에 d8 에 3831b
line_controller.gotype LineMessageBodyJson struct {
ReplyToken string `json:"replyToken"`
Messages LineMessageMessageJsons `json:"messages"`
}
type LineMessageMessageJson struct{
Type string `json:"type"`
Text string `json:"text"`
}
type LineMessageMessageJsons []LineMessageMessageJson
type LineMessageFromJson struct {
Events []struct{
ReplyToken string `json:"replyToken"`
Message struct{
Text string `json:"text"`
} `json:"message"`
} `json:"events"`
}
이런 식으로 구조체를 정의했습니다.
컨트롤러 작성
이전 구조의 정의를 포함하여 컨트롤러를 만듭니다.
htps : // 베에고. 메/도 cs/쿠이 cks한 rt/안 t 로트 r. md
htps : // 베에고. 메/도 cs/mvc/안 t롯ぇr/안 t롯ぇr. md
파라미터의 받는 방법에 대해서는 이하의 페이지가 참고가 됩니다.
htps : // 베에고. 메/도 cs/mvc/안 t 롯ぇr/파라 ms. md
line_controller.gopackage controllers
import (
"github.com/astaxie/beego"
"encoding/json"
"net/http"
//"net/url"
"bytes"
"log"
"io/ioutil"
)
type LineController struct {
beego.Controller
}
type LineMessageBodyJson struct {
ReplyToken string `json:"replyToken"`
Messages LineMessageMessageJsons `json:"messages"`
}
type LineMessageMessageJson struct{
Type string `json:"type"`
Text string `json:"text"`
}
type LineMessageMessageJsons []LineMessageMessageJson
type LineMessageFromJson struct {
Events []struct{
ReplyToken string `json:"replyToken"`
Message struct{
Text string `json:"text"`
} `json:"message"`
} `json:"events"`
}
func (this *LineController) Post() {
// request内容の受け取り処理
var received_message LineMessageFromJson
body, err := ioutil.ReadAll(this.Ctx.Request.Body)
if err != nil {
log.Fatal(err)
}
if err := json.Unmarshal(body, &received_message); err != nil {
log.Fatal(err)
}
// eventごとに処理(今回は1つだけ)
for _, event := range received_message.Events{
message := event.Message
//source := event.Source
reply_token := event.ReplyToken
text := message.Text
//replyするデータの用意
data := new(LineMessageBodyJson)
data.ReplyToken = reply_token
to_send_message := LineMessageMessageJson {
Type: "text",
Text: text,
}
var to_send_messages LineMessageMessageJsons
to_send_messages = append(to_send_messages, to_send_message)
data.Messages = to_send_messages
json_data, _ := json.Marshal(data)
//request作成
endpoint_uri := "https://api.line.me/v2/bot/message/reply"
req, err := http.NewRequest(
"POST",
endpoint_uri,
bytes.NewBuffer(json_data),
)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Authorization", "Bearer hogehoge") //自分のアクセストークン
client := &http.Client{}
resp, err_in_req := client.Do(req)
if err_in_req != nil {
log.Fatal(err_in_req)
}
log.Print(resp)
defer resp.Body.Close()
}
}
내가 익숙하지 않기 때문일지도 모릅니다만, Go는 Post 리퀘스트의 수신이거나, 방금 전 나온 json의 취급이거나, 여러가지 힘들군요. .
구현은 이것으로 끝입니다!
ngrok을 사용하여 테스트
ngrok 설정
실제로 시도해 보겠습니다.
WebhookURL에 localhost를 지정할 수 없으므로 ngrok을 사용합니다.
아래 기사를 참고하여 ngrok을 설치하십시오.
ngrok이 너무 편리합니다.
설치가 끝나면
$ ngrok http 8080
그렇다면
이렇게 시작할 수 있습니다.
이것보다 나중에 나오는 ngrok URL을 적절하게 자신의 URL로 바꾸십시오.
WebhookURL 설정
MessagingAPI 설정|>Webhook 설정|>WebhookURL
에서https://5fb80f51.ngrok.io/line
를 입력합니다.
테스트
이제 준비가 되었습니다!
서버를 기동해 아래와 같이 대충 돌려주면 성공입니다!
끝에
저는 여러 언어에 입문할 때 시험에 LINEBot을 만들어 보겠습니다만, Go는 제일 힘들었습니다.
Go는 SDK가 준비되어 있기 때문에 성인 SDK를 사용해야한다고 느꼈습니다.
(SDK 사용하지 않고 Flex 메세지라든지 작성하려고 한다면 일대 고생이군요 아마..)
Web 용도에 한하지 않고 앞으로 열심히 Go 공부하고 싶습니다!
Reference
이 문제에 관하여(Go 경력 0일이지만 Go/beego에서 SDK 사용하지 않고 LINEBot 만들어 보자), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sanpo_shiho/items/7a550e0eb620e4f5daaf
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
$ bee new linebot
linebot
├── conf
│ └── app.conf
├── controllers
│ └── default.go
├── main.go
├── models
├── routers
│ └── router.go
├── static
│ ├── css
│ ├── img
│ └── js
├── tests
│ └── default_test.go
└── views
└── index.tpl
$ bee run
LINEBot에 새롭게 다음을 추가합니다.
router/router.go
package routers
import (
"linebot/controllers"
"github.com/astaxie/beego"
)
func init() {
beego.Router("/", &controllers.MainController{})
beego.Router("/line", &controllers.LineController{}) //追加
}
json 처리
json의 취급에 대해서는 이하의 기사가 참고가 되었습니다
htps : // 코 m / 나유네코 / ms / 2 에c20 69804 8bf7 또는 3
Go는 이렇게 json이 취급하기 어려운 것이군요. .
PHP라면 5행으로 쓸 것 같은 처리군요.
아니 정말.
우선 구조체로 여러가지 정의해 갑니다.
LINEAPI에서 사용하는 json은 중첩되어 있으므로 다음 기사의 패턴 1로 이동합니다.
htps : // 이 m / msh5 / ms / dc524 에 38073 에 d8 에 3831b
line_controller.gotype LineMessageBodyJson struct {
ReplyToken string `json:"replyToken"`
Messages LineMessageMessageJsons `json:"messages"`
}
type LineMessageMessageJson struct{
Type string `json:"type"`
Text string `json:"text"`
}
type LineMessageMessageJsons []LineMessageMessageJson
type LineMessageFromJson struct {
Events []struct{
ReplyToken string `json:"replyToken"`
Message struct{
Text string `json:"text"`
} `json:"message"`
} `json:"events"`
}
이런 식으로 구조체를 정의했습니다.
컨트롤러 작성
이전 구조의 정의를 포함하여 컨트롤러를 만듭니다.
htps : // 베에고. 메/도 cs/쿠이 cks한 rt/안 t 로트 r. md
htps : // 베에고. 메/도 cs/mvc/안 t롯ぇr/안 t롯ぇr. md
파라미터의 받는 방법에 대해서는 이하의 페이지가 참고가 됩니다.
htps : // 베에고. 메/도 cs/mvc/안 t 롯ぇr/파라 ms. md
line_controller.gopackage controllers
import (
"github.com/astaxie/beego"
"encoding/json"
"net/http"
//"net/url"
"bytes"
"log"
"io/ioutil"
)
type LineController struct {
beego.Controller
}
type LineMessageBodyJson struct {
ReplyToken string `json:"replyToken"`
Messages LineMessageMessageJsons `json:"messages"`
}
type LineMessageMessageJson struct{
Type string `json:"type"`
Text string `json:"text"`
}
type LineMessageMessageJsons []LineMessageMessageJson
type LineMessageFromJson struct {
Events []struct{
ReplyToken string `json:"replyToken"`
Message struct{
Text string `json:"text"`
} `json:"message"`
} `json:"events"`
}
func (this *LineController) Post() {
// request内容の受け取り処理
var received_message LineMessageFromJson
body, err := ioutil.ReadAll(this.Ctx.Request.Body)
if err != nil {
log.Fatal(err)
}
if err := json.Unmarshal(body, &received_message); err != nil {
log.Fatal(err)
}
// eventごとに処理(今回は1つだけ)
for _, event := range received_message.Events{
message := event.Message
//source := event.Source
reply_token := event.ReplyToken
text := message.Text
//replyするデータの用意
data := new(LineMessageBodyJson)
data.ReplyToken = reply_token
to_send_message := LineMessageMessageJson {
Type: "text",
Text: text,
}
var to_send_messages LineMessageMessageJsons
to_send_messages = append(to_send_messages, to_send_message)
data.Messages = to_send_messages
json_data, _ := json.Marshal(data)
//request作成
endpoint_uri := "https://api.line.me/v2/bot/message/reply"
req, err := http.NewRequest(
"POST",
endpoint_uri,
bytes.NewBuffer(json_data),
)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Authorization", "Bearer hogehoge") //自分のアクセストークン
client := &http.Client{}
resp, err_in_req := client.Do(req)
if err_in_req != nil {
log.Fatal(err_in_req)
}
log.Print(resp)
defer resp.Body.Close()
}
}
내가 익숙하지 않기 때문일지도 모릅니다만, Go는 Post 리퀘스트의 수신이거나, 방금 전 나온 json의 취급이거나, 여러가지 힘들군요. .
구현은 이것으로 끝입니다!
ngrok을 사용하여 테스트
ngrok 설정
실제로 시도해 보겠습니다.
WebhookURL에 localhost를 지정할 수 없으므로 ngrok을 사용합니다.
아래 기사를 참고하여 ngrok을 설치하십시오.
ngrok이 너무 편리합니다.
설치가 끝나면
$ ngrok http 8080
그렇다면
이렇게 시작할 수 있습니다.
이것보다 나중에 나오는 ngrok URL을 적절하게 자신의 URL로 바꾸십시오.
WebhookURL 설정
MessagingAPI 설정|>Webhook 설정|>WebhookURL
에서https://5fb80f51.ngrok.io/line
를 입력합니다.
테스트
이제 준비가 되었습니다!
서버를 기동해 아래와 같이 대충 돌려주면 성공입니다!
끝에
저는 여러 언어에 입문할 때 시험에 LINEBot을 만들어 보겠습니다만, Go는 제일 힘들었습니다.
Go는 SDK가 준비되어 있기 때문에 성인 SDK를 사용해야한다고 느꼈습니다.
(SDK 사용하지 않고 Flex 메세지라든지 작성하려고 한다면 일대 고생이군요 아마..)
Web 용도에 한하지 않고 앞으로 열심히 Go 공부하고 싶습니다!
Reference
이 문제에 관하여(Go 경력 0일이지만 Go/beego에서 SDK 사용하지 않고 LINEBot 만들어 보자), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sanpo_shiho/items/7a550e0eb620e4f5daaf
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
type LineMessageBodyJson struct {
ReplyToken string `json:"replyToken"`
Messages LineMessageMessageJsons `json:"messages"`
}
type LineMessageMessageJson struct{
Type string `json:"type"`
Text string `json:"text"`
}
type LineMessageMessageJsons []LineMessageMessageJson
type LineMessageFromJson struct {
Events []struct{
ReplyToken string `json:"replyToken"`
Message struct{
Text string `json:"text"`
} `json:"message"`
} `json:"events"`
}
이전 구조의 정의를 포함하여 컨트롤러를 만듭니다.
htps : // 베에고. 메/도 cs/쿠이 cks한 rt/안 t 로트 r. md
htps : // 베에고. 메/도 cs/mvc/안 t롯ぇr/안 t롯ぇr. md
파라미터의 받는 방법에 대해서는 이하의 페이지가 참고가 됩니다.
htps : // 베에고. 메/도 cs/mvc/안 t 롯ぇr/파라 ms. md
line_controller.go
package controllers
import (
"github.com/astaxie/beego"
"encoding/json"
"net/http"
//"net/url"
"bytes"
"log"
"io/ioutil"
)
type LineController struct {
beego.Controller
}
type LineMessageBodyJson struct {
ReplyToken string `json:"replyToken"`
Messages LineMessageMessageJsons `json:"messages"`
}
type LineMessageMessageJson struct{
Type string `json:"type"`
Text string `json:"text"`
}
type LineMessageMessageJsons []LineMessageMessageJson
type LineMessageFromJson struct {
Events []struct{
ReplyToken string `json:"replyToken"`
Message struct{
Text string `json:"text"`
} `json:"message"`
} `json:"events"`
}
func (this *LineController) Post() {
// request内容の受け取り処理
var received_message LineMessageFromJson
body, err := ioutil.ReadAll(this.Ctx.Request.Body)
if err != nil {
log.Fatal(err)
}
if err := json.Unmarshal(body, &received_message); err != nil {
log.Fatal(err)
}
// eventごとに処理(今回は1つだけ)
for _, event := range received_message.Events{
message := event.Message
//source := event.Source
reply_token := event.ReplyToken
text := message.Text
//replyするデータの用意
data := new(LineMessageBodyJson)
data.ReplyToken = reply_token
to_send_message := LineMessageMessageJson {
Type: "text",
Text: text,
}
var to_send_messages LineMessageMessageJsons
to_send_messages = append(to_send_messages, to_send_message)
data.Messages = to_send_messages
json_data, _ := json.Marshal(data)
//request作成
endpoint_uri := "https://api.line.me/v2/bot/message/reply"
req, err := http.NewRequest(
"POST",
endpoint_uri,
bytes.NewBuffer(json_data),
)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Authorization", "Bearer hogehoge") //自分のアクセストークン
client := &http.Client{}
resp, err_in_req := client.Do(req)
if err_in_req != nil {
log.Fatal(err_in_req)
}
log.Print(resp)
defer resp.Body.Close()
}
}
내가 익숙하지 않기 때문일지도 모릅니다만, Go는 Post 리퀘스트의 수신이거나, 방금 전 나온 json의 취급이거나, 여러가지 힘들군요. .
구현은 이것으로 끝입니다!
ngrok을 사용하여 테스트
ngrok 설정
실제로 시도해 보겠습니다.
WebhookURL에 localhost를 지정할 수 없으므로 ngrok을 사용합니다.
아래 기사를 참고하여 ngrok을 설치하십시오.
ngrok이 너무 편리합니다.
설치가 끝나면
$ ngrok http 8080
그렇다면
이렇게 시작할 수 있습니다.
이것보다 나중에 나오는 ngrok URL을 적절하게 자신의 URL로 바꾸십시오.
WebhookURL 설정
MessagingAPI 설정|>Webhook 설정|>WebhookURL
에서https://5fb80f51.ngrok.io/line
를 입력합니다.
테스트
이제 준비가 되었습니다!
서버를 기동해 아래와 같이 대충 돌려주면 성공입니다!
끝에
저는 여러 언어에 입문할 때 시험에 LINEBot을 만들어 보겠습니다만, Go는 제일 힘들었습니다.
Go는 SDK가 준비되어 있기 때문에 성인 SDK를 사용해야한다고 느꼈습니다.
(SDK 사용하지 않고 Flex 메세지라든지 작성하려고 한다면 일대 고생이군요 아마..)
Web 용도에 한하지 않고 앞으로 열심히 Go 공부하고 싶습니다!
Reference
이 문제에 관하여(Go 경력 0일이지만 Go/beego에서 SDK 사용하지 않고 LINEBot 만들어 보자), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sanpo_shiho/items/7a550e0eb620e4f5daaf
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
$ ngrok http 8080
저는 여러 언어에 입문할 때 시험에 LINEBot을 만들어 보겠습니다만, Go는 제일 힘들었습니다.
Go는 SDK가 준비되어 있기 때문에 성인 SDK를 사용해야한다고 느꼈습니다.
(SDK 사용하지 않고 Flex 메세지라든지 작성하려고 한다면 일대 고생이군요 아마..)
Web 용도에 한하지 않고 앞으로 열심히 Go 공부하고 싶습니다!
Reference
이 문제에 관하여(Go 경력 0일이지만 Go/beego에서 SDK 사용하지 않고 LINEBot 만들어 보자), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sanpo_shiho/items/7a550e0eb620e4f5daaf텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)