在這個測試範例中,我們設定一個API接口去接收Line Webhook傳給我們關於使用者的訊息
Webhook上傳過來的資料會是Post方法
測試範例
@RestController
@RequestMapping("message")
public class MessageController {
static final Logger logger = LoggerFactory.getLogger(MessageController.class);
@PostMapping("back")
public void back(@RequestBody String message) {
logger.info(message);
}
}
我們可以利用後台頁面上提供的vertify按鈕驗證
記得要先把use webhook的設定打開喔
Line channel會發送以下資訊,有收到就代表設定成功了喔
{"destination:<url>,"events":[] }
但是events裡面的資訊是空白的,你一定很好奇真實使用者發送訊息的格式長啥樣
請先將line bot加入為自己的好友,掃Line bot後台提供的 QR code 就可以加入了喔!
加入後對 Line bot發訊息
可以收到以下資訊
{
"destination":<your destination>,
"events":
[
{
"type":"message",
"message":{"type":"text","id":"17790051739061","text":"Hello"},
"webhookEventId":<your webhookEventId>,
"deliveryContext":{"isRedelivery":false},
"timestamp":1678626966080,
"source":{"type":"user","userId":<your userid>},
"replyToken":<your replyToken>,"mode":"active"
}
]
}
可以發現 除了使用者資訊,Line還會再給
replyToken:用來回覆該使用者訊息
userId:來判斷發送訊息的是哪位使用者
知道訊息格式後,就可以寫個Java 物件去mapping,在將其存進mongodb內
@Data
public class DeliveryContext {
private Boolean isRedelivery;
}
@Data
public class Message {
private String type;
private String id;
private String text;
}
@Data
public class Source {
private String type;
private String userId;
}
@Data
public class Event {
private String type;
private Message message;
private String webhookEventId;
private DeliveryContext deliveryContext;
private String timestamp;
private Source source;
private String replyToken;
private String mode;
}
@Data
public class LineMsgBack {
private String destination;
private Event[] events;
}
Repository
public interface LineMessageRepository extends MongoRepository<LineMsgBack, String>{}
Controller
@RestController
@RequestMapping("message")
public class MessageController {
static final Logger logger = LoggerFactory.getLogger(MessageController.class);
@Autowired
private LineMessageRepository lineMessageRepository;
@PostMapping("back")
public void back(@RequestBody LineMsgBack message) {
logger.info(String.valueOf(message));
lineMessageRepository.save(message);
}
}
接著查找資料庫,確定是否存取成功
#先開啟mongo db
#先開啟mongosh
use <資料庫名稱>;
show collections;
db.lineMsgBack.find({}); #Show data
接著下一篇我會講解該如何從mongo db根據使用者id取出資料,並且在回覆給使用者自訂訊息
如果有任何問題歡迎留言在底下跟我分享喔
2023/03/27
不好意思,上面 Event 漏了一個類別 Source 已補上
Line Message API + MongoDB 串接實作(三)查詢使用者訊息資料