智能聊天机器人之图灵机器人
android,聊天,机器人2016-06-08
今天从慕课网学习了图灵机器人的实现,感觉很有意思。视频地址:点击打开链接,因为视频是一年多以前的,现在图灵官网的api接口已经变了,所以视频仅作参考,本文是基于最新api讲解的。
无聊的时候可以找它陪你聊天,想想也挺有趣的,下面就看看具体的实现吧。
聊天功能的实现其实是借用了图灵机器人的第三方jar包,如果仅仅是实现聊天,几行代码就可以搞定了,所以重点其实是布局的实现。
要完成这个聊天机器人,大致需要这么几步:
1、需要到图灵机器人官网注册一个账号,这样在个人中心就可以看到你的API key和secret了,这两个信息代码里面会用到;
2、在个人中心可以设置机器人的一些信息,比如:年龄,爱好,地址等等。。。;
3、下载文档说明和SDK;
以上是准备工作,下面终于开始正式编码啦~
4、建立新的Android工程,并把下载的jar包导入工程(下载的jar包里面有android-support-v4.jar,而我使用的jdk本身包含有这个,所以不要导入这个,不然编译报错)
5、对图灵SDK进行初始化,如下:
SDKInitBuilder builder = new SDKInitBuilder(this) .setSecret(TURING_SECRET).setTuringKey(TURING_APIKEY).setUniqueId(UNIQUEID); SDKInit.init(builder, new InitListener() { @Override public void onFail(String error) { Log.i(TAG, "onFail() called with: " + "error = [" + error + "]"); } @Override public void onComplete() { // 获取userid成功后,才可以请求Turing服务器,需要请求必须在此回调成功,才可正确请求 mTuringApiManager = new TuringApiManager(MainActivity.this); mTuringApiManager.setHttpListener(myHttpConnectionListener); } }); HttpConnectionListener myHttpConnectionListener = new HttpConnectionListener() { @Override public void onError(ErrorMessage errorMessage) { Log.i(TAG, "onError() errorMessage = " + errorMessage.getMessage() + " code = " + errorMessage.getCode()); Toast.makeText(MainActivity.this, "请检查网络是否正常", Toast.LENGTH_SHORT).show(); } @Override public void onSuccess(RequestResult requestResult) { if (requestResult != null) { Log.i(TAG, "onSuccess: " + requestResult.getContent().toString()); try { JSONObject jsonObj = new JSONObject(requestResult.getContent().toString()); if (jsonObj.has("text")){ String result = jsonObj.get("text").toString(); //接收到的消息 ... } } catch (JSONException e) { e.printStackTrace(); } } } };
6、发送消息到服务器,接收消息的地方见上面代码,至此就完成了发送和接收消息的过程,有木有感觉很简单呢?
mTuringApiManager.requestTuringAPI(new String(sendMsg)); //发送消息
7、关键是需要注意下布局的实现,聊天展示使用的是ListView,根据消息是“接收过来的”还是“发送出去的”来动态加载不同的布局,因此需要准备两套布局,具体实现可以下载代码参考,这里就不详细展开了。
有几点需要说明下:
1、图灵机器人还提供了语音相关的接口,所以可以在此基础上完成语音聊天功能;
2、我的MainActivity是继承的AppCompatActivity,设置requestWindowFeature(Window.FEATURE_NO_TITLE);没有生效,解决办法有两个:一、继承Activity二、加上语句:getSupportActionBar().hide();
3、发送消息的布局视频中原本使用的是LinearLayout,这是有问题的,如果发送的消息太长,会挡住自己的头像,所以我改成了RelativeLayout,Linearlayout试了好几次均没有成功;
代码下载地址:点我下载吧