Here’s a quick and dirty Scala class that can be used to send messages to a slack channel. It uses the Simplified Http library and the native scala JSON parsing util.
package com.lombardo.app.services
import scalaj.http._
import scala.util.parsing.json._
class SlackMessanger {
val SLACK_INTEGRATION_HOOK = "url for your slack integration hook goes here"
// create an integration hook via slack's website
def send ( msg : String ) : HttpResponse [ String ] = {
val data = Map (
"channel" -> "#general" ,
"username" -> "scala-slack-bot" ,
"text" -> msg ,
"icon_emoji" -> ":ghost:"
)
val requestBody = JSONObject ( data ). toString ()
Http ( SLACK_INTEGRATION_HOOK )
. postData ( requestBody )
. header ( "content-type" , "application/json" )
. asString
}
}
Take it further by using a Case Class for the slack message with defaults
case class SlackMessage ( channel : String = "#general" ,
username : String = "my-bot" ,
text : String ,
icon_emoji : String = ":satellite_antenna:" )
// usage:
slackMessanger . send ( SlackMessage ( text = message ))
Use the previously posted technique for turning Case Classes into Maps
and you can pass the class right to the JSON util:
def send ( msg : SlackMessage ) : HttpResponse [ String ] = {
val requestBody = JSONObject ( msg . toMap ). toString ()
Http ( SLACK_INTEGRATION_HOOK )
. postData ( requestBody )
. header ( "content-type" , "application/json" )
. asString
}