我們一直在思考未來的工作方式將走向何處,最后在 ChatOps 上找到了屬于這個時代的答案。有關(guān)于 ChatOps,《ChatOps的前世,今生和未來》,是我在平臺上看到較為詳盡的一篇介紹,這里無須再次贅述。而其解放了日復(fù)一日繁瑣工作內(nèi)容的同時,也帶來了個性化工作方式,佐之與出乎意料的驚喜。
試著描繪一下你所能想象到的未來景象,那里或許會有霓虹與 LED 閃爍的賽博朋克

或許有穿梭游于樓宇之間的飛行器

或許有全智能化的家居設(shè)備

但必然出現(xiàn)的是各類呼出式的各類智能助手。在引爆漫威電影熱度的經(jīng)典系列鋼鐵俠中,Javis 是這位魅力型科技英雄的好伙伴。除了在生活中的調(diào)侃

Javis 更是在每件機(jī)甲研發(fā)與令人腎上腺素飆升的戰(zhàn)斗過程中的左膀右臂。

正如預(yù)言一般的凡爾納小說,今時今日,找到一個屬于你自己的 Javis 已經(jīng)不再是一個類似超級英雄一般的幻想。今天為大家介紹的就是如何創(chuàng)造一款 Javis 的原型機(jī)——圖靈機(jī)器人。


接下來就讓我們在最短的時間內(nèi)讓「Javis」誕生在倍洽之上:

首先你需要在倍洽上創(chuàng)建一個溝通團(tuán)隊,它是 Javis-1號-圖靈的孵化平臺。
然后需要在 Turing Robot 上注冊賬號,拿到調(diào)用圖靈機(jī)器人的 key:

接下來我們要在 BearyChat 上設(shè)置 Outgoing 機(jī)器人,在其中設(shè)置觸發(fā)詞為你想要的機(jī)器人名字。真的要「Javis-1號-圖靈」嘛?這個名字可不比丹妮莉絲·坦格利安的前綴簡潔多少,所以我給這個機(jī)器人起了個代號——「牛萌萌」,聽起來相比于 Javis 的胞妹 Friday 還要更接地氣些??傊?,「@ 觸發(fā)詞 」就可以隨時調(diào)用機(jī)器人進(jìn)行對話了。

考慮到倍洽的新手村村民,你只需要按照下圖,點(diǎn)擊團(tuán)隊域名旁的按鈕在下拉菜單中找到「機(jī)器人管理」,點(diǎn)擊進(jìn)入機(jī)器人管理面板。

點(diǎn)擊右上角的添加機(jī)器人

在彈出的面板中選擇「自定義機(jī)器人」即可找到 Outgoing

接下來需要創(chuàng)建一個 bearychat.php 的文件:
<?php
/**
* @abstract 用于轉(zhuǎn)換bearychat機(jī)器人和圖靈機(jī)器人之間的轉(zhuǎn)換
* @author aishan
* @date 2015-10-26
* Bearychat:https://bearychat.com/
* 圖靈機(jī)器人:http://www.tuling123.com
* 由于bearychat的outgoing機(jī)器人是post指定類型數(shù)據(jù)到某處,而圖靈機(jī)器人接收信息是get方式,并且圖靈機(jī)器人返回的數(shù)據(jù)形式之于Bearychat機(jī)器人
* 需要接收的返回數(shù)據(jù)類型也是有一定的出入,所以需要此文件做個中轉(zhuǎn)
*/
require_once 'curl.php';//引入curl類
$content = file_get_contents("php://input");//讀取bearychat機(jī)器人post過來的數(shù)據(jù)
$content_arr=json_decode($content);//json轉(zhuǎn)對象
$info=urlencode(substr($content_arr->text,11));//獲取傳過來的內(nèi)容中的text字段并截取實(shí)際內(nèi)容部分,去掉觸發(fā)bearychat機(jī)器人的前綴
$key='2d6************************d52';// 圖靈機(jī)器人網(wǎng)站獲取的key
$request_url="http://www.tuling123.com/openapi/api?key=".$key."&info=".$info;//拼接圖靈機(jī)器人所需請求url
$curl=new CURL();
$request=$curl->vget($request_url);//發(fā)送請求
$request=json_decode($request,1);//將請求轉(zhuǎn)換成數(shù)組,由于圖靈機(jī)器人的菜譜、列車等查詢會涉及到返回list形式數(shù)據(jù),而bearychat機(jī)器人默認(rèn)不能處理,故將圖靈機(jī)器人返回的list數(shù)據(jù)轉(zhuǎn)化拼接到text中
if(isset($request['list'])){//如果有l(wèi)ist形式數(shù)據(jù),則進(jìn)行轉(zhuǎn)換處理
$list=$request['list'];
$text=$request['text'].PHP_EOL;//取到text數(shù)據(jù),開始拼接
for($i=1;$i<=3;$i++){//在list中的數(shù)據(jù)可能會有很多,為了bearychat機(jī)器人返回數(shù)據(jù)不至于過多,將最多只取前三條數(shù)據(jù)
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圖標(biāo)在bearychat上無法顯示,所以此處直接拋棄
$text.=$val[$key_val].PHP_EOL;
}
}
}
$request['text']=$text;//將拼接好的text數(shù)據(jù)賦值
unset($request['list']);//丟棄list數(shù)據(jù)
}
if(isset($request['url'])){//此處是當(dāng)詢問圖靈機(jī)器人“xxx的照片”,會返回url形式數(shù)據(jù),也拼接到text之后
$text=$request['text'].PHP_EOL.$request['url'];
$request['text']=$text;
unset($request['url']);
}
$request['text']=str_replace('<br>',PHP_EOL,$request['text']);//最后圖靈機(jī)器人返回的text數(shù)據(jù)會以<br>作為換行,而<br>在bearychat中不被轉(zhuǎn)義,所以此處要將<br>標(biāo)簽替換
echo json_encode($request);
在其中引入的 curl.php 文件:
<?php
class CURL
{
function vget($url){ // 模擬獲取內(nèi)容函數(shù)
$curl = curl_init(); // 啟動一個CURL會話
curl_setopt($curl, CURLOPT_URL, $url); // 要訪問的地址
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 對認(rèn)證證書來源的檢查
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); // 從證書中檢查SSL加密算法是否存在
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自動跳轉(zhuǎn)
curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自動設(shè)置Referer
curl_setopt($curl, CURLOPT_HTTPGET, 1); // 發(fā)送一個常規(guī)的Post請求
curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 設(shè)置超時限制防止死循環(huán)
curl_setopt($curl, CURLOPT_HEADER, 0); // 顯示返回的Header區(qū)域內(nèi)容
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 獲取的信息以文件流的形式返回
$tmpInfo = curl_exec($curl); // 執(zhí)行操作
if (curl_errno($curl)) {
echo 'Error'.curl_error($curl);
}
curl_close($curl); // 關(guān)閉CURL會話
return $tmpInfo; // 返回數(shù)據(jù)
}
}
最后,有關(guān)于圖靈機(jī)器人的相關(guān)設(shè)置只需要在圖靈機(jī)器人網(wǎng)站做設(shè)置就好,這樣你的「Javis」就已經(jīng)孵化成功了。
我知道,我知道,不同去猜,你不出意外地也將你的機(jī)器人也命名為了 Javis,OK,那么接下來只需要說出那句經(jīng)典「密語」:

本文參考 S & J 的博客