Dear All,
Could you please kindly help. I am trying to create listner that is reacting on MentionIsuueCommentEvent and send infomation to external plugin via REST API.
Information that needs to be sent is:
Hello @Kate ,
This should get you started, The request format will need to conform with the service you are integrating with.
The script below can be added to a comment even in a listener
import java.util.Base64.Encoder
import org.apache.log4j.Level
import groovy.json.JsonSlurper
import groovy.json.JsonParserType
import groovyx.net.http.ContentType
import groovyx.net.http.HTTPBuilder
import groovyx.net.http.Method
import groovyx.net.http.HttpResponseDecorator
import com.atlassian.jira.issue.comments.Comment
import com.atlassian.jira.event.issue.IssueEvent
def apiEndpoint = "https://host:port/base/url"
def resource = "/invoke/this/method"
def token = "Bearer ${getAuthToken()}"
def http = new HTTPBuilder(apiEndpoint)
http.request(Method.POST, ContentType.JSON) { req ->
uri.path = resource
headers.'Authorization' = token
body = buildRequestBody()
response.success = { HttpResponseDecorator resp, data ->
log.info "Response Data: ${data}"
}
}
def getAuthToken() {
def credentials = "user1 user1"
def encodedCredentials = Base64.getEncoder().encodeToString(credentials.getBytes())
return encodedCredentials.toString()
}
def Map<String, Object> buildRequest(IssueEvent event) {
String action = CommentHelper.getEventAction(event)
String commentId, username, commentBody
Comment originalComment = event.params.get('originalcomment') as Comment
if (COMMENT_DELETED == action) {
commentId = "${originalComment.id}"
username = "${originalComment.authorApplicationUser.username}"
} else {
if (COMMENT_CREATED == action) {
commentId = event.comment.id
} else {
commentId = originalComment.id
}
commentBody = event.comment.body
username = event.comment.authorApplicationUser.username
}
Map<String, Object> commentData = new HashMap<>()
commentData.put('id',commentId)
if (commentBody){
commentData.put('body',commentBody)
}
commentData.put('updateAuthor', ['username':username])
You will need to make this map conform with what the service expects.
Map<String, Object> body = new HashMap<>()
body.put('webhookEvent', action)
body.put('issue', ['key':event.issue.key])
body.put('comment', commentData)
// What issue links? issue.getLinks
// You would need to process the body to get people mentioned
return body
}
class CommentHelper {
public static final String COMMENT_CREATED = 'comment_created'
public static final String COMMENT_EDITED = 'comment_edited'
public static final String COMMENT_DELETED = 'comment_deleted'
public static String getEventAction(IssueEvent event) {
String action = ''
if (event.comment) {
if (event.params.originalcomment) {
action = COMMENT_EDITED
} else {
action = COMMENT_CREATED
}
} else {
action = COMMENT_DELETED
}
return action
}
}
Online forums and learning are now in one easy-to-use experience.
By continuing, you accept the updated Community Terms of Use and acknowledge the Privacy Policy. Your public name, photo, and achievements may be publicly visible and available in search engines.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.