Facebook Messenger接入(java接入方式)

事前准备,您需要有一个Facebook app,也要有一个粉丝页,你还要是粉丝页的管理员

1、进入到您的应用添加Messenger 平台

Facebook Messenger接入(java接入方式)_第1张图片

2、进入到设置,需要添加您要的粉丝页主页,然后再添加Webhooks

Facebook Messenger接入(java接入方式)_第2张图片

Facebook Messenger接入(java接入方式)_第3张图片

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就是消息的主体。

Facebook Messenger接入(java接入方式)_第4张图片

Facebook Messenger接入(java接入方式)_第5张图片

Facebook Messenger接入(java接入方式)_第6张图片

 

4、回到应用的Messenger设置,Webhook设置验证后需要增加权限,messages、messaging_postbacks等基础的权限,根据您的需要进行添加即可。重点来了,到这里全部设置好之后我们就可以再粉丝页发个消息进行测试了,划重点,考试送分的,测试的fb账号需要是管理员,进入到您的粉丝页主页发条信息

Facebook Messenger接入(java接入方式)_第7张图片

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);
		} 

	}

 

你可能感兴趣的:(Messenger,Facebook,Webook)