使用 Go 建立 Line 聊天機器人服務

建立頻道

登入 LINE Developers 網頁,選擇 Messaging API 產品,建立一個 Channel。

建立專案

新增專案。

1
2
mkdir line-chat
cd line-chat

啟用 Go Modules。

1
go mod init

下載 linebot 套件。

1
go get github.com/line/line-bot-sdk-go/linebot

建立 main.go 檔:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package main

import (
_ "github.com/joho/godotenv/autoload"
"github.com/line/line-bot-sdk-go/linebot"
"log"
"net/http"
"os"
)

var (
client *linebot.Client
err error
)

func main() {
// 建立客戶端
client, err = linebot.New(os.Getenv("CHANNEL_SECRET"), os.Getenv("CHANNEL_ACCESS_TOKEN"))

if err != nil {
log.Println(err.Error())
}

http.HandleFunc("/callback", callbackHandler)

log.Fatal(http.ListenAndServe(":84", nil))
}

func callbackHandler(w http.ResponseWriter, r *http.Request) {
// 接收請求
events, err := client.ParseRequest(r)

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:
// 回覆訊息
if _, err = client.ReplyMessage(event.ReplyToken, linebot.NewTextMessage(message.Text)).Do(); err != nil {
log.Println(err.Error())
}
}
}
}
}

新增 .env 檔:

1
2
CHANNEL_SECRET=
CHANNEL_ACCESS_TOKEN=
  • CHANNEL_SECRET 環境變數填入 Basic settings 頁面的 Channel secret
  • CHANNEL_ACCESS_TOKEN 環境變數填入 Messaging API 頁面的 Channel access token

最後,將專案部署到主機。

設定

  1. 進到 Messaging API 頁面,設置應用程式的「Webhook URL」。
1
https://line-chat.xxx.com/callback
  1. 點選 Verify 按鈕。

  2. 啟用 webhook。

  3. 進到 LINE Official Account Manager 頁面的「回應設定」,停用「自動回應訊息」。

聊天

進到「主頁」,點選「加入好友」,使用行動條碼加入好友。

程式碼

參考資料