`
rensanning
  • 浏览: 3548794 次
  • 性别: Icon_minigender_1
  • 来自: 大连
博客专栏
Efef1dba-f7dd-3931-8a61-8e1c76c3e39f
使用Titanium Mo...
浏览量:38151
Bbab2146-6e1d-3c50-acd6-c8bae29e307d
Cordova 3.x入门...
浏览量:607316
C08766e7-8a33-3f9b-9155-654af05c3484
常用Java开源Libra...
浏览量:682345
77063fb3-0ee7-3bfa-9c72-2a0234ebf83e
搭建 CentOS 6 服...
浏览量:89356
E40e5e76-1f3b-398e-b6a6-dc9cfbb38156
Spring Boot 入...
浏览量:401858
Abe39461-b089-344f-99fa-cdfbddea0e18
基于Spring Secu...
浏览量:69695
66a41a70-fdf0-3dc9-aa31-19b7e8b24672
MQTT入门
浏览量:91723
社区版块
存档分类
最新评论

开发Hubot聊天机器人

 
阅读更多
大家所熟知的智能聊天机器人,比如:微软小冰、Apple Siri、Google Now、IBM Watson等。微信自动回复、微信服务号里的客服Bot也都算是简单的实例。聊天机器人(Dialog System)主要实现方式有:基于人工模板(比如AIML)、基于搜索技术(比如ElasticSearch)、基于深度学习。从零实现这样的系统是很复杂的。

开源的ChatOps机器人:
1.Hubot:CoffeeScipt编写
2.Lita:Ruby编写
3.Errbot:Python编写

So, What is ChatOps? And How do I Get Started?
12+ Frameworks to Build ChatOps Bots

Hubot是由Github开发的开源聊天机器人,基于Node.js采用CoffeeScript编写。
Hubot https://hubot.github.com/
Hubot Scripts https://github.com/hubot-scripts
Hubot Control https://github.com/spajus/hubot-control

可以借助Hubot开发Chatbot来自动化的完成想要一切自动化任务,比如:
-运维自动化(编译部署代码、重启机器,监控服务器运行情况,自动修复Bug等)
-外部服务交互(管理Redmine、集成Jenkins、监视Zabbix等)
-定时获取天气预报
-随机订餐
-聊天机器人等等。


官方文档里有详细的使用说明,https://hubot.github.com/docs/,这里只做一个摘要。
Hubot Scripts里有大量的现成脚本可以用,也是自己编写脚本的最好sample。



(一)安装
运行Hubot需要以下软件支持:
  • Node.js
  • Redis 默认存贮数据
  • CoffeeScript
  • Yeoman
  • generator-hubot 生成Hubot骨架工程

引用
C:\Users\rensanning>node -v
v0.12.8
C:\Users\rensanning>npm -v
2.14.9
C:\Users\rensanning>npm install -g yo generator-hubot
C:\Users\rensanning>npm list -g generator-hubot yo


(二)创建自己的bot
引用
C:\Users\rensanning>cd d:/
D:\>mkdir hubotsample
D:\>cd hubotsample
D:\hubotsample>yo hubot
  ? Owner RenSanNing <rensanning@gmail.com>
  ? Bot name okbot
  ? Description A sample hubot
  ? Bot adapter campfire

默认提供了campfire和shell的adapter,其他的需要通过npm下载hubot-<AdapterName>。
也可以通过参数直接生成:
引用
yo hubot --owner=rensanning@gmail.com --name=foobot --description="Foo Bot" --adapter=shell


项目结构:
  • bin/ 运行脚本
  • node_modules 应用的包文件
  • scripts 存放自定义脚本
  • external-scripts.json 应用的外部脚本
  • hubot-scripts.json *** 该文件已经无用,可以删除
  • package.json 项目全局配置信息


(三)运行bot

引用
D:\hubotsample>bin\hubot -v
2.19.0
D:\hubotsample>bin\hubot -h
Usage hubot [options]

Available options:
  -a, --adapter ADAPTER   The Adapter to use
  -c, --create PATH       Create a deployable hubot
  -d, --disable-httpd     Disable the HTTP server
  -h, --help              Display the help information
  -l, --alias ALIAS       Enable replacing the robot's name with alias
  -n, --name NAME         The name of the robot in chat
  -r, --require PATH      Alternative scripts path
  -t, --config-check      Test hubot's config to make sure it won't fail at startup
  -v, --version           Displays the version of hubot installed

-a 指定Adapter(默认是shell)
-d 关闭HTTP服务(默认是开启的)
-c deprecated 使用yeoman

采用默认的shell adapter
引用
D:\hubotsample>bin\hubot

指定adapter
引用
D:\hubotsample>bin\hubot -a shell


引用
okbot> help
usage:
history
exit, \q - close shell and exit
help, \? - print this usage
clear, \c - clear the terminal screen


引用
okbot> okbot help
okbot> Shell: okbot adapter - Reply with the adapter
okbot animate me <query> - The same thing as `image me`, except adds a few parameters to try to return an animated GIF instead.
okbot echo <text> - Reply back with <text>
okbot help - Displays all of the help commands that Hubot knows about.
okbot help <query> - Displays all help commands that match <query>.
okbot image me <query> - The Original. Queries Google Images for <query> and returns a random top result.
okbot map me <query> - Returns a map view of the area returned by `query`.
okbot mustache me <url|query> - Adds a mustache to the specified URL or query result.
okbot ping - Reply with pong
okbot pug bomb N - get N pugs
okbot pug me - Receive a pug
okbot the rules - Make sure hubot still knows the rules.
okbot time - Reply with current time
okbot translate me <phrase> - Searches for a translation for the <phrase> and then prints that bad boy out.
okbot translate me from <source> into <target> <phrase> - Translates <phrase> from <source> into <target>. Both <source> and <target> are optional
ship it - Display a motivation squirrel

okbot ping
okbot> PONG

okbot echo 你好!
okbot> 你好!

okbot time
okbot> Server time is: Fri Sep 30 2016 11:05:24 GMT+0800 (中国 (标准时间))


***所有的输入都会被记录在.hubot_history文件里。

(四)编写脚本
编写的自定义脚本要放在scripts中,可以是.coffee或.js文件。

scripts/hello.coffee
# Description:
#   This is a test.
#
# Commands:
#   okbot helo - Reply with world!

module.exports = (robot) ->
  robot.respond /hello/i, (msg) ->
    msg.send "world!"

引用
okbot hello
okbot> world!


因为Hubot要解析脚本文件,提供help帮助,所以脚本文件开头的注释是规范的,
第一行必须是注释“# Description:”(其他的可以没有),否则会有警告:
引用
hello.coffee is using deprecated documentation syntax


Hubot同时也支持js,比如:
scripts/hello2.js
// Description:
//   This is a test2.
// Commands:
//   okbot helo - Reply with world!

module.exports = function(robot) {
    robot.respond(/hi/i, function(msg){
        msg.send("world2!");
    });
}

引用
okbot hi
okbot> world2!


Respond vs Hear
  • respond只监听直接发送给机器人的消息,需要指定机器人名称
  • hear可以监听任何消息

引用
MYHUBOT xxx
myhubot xxx
@myhubot xxx
myhubot: xxx


Send vs Reply
  • send会将消息发送给所有人
  • reply会将消息回复给指定的人


Random
msg对象有一个random方法,可以从之后的数组对象中随机提取一个元素
引用
msg.send msg.random arrayObject


hubot Scripts Explained
http://theprogrammingbutler.com/blog/archives/2011/10/28/hubot-scripts-explained/

(五)安装脚本
Hubot 有一大堆现成的脚本,可以集成各种服务。
引用
D:\hubotsample>npm search hubot-scripts github
D:\hubotsample>npm install --save hubot-plusplus
hubot-plusplus@1.3.0 node_modules\hubot-plusplus
├── underscore@1.8.3
├── clark@0.0.6
└── coffee-script@1.6.3


将package-name添加到external-scripts.json
引用
"hubot-plusplus"

引用
okbot> ruby++
okbot> ruby has 1 point
okbot> java--
okbot> java has -1 points


(六)hubot-script实例

定时脚本
scripts/cron.coffee
cronJob = require('cron').CronJob
 
module.exports = (robot) ->
  send = (room, msg) ->
    response = new robot.Response(robot, {user : {id : -1, name : room}, text : "none", done : false}, [])
    response.send msg
 
  new cronJob('0 * * * * *', () ->
    currentTime = new Date
    send '#your-channel-name', "current time is #{currentTime.getHours()}:#{currentTime.getMinutes()}."
  ).start()

引用
D:\hubotsample>npm install cron --save
D:\hubotsample>bin\hubot -a shell


http请求
scripts/googleGEO.coffee
module.exports = (robot) ->
  robot.hear /location (.*)/, (msg) ->
    request = robot.http("https://maps.googleapis.com/maps/api/geocode/json")
                   .query(address: msg.match[1])
                   .get()
    request (err, res, body) ->
      json = JSON.parse body
      location = json['results'][0]['geometry']['location']

      msg.send "#{location['lat']}, #{location['lng']}"

引用
okbot> location Beijing
okbot> 39.904211, 116.407395


抓取数据(request, cheerio)
scripts/title.coffee
request = require 'request'
cheerio = require 'cheerio'
 
module.exports = (robot) ->
  robot.respond /title (.*)/i, (msg) ->
    url = msg.match[1]
    options =
      url: url
      timeout: 2000
      headers: {'user-agent': 'node title fetcher'}
 
    request options, (error, response, body) ->
      $ = cheerio.load body
      title = $('title').text().replace(/\n/g, '')
      msg.send(title)

引用
D:\hubotsample>npm install --save request
D:\hubotsample>npm install --save cheerio
D:\hubotsample>bin\hubot -a shell

okbot> okbot title http://github.com
okbot> How people build software · GitHub
okbot> okbot title http://www.google.com
okbot> Google


http应答(httpd)
scripts/version.coffee
module.exports = (robot) ->
  robot.router.get "/version", (req, res) ->
    res.end robot.version


访问http://localhost:8080/version。
默认端口是8080,可以修改环境变量:export PORT=8080

Hubot大量依赖环境变量来配置脚本,所以一般都做一个启动脚本:
引用
#!/bin/sh
export HUBOT_ENV_TEST_VAR=""
bin/hubot -a twitter -n testbot

引用
@echo off
SET HUBOT_ENV_TEST_VAR=""
bin\hubot.cmd -a twitter -n testbot

脚本中的使用:
引用
TEST_VAR = process.env.HUBOT_ENV_TEST_VAR


捕获所有未处理信息
scripts/catchAll.coffee
module.exports = (robot) ->
  robot.catchAll (res) ->
    res.send "Nothing Found:#{res.message.text}"


hubotスクリプトの書き方とサンプル集
http://blog.fumiz.me/2012/08/05/hubot-irc-bot-script/
编写 Hubot Scripts
http://scarletsky.github.io/2016/05/02/write-your-own-hubot-scripts/

(七)自定义Adapter
hubot默认提供两种adapter:shell、campfile
shell用于开发调试,campfile以外的Chat Service也都有开源的实现。

Adapter基本构成

新建文件 \node_modules\hubot\src\adapters\SampleAdapter.coffee
class SampleAdapter extends Adapter

  send: (envelope, strings...) ->
    @robot.logger.info "Send"

  run: ->
    @robot.logger.info "Run"

exports.use = (robot) ->
  new SampleAdapter robot


修改文件 \node_modules\hubot\src\robot.coffee
引用
HUBOT_DEFAULT_ADAPTERS = [
  'campfire'
  'SampleAdapter'
  'shell'
]


启动bot
引用
D:\hubotsample>bin\hubot -a SampleAdapter


* 所有的Adapter必须继承自Adapter
* Adapter中最重要的两个方法是send和run,其他方法比如emote、reply、topic、play等在特定场景下才需要。
* run方法是bot启动时执行
* send方法是回复信息时执行
* 父类 adapter.coffee 里有详细的方法说明 https://github.com/github/hubot/blob/master/src/adapter.coffee
* Adapter名必须是:src\adapters里的文件名 & robot.coffee的HUBOT_DEFAULT_ADAPTERS里定义的名 或者和 hubot-#{adapter} 一致

Chat服务的Adapter
{Adapter, TextMessage} = require 'hubot'
{EventEmitter} = require 'events'

class MyChatAdapter extends Adapter
  send: (envelope, strings...) ->
    @bot.send str for str in strings

  run: ->
    options =
      token:   process.env.HUBOT_CHAT_TOKEN
      rooms:   process.env.HUBOT_CHAT_ROOMS
      account: process.env.HUBOT_CHAT_ACCOUNT

    bot = new MyChatStreaming options, @robot

    bot.on 'message', (userId, userData, message) ->
      user = @robot.brain.userForId userId, userData
      @receive new TextMessage user, message

    bot.listen()

exports.use = (robot) ->
  new MyChatAdapter robot

class MyChatStreaming extends EventEmitter
  constructor: (options, @robot) ->
    @token         = options.token
    @rooms         = options.rooms.split(",")
    @account       = options.account

  send: (message) ->
    # Send data to your chat service

  listen: ->
    # Get messge data from chat service
    # @emit 'message', user, message

具体可以参考: https://github.com/github/hubot/blob/master/src/adapters/campfire.coffee

扩展robot的方法:
\node_modules\hubot\src\adapters\incircle.coffee
class TestXXX extends Adapter
  constructor: (robot) ->
    super robot
    robot.hearXXX = (options, callback) ->
      robot.listeners.push new TextListener(robot, "@XXXmessage", options, callback)


\scripts\testbot.coffee
module.exports = (robot) ->
  robot.hearXXX (msg) ->
    msg.send "#{JSON.stringify msg}"


(八)微信adapter
https://github.com/KasperDeng/Hubot-WeChat

主要机制是hack网页版微信协议,先用手机登录微信帐号,然后模拟网页版微信登录,这样就可以接受微信消息了。

  • npm install hubot-weixin --save
  • 手机端登录微信
  • 打开网页微信:web.weixin.qq.com
  • 手机扫描登录
  • 控制台查看如下信息 /node_modules/hubot-weixin/config.yaml
  •    cookie: Uin: Sid: Skey: DeviceID:
  • bin\hubot.cmd -n bot -l / -a weixin


参考:
正在吃掉世界的Bot:它从哪里来,会到哪里去?
Hubot:来自GitHub的聊天机器人
GitHub社謹製! bot開発・実行フレームワーク「Hubot」
TDD Hubot scripts with gulp+mocha
在Skype中使用Hubot
http://qiita.com/bouzuya/items/c7d0ad80c357aab6b696
  • 大小: 92.7 KB
  • 大小: 33.1 KB
  • 大小: 27.9 KB
分享到:
评论
1 楼 javawz 2018-01-08  
scripts/googleGEO.coffee  我的链接可以获取地理数据
但是执行的时候返回数据为空,请问是怎么回事

相关推荐

    基于Hubot打造自己的聊天机器人服务 - 简书1

    Hubot是一款由GitHub开发并开源的聊天机器人(chatbot),它不仅能够进行简单的对话交互,更被广泛应用于GitHub内部的各种自动化运维任务中,例如代码审查、文档查询等。Hubot的设计灵活且可扩展性强,用户可以根据...

    hubot-synologychat:Hubot Synology聊天适配器

    什么是Synology聊天机器人Synology Chat是Synology Chat中的聊天机器人功能,为聊天机器人开发人员提供了与用户进行交互的直接消息界面。什么是机器人Hubot是Github Inc.的Chatbot框架。这是什么这是一个Hubot适配器...

    hubot-natural:用于RocketChat的自然语言处理聊天机器人

    受此启发,我们希望为社区提供同样的简便性,使其能够开发能够实际处理自然语言并执行任务的聊天机器人,就像构建面向RegExp的机器人一样容易。 因此,我们找到了一个非常迷人的项目,可以从发起对您最喜欢的聊天...

    hubot安装教程简介

    hubot 是一款由 GitHub 开发并开源的聊天机器人框架,它可以帮助开发者快速构建基于各种聊天平台的应用程序,如 Slack、IRC 等。hubot 的核心优势在于其高度可定制化的特点,通过简单的配置与扩展插件即可实现丰富的...

    hubot-keybase:用于 Keybase 机器人开发的 Hubot 适配器

    用于 Keybase 聊天的 Hubot 适配器。 构建机器人 mkdir mybot cd mybot yo hubot # choose the "keybase" adapter # Set the desired environment variables ./bin/hubot -a keybase 配置 所有hubot-keybase配置都...

    Ansible-hubot-ansible.zip

    Hubot 是一个由GitHub开发的聊天机器人框架,它允许用户通过自然语言与机器人交互,执行各种任务,包括但不限于监控、通知、自动化流程等。在本项目"Ansible-hubot-ansible.zip"中,Hubot 被用来启动 Ansible 的命令...

    hubot:可定制的生活点缀机器人

    Hubot是一个构建聊天机器人的框架,其模仿了GitHub的同名Hubot的Campfire机器人。 他很酷。 他可以并且可以从事。 该存储库提供了一个由npm分发的库,您可以使用该库来构建自己的机器人。 有关与自己的机器人朋友...

    hubot矩阵适配器_JavaScript_下载.zip

    Hubot 是一个由GitHub开发的开源聊天机器人框架,它使用CoffeeScript或JavaScript编写,并能与各种聊天平台进行交互。在本案例中,我们关注的是"hubot矩阵适配器",这表明Hubot已被配置为与Matrix通信。Matrix是一个...

    hubot-slack:用于Hubot的Slack开发人员工具包

    Hubot-Slack是专门为Hubot设计的一个强大的开发人员工具包,它允许你将自定义的自动化功能集成到Slack工作空间中,创建一个智能且有用的聊天机器人。Hubot是GitHub上开源的一个框架,它基于CoffeeScript编写,用于...

    基于WebQQ协议的QQ机器人。命令行工具,Hubot支持!-qqbot.zip

    总的来说,这个"基于WebQQ协议的QQ机器人"项目提供了一种方便的方式来自动化QQ的交互,结合了命令行工具和强大的Hubot框架,使得开发者能够创建功能丰富的聊天机器人,不仅限于简单的消息传递,还可以实现更复杂的...

    hubot-scripts

    总的来说,hubot-scripts 是一个深入了解 JavaScript 开发、聊天机器人技术和 ChatOps 实践的好入口,对提升开发者的技能和团队协作效率都有很大帮助。通过学习和实践,不仅可以创建自己的定制化聊天机器人,还能...

    PyPI 官网下载 | aiohubot-0.4.7-py3-none-any.whl

    `aiohubot`是一个基于`asyncio`的Hubot(一个由GitHub开发的聊天机器人框架)实现,旨在为Python开发者提供异步、高性能的聊天机器人解决方案。`aiohubot-0.4.7-py3-none-any.whl`是该库的特定版本,适用于Python 3...

    hubot-minecraft-skin:Hubot自己的Minecraft皮肤

    1. **Hubot框架**:Hubot是由GitHub开发的一个聊天机器人框架,它使用CoffeeScript或JavaScript编写,可以很容易地添加新功能,如命令行工具、事件监听器或特定服务的API调用。hubot-minecraft-skin插件就是基于此...

    hubot-laclasse-源码.rar

    Hubot 是一个由GitHub开发的开源聊天机器人框架,它使用CoffeeScript编写,可以与各种聊天平台集成,如Slack、HipChat、Flowdock等。"hubot-laclasse"看起来是一个专门为Hubot创建的第三方插件或扩展,可能是用于...

    cu-bot-scripts:企业大学机器人的hubot脚本

    Hubot 是一个由 GitHub 开发的开源聊天机器人,用于自动化工作流程,提升团队协作效率。"cu-bot-scripts" 可能包含了各种定制化的命令和功能,旨在满足企业大学在教学、培训、交流等方面的需求。 【描述解析】 描述...

    hubot-maxim:Hubot Maxim 脚本

    总之,`hubot-maxim`展示了Hubot如何通过简单的脚本增强其功能,同时也提供了使用JavaScript和Node.js进行聊天机器人开发的一个基础示例。对于想要学习如何构建和定制聊天机器人的开发者来说,这是一个很好的起点。...

    Ansible-ansible-hubot.zip

    在这个名为 "Ansible-ansible-hubot.zip" 的压缩包中,包含的是 Ansible 集成 Hubot 的项目,Hubot 是一个可自定义的机器人,常用于团队沟通中的自动化任务。 Hubot 是由 GitHub 创建的,最初设计用于在内部聊天室...

    joe:受Hubot启发但用Go编写的通用bot库

    它的灵感来自Github的人们开发的了不起的框架,并将其功能带给了想要使用Go实现聊天机器人的人们。入门Joe是一个打包为的软件库。 您可以通过以下方式获得它: go get github.com/go-joe/joe用法示例您可以在找到...

    hubot-cman:一组用于Hubot的脚本

    Hubot是GitHub开发的一个开源聊天机器人框架,它允许开发者通过编写脚本来实现与用户在各种聊天平台上的交互。"cman"可能代表“Chat Manager”或者某种特定的功能集,暗示这个脚本包可能是为了增强或管理Hubot在聊天...

Global site tag (gtag.js) - Google Analytics