使用Ruby和Sinatra构建匿名Slack Bot

如果您过去一年没有生活在一块石头上,那么您将听说过Slack或最有可能在公司中使用它。 对于确实生活在一个人之下的人们, Slack是一个团队沟通平台,是数千家公司工作流程中不可或缺的一部分。 自2013年推出以来,该产品的采用率异常惊人。 Slack必须提供许多新功能,而现有的通信工具却无法提供这些新功能,从而导致其迅猛增长。

它的独特产品之一是能够构建名为bot的扩展程序,以娱乐和提高生产力。 随着Slack平台的最新发布,现在是时候为Slack构建各种扩展和应用程序了。

今天,我们将研究如何在Ruby中构建那些有趣的松弛机器人之一。 该机器人“可能”对您很有用,但是本文的主要重点是向您介绍Slack的传入webhook和slash命令API。 事不宜迟,让我们开始吧。

我们的机器人叫anonbot,它使人们可以在Slack中发布匿名消息。 我们将使用Slack的slash命令API和传入的webhook API来实现这一点。 我们使用斜杠命令,因为这些消息是私有消息,即使在通道内也仅显示给收件人。 然后,使用传入的Webhook,将通过斜杠命令发送给我们的内容回发到发送该内容的相应通道。

设置项目

如前所述,我们将在Ruby和Sinatra中构建它。 这是一个可以在纯Ruby上构建的简单应用程序,但我们正在使用Sinatra对其进行进一步简化。 Sinatra是Ruby的轻量级Web框架,对于构建像我们这样的简单Web应用程序非常有用。

首先,为我们的应用程序创建必要的文件,它们只有两个。 首先为我们的项目创建一个文件夹,并在其中创建以下两个文件:

|
    |-------- app.rb
    |-------- Gemfile
    |-------- config.ru

app.rb是逻辑所在,而Gemfile用于指定gem需求。 在Heroku中托管需要config.ru ,但对于应用程序的功能不是必需的。

将以下行添加到我们的Gemfile中,我们准备将项目提交到git中。

source "https://rubygems.org"

    gem "sinatra"
    gem "httparty"

sinatra gem用于框架,我们需要httparty将匿名消息发布到Slack的传入webhoook。 添加了gem之后,从项目目录内部运行bundle install

现在将创建一个新文件Gemfile.lock 。 很好-让我们将项目初始化为git并提交更改。

init
    git add -A
    git commit -m "Initial commit with gem requisites"

编码

让我们开始做生意。 调用slash命令时,我们将只有一个Slack调用的API端点。 打开app.rb并添加以下app.rb行。

require 'sinatra'
    require 'httparty'
    require 'json'

    get '/anonymize' do
      postback params[:text], params[:channel_id]
      status 200
    end

    def postback message, channel
        slack_webhook = ENV['SLACK_WEBHOOK_URL']
        HTTParty.post slack_webhook, body: {"text" => message.to_s, "username" => "John Doe", "channel" => params[:channel_id]}.to_json, headers: {'content-type' => 'application/json'}
    end

所以我猜代码是不言自明的,但是让我们快速浏览一下。 我们首先需要必要的库,并初始化我们的第一个也是唯一的API端点。 这是Slack在调用我们的自定义斜杠命令时调用的端点。

我们将获得带有消息的参数列表,但是我们仅对两个参数感兴趣:

  • text :在斜杠命令后键入的消息
  • channel_id :用户从中调用命令的通道; 我们需要它才能将其发布回该频道

postback方法负责使用Webhook URL将消息发布到Slack。 我们正在指定文本,并覆盖将在配置Webhook时设置的用户名和通道。 Slack在slash命令中引入了一个新选项,这是一种快速简便的方法,只需两行即可完成,我们将在以后看到。

这样,我们就完成了应用程序的功能。 在提交更改并部署我们的应用之前, config.ru添加到config.ru

require './app'
    run Sinatra::Application

Heroku必须使用此文件才能识别应用程序类型并开始处理请求。 让我们提交更改:

add -A
    git commit -m "Add app functionality"

如果您没有Heroku工具带,那么现在就应该安装它。 如果已经安装,请创建一个Heroku应用并部署我们闪亮的新机器人。

create appbot-name
    heroku deploy

因此,我们已经成功创建了机器人并进行了部署。 好极了! 现在该结束事情的懈怠了。

配置松弛扩展

我们在这里使用两种扩展名-斜杠命令和传入的Webhook-因此我们必须分别配置它们中的两种。 转到“ 配置应用程序” ,然后单击斜杠命令并在下一页上添加“配置 ”。

给出一个选择的斜杠命令-您可以尽可能调皮。 我选择了明显的/anonbot 。 键入斜杠命令后,在下一页上,在URL字段中填写新部署的Heroku URL。

https://<appbot-name>.herokuapp.com/anonymize

请注意,我们已指定一个https端点。 检查它很重要,因为Slack建议通信端点为https 。 还将“方法”设置为GET ,然后可以保存积分。

接下来,转到相同的Configure Apps端点,这次选择Incoming WebHooks ,然后在Configuration页面上,选择所需的任何渠道,因为无论如何我们将在消息中覆盖它。 在出现的页面上,记下Webhook URL

现在我们有了webhook网址,将其设置为Heroku的环境变量,以便我们可以开始播放。 在项目目录内的命令行中,运行:

config:set SLACK_WEBHOOK_URL=https://hooks.slack.com/services/your-webhook-url

对于喜讯,我们已经完成! 让我们测试我们顽皮的新机器人。 输入您的斜杠命令,然后输入一条消息,使您的团队成员大吃一惊。

这就是通道中的响应方式。

屏幕截图

好吧,没有人能猜对!

捷径

正如我已经提到的,有一种简单的替代方法可以做到这一点。 我们必须完全摆脱传入的webhook部分,而是使用文本和response_type作为in_channel来响应Slack进行的初始调用。 通过使用该方法,app.rb的外观如下:

get '/anonymize' do
      content_type :json
      {:text => params[:text], :response_type => "in_channel"}.to_json
    end

Slack最近引入了此功能。 通过将response_type指定为in_channel ,我们将公开显示响应,否则将显示为私有。 我没有继续使用此方法,因为其目的是显示两个扩展的难易程度。

结论

很简单,对吧? 本教程的目的是让您了解Slack必须提供的几个扩展,我认为这很满意。 本教程中使用的所有示例代码都托管在GitHub上

感谢您阅读本文,希望它能达到您的目的。 直到下一次!

翻译自: https://code.tutsplus.com/tutorials/building-an-anonymous-slack-bot-using-ruby-and-sinatra--cms-25494

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值