update
parent
b17b595948
commit
8c697dc874
|
@ -13,8 +13,8 @@ import (
|
||||||
|
|
||||||
func ApiUpdateEmail(c *gin.Context) {
|
func ApiUpdateEmail(c *gin.Context) {
|
||||||
data := struct {
|
data := struct {
|
||||||
ID string `json:"id"`
|
ID string `json:"id" binding:"required"`
|
||||||
Email string `json:"email"`
|
Email string `json:"email" binding:"required,email"`
|
||||||
}{}
|
}{}
|
||||||
if err := c.ShouldBindJSON(&data); err != nil {
|
if err := c.ShouldBindJSON(&data); err != nil {
|
||||||
panic(err)
|
panic(err)
|
29
api_join.go
29
api_join.go
|
@ -30,22 +30,21 @@ func Follow(event *linebot.Event) {
|
||||||
log.Debug().Str("user", uid).Msg("user unblocked.")
|
log.Debug().Str("user", uid).Msg("user unblocked.")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Welcome and ask for
|
// Welcome and ask for profile
|
||||||
msg := linebot.NewTextMessage("歡迎使用台新人壽智慧聊天服務! 請您協助核對您的身分。")
|
msg := linebot.NewTextMessage("歡迎使用台新人壽智慧聊天服務! 請您協助核對您的身分。")
|
||||||
|
|
||||||
template := linebot.NewCarouselTemplate(
|
// get profiles
|
||||||
linebot.NewCarouselColumn(
|
var profs []Profile
|
||||||
"https://imgs.gotrip.hk/wp-content/uploads/2017/08/brown-innocent_19545495235b69335e17060.jpg",
|
DB.Limit(10).Find(&profs)
|
||||||
"Profile A", "A 很帥 A 很棒",
|
columns := make([]*linebot.CarouselColumn, len(profs))
|
||||||
linebot.NewPostbackAction("選擇", "select=a", "我是A", ""),
|
for i, prof := range profs {
|
||||||
),
|
columns[i] = linebot.NewCarouselColumn(
|
||||||
linebot.NewCarouselColumn(
|
prof.Img, prof.Name, prof.Brief,
|
||||||
"https://imgs.gotrip.hk/wp-content/uploads/2017/08/brown-innocent_19545495235b69335e17060.jpg",
|
linebot.NewPostbackAction("我是"+prof.Name, "select="+prof.Name, "我是"+prof.Name, ""),
|
||||||
"Profile B", "B 很帥 B 很棒",
|
)
|
||||||
linebot.NewPostbackAction("選擇", "select=b", "我是B", ""),
|
}
|
||||||
),
|
template := linebot.NewCarouselTemplate(columns...)
|
||||||
)
|
profiles := linebot.NewTemplateMessage("請核對您的身分", template)
|
||||||
profiles := linebot.NewTemplateMessage("請使用手機讀取", template)
|
|
||||||
|
|
||||||
if _, err := SendMessage(event.ReplyToken, uid, msg, profiles); err != nil {
|
if _, err := SendMessage(event.ReplyToken, uid, msg, profiles); err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
|
@ -72,7 +71,7 @@ func ApiSelectProfile(event *linebot.Event) {
|
||||||
}
|
}
|
||||||
|
|
||||||
go func(uid string) {
|
go func(uid string) {
|
||||||
time.Sleep(time.Second * 10)
|
time.Sleep(time.Second * 5)
|
||||||
if _, err := SendMessage("", uid, DefaultMsg()); err != nil {
|
if _, err := SendMessage("", uid, DefaultMsg()); err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,6 +45,8 @@ func postback(event *linebot.Event) {
|
||||||
switch {
|
switch {
|
||||||
case strings.HasPrefix(data, "select="):
|
case strings.HasPrefix(data, "select="):
|
||||||
ApiSelectProfile(event)
|
ApiSelectProfile(event)
|
||||||
|
case strings.HasPrefix(data, "claim="):
|
||||||
|
ApiPrepareClaim(event)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -67,6 +69,7 @@ func controller(event *linebot.Event) {
|
||||||
case msg.Text == "我的保單":
|
case msg.Text == "我的保單":
|
||||||
ApiMyOrders(event)
|
ApiMyOrders(event)
|
||||||
case strings.HasPrefix(msg.Text, "我是"):
|
case strings.HasPrefix(msg.Text, "我是"):
|
||||||
|
case strings.HasPrefix(msg.Text, "我要理賠"):
|
||||||
|
|
||||||
case strings.HasPrefix(msg.Text, "幫我介紹"):
|
case strings.HasPrefix(msg.Text, "幫我介紹"):
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,43 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/line/line-bot-sdk-go/v7/linebot"
|
||||||
|
)
|
||||||
|
|
||||||
|
func ApiPrepareClaim(event *linebot.Event) {
|
||||||
|
data := event.Postback.Data
|
||||||
|
data = strings.TrimPrefix(data, "claim=")
|
||||||
|
prod := &Product{}
|
||||||
|
if err := DB.First(prod, "name = ?", data).Error; err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
order := &Order{}
|
||||||
|
if err := DB.First(order, "product_id = ? and user_id = ?", prod.ID, event.Source.UserID); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
DB.Model(order).Update("status", OrderClaiming)
|
||||||
|
|
||||||
|
for _, cat := range prod.Categories {
|
||||||
|
if cat.Name == "旅平" {
|
||||||
|
url := "https://bot.ework.tw/claim"
|
||||||
|
button := linebot.NewButtonsTemplate("", "", "請上傳收據",
|
||||||
|
linebot.NewURIAction("開啟上傳頁面", url))
|
||||||
|
msg := linebot.NewTemplateMessage(fmt.Sprintf("請前往 %v 上傳收據", url), button)
|
||||||
|
if _, err := SendMessage(event.ReplyToken, event.Source.UserID, msg); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
msg := linebot.NewTextMessage("我們收到您的申請囉! 稍後將由專人致電為您服務!")
|
||||||
|
sticker := linebot.NewStickerMessage("6632", "11825397")
|
||||||
|
|
||||||
|
if _, err := SendMessage(event.ReplyToken, event.Source.UserID, msg, sticker); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -6,7 +6,7 @@ func ApiListProduct(event *linebot.Event) {
|
||||||
leftBtn := linebot.NewMessageAction("修改資料", "修改資料")
|
leftBtn := linebot.NewMessageAction("修改資料", "修改資料")
|
||||||
rightBtn := linebot.NewMessageAction("我的保單", "我的保單")
|
rightBtn := linebot.NewMessageAction("我的保單", "我的保單")
|
||||||
template := linebot.NewConfirmTemplate("請問想辦理甚麼服務?", leftBtn, rightBtn)
|
template := linebot.NewConfirmTemplate("請問想辦理甚麼服務?", leftBtn, rightBtn)
|
||||||
msg := linebot.NewTemplateMessage("電腦版不支援此訊息, 請至手機上讀取", template)
|
msg := linebot.NewTemplateMessage("請問想辦理甚麼服務?", template)
|
||||||
if _, err := SendMessage(event.ReplyToken, event.Source.UserID, msg); err != nil {
|
if _, err := SendMessage(event.ReplyToken, event.Source.UserID, msg); err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,10 +3,10 @@ package main
|
||||||
import "github.com/line/line-bot-sdk-go/v7/linebot"
|
import "github.com/line/line-bot-sdk-go/v7/linebot"
|
||||||
|
|
||||||
func ApiMe(event *linebot.Event) {
|
func ApiMe(event *linebot.Event) {
|
||||||
leftBtn := linebot.NewMessageAction("修改資料", "修改資料")
|
leftBtn := linebot.NewURIAction("修改資料", "https://bot.ework.tw/profile")
|
||||||
rightBtn := linebot.NewMessageAction("我的保單", "我的保單")
|
rightBtn := linebot.NewMessageAction("我的保單", "我的保單")
|
||||||
template := linebot.NewConfirmTemplate("請問想辦理甚麼服務?", leftBtn, rightBtn)
|
template := linebot.NewConfirmTemplate("請問想辦理甚麼服務?", leftBtn, rightBtn)
|
||||||
msg := linebot.NewTemplateMessage("電腦版不支援此訊息, 請至手機上讀取", template)
|
msg := linebot.NewTemplateMessage("請問想辦理甚麼服務?", template)
|
||||||
if _, err := SendMessage(event.ReplyToken, event.Source.UserID, msg); err != nil {
|
if _, err := SendMessage(event.ReplyToken, event.Source.UserID, msg); err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
@ -14,11 +14,33 @@ func ApiMe(event *linebot.Event) {
|
||||||
|
|
||||||
func ApiMyOrders(event *linebot.Event) {
|
func ApiMyOrders(event *linebot.Event) {
|
||||||
var orders []Order
|
var orders []Order
|
||||||
DB.Find(&orders, "user_id = ?", event.Source.UserID)
|
DB.Order("product_id").Find(&orders, "user_id = ?", event.Source.UserID)
|
||||||
|
|
||||||
if len(orders) == 0 {
|
if len(orders) == 0 {
|
||||||
msg := linebot.NewTextMessage("您目前沒有保單, 歡迎前往「我要投保」專區選取保單。")
|
msg := linebot.NewTextMessage("您目前沒有保單, 歡迎前往「我想投保」專區選取保單。")
|
||||||
|
if _, err := SendMessage(event.ReplyToken, event.Source.UserID, msg); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
pids := make([]uint, len(orders))
|
||||||
|
for i := range orders {
|
||||||
|
pids[i] = orders[i].ProductID
|
||||||
|
}
|
||||||
|
var products []Product
|
||||||
|
if err := DB.Preload("Categories").Order("id").Find(&products, "id in ?", pids).Error; err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
columns := make([]*linebot.CarouselColumn, len(products))
|
||||||
|
for i, prod := range products {
|
||||||
|
columns[i] = linebot.NewCarouselColumn(
|
||||||
|
prod.Img, prod.Name, prod.Brief,
|
||||||
|
linebot.NewURIAction("保單詳細", "https://bot.ework.tw/product"),
|
||||||
|
linebot.NewPostbackAction("我要理賠", "claim="+prod.Name, "我要理賠", ""),
|
||||||
|
// linebot.NewPostbackAction("我是"+prof.Name, "select="+prof.Name, "我是"+prof.Name, ""),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
template := linebot.NewCarouselTemplate(columns...)
|
||||||
|
msg := linebot.NewTemplateMessage("您的保單資訊", template)
|
||||||
if _, err := SendMessage(event.ReplyToken, event.Source.UserID, msg); err != nil {
|
if _, err := SendMessage(event.ReplyToken, event.Source.UserID, msg); err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>核身</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>HI</h1>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,11 @@
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>上傳收據</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>上傳收據</h1>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,11 @@
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>保單詳細</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>保單細項</h1>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,11 @@
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>修改基本資料</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>基本資料</h1>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,15 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import _ "embed"
|
||||||
|
|
||||||
|
//go:embed assets/check.html
|
||||||
|
var check_web []byte
|
||||||
|
|
||||||
|
//go:embed assets/profile.html
|
||||||
|
var profile_web []byte
|
||||||
|
|
||||||
|
//go:embed assets/claim.html
|
||||||
|
var claim_web []byte
|
||||||
|
|
||||||
|
//go:embed assets/product.html
|
||||||
|
var product_web []byte
|
13
main.go
13
main.go
|
@ -70,6 +70,19 @@ func main() {
|
||||||
// setup route
|
// setup route
|
||||||
server.GET("/", func(c *gin.Context) { OK(c, "ok") })
|
server.GET("/", func(c *gin.Context) { OK(c, "ok") })
|
||||||
|
|
||||||
|
server.GET("/check", func(c *gin.Context) {
|
||||||
|
c.Writer.Write(check_web)
|
||||||
|
})
|
||||||
|
server.GET("/profile", func(c *gin.Context) {
|
||||||
|
c.Writer.Write(profile_web)
|
||||||
|
})
|
||||||
|
server.GET("/claim", func(c *gin.Context) {
|
||||||
|
c.Writer.Write(claim_web)
|
||||||
|
})
|
||||||
|
server.GET("/product", func(c *gin.Context) {
|
||||||
|
c.Writer.Write(product_web)
|
||||||
|
})
|
||||||
|
|
||||||
// setup api
|
// setup api
|
||||||
api := server.Group("api")
|
api := server.Group("api")
|
||||||
api.POST("/email", ApiUpdateEmail)
|
api.POST("/email", ApiUpdateEmail)
|
||||||
|
|
16
model.go
16
model.go
|
@ -29,6 +29,7 @@ type Profile struct {
|
||||||
|
|
||||||
Name string
|
Name string
|
||||||
Brief string
|
Brief string
|
||||||
|
Img string
|
||||||
|
|
||||||
CreatedAt time.Time
|
CreatedAt time.Time
|
||||||
UpdatedAt time.Time
|
UpdatedAt time.Time
|
||||||
|
@ -38,6 +39,7 @@ type Product struct {
|
||||||
ID uint `gorm:"primaryKey"`
|
ID uint `gorm:"primaryKey"`
|
||||||
|
|
||||||
Categories []Category `gorm:"many2many:product_categories;"`
|
Categories []Category `gorm:"many2many:product_categories;"`
|
||||||
|
Img string
|
||||||
Name string
|
Name string
|
||||||
Brief string
|
Brief string
|
||||||
Description string
|
Description string
|
||||||
|
@ -50,6 +52,15 @@ type Category struct {
|
||||||
Name string `gorm:"primaryKey"`
|
Name string `gorm:"primaryKey"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const (
|
||||||
|
OrderReceived = "RECEIVED"
|
||||||
|
OrderPrepared = "PREPARED"
|
||||||
|
OrderClaiming = "CLAIMING"
|
||||||
|
OrderClaimAccept = "CLAIM_ACCEPT"
|
||||||
|
OrderClaimReject = "CLAIM_REJECT"
|
||||||
|
OrderClaimPaid = "CLAIM_PAID"
|
||||||
|
)
|
||||||
|
|
||||||
type Order struct {
|
type Order struct {
|
||||||
ID string
|
ID string
|
||||||
|
|
||||||
|
@ -59,8 +70,8 @@ type Order struct {
|
||||||
Start time.Time
|
Start time.Time
|
||||||
End time.Time
|
End time.Time
|
||||||
Attachment string
|
Attachment string
|
||||||
|
Price float32
|
||||||
Price float32
|
Status string
|
||||||
|
|
||||||
CreatedAt time.Time
|
CreatedAt time.Time
|
||||||
UpdatedAt time.Time
|
UpdatedAt time.Time
|
||||||
|
@ -100,5 +111,6 @@ func (o *Order) BeforeCreate(tx *gorm.DB) (err error) {
|
||||||
if o.ID == "" {
|
if o.ID == "" {
|
||||||
o.ID = xid.New().String()
|
o.ID = xid.New().String()
|
||||||
}
|
}
|
||||||
|
o.Status = OrderReceived
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
@ -70,15 +70,7 @@ func middleware(c *gin.Context) {
|
||||||
|
|
||||||
func skip(c *gin.Context) bool {
|
func skip(c *gin.Context) bool {
|
||||||
switch filepath.Ext(c.Request.URL.Path) {
|
switch filepath.Ext(c.Request.URL.Path) {
|
||||||
case ".css":
|
case ".css", ".woff2", ".map", ".ico", ".js":
|
||||||
fallthrough
|
|
||||||
case ".woff2":
|
|
||||||
fallthrough
|
|
||||||
case ".map":
|
|
||||||
fallthrough
|
|
||||||
case ".ico":
|
|
||||||
fallthrough
|
|
||||||
case ".js":
|
|
||||||
return true
|
return true
|
||||||
default:
|
default:
|
||||||
return false
|
return false
|
||||||
|
|
2
util.go
2
util.go
|
@ -57,5 +57,5 @@ func DefaultMsg() *linebot.TemplateMessage {
|
||||||
linebot.NewMessageAction("我的資料", "我的資料"),
|
linebot.NewMessageAction("我的資料", "我的資料"),
|
||||||
linebot.NewMessageAction("辦理理賠", "辦理理賠"),
|
linebot.NewMessageAction("辦理理賠", "辦理理賠"),
|
||||||
)
|
)
|
||||||
return linebot.NewTemplateMessage(NO_COMPAT, msg)
|
return linebot.NewTemplateMessage("有甚麼我能為你服務的嗎?", msg)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue