专栏首页黯羽轻扬微信公众号自动回复图文消息

微信公众号自动回复图文消息

写在前面

订阅号收到过一些查询消息,比如vue、react,无奈一直没有心情去搞关键字搜索,就丢一边去了

修复博客首页样式问题时恰巧看到了之前的博文:微信公众平台图文消息自动生成,里面有提到WordPress插件,就顺势给订阅号添上了自动回复功能

喏~长这样子:

P.S.样式问题是说在firefox下,容器的white-space: no-wrap会导致float-right子元素换行,猜测是firefox不合规范,具体见Demo

P.S.另外,firefox57确实比之前版本快多了,以前总感觉在内存里被Chrome先打了一顿一样

一.插件选择

之前的博文里提到了2款插件:

  • WordPress插件wechat_subscribers 特色:自动回复最新文章、随机文章、搜索结果等,永久免费 地址:https://github.com/Soopro/wechat_subscribers
  • WordPress插件Wechat-Manager 特色:关键词自动回复最新文章、一周/月/年内最多评论文章、文章搜索结果 地址:https://github.com/9IPHP/Wechat-Manager

时隔1年多又跑去看,发现好像都还在维护,试用之后选择了wechat_subscribers,主要优势:

  • commit看起来更专业,更用心,例如rename method.rename class.clean comment.
  • 有长长的changelog,感觉靠谱
  • token验证通过(Wechat-Manager的token始终无法通过验证…所以,实际上是没得选

缺点:

  • 文档太差,readme没有详细的安装步骤,且格式极乱

还好接微信公众平台只要求一个token,摸索着用上了,效果比较满意

二.安装步骤

1.下载插件源码

https://github.com/ayqy/wechat_subscribers

用默认的develop分支即可,下载并解压

P.S.WordPress 4.3.13下亲测可用,其它版本应该也没问题,因为插件没什么依赖,仅用到了很少几个WordPress API(如get_postsget_results

2.安装并启用

安装:把解压得到的文件夹丢到ftp的wordpress/wp-content/plugins目录下,就算安装完了

启用:进入WordPress后台,从左侧菜单进入插件,找到“微信订阅号管理”,启用

然后需要通过token接入微信公众平台

3.配置token

操作步骤:

  1. 在后台左侧菜单找到“微信订阅号管理”,进入“插件设置”
  2. 填写token,保存更改,会得到一个URL
  3. 进入微信公众平台后台,左侧“开发/基本配置 -> 服务器配置/修改配置”填写“URL”和“Token”(用上一步得到的URL和自己填的Token),随机生成EncodingAESKey,选择“明文模式”,提交
  4. (提交成功后会返回上一页)启用服务器配置,面板状态会变成“服务器配置(已启用)”

到这里token就配置好了(双方已经按照既定“协议”建立了信任关系)

4.添加自动回复规则

到试玩阶段了,进入WordPress后台,左侧“微信订阅号管理/自定义回复 -> 添加新回复”

插件提供了3种触发机制(消息匹配机制):

  • 普通:关键字模糊匹配
  • 默认:default case,其它的规则都不匹配时就走这个
  • 订阅:新增关注时触发

比如添一条测试规则:

回复标题   test
关键字     测试,test,t
触发       普通
发布       勾选
类型       纯文本
内容       hoho

保存并退出,微信进入订阅号发送“测试或test或t”,会立即收到回复“hoho”

回复的消息格式支持:

  • 纯文本
  • 图文消息:类似于微信公众平台的图文消息,给配图和文章链接
  • 最近消息:最新的几篇文章
  • 随机消息:随机选取几篇文章
  • 搜索关键字:站内搜索结果

最有用的应该是搜索关键字,能把用户想要的博文列表丢过去,当然基础功能也不错

三.优化搜索结果

试玩发现回复结果与查询关键字的相关度不大,比如:

关键字 redux
结果
   MobX
   react-redux源码解读
   dva

插件默认走WordPress原生API get_posts按发布日期排序,所以得到的结果不太科学,MobX和dva仅仅在内容提到了一点redux而已,也给算进来了

没错,我们需要提高搜索结果的相关度,最直接的想法就是加权重,再按权重综合排序,比如:

匹配项    权重
标题      3
分类      1
tag       1
内容      0.5
评论      0.3

都匹配的文章列表计算权重,再降序排列,就是我想要的结果,对应PHP代码如下:

// from interface.php/getSearchPosts
// ID, post_content, post_excerpt, post_title
// extra: post_type, post_modified
$posts = $wpdb->get_results($wpdb -> prepare("select ID,post_content,post_excerpt,post_title,post_type,post_modified from db_wp_posts where post_status = 'publish' order by ((CASE WHEN post_title LIKE '%{$keyword}%' THEN 2 ELSE 0 END) + (CASE WHEN post_content LIKE '%{$keyword}%' THEN 1 ELSE 0 END)) DESC, post_modified DESC, ID ASC limit $re_count"));

db_wp_posts表中已发布的文章中找出标题和内容与关键字匹配的,并加权(标题权重2,内容权重1),再降序排列,取前$re_count个查询结果

注意,这里用到了SQL中的简单case函数,很灵活的小技巧

四.源码

Github地址:https://github.com/ayqy/wechat_subscribers

结构

wechat_subscribers/
 css/
 img/
 js/
 language/   # 多语言支持,WordPress插件惯用的pm,po文件
 __wechatsucks__.php   # 黑科技,token验证不通过时可以试试
 _edit.php   # 和下面3个都是后台页面及配置表单
 _general.php
 _history.php
 _settings.php
 ajax_request_handle.php   # 配置表单需要的博文列表,现查
 class-wpwsl-general.php   # 注册新增规则页
 class-wpwsl-history.php   # 消息记录页
 class-wpwsl-history-table.php # 注册消息记录页
 class-wpwsl-list-table.php    # 博文表格交互,排序/分页
 class-wpwsl-settings.php  # 注册到左侧菜单
 content.php   # 插件首页,都是废话
 index.php     # 没用
 interface.php # **核心部分** 站内搜索,收发消息
 posttype_wpwsl_template.php   # 后台配置数据格式
 wpwsl_core.php # 插件入口,注册

todo

fork过来是想做几件事:

  • 重写readme(原版太变态了,看了不想用) 100%
  • 搜索结果按相关度排序(默认按日期排序) 100%
  • 扩展功能 0%
    • 关键字支持类型常量(比如number)
    • 支持命令(比如留言,topN)
    • 趣味性功能(比如语音查询)

参考资料

  • WordPress get_posts by title like
  • HOW TO IMPROVE INTERNAL SEARCH IN WORDPRESS:WordPress搜索插件
  • 微信公众平台技术文档

本文分享自微信公众号 - 前端向后(backward-fe),作者:ayqy

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-11-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如何衡量前端基建的效能价值?

    关注「前端向后」微信公众号,你将收获一系列「用心原创」的高质量技术文章,主题包括但不限于前端、Node.js以及服务端技术

    ayqy贾杰
  • MobX

    也就是说,只要知道哪些东西是状态相关的(源于应用状态),在状态发生变化时,就应该自动完成状态相关的所有事情,自动更新UI,自动缓存数据,自动通知server

    ayqy贾杰
  • 数据库层如何扩展?

    这样看来,似乎只要加几个数据库,共同分担来自应用层的流量就完成了从单库到多库的扩展:

    ayqy贾杰
  • 开发 | 计算机视觉中,究竟有哪些好用的目标跟踪算法(下)

    VOT2015竞赛 VOT2015 Challenge | Home(http://votchallenge.net/vot2015/) 如期而至,这一年有60...

    AI科技评论
  • 那些年我们的(具有含金量)MySQL测试题目

     请耐心阅读,下面有惊喜! 1.创建数据库 CREATE DATABASE QQDB; 2.创建各表(表结构;约束) /*******************创...

    房上的猫
  • 在 PHP 和 Laravel 中使用 Traits的方法

    事实上,PHP 作为一门编程语言存在的问题之一,就是你只能使用单继承。这意味着一个类只能从另一个类中继承。例如,可能希望从几个不同的类继承方法,以防止代码重复。...

    砸漏
  • Adobe:没有人比我更懂P图

    除了越来越接近美图秀秀的简单操作,这次的Adobe不仅带来了艺术,还带来了富有生活气息的场景建议:

    量子位
  • Adobe:没有人比我更懂P图

    除了越来越接近美图秀秀的简单操作,这次的Adobe不仅带来了艺术,还带来了富有生活气息的场景建议:

    代码医生工作室
  • CMU德扑AI赌神,现已拿下美军千万美元大单

    没错,就是Libratus,中文名冷扑大师,在2017年举办的德扑人机大战中,一举成名。

    量子位
  • Adobe Analytics的前世今生

    SuperStats是由Josh James、John Pestana和Jeremy Young创建的。SuperStats是作为一种软件即服务(SaaS)开发...

    GA小站

扫码关注云+社区

领取腾讯云代金券