Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

V2 #6

Merged
merged 136 commits into from
Sep 29, 2016
Merged

V2 #6

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
136 commits
Select commit Hold shift + click to select a range
db5e9d8
[wip] Implementing v2 api support
sugyan Aug 31, 2016
9a0b649
add Reply function
sugyan Sep 2, 2016
c6665e3
message interface
sugyan Sep 2, 2016
57cb38b
add KitchenSink example
sugyan Sep 2, 2016
342e44b
rename `NewClient` to `New`
sugyan Sep 2, 2016
0349ea3
update GetUserProfile
sugyan Sep 2, 2016
3136266
use type switches
sugyan Sep 7, 2016
069882f
refactoring: more simple namings
mokejp Sep 7, 2016
6e4c874
Merge pull request #3 from line/v2-model-refactoring
sugyan Sep 7, 2016
16a12af
use custom marshaling/unmarshaling
mokejp Sep 7, 2016
a7dfcb2
Oops!
mokejp Sep 7, 2016
652bd02
reduce memcopy
mokejp Sep 7, 2016
c5b9c69
Merge pull request #4 from line/v2-model-custom-marshaling
sugyan Sep 8, 2016
d4b52ff
support context
mokejp Sep 8, 2016
8147f05
add handleLocation and handleSticker to kitchensink
sugyan Sep 8, 2016
d08a5d4
Error response handling
mokejp Sep 8, 2016
faff4ed
refactoring
mokejp Sep 8, 2016
75b495a
add leave operation
sugyan Sep 8, 2016
3610e2d
Merge pull request #6 from line/v2-model-leaving
mokejp Sep 8, 2016
33345f6
Merge branch 'v2-model' into v2-model-context
mokejp Sep 9, 2016
8c27893
rename Error to APIError
mokejp Sep 9, 2016
f017043
Support context: LeaveGroup, LeaveRoom
mokejp Sep 9, 2016
52c00c1
Support context: GetUserProfile
mokejp Sep 9, 2016
895810f
Merge pull request #5 from line/v2-model-context
sugyan Sep 9, 2016
3284ab8
remove unused and split code.
mokejp Sep 9, 2016
f3fb0d8
json.Marshaler
mokejp Sep 9, 2016
4df4984
remove Ctx
mokejp Sep 9, 2016
3e7863e
rename error.go send_message.go
mokejp Sep 9, 2016
e1e41eb
remove errors.go, send_messages.go
mokejp Sep 12, 2016
ff3dcf1
Merge pull request #8 from line/v2-model-split
sugyan Sep 12, 2016
697deed
update get_content, example server
sugyan Sep 12, 2016
d1a7e4b
Merge pull request #9 from line/v2-model-get_content
mokejp Sep 14, 2016
9e4ae66
add test
mokejp Sep 14, 2016
149680a
Merge branch 'v2-model' into v2-model-test
mokejp Sep 14, 2016
5c6c4b5
Add unit test and bug fix
mokejp Sep 14, 2016
7adf6cb
Merge pull request #10 from line/v2-model-test
sugyan Sep 14, 2016
b7d070a
remove RequestID
sugyan Sep 14, 2016
c666ddc
Merge pull request #11 from line/v2-model-remove-requestid
mokejp Sep 14, 2016
86f4e26
Fix error message
mokejp Sep 14, 2016
b1e16c6
support video message, update kitchensink server
sugyan Sep 14, 2016
85d7a9f
fix memory leak
mokejp Sep 14, 2016
f78747d
Merge pull request #12 from line/v2-model-test
sugyan Sep 14, 2016
3b2f631
support audio message, update kitchensink server
sugyan Sep 14, 2016
7eb32bb
Merge pull request #13 from line/v2-model-kitchensink
mokejp Sep 14, 2016
39b8327
Add ContentType and ContentLength on ContentResponse
mokejp Sep 15, 2016
3af38fd
use Response.ContentLength
mokejp Sep 15, 2016
c907570
oops
mokejp Sep 15, 2016
f34167f
Merge pull request #14 from line/v2-model-contentattr
sugyan Sep 15, 2016
70987a8
fix switch statements in kitchensink server
sugyan Sep 15, 2016
c02db92
Merge pull request #15 from line/v2-model-kitchensink
mokejp Sep 15, 2016
2571e38
small fixes
mokejp Sep 15, 2016
8792d90
Merge pull request #16 from line/v-model-fix
sugyan Sep 15, 2016
9b8410a
support template message
sugyan Sep 15, 2016
a28af95
change CarouselColumn to direct marshaling type
sugyan Sep 16, 2016
7be6af9
Merge pull request #17 from line/v2-model-template-message
mokejp Sep 16, 2016
70b29a4
refactoring response.go
mokejp Sep 16, 2016
02aa2f5
Merge pull request #18 from line/v2-model-refactoring-errorresp
sugyan Sep 16, 2016
2560c43
update kitchensink server: template messages
sugyan Sep 16, 2016
20a6b13
Merge pull request #19 from line/v2-model-kitchensink
mokejp Sep 16, 2016
009b702
refactoring use variable arguments
Sep 16, 2016
5cd0fbd
Merge pull request #20 from line/v2-model-variable-args
sugyan Sep 20, 2016
2b36249
handle beacon event
sugyan Sep 21, 2016
7fb0ec6
Merge pull request #21 from line/v2-model-kitchensink
mokejp Sep 21, 2016
4d9450b
unmarshaling timestamp as time.Time
mokejp Sep 23, 2016
f93dee7
Merge pull request #22 from line/v2-model-time
sugyan Sep 23, 2016
d982550
ensures that implements interface
mokejp Sep 23, 2016
d4532b8
add comments
mokejp Sep 23, 2016
cca2bc5
Merge pull request #23 from line/v2-model-ensuretype
sugyan Sep 23, 2016
714544e
update errors
sugyan Sep 23, 2016
2e4ed48
Merge pull request #24 from line/v2-model-fix-error
mokejp Sep 23, 2016
55cd3ad
add imagemap message
sugyan Sep 24, 2016
69f9b49
rename GetUserProfile to GetProfile
mokejp Sep 26, 2016
3a8744e
update imagemap
sugyan Sep 26, 2016
0450b55
rename ProfileResponse to UserProfileResponse
mokejp Sep 26, 2016
4b573d2
Merge pull request #25 from line/v2-model-kitchensink
mokejp Sep 26, 2016
581b788
Merge pull request #26 from line/v2-model-getprofile
sugyan Sep 26, 2016
b7654fa
add tests
mokejp Sep 26, 2016
2160825
fix json indent
mokejp Sep 26, 2016
de6df83
Merge pull request #2 from line/v2-model
mokejp Sep 26, 2016
0ae3d57
Rename imagemap actions
mokejp Sep 26, 2016
1f4e544
Rename template actions
mokejp Sep 26, 2016
5ed3bb8
Merge pull request #30 from line/v2-rename-imagemap-actions
sugyan Sep 26, 2016
6890637
Merge pull request #28 from line/v2-model-more-test
sugyan Sep 26, 2016
575c367
fix test
sugyan Sep 26, 2016
b12e6aa
Merge pull request #32 from line/v2-fix-test
mokejp Sep 26, 2016
c711143
Merge branch 'v2' into v2-rename-template-actions
mokejp Sep 26, 2016
117be68
fix test
mokejp Sep 26, 2016
cd1d483
Merge pull request #33 from line/v2-rename-template-actions
sugyan Sep 26, 2016
518d892
add version and set to User-Agent header
sugyan Sep 26, 2016
a179279
fix version.go
sugyan Sep 26, 2016
918d2a0
Merge pull request #35 from line/v2-user-agent
mokejp Sep 26, 2016
b79901e
add Copyright text to all *.go files
sugyan Sep 26, 2016
bf45be9
Merge pull request #36 from line/v2-copyright
mokejp Sep 26, 2016
f1ffd5e
rename Push/Reply to PushMessage/ReplyMessage
sugyan Sep 26, 2016
f76970c
Merge pull request #37 from line/v2-suffix-message
mokejp Sep 26, 2016
d500a3f
update echo bot
sugyan Sep 26, 2016
2382101
update README
sugyan Sep 26, 2016
3f6e014
Merge pull request #38 from line/v2-echo-bot
mokejp Sep 26, 2016
9d4970b
update default API endpoint
sugyan Sep 26, 2016
a8a99df
Merge pull request #40 from line/v2-replace
mokejp Sep 26, 2016
29021d4
Merge pull request #39 from line/v2-readme
mokejp Sep 26, 2016
639fde9
replace import package path
sugyan Sep 26, 2016
a02a207
Merge pull request #41 from line/v2-replace
mokejp Sep 26, 2016
a3af854
strictly use custom types
mokejp Sep 27, 2016
66b28fd
rename EventBeacon/EventPostback, add BeaconEventType
mokejp Sep 27, 2016
e2e95d0
fix method order and comment
mokejp Sep 27, 2016
794d944
Merge pull request #42 from line/v2-type
sugyan Sep 27, 2016
58693b0
Merge pull request #43 from line/v2-rename-beacon-postback
sugyan Sep 27, 2016
4894ac9
Merge pull request #44 from line/v2-fix-method-order
sugyan Sep 27, 2016
cfcfc48
reduce memalloc
mokejp Sep 27, 2016
9f55015
Merge pull request #45 from line/v2-parse-url
sugyan Sep 27, 2016
5417d2a
small fixes
mokejp Sep 27, 2016
720d3f0
remove return
mokejp Sep 27, 2016
954954e
Merge pull request #47 from line/v2-small-fixes
sugyan Sep 27, 2016
79d8633
add requirements
mokejp Sep 27, 2016
e30a6a1
update kitchensink server
sugyan Sep 27, 2016
4a50bdb
Merge pull request #48 from line/v2-kitchensink
mokejp Sep 27, 2016
d50e347
Merge pull request #49 from line/v2-requirements
sugyan Sep 27, 2016
5cd9a23
update GetMessageContent
sugyan Sep 27, 2016
a191c69
Merge pull request #50 from line/v2-getmessagecontent
mokejp Sep 27, 2016
96d6d0f
add go 1.7 for .travis.yml
sugyan Sep 27, 2016
ca9de59
Merge pull request #51 from line/v2-travis
mokejp Sep 27, 2016
1a18d26
Use "Fatal" when fatal error occured.
mokejp Sep 28, 2016
666ae17
update kitchensink server
sugyan Sep 28, 2016
58e68d8
Merge pull request #53 from line/v2-fix-test-fatal
sugyan Sep 28, 2016
969096b
update example servers
sugyan Sep 28, 2016
c54ec27
optimize join url concat
mokejp Sep 28, 2016
d18d74b
Merge pull request #52 from line/v2-imagemagick-ffmpeg
mokejp Sep 28, 2016
660482e
Merge pull request #55 from line/v2-url
sugyan Sep 28, 2016
c630ded
remove ENDPOINT_BASE
sugyan Sep 28, 2016
312775f
change kitchensink server
sugyan Sep 28, 2016
4b51b0a
Merge pull request #54 from line/v2-kitchensink
mokejp Sep 28, 2016
6e74871
remove unused variable "events".
mokejp Sep 28, 2016
e72c51f
Merge pull request #56 from line/v2-remove-unused
sugyan Sep 28, 2016
799cf6b
use UTC time
mokejp Sep 29, 2016
a20a8ef
Merge pull request #57 from line/v2-fix-timestamp
sugyan Sep 29, 2016
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
language: go
go:
- 1.6
- 1.7
- tip
sudo: false
186 changes: 17 additions & 169 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,17 @@

[![Build Status](https://travis-ci.org/line/line-bot-sdk-go.svg?branch=master)](https://travis-ci.org/line/line-bot-sdk-go)

SDK of the LINE BOT API Trial for Go
Go SDK for the LINE Messaging API


## About LINE Messaging API

Please refer to the official api documents for details.

en: https://devdocs.line.me/en/

ja: https://devdocs.line.me/ja/


## Installation ##

Expand All @@ -18,7 +28,7 @@ import (
)

func main() {
bot, err := linebot.NewClient(<Channel ID>, "<Channel Secret>", "<MID>")
bot, err := linebot.New("<channel secret>", "<channel access token>")
...
}

Expand All @@ -28,176 +38,14 @@ func main() {

```go
client := &http.Client{}
bot, err := linebot.NewClient(<Channel ID>, "<Channel Secret>", "<MID>", linebot.WithHTTPClient(client))
bot, err := linebot.New("<channel secret>", "<channel accsss token>", linebot.WithHTTPClient(client))
...
```

## Usage ##

### Sending messages ###

Send a text message, image, video, audio, location, or sticker to the mids.

- [https://developers.line.me/bot-api/api-reference#sending_message](https://developers.line.me/bot-api/api-reference#sending_message)

```go
// send text
res, err := bot.SendText([]string{"<target user's MID>"}, "Hello, world!")

// send image
res, err := bot.SendImage([]string{"<target user's MID>"}, "http://example.com/image.jpg", "http://example.com/image_preview.jpg")

// send video
res, err := bot.SendVideo([]string{"<target user's MID>"}, "http://example.com/video.mp4", "http://example.com/image_preview.jpg")

// send audio
res, err := bot.SendAudio([]string{"<target user's MID>"}, "http://example.com/audio.mp3", 2000)

// send location
res, err := bot.SendLocation([]string{"<target user's MID>"}, "location label", "tokyo shibuya-ku", 35.661777, 139.704051)

// send sticker
res, err := bot.SendSticker([]string{"<target user's MID>"}, 1, 1, 100)
```

### Sending multiple messages ###

The `multiple_message` method allows you to use the _Sending multiple messages API_.

- [https://developers.line.me/bot-api/api-reference#sending_multiple_messages](https://developers.line.me/bot-api/api-reference#sending_multiple_messages)

```go
res, err := bot.NewMultipleMessage().
AddText("Hello,").
AddText("world!").
AddImage("http://example.com/image.jpg", "http://example.com/image_preview.jpg")
AddVideo("http://example.com/video.mp4", "http://example.com/image_preview.jpg")
AddAudio("http://example.com/audio.mp3", 2000)
AddLocation("Location label", "tokyo shibuya-ku", 35.61823286112982, 139.72824096679688).
AddSticker(1, 1, 100).
Send([]string{"<target user's MID>"})
```

### Sending rich messages ###

The `rich_message` method allows you to use the _Sending rich messages API_.

- [https://developers.line.me/bot-api/api-reference#sending_rich_content_message](https://developers.line.me/bot-api/api-reference#sending_rich_content_message)

```go
res, err := bot.NewRichMessage(1040).
SetAction("MANGA", "manga", "https://store.line.me/family/manga/en").
SetListener("MANGA", 0, 0, 520, 520).
SetAction("MUSIC", "music", "https://store.line.me/family/music/en").
SetListener("MUSIC", 520, 0, 520, 520).
Send([]string{"<target user's MID>"}, "https://example.com/rich-image/foo", "This is a alt text.")
```

### Receiving messages ###
## Requirements

The following utility method allows you to easily process messages sent from the BOT API platform via a Callback URL.
This library requires Go 1.6 or later.

- [https://developers.line.me/bot-api/api-reference#receiving_messages](https://developers.line.me/bot-api/api-reference#receiving_messages)
## LICENSE

```go
http.HandleFunc("/callback", func(w http.ResponseWriter, req *http.Request) {
received, err := bot.ParseRequest(req)
if err != nil {
if err == linebot.ErrInvalidSignature {
w.WriteHeader(400)
} else {
w.WriteHeader(500)
}
return
}
for _, result := range received.Results {
content := result.Content()
if content != nil && content.IsMessage && content.ContentType == linebot.ContentTypeText {
text, err := content.TextContent()
_, err := bot.SendText([]string{content.From}, "OK " + text.Text)
if err != nil {
log.Println(err)
}
}
}
})
if err := http.ListenAndServe(":8080", nil); err != nil {
log.Fatal(err)
}
```

### Getting message content ###

Retrieve the original file which was sent by user.

- [https://developers.line.me/bot-api/api-reference#getting_message_content](https://developers.line.me/bot-api/api-reference#getting_message_content)

```go
http.HandleFunc("/callback", func(w http.ResponseWriter, req *http.Request) {
...
for _, result := range received.Results {
content := result.Content()
if content != nil && content.IsMessage && content.ContentType == linebot.ContentTypeImage {
res, err := bot.GetMessageContent(content)
if err != nil {
return
}
defer res.Content.Close()
image, err := jpeg.Decode(res.Content)
if err != nil {
return
}
log.Printf("image %v", image.Bounds())
}
}
})
```

### Getting previews of message content ###

Retrieve the preview image file which was sent by user.

- [https://developers.line.me/bot-api/api-reference#getting_message_content_preview](https://developers.line.me/bot-api/api-reference#getting_message_content_preview)

```go
http.HandleFunc("/callback", func(w http.ResponseWriter, req *http.Request) {
...
for _, result := range received.Results {
content := result.Content()
if content != nil && content.IsMessage && content.ContentType == linebot.MessageContentTypeImage {
res, err := bot.GetMessageContentPreview(content)
if err != nil {
return
}
defer res.Content.Close()
image, err := jpeg.Decode(res.Content)
if err != nil {
return
}
log.Printf("image %v", image.Bounds())
}
}
})
```

### Getting user profile information ###

You can retrieve the user profile information by specifying the mid.

- [https://developers.line.me/bot-api/api-reference#getting_user_profile_information](https://developers.line.me/bot-api/api-reference#getting_user_profile_information)

```go
http.HandleFunc("/callback", func(w http.ResponseWriter, req *http.Request) {
...
for _, result := range received.Results {
content := result.Content()
if content != nil {
result, err := bot.GetUserProfile([]string{content.From})
if err != nil {
return
}
log.Printf("profile: %v", result)
}
}
})
```
See LICENSE.txt
63 changes: 0 additions & 63 deletions examples/echo_bot/main.go

This file was deleted.

62 changes: 62 additions & 0 deletions examples/echo_bot/server.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
// Copyright 2016 LINE Corporation
//
// LINE Corporation licenses this file to you under the Apache License,
// version 2.0 (the "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at:
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations
// under the License.

package main

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

"github.com/line/line-bot-sdk-go/linebot"
)

func main() {
bot, err := linebot.New(
os.Getenv("CHANNEL_SECRET"),
os.Getenv("CHANNEL_TOKEN"),
)
if err != nil {
log.Fatal(err)
}

// Setup HTTP Server for receiving requests from LINE platform
http.HandleFunc("/callback", func(w http.ResponseWriter, req *http.Request) {
events, err := bot.ParseRequest(req)
if err != nil {
if err == linebot.ErrInvalidSignature {
w.WriteHeader(400)
} else {
w.WriteHeader(500)
}
return
}
for _, event := range events {
if event.Type == linebot.EventTypeMessage {
switch message := event.Message.(type) {
case *linebot.TextMessage:
source := event.Source
if source.Type == linebot.EventSourceTypeUser {
if _, err = bot.PushMessage(source.UserID, linebot.NewTextMessage(message.Text)).Do(); err != nil {
log.Print(err)
}
}
}
}
}
})
if err := http.ListenAndServe(":"+os.Getenv("PORT"), nil); err != nil {
log.Fatal(err)
}
}
Loading