丁宇 | DING Yu

介绍VisitorSense,LT 0.5的主角之二!

除了M-O外,LT 0.5还将引入另外一个全新的概念:VisitorSense。

VisitorSense是什么?

在我解释这东西到底是什么之前,先来看个演示:

首先,作为blog作者,在blog的控制台里进入“VisitorSense”:

探测器列表探测器列表。图片点击放大

点“Add a sensor”增加一个探测器。选择“MatchReferrer”触发器,在选项内填入“blog.rexsong.com”;选择“DisplayMessage”动作,在选项内填入“看到我在千鸟那里的评论了?关于这个问题我写了一系列的文章:用户体验架构”:

添加新探测器添加新探测器。图片点击放大

点“Save”保存,在探测器列表中可以看到这个探测器已经在工作了:

新探测器已经在工作了新探测器已经在工作了。图片点击放大

退出blog控制台。

现在假设你是一个普通的blog读者,你来到千鸟的blog,找到一篇链接至我网站的文章:

千鸟的blog上到我网站的链接

点原文的链接,你会看到:

探测器感知到了你!探测器感知到了你!图片点击放大

看到了吗?探测器感知到了你(blog读者)的来源,并知道这个来源符合blog作者的设定,于是便执行了预设的动作。这一“感知-执行”的机制,就是全新的VisitorSense!

如果你仔细看第三张图片,你会发现页面的顶端有一行探测器被临时关闭的说明,这是为了保护blog作者-不会不小心被自己设定的探测器挡在控制台外面。甚至,在控制台的不同页面,这个说明还会有小小的差异:如果你在其它功能的设置页面,这行提示中会包含一个引导你到VisitorSense功能页面的链接,否则则只会显示文字:

细节设计

VisitorSense到底是什么?

顾名思义,VisitorSense是一种对blog读者(visitor)的感知(sense)机制。它可以在每个读者周围安排许多不同的探测器(sensor),每个探测器负责从不同的角度去感知访客,一旦某一探测器发现某条件符合,VisitorSense就会发出指令让此探测器执行一些动作。

你可以同时添加并释放很多探测器,让它们构成一个探测器矩阵(Sensors Matrix),从而感知并执行各种各样的动作。

老网虫应该还记得DoubleClick,这个公司最为引以为傲的技术,就是在对用户的访问行为进行详细地记录和分析后,采取端到端的广告投放策略。而这大概就是VisitorSense这一想法的最初来源。

VisitorSense有什么用?

VisitorSense的核心目的是提供完全个性化的、精准的和端到端的关怀和营销。比如说,你可以:

  1. 根据访客的浏览路径(浏览历史),来判断他真正要找的东西,并提供个性化的帮助;
  2. 根据访客的点击来源,显示差异化的内容。比如对于从UCD China点过来的朋友,我可以在页面上更多地显示产品和设计;而来源如果是InfoQ等技术网站,则侧重开源的内容;
  3. 根据访客的IP来做一些好玩的事情,比如我知道121.*.*.*是阿里巴巴内部网络的IP,那么就可以有针对性地显示一段欢迎辞;

不知道大家注意到没有,实际上我已经使用了VisitorSense好一阵子了:我原来用的域名是 dingyu.me,后来我希望把它更换成 dingyu.me,但网络上有很多链接仍然指向老的域名,于是我添加了一个探测器(触发器:MatchUrl,动作:RedirectToDomain),把所有指向老域名的访问全部跳转到新域名。你可以点这个链接看看效果:http://heartstringz.net/blog/posts/view/introducing-m-o(注意浏览器地址栏的变化)。

可以说,只要有合适的探测器并结合合理的运用,你可以让VisitorSense做几乎任何事情!

VisitorSense是可扩展的

LT 0.5会自带几个最常用的探测器,你当然也可以不断地扩展VisitorSense的功能。我计划在LT的官方站点上提供专门的区域,供用户下载和开发者提交新的探测器。

对于用户来说,安装新探测器的工作非常简单-只要把它们拷贝到指定的目录。

对于开发者来说,编写探测器的难度和限制也很小。每一个探测器的触发器和动作,都只是一些非常简单的PHP代码,比如上面用到的MatchReferrer触发器的代码如下:

class MatchReferrer
{      
    /**
     * Every trigger must have a 'sense' method
     * 
     * @param $referrer String Referrer URL that defined by user
     * @return Boolean Return true when actual Referrer matches with the pre-defined one, otherwise return false
     * @date 2009-3-12
     */
    public function sense($referrer = null)
    {
            if(!$referrer || empty($_SERVER["HTTP_REFERER"])) return false;
        return ereg($referrer, $_SERVER["HTTP_REFERER"]);
    }
}

开发上的一点小问题……

VisitorSense实际上是一种系统的插件机制。我用过也写过各种各样的插件,可是设计一个装载插件的机制却是第一次,目前遇到的主要问题是:如何在提供嵌入系统的机会同时,最大限度地保证系统的安全?比如,我如何保证不会有人写个清空数据库的探测器?


  1. 老王 @ 2009-03-16 08:39:58 +0800:

    本页面用1024X768阅读,有图片遮挡的现象

  2. 老王 @ 2009-03-16 08:42:17 +0800:

    规则引擎 呵呵

  3. qingbo @ 2009-03-16 16:38:11 +0800:

    我觉得最后的问题不需要考虑,呵呵,因为插件不会自己安装的,都是blog拥有者安装的。WordPress的插件也可以什么都做,但似乎没听说这样的事情 [emoticon:big_smile]

  4. Liupeng @ 2009-03-18 17:11:07 +0800:

    [emoticon:angel] 又学到不少东西,特别喜欢你对产品的这种设计,描述和讲解的认真态度....

  5. 冰片蜜桃 @ 2009-03-25 21:18:37 +0800:

    这个功能好高级哦~

    嘿嘿 等以后要用到的时候再详细请教你