package example.jbot.slack; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import me.ramswaroop.jbot.core.slack.models.Attachment; import me.ramswaroop.jbot.core.slack.models.RichMessage; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import org.springframework.web.client.RestClientException; import org.springframework.web.client.RestTemplate; import javax.annotation.PostConstruct; /** * This is a Slack Webhook sample. Webhooks are nothing but POST calls to * Slack with data relevant to your users. You can send the data * in the POST call in either ways: * 1) Send as a JSON string as the payload parameter in a POST request * 2) Send as a JSON string as the body of a POST request * * @author ramswaroop * @version 1.0.0, 21/06/2016 */ @Component public class SlackWebhooks { private static final Logger logger = LoggerFactory.getLogger(SlackWebhooks.class); /** * The Url you get while configuring a new incoming webhook * on Slack. You can setup a new incoming webhook * <a href="https://my.slack.com/services/new/incoming-webhook/">here</a>. */ @Value("${slackIncomingWebhookUrl}") private String slackIncomingWebhookUrl; /** * Make a POST call to the incoming webhook url. */ @PostConstruct public void invokeSlackWebhook() { RestTemplate restTemplate = new RestTemplate(); RichMessage richMessage = new RichMessage("Just to test Slack's incoming webhooks."); // set attachments Attachment[] attachments = new Attachment[1]; attachments[0] = new Attachment(); attachments[0].setText("Some data relevant to your users."); richMessage.setAttachments(attachments); // For debugging purpose only try { logger.debug("Reply (RichMessage): {}", new ObjectMapper().writeValueAsString(richMessage)); } catch (JsonProcessingException e) { logger.debug("Error parsing RichMessage: ", e); } // Always remember to send the encoded message to Slack try { restTemplate.postForEntity(slackIncomingWebhookUrl, richMessage.encodedMessage(), String.class); } catch (RestClientException e) { logger.error("Error posting to Slack Incoming Webhook: ", e); } } }