ChatOps,唤醒你的原型体 Javis

395 阅读4分钟

我们一直在思考未来的工作方式将走向何处,最后在 ChatOps 上找到了属于这个时代的答案。有关于 ChatOps,《ChatOps的前世,今生和未来》,是我在平台上看到较为详尽的一篇介绍,这里无须再次赘述。而其解放了日复一日繁琐工作内容的同时,也带来了个性化工作方式,佐之与出乎意料的惊喜。

试着描绘一下你所能想象到的未来景象,那里或许会有霓虹与 LED 闪烁的赛博朋克

或许有穿梭游于楼宇之间的飞行器

或许有全智能化的家居设备

但必然出现的是各类呼出式的各类智能助手。在引爆漫威电影热度的经典系列钢铁侠中,Javis 是这位魅力型科技英雄的好伙伴。除了在生活中的调侃

Javis 更是在每件机甲研发与令人肾上腺素飙升的战斗过程中的左膀右臂。

正如预言一般的凡尔纳小说,今时今日,找到一个属于你自己的 Javis 已经不再是一个类似超级英雄一般的幻想。今天为大家介绍的就是如何创造一款 Javis 的原型机——图灵机器人。

效果图

效果图

接下来就让我们在最短的时间内让「Javis」诞生在倍洽之上:

Javis

首先你需要在倍洽上创建一个沟通团队,它是 Javis-1号-图灵的孵化平台。

然后需要在Turing Robot上注册账号,拿到调用图灵机器人的 key:

接下来我们要在 BearyChat 上设置 Outgoing 机器人,在其中设置触发词为你想要的机器人名字。真的要「Javis-1号-图灵」嘛?这个名字可不比丹妮莉丝·坦格利安的前缀简洁多少,所以我给这个机器人起了个代号——「牛萌萌」,听起来相比于 Javis 的胞妹 Friday 还要更接地气些。总之,「@ 触发词 」就可以随时调用机器人进行对话了。

考虑到倍洽的新手村村民,你只需要按照下图,点击团队域名旁的按钮在下拉菜单中找到「机器人管理」,点击进入机器人管理面板。

点击右上角的添加机器人

在弹出的面板中选择「自定义机器人」即可找到 Outgoing

接下来需要创建一个 bearychat.php 的文件:

<?php
/**
 * @abstract 用于转换bearychat机器人和图灵机器人之间的转换
 * @author aishan
 * @date 2015-10-26
 * Bearychat:https://bearychat.com/
 * 图灵机器人:http://www.tuling123.com
 * 由于bearychat的outgoing机器人是post指定类型数据到某处,而图灵机器人接收信息是get方式,并且图灵机器人返回的数据形式之于Bearychat机器人
 * 需要接收的返回数据类型也是有一定的出入,所以需要此文件做个中转
 */
require_once 'curl.php';//引入curl类
$content = file_get_contents("php://input");//读取bearychat机器人post过来的数据
$content_arr=json_decode($content);//json转对象
$info=urlencode(substr($content_arr->text,11));//获取传过来的内容中的text字段并截取实际内容部分,去掉触发bearychat机器人的前缀
$key='2d6************************d52';// 图灵机器人网站获取的key
$request_url="http://www.tuling123.com/openapi/api?key=".$key."&info=".$info;//拼接图灵机器人所需请求url
$curl=new CURL();
$request=$curl->vget($request_url);//发送请求
$request=json_decode($request,1);//将请求转换成数组,由于图灵机器人的菜谱、列车等查询会涉及到返回list形式数据,而bearychat机器人默认不能处理,故将图灵机器人返回的list数据转化拼接到text中
if(isset($request['list'])){//如果有list形式数据,则进行转换处理
    $list=$request['list'];
    $text=$request['text'].PHP_EOL;//取到text数据,开始拼接
    for($i=1;$i<=3;$i++){//在list中的数据可能会有很多,为了bearychat机器人返回数据不至于过多,将最多只取前三条数据
        if(!isset($list[$i])){
            break;
        }
        $val=$list[$i];
        $list_key=array_keys($val);
        foreach($list_key as $key_val){
            if(!in_array($key_val,array('icon'))){//由于icon图标在bearychat上无法显示,所以此处直接抛弃
                $text.=$val[$key_val].PHP_EOL;
            }
        }
    }

    $request['text']=$text;//将拼接好的text数据赋值
    unset($request['list']);//丢弃list数据
}

if(isset($request['url'])){//此处是当询问图灵机器人“xxx的照片”,会返回url形式数据,也拼接到text之后
    $text=$request['text'].PHP_EOL.$request['url'];
    $request['text']=$text;
    unset($request['url']);
}
$request['text']=str_replace('<br>',PHP_EOL,$request['text']);//最后图灵机器人返回的text数据会以<br>作为换行,而<br>在bearychat中不被转义,所以此处要将<br>标签替换
echo json_encode($request);

在其中引入的 curl.php 文件:

<?php

class CURL
{
    function vget($url){ // 模拟获取内容函数
        $curl = curl_init(); // 启动一个CURL会话
        curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); // 从证书中检查SSL加密算法是否存在
        curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转
        curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer
        curl_setopt($curl, CURLOPT_HTTPGET, 1); // 发送一个常规的Post请求
        curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环
        curl_setopt($curl, CURLOPT_HEADER, 0); // 显示返回的Header区域内容
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
        $tmpInfo = curl_exec($curl); // 执行操作
        if (curl_errno($curl)) {
            echo 'Error'.curl_error($curl);
        }
        curl_close($curl); // 关闭CURL会话
        return $tmpInfo; // 返回数据
    }
}

最后,有关于图灵机器人的相关设置只需要在图灵机器人网站做设置就好,这样你的「Javis」就已经孵化成功了。

我知道,我知道,不同去猜,你不出意外地也将你的机器人也命名为了 Javis,OK,那么接下来只需要说出那句经典「密语」:

本文参考S & J 的博客

倍洽是个强大的开放平台,我们拥抱开放性的未来,并给予我们的用户最大程度的自由:支持开放 API 接口的服务对接,并同时内置「Incoming」、「Outgoing」、「Hubot」三种自定义机器人。通过自定义机器人自定义你的工作方式,在效率大幅提升的同时,给您个性化工作的自由。