自动化所有事情! 宽松的斜杠命令进行救援
每天中午,都会下达午餐订单。 我们从支持在线订单订购食物的所有地方,但有一个我们喜欢的地方,它仅接受电话或电子邮件的订购。 当地的家常菜餐厅,其菜单每周更改。 在某个时候,我们已经厌倦了手动收集每个人的订单,因此我们决定通过自发的hackathon通过Slack自动化此过程。 在本文中,我们将分享我们遇到Slack的斜杠命令的方式,以及如何自定义它们以执行所需的任何操作。
那么什么是Slack斜杠命令?
使用斜杠命令可以连接到其他服务,并使Slack类似于命令行。 或IRC客户端(如果您对此感兴趣)。 任何以“ /”开头的消息都可以执行预配置的命令。 此外,Slash命令携带有关它们从中发送的上下文的数据,还可以包含额外的文本。 例如,如果您使用的是Giphy集成,那么编写/ giphy feed me会将包含该消息的请求发送到Giphy的服务器,该服务器将搜索随机相关的GIF,并在其响应中返回它。
您如何自定义它?
简而言之,我们要做的就是通过Slack的设置页面配置一个新命令。 超级简单。 只要在应用程序中键入命令,就足以使其将HTTP请求发送到预定义的外部URL。 然后,我们构建了一个新的后端,负责获取这些HTTP请求并对其进行响应。 这是更长的故事,不一定按事件的实际顺序:)
步骤1:通过配置页面命名命令
步骤2:自定义命令
在下一个屏幕上,您需要设置后端的URL,并为斜杠命令指定自定义名称,自定义图标和说明:
在这里,我们还收到了有关Slack随每个请求发送的有效负载的所有信息:
步骤#3:为slash命令构建后端
这一步比说……命名命令要长一些! 由于我们非常喜欢Takipi的 Scala, 因此我们决定通过Typesafe的Activator使用Play框架。 首先,我们通过键入activator new创建一个新的play-scala项目。 可以在Play文档中找到有关新项目结构的完整说明-实际上,我们要做的就是更改两个文件:
- conf / routes文件负责将传入的HTTP请求映射到后端控制器中的操作。 我们添加了以下行:
POST / talu controllers.Application.talu - 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