我们如何使用Slack,Scala和Play自动化午餐订单

自动化所有事情! 宽松的斜杠命令进行救援

每天中午,都会下达午餐订单。 我们从支持在线订单订购食物的所有地方,但有一个我们喜欢的地方,它仅接受电话或电子邮件的订购。 当地的家常菜餐厅,其菜单每周更改。 在某个时候,我们已经厌倦了手动收集每个人的订单,因此我们决定通过自发的hackathon通过Slack自动化此过程。 在本文中,我们将分享我们遇到Slack的斜杠命令的方式,以及如何自定义它们以执行所需的任何操作。

那么什么是Slack斜杠命令?

使用斜杠命令可以连接到其他服务,并使Slack类似于命令行。 或IRC客户端(如果您对此感兴趣)。 任何以“ /”开头的消息都可以执行预配置的命令。 此外,Slash命令携带有关它们从中发送的上下文的数据,还可以包含额外的文本。 例如,如果您使用的是Giphy集成,那么编写/ giphy feed me会将包含该消息的请求发送到Giphy的服务器,该服务器将搜索随机相关的GIF,并在其响应中返回它。

开箱即用的另一个不错的预制命令是/ shrug¯\ _(ツ)_ /¯

开箱即用的另一个不错的预制命令是/ shrug¯\ _(ツ)_ /¯

您如何自定义它?

简而言之,我们要做的就是通过Slack的设置页面配置一个新命令。 超级简单。 只要在应用程序中键入命令,就足以使其将HTTP请求发送到预定义的外部URL。 然后,我们构建了一个新的后端,负责获取这些HTTP请求并对其进行响应。 这是更长的故事,不一定按事件的实际顺序:)

步骤1:通过配置页面命名命令
Talu是我们喜欢的那家餐厅的名字

Talu是我们喜欢的那家餐厅的名字

步骤2:自定义命令

在下一个屏幕上,您需要设置后端的URL,并为斜杠命令指定自定义名称,自定义图标和说明:

设定

在这里,我们还收到了有关Slack随每个请求发送的有效负载的所有信息:

有效载荷

步骤#3:为slash命令构建后端

这一步比说……命名命令要长一些! 由于我们非常喜欢Takipi的 Scala, 因此我们决定通过Typesafe的Activator使用Play框架。 首先,我们通过键入activator new创建一个新的play-scala项目。 可以在Play文档中找到有关新项目结构的完整说明-实际上,我们要做的就是更改两个文件:

  1. conf / routes文件负责将传入的HTTP请求映射到后端控制器中的操作。 我们添加了以下行:
    POST / talu controllers.Application.talu
  2. app / controllers / Application.scala是定义实际操作的地方。

我们定义受支持的命令的方法如下:

class Application extends Controller {

...

 val slashCommandForm = Form(
    tuple(
      "command" -> text,
      "text" -> text
    )
  )

  def talu = Action { implicit request =>
    val (command, text) = slashCommandForm.bindFromRequest.get
    
    val subCommand = text.split(" ")(0)
    val param = text.substring(text.indexOf(" ") + 1)

    subCommand match {
      case "add" =>      Ok(add param)
      case "remove" =>   Ok(remove param)
      case "clear" =>    Ok(clear)
      case "list" =>     Ok(list)
      case "send" =>     Ok(send)
      case _ =>          Ok("Bad Request :[")
    }
  }

....

}

这是我们处理向订单添加菜式的方法:

def add(dish : String) : String = {
    val count = globals.orders getOrElseUpdate (dish, 0)
    globals.orders += (dish -> (count+1))

    return (dish + " added.")
}
步骤4:包装

通过运行以下命令创建Play应用程序发行版:activator dist。 在目标/通用下创建新的分布

步骤5:部署!

我们已经决定使用Boxfuse的免费帐户进行部署,该帐户非常适合此需求。 将Play应用程序快速部署到AWS实例(当然也需要一个AWS帐户)。 无需所有常规设置和配置的开销。 如果您想进一步了解应用程序在生产中的行为,还可以将其与Takipi的代理进行连接,以消除发生异常或日志错误时的猜测。

这是结果

/talu add tom yum soup :ramen:

拉面

/talu list

清单

/talu send

有序

最后的想法

每天休息一会儿,编码总是很有趣和令人耳目一新。 它还使您可以动手使用其他技术不会遇到的技术。 如果您要编写自己的斜杠命令,那么我们想使用一个有趣的主意:一个充当英语到表情符号翻译器的命令,用含义最接近的表情符号替换单词。

翻译自: https://www.javacodegeeks.com/2016/01/used-slack-scala-play-automate-lunch-order.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值