博舍

微信开发之图灵机器人API接口调用 机器人接口是什么样的啊

微信开发之图灵机器人API接口调用

1、图灵官网

http://www.turingapi.com进入官网后,注册登录账号,然后完成个人认证(需要身份证+人脸的正反照)。认证完成之后应该会有5个免费的机器人,每个机器人自动回复上限是100次(其实是101次),用完之后第二天才能解除限制。

2、图灵API接入文档

接入说明注册图灵账号登入网站http://biz.turingos.cn/login注册账户编码方式UTF-8(调用图灵API的各个环节的编码方式均为UTF-8)

接口地址http接入:http://api.turingos.cn/turingos/api/v2https接入:https://api.turingos.cn/turingos/api/v2

若对数据通信有较高的安全要求,建议选择https接入方式来访问图灵服务,由于ssl层验证预计会额外多花费40~50ms。

请求方法Method:POSTContent-Type:application/json

请求参数请求示例:

{"reqType":0,"perception":{"inputText":{"text":"附近的酒店"},"inputImage":{"url":"imageUrl"},"selfInfo":{"location":{"city":"北京","province":"北京","street":"信息路"}}},"userInfo":{"apiKey":"","userId":""}}

具体的参数说明可以看官方API文档

3、根据请求参数,我们进行参数的封装,然后调用接口

这里我用JavaBean转Json,这里的对象都是用来转Json的,所以就不实现Serializable接口了

TuLingBean

importlombok.Data;@DatapublicclassTuLingBean{/**输入类型:0-文本(默认)、1-图片、2-音频*/privateintreqType=0;privatePerceptionperception;privateUserInfouserInfo;}

Perception

importlombok.Data;@DatapublicclassPerception{privateInputTextinputText;}

InputText

importlombok.Data;@DatapublicclassInputText{Stringtext;}

UserInfo

importlombok.Data;@DatapublicclassUserInfo{/**机器人标识*/privateStringapiKey;/**用户唯一标识*/privateStringuserId;}

TuLingAPI

importcom.wyz.project.weixin.util.WeixinUtil;importnet.sf.json.JSONArray;importnet.sf.json.JSONObject;importorg.springframework.stereotype.Service;@ServicepublicclassTuLingAPI{/***图灵机器人API*/privatestaticfinalStringTuLing_POST_URL="http://openapi.tuling123.com/openapi/api/v2";privatestaticfinalStringUSER_ID="wyz";/***对请求参数进行封装**@return*/privateStringrequest(Stringtext,StringapiKey){TuLingBeantuLingBean=newTuLingBean();tuLingBean.setReqType(0);Perceptionperception=newPerception();InputTextinputText=newInputText();inputText.setText(text);perception.setInputText(inputText);tuLingBean.setPerception(perception);UserInfouserInfo=newUserInfo();userInfo.setApiKey(apiKey);userInfo.setUserId(USER_ID);tuLingBean.setUserInfo(userInfo);//将java对象转成JSON格式JSONObjectjsonObject=JSONObject.fromObject(tuLingBean);returnjsonObject.toString();}/***获取响应的结果*@paramjsonObjStr*@return*/privateStringgetResponse(StringjsonObjStr){JSONObjectjsonObject=WeixinUtil.httpRequest(TuLing_POST_URL,"POST",jsonObjStr);JSONArrayjsonArray=(JSONArray)jsonObject.get("results");JSONObjectjsonObject1=(JSONObject)jsonArray.get(0);JSONObjectobject=(JSONObject)jsonObject1.get("values");Stringresult=object.getString("text");returnresult;}/***外部调用该方法返回图灵机器人响应的文本*@paramtext*@return*/privateStringsendMessage(Stringtext,Stringkey){StringjsonObjStr=this.request(text,key);returnthis.getResponse(jsonObjStr);}/**机器人id*/privatestaticString[]API_KEY={"1","2","3","4","5"};//记录当前机器人下标索引keyprivatestaticintKEY_INDEX=0;//判断所有的机器人key是都全部用完true都可用,false都不可用publicstaticbooleanTuLing_KEY_FLAG=true;/***递归方法*@paramtext*@return*/publicStringsend(Stringtext){if(TuLing_KEY_FLAG=false){return"机器人很累啦,明天再来吧";}Stringresult=this.sendMessage(text,API_KEY[KEY_INDEX]);//如果机器人超限制了,就换下一个机器人if("请求次数超限制!".equals(result)){KEY_INDEX++;//判断递归是否结束,当机器人API池中已经没有key可用了,递归结束if(KEY_INDEX>=API_KEY.length){//所有的机器人key已经不能用了,就将下标重置为0KEY_INDEX=0;TuLing_KEY_FLAG=false;return"机器人很累啦,明天再来吧";}returnthis.send(text);}returnresult;}}

SpringTask定时任务,每天凌晨恢复机器人的状态

@ComponentpublicclassTuLingTask{@Scheduled(cron="1-1001/1*?")publicvoidtest(){TuLingAPI.TuLing_KEY_FLAG=true;}}

记得在启动类上加注解@EnableScheduling开启SpringTask任务

4、返回请求的结果

CoreService

@ServicepublicclassCoreService{@ResourceprivateTuLingAPItuLingAPI;/***处理微信发来的请求**@paramrequest*@return*/publicStringprocessRequest(HttpServletRequestrequest){StringrespMessage=null;try{//默认返回的文本消息内容StringrespContent="请求处理异常,请稍候尝试!";//xml请求解析调用消息工具类MessageUtil解析微信发来的xml格式的消息,解析的结果放在HashMap里;MaprequestMap=MessageUtil.parseXml(request);//发送方帐号(open_id)下面三行代码是:从HashMap中取出消息中的字段;StringfromUserName=requestMap.get("FromUserName");//公众帐号StringtoUserName=requestMap.get("ToUserName");//消息类型StringmsgType=requestMap.get("MsgType");//回复文本消息组装要返回的文本消息对象;TextMessagetextMessage=newTextMessage();textMessage.setToUserName(fromUserName);textMessage.setFromUserName(toUserName);textMessage.setCreateTime(newDate().getTime());textMessage.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_TEXT);textMessage.setFuncFlag(0);//由于href属性值必须用双引号引起,这与字符串本身的双引号冲突,所以要转义//textMessage.setContent("欢迎访问百度!");//将文本消息对象转换成xml字符串respMessage=MessageUtil.textMessageToXml(textMessage);/***演示了如何接收微信发送的各类型的消息,根据MsgType判断属于哪种类型的消息;*///接收用户发送的文本消息内容Stringcontent=requestMap.get("Content");//创建图文消息NewsMessagenewsMessage=newNewsMessage();newsMessage.setToUserName(fromUserName);newsMessage.setFromUserName(toUserName);newsMessage.setCreateTime(newDate().getTime());newsMessage.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_NEWS);newsMessage.setFuncFlag(0);//文本消息if(msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)){/*API的调用在这里*/respContent=tuLingAPI.send(content);}//图片消息elseif(msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_IMAGE)){respContent="您发送的是图片消息!";}//地理位置消息elseif(msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_LOCATION)){respContent="您发送的是地理位置消息!";}//链接消息elseif(msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_LINK)){respContent="您发送的是链接消息!";}//音频消息elseif(msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_VOICE)){respContent="您发送的是音频消息!";}//事件推送elseif(msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_EVENT)){//事件类型StringeventType=requestMap.get("Event");//订阅if(eventType.equals(MessageUtil.EVENT_TYPE_SUBSCRIBE)){respContent="欢迎关注微信公众号";}//取消订阅elseif(eventType.equals(MessageUtil.EVENT_TYPE_UNSUBSCRIBE)){//TODO取消订阅后用户再收不到公众号发送的消息,因此不需要回复消息}//自定义菜单点击事件elseif(eventType.equals(MessageUtil.EVENT_TYPE_CLICK)){//事件KEY值,与创建自定义菜单时指定的KEY值对应StringeventKey=requestMap.get("EventKey");if(eventKey.equals("11")){respContent="菜单项被点击!";}elseif(eventKey.equals("70")){ListarticleList=newArrayList();//单图文消息Articlearticle=newArticle();article.setTitle("标题");article.setDescription("描述内容");article.setPicUrl("图片");article.setUrl("跳转连接");articleList.add(article);//设置图文消息个数newsMessage.setArticleCount(articleList.size());//设置图文消息newsMessage.setArticles(articleList);//将图文消息对象转换为XML字符串respMessage=MessageUtil.newsMessageToXml(newsMessage);returnrespMessage;}}}//组装要返回的文本消息对象;textMessage.setContent(respContent);//调用消息工具类MessageUtil将要返回的文本消息对象TextMessage转化成xml格式的字符串;respMessage=MessageUtil.textMessageToXml(textMessage);}catch(Exceptione){e.printStackTrace();}returnrespMessage;}}5、测试结果

这机器人。。。。。。

接口是什么什么是接口

什么是接口?

1、什么是接口?接口一般来讲分为两种:

(1)程序内部的接口:方法与方法、模块与模块之间的交互,程序内部抛出的接口,如登录发帖,发帖就必须要登录,如果不登录不能发帖,发帖和登录这两个模块之间就要有交互,就会抛出一个接口,进行内部系统调用。

(2)系统对外的接口:从别人的网站或服务器上获取资源或信息,对方不会提供数据库共享,只能提供一个写好的方法来获取数据,如购物网站和第三方支付之间,购物网站支付时可选择第三方支付方法,但第三方不会提供自己的数据库给购物网站,只会提供一个接口,供购物网站进行调用。

2、接口的分类?

接口分类一般分为两种:

(1)webService接口:走soap协议通过http传输,请求报文和返回报文都是xml格式的。测试时需要通过工具才能进行调用、测试。少数公司还在使用这种接口,如医院等行业。

(2)httpapi接口:走http协议,通过路径来区分调用的方法,请求和报文都是key-value形式的,返回报文一般都是json串,有get和post等方法。目前来讲,是最常用的。

3、接口返回数据

接口返回的数据一般都是json串,json是一种通用的数据类型,格式为key-value。

4、前端、后端区别?前端:客户端。通俗来讲,一般情况下,web端或app端能看见的地方以及一些简单的校验,都属于前端。

(ps:网站上显示的后台管理不属于后端哦)

后端:服务器端。web端或app端的系统逻辑、如购物时扣除余额,微博发到哪里等都是由后端实现的。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

上一篇

下一篇