iT邦幫忙

0

Line Message API + MongoDB 串接實作(二)接收訊息

  • 分享至 

  • xImage
  •  

在這個測試範例中,我們設定一個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 串接實作(三)查詢使用者訊息資料


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言