react+laravel从零开始构建chatbot(003接入图灵机器人与之聊天)

239 阅读2分钟

回顾一下:

第一篇:使用@livechat/ui-kit UI 和 react 开发一个聊天机器人的界面,用timeout模拟echo效果,无后端。

第二篇:laravel后端处理消息,返回echo的json串给前端。

本篇,对laravel中的echo功能进行修改,用图灵机器人的api替换echo。这样,用户就可以与机器人沟通交流了。

一、注册和建立一个图灵机器人

去 www.tuling123.com 注册一个账号,建立一个机器人就可以了。

如图所示,是apikey的地方,后续需要用到。

密钥后面的开关不要打开,否则api调用会出现错误。

二、安装和使用guzzle

guzzle是一个http的客户端,可以发送get、post、put、delete等请求。

1、输入命令安装guzzle:

composer require guzzlehttp/guzzle:^7.0

2、在 app/Http/Controllers/Chatbot.php 中增加:

use GuzzleHttp\Client;

3、修改 app/Http/Controllers/Chatbot.php 中的echo函数:

更改前:

public function echo(Request $request){
    $data = $request->json()->all();
    $text = $data['text'];
    $echoText = "{$text} too";
    return response()->json($echoText);
}

更改后:

public function echo(Request $request){
    $data = $request->json()->all();
    $text = $data['text'];
    // $echoText = "{$text} too";
    $url = 'http://openapi.tuling123.com/openapi/api/v2';
    $jsonData = array(
        'reqType' => 0,
        'perception' => array(
            'inputText' => array(
                'text'=>$text
            )
        ),
        'userInfo'=>array(
            'apiKey'=>'2a85851a4eea7a2fe1288b4e0ab0fcba',
            'userId'=>'chatbot'
        )
    );
    $client = new \GuzzleHttp\Client();
    $res = $client->post($url, [ 'json' => $jsonData ]);
    $json = json_decode($res->getBody()->getContents());
    $msg = $json->{'results'}[0]->{'values'}->{'text'};
    return response()->json($msg);
}

其中,apiKey填写你账号下建立的图灵机器人的apiKey。

三、最终效果

这个时候,试一下:

竟然次数超过限制了。

可见,还需要做个“异常拦截”。这里暂时不做拦截了。再创建一个机器人,用新的key。

现在,智能聊天机器人就做好了。

其实没什么技术含量,毕竟UI是别人的,API也是别人的。但是,把这些整合到一起,就成了自己的。

思考:

1、为什么不直接在react里调用图灵机器人的api? 2、API网关的原理及作用 3、饱和式API,当一个API不提供服务时,切换到另一个API,以降低对用户造成的影响。