云眼Webhook使用手册

在用云眼A/B测试做试验时,可以把账户下的JSON类型配置文件或Web/H5试验所需的Javascript文件,放在客户自己的服务器上,而不再从云眼CDN网络上获取。这样做的好处是,可以省去对云眼CDN域名解析时间,减少网络延时,加快试验启动速度。但是,在修改试验配置时,在客户服务器上保存的JSON类型配置文件或Javascript文件需要随之更新,这如何做到呢?云眼提供了Webhook功能特性,可以实现存放在客户服务器上的试验配置文件和Javascript文件随试验配置的修改而自动更新。

添加Webhook

如果把云眼AB测试的配置文件或Javascript文件放在客户自己的服务器端,建议配置Webhook来保持文件的同步更新。Webhook 是用户通过自定义回调的方式来更新文件一种方法。在云眼平台,用户设置Webhook URL ,只要数据文件被更新,云眼即发送行为通知到用户指定的 URL 中去。

打开云眼控制台(app.eyeofcloud.com),登录后点击“业务优化”,Webhook,点击创建Webhook,按照提示添加需要设置的Webhook URL 。

填写完成之后,点击确定按钮,保存设置成功的Webhook。

创建webhook
创建webhook

这样,当试验的配置文件更新的时候,云眼服务器就会向用户指定的URL发送post请求,云眼支持设置多个Webhook ,用户重复上述操作即可。

Webhook消息格式

当云眼向用户本地服务器发送事件时,使用HTTP POST请求,Content-Type为application/json,数据格式为JSON,Webhook的有效负载结构如下:

{
    "idSite": 1234,
    "timestamp": 1590196904,
    "event": "project.datafile_updated",
    "data": {
        "revision": 1,
        "origin_url": "/editor/config/json/fullstack/1234.json"
    }
}

目前,云眼平台只支持project.datafile_update一种事件类型。

Webhook接收消息样例

Webhook服务需要使用获取POST数据的方式来获取消息数据,这里以php为例。
用户本地服务器获取的POST数据中含有配置文件的文件名,然后去云眼的服务器端获取此配置文件的内容存到用户本地服务器,最后返回更新结果。

<?php
//云眼服务器端存储js或json格式配置文件的域名,如有疑问请联系云眼客服
const EYEOFCLOUD_DATAFILE_URL_DOMAIN = 'https://eyeofcloud-bucket.oss-cn-beijing.aliyuncs.com/portal';

//要存在本地服务器端的路径,可以自定义修改
$pathToSave = '/usr/share/nginx/html/webhook/';

if($_POST && $_POST[event] && $_POST[event] == 'project.datafile_updated' ) {
    $data = $_POST[data];
    //云眼服务器端存储js或json格式配置文件的文件路径
    $origin_url = EYEOFCLOUD_DATAFILE_URL_DOMAIN . $data[origin_url];
    //获取云眼配置文件
    $datafile = GetCurl($data[origin_url]);
    //$datafile_name是存入本地服务器端的文件名,可以自定义修改
    $datafile_name = substr(strrchr($data[origin_url],'/'),1);
    //要存在本地服务器端的文件路径
    $pathToSave = $pathToSave.$datafile_name;
    $result = file_put_contents($pathToSave, $datafile);
    //更新结果返回云眼
    echo $result;
}

function GetCurl($url){
    $curl = curl_init();
    curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
    curl_setopt($curl,CURLOPT_URL, $url);
    curl_setopt($curl,CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
    curl_setopt($curl, CURLOPT_HTTPHEADER, array('Expect:'));
    $res = curl_exec($curl);
    curl_close($curl);
    return $res;
}
试用即获赠初始使用金500元 立即试用》