Facebook Messenger接入(java接入方式)

事前準備,您需要有一個Facebook app,也要有一個粉絲頁,你還要是粉絲頁的管理員

1、進入到您的應用添加Messenger 平臺

2、進入到設置,需要添加您要的粉絲頁主頁,然後再添加Webhooks

3、Webhooks驗證的開發,進入到開發文檔,這裏官方是使用js的,我們這裏使用java進行開發驗證,從文檔上看,我們需要做兩件事,寫一個/webhook的驗證接口,其中是區分get和post,get是用來驗證的,post是用來接收信息的,這裏的返回內容都是有要求的,按文檔的做就行了,驗證的參數有三個hub.mode,hub.verify_token,hub.challenge,hub.verify_token參數就是我們自己定義的一個驗證token,再設置Webhook的時候需要填寫的。而接收的post方法,Facebook是以json的數據過來的,字段是看你發什麼信息,基礎的是page字段,entry字段,entry就是消息的主體。

 

4、回到應用的Messenger設置,Webhook設置驗證後需要增加權限,messages、messaging_postbacks等基礎的權限,根據您的需要進行添加即可。重點來了,到這裏全部設置好之後我們就可以再粉絲頁發個消息進行測試了,劃重點,考試送分的,測試的fb賬號需要是管理員,進入到您的粉絲頁主頁發條信息

5、在我們接收消息的方法裏面可以收到fb發過來的信息

{"object":"page","entry":[{"id":"1105231312976257","time":1587629080411,"messaging":[{"sender":{"id":"2764402560274235"},"recipient":{"id":"1105231312976257"},"timestamp":1587629079993,"message":{"mid":"m_SUQ5zeaI3BGC3oSwxs7at6FWwx-_n2TKGDjWsi318asN8PKos_gt5WqrLnQAby7hh4Pj0QyRUwnf5_4i5bxiQg","text":"hello"}}]}]}

6、接口的簡單編寫

驗證接口:

/**
	 * fb Webhook驗證
	 * @param mode
	 * @param verifyToken
	 * @param challenge
	 * @return
	 */
	@RequestMapping(value="/webhook",method=RequestMethod.GET)
	@ResponseBody
	public final ResponseEntity setupWebhookVerification(@RequestParam("hub.mode") String mode,
			@RequestParam("hub.verify_token") String verifyToken, @RequestParam("hub.challenge") String challenge,HttpServletRequest request) {
		
		logger.info("getHeadersInfo:"+JSON.toJSONString(GUtil.getHeadersInfo(request)));
		logger.info("getParamsInfo:"+JSON.toJSONString(GUtil.getParamsInfo(request)));
		
		logger.info("mode:"+mode+"\n verifyToken:"+verifyToken+"\n challenge:"+challenge);
		System.out.println("----getwebhook12-----");
		//需要看過來的日誌
		
		if (mode.equalsIgnoreCase("subscribe") && VerificationFbToken.equals(verifyToken)) {
			return ResponseEntity.ok(challenge);
		} else {
			return new ResponseEntity(HttpStatus.FORBIDDEN);
		}
	}

接收消息接口

/**
	 * 接收fb發送的信息
	 * @param fbReqBody
	 * @param request
	 * @param response
	 * @return
	 */
	@RequestMapping(value="/webhook",method=RequestMethod.POST)
	@ResponseBody
	public ResponseEntity setUpWebhookMessage(HttpServletRequest request) {

		logger.info("getHeadersInfo:"+JSON.toJSONString(GUtil.getHeadersInfo(request)));
		logger.info("getParamsInfo:"+JSON.toJSONString(GUtil.getParamsInfo(request)));
		
		BufferedReader br;
		try {
			br = new BufferedReader(new InputStreamReader((ServletInputStream) request.getInputStream(), "utf-8"));
			StringBuffer sb = new StringBuffer("");
			String temp;
			while ((temp = br.readLine()) != null) { 
			  sb.append(temp);
			}
			br.close();
			String params = sb.toString();
			
			logger.info("paramsjson:"+params);
			System.out.println("返回數據:"+params);
			
			JSONObject json= JSON.parseObject(params);
			
			if(!json.getString("object").equalsIgnoreCase("page")) {
				return new ResponseEntity(HttpStatus.NOT_FOUND);
			}else {
				return ResponseEntity.ok("EVENT_RECEIVED");
			}

		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			
			return new ResponseEntity(HttpStatus.NOT_FOUND);
		} 

	}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章