class Lita::Handlers::Zendesk

Constants

API_VERSION_URL_PATH
QUERY_TICKETS_ALL
QUERY_TICKETS_ESCALATED
QUERY_TICKETS_HOLD
QUERY_TICKETS_NEW
QUERY_TICKETS_OPEN
QUERY_TICKETS_PENDING
QUERY_TICKETS_UNSOLVED
QUERY_USERS
WEB_TICKETS_URL_PATH

Public Instance Methods

api_version_url() click to toggle source
# File lib/lita/handlers/zendesk.rb, line 40
def api_version_url
  uri_join base_url, API_VERSION_URL_PATH
end
base_url() click to toggle source
# File lib/lita/handlers/zendesk.rb, line 36
def base_url
  "https://#{config.subdomain}.zendesk.com"
end
client() click to toggle source
# File lib/lita/handlers/zendesk.rb, line 25
def client
  return @_client if @_client
  Lita.logger.info "#{logger_prefix}Connecting Zendesk Client to #{api_version_url}"
  @_client = ZendeskAPI::Client.new do |client|
    client.url = api_version_url.to_s
    client.username = config.username || config.user
    client.token = config.token
    client.password = config.password
  end
end
escalated_tickets(response) click to toggle source
# File lib/lita/handlers/zendesk.rb, line 83
def escalated_tickets(response)
  ticket_count response, QUERY_TICKETS_ESCALATED, 'escalated'
end
escalated_tickets_list(response) click to toggle source
# File lib/lita/handlers/zendesk.rb, line 120
def escalated_tickets_list(response)
  ticket_list response, QUERY_TICKETS_ESCALATED, 'escalated'
end
new_tickets(response) click to toggle source
# File lib/lita/handlers/zendesk.rb, line 78
def new_tickets(response)
  ticket_count response, QUERY_TICKETS_NEW, 'new'
end
new_tickets_list(response) click to toggle source
# File lib/lita/handlers/zendesk.rb, line 115
def new_tickets_list(response)
  ticket_list response, QUERY_TICKETS_NEW, 'new'
end
onhold_tickets(response) click to toggle source
# File lib/lita/handlers/zendesk.rb, line 93
def onhold_tickets(response)
  ticket_count response, QUERY_TICKETS_HOLD, 'on hold'
end
onhold_tickets_list(response) click to toggle source
# File lib/lita/handlers/zendesk.rb, line 130
def onhold_tickets_list(response)
  ticket_list response, QUERY_TICKETS_HOLD, 'on hold'
end
open_tickets(response) click to toggle source
# File lib/lita/handlers/zendesk.rb, line 88
def open_tickets(response)
  ticket_count response, QUERY_TICKETS_OPEN, 'open'
end
open_tickets_list(response) click to toggle source
# File lib/lita/handlers/zendesk.rb, line 125
def open_tickets_list(response)
  ticket_list response, QUERY_TICKETS_OPEN, 'open'
end
pending_tickets(response) click to toggle source
# File lib/lita/handlers/zendesk.rb, line 73
def pending_tickets(response)
  ticket_count response, QUERY_TICKETS_PENDING, 'pending'
end
pending_tickets_list(response) click to toggle source
# File lib/lita/handlers/zendesk.rb, line 110
def pending_tickets_list(response)
  ticket_list response, QUERY_TICKETS_PENDING, 'pending'
end
search_tickets(response) click to toggle source
# File lib/lita/handlers/zendesk.rb, line 56
def search_tickets(response)
  ticket_search response, response.matches[0][0]
end
ticket_details_with_comments(response) click to toggle source
# File lib/lita/handlers/zendesk.rb, line 137
def ticket_details_with_comments(response)
  Lita.logger.info "#{logger_prefix}Processing Zendesk Ticket Details"
  ticket_id = response.matches[0][0].to_i
  begin
    ticket = client.ticket.find!(id: ticket_id)
    response.reply get_text_for_ticket_with_comments(ticket)
  rescue => e
    Lita.logger.warn "#{logger_prefix}#{e}"
    response.reply "Error processing ticket #{ticket_id}"
  end
end
total_tickets(response) click to toggle source
# File lib/lita/handlers/zendesk.rb, line 68
def total_tickets(response)
  ticket_count response, QUERY_TICKETS_ALL, 'total'
end
total_tickets_list(response) click to toggle source
# File lib/lita/handlers/zendesk.rb, line 105
def total_tickets_list(response)
  ticket_list response, QUERY_TICKETS_ALL, 'total'
end
unsolved_tickets(response) click to toggle source
# File lib/lita/handlers/zendesk.rb, line 63
def unsolved_tickets(response)
  ticket_count response, QUERY_TICKETS_UNSOLVED, 'unsolved'
end
unsolved_tickets_list(response) click to toggle source
# File lib/lita/handlers/zendesk.rb, line 100
def unsolved_tickets_list(response)
  ticket_list response, QUERY_TICKETS_UNSOLVED, 'unsolved'
end
web_tickets_url() click to toggle source
# File lib/lita/handlers/zendesk.rb, line 44
def web_tickets_url
  uri_join base_url, WEB_TICKETS_URL_PATH
end
zd_instance_info(response) click to toggle source
# File lib/lita/handlers/zendesk.rb, line 51
def zd_instance_info(response)
  response.reply "Using Zendesk instance at: #{base_url}"
end

Private Instance Methods

get_text_for_ticket(ticket, include_description = true) click to toggle source
# File lib/lita/handlers/zendesk.rb, line 151
def get_text_for_ticket(ticket, include_description = true)
  Lita.logger.info "#{logger_prefix}Processing Zendesk ticket details for [#{ticket.id}]"
  unless ticket.is_a? ZendeskAPI::Ticket
    raise 'ticket is not a ZendeskAPI::Ticket'
  end
  message = "# Ticket #{ticket.id}: #{ticket_url_web(ticket.id)}"
  message += "\n- Subject: #{ticket.subject}"
  message += "\n- Status: #{ticket.status}"
  message += "\n- Updated: #{ticket.updated_at}"
  message += "\n- Created: #{ticket.created_at}"
  message += "\n- Requester: #{user_display(ticket.requester)}"  
  message += "\n- Description: #{ticket.description}" if include_description
  return message
end
get_text_for_ticket_comments(ticket) click to toggle source
# File lib/lita/handlers/zendesk.rb, line 166
def get_text_for_ticket_comments(ticket)
  Lita.logger.info "#{logger_prefix}Processing Zendesk ticket comments for [#{ticket.id}]"
  unless ticket.is_a? ZendeskAPI::Ticket
    raise 'ticket is not a ZendeskAPI::Ticket'
  end
  comments_text = []
  ticket.audits.each_with_index do |audit,i|
    if (comment = audit.events.detect {|e| e.type.downcase == 'comment'})
      author_text = user_display comment.author
      comment_text = "## Comment: #{author_text}"
      comment_text += "\n- Created: #{audit.created_at}"
      comment_text += "\n- Comment: #{comment.body}"
      comments_text.push comment_text
    end
  end
  return comments_text.reverse.join("\n")
end
get_text_for_ticket_with_comments(ticket) click to toggle source
# File lib/lita/handlers/zendesk.rb, line 184
def get_text_for_ticket_with_comments(ticket)
  Lita.logger.info "#{logger_prefix}Processing Zendesk ticket details for [#{ticket.id}] with comments"
  message = get_text_for_ticket ticket, false
  comments = get_text_for_ticket_comments ticket
  if !comments.nil? && comments.length>0
    message += "\n#{comments}"
  end
  return message
end
logger_prefix() click to toggle source
# File lib/lita/handlers/zendesk.rb, line 257
def logger_prefix
  " -- #{self.class.name}: "
end
reply_tickets(response, tickets) click to toggle source
# File lib/lita/handlers/zendesk.rb, line 222
def reply_tickets(response, tickets)
  serp_count = 0
  tickets.each_with_index do |ticket, i|
    break if i >= config.max_results
    serp_count += 1
    response.reply "Ticket #{ticket.id} is #{ticket.status}: #{ticket_url_web(ticket.id)} - #{ticket.subject}"
  end
  return serp_count
end
ticket_count(response, query, ticket_type = '') click to toggle source
# File lib/lita/handlers/zendesk.rb, line 194
def ticket_count(response, query, ticket_type = '')
  Lita.logger.info "#{logger_prefix}Processing Zendesk Ticket Count Query [#{query}]"
  begin
    ticket_count = client.search!(query: query).count
    Lita.logger.info "#{logger_prefix}Ticket count #{ticket_count}"
    ticket_desc  = ticket_type == '' ? '' : "#{ticket_type} "
    ticket_word  = ticket_count == 1 ? 'ticket' : 'tickets'
    response.reply "#{ticket_count} #{ticket_desc}#{ticket_word}."
  rescue
    response.reply "A Zendesk error has been encountered."
  end
end
ticket_list(response, query, ticket_status = '') click to toggle source
# File lib/lita/handlers/zendesk.rb, line 214
def ticket_list(response, query, ticket_status = '')
  Lita.logger.info "#{logger_prefix}Processing Zendesk ticket list query"
  tickets = client.search!(query: query)
  serp_count = reply_tickets response, tickets
  ticket_desc = ticket_status == '' ? '' : "#{ticket_status} "
  response.reply "Listing #{serp_count} of #{tickets.count} #{ticket_desc}#{ticket_word(tickets.count)}."
end
ticket_url_web(ticket_id) click to toggle source
# File lib/lita/handlers/zendesk.rb, line 232
def ticket_url_web(ticket_id)
  uri_join web_tickets_url.to_s, ticket_id.to_s
end
ticket_word(count) click to toggle source
# File lib/lita/handlers/zendesk.rb, line 236
def ticket_word(count)
  count == 1 ? 'ticket' : 'tickets'
end
uri_join(*args) click to toggle source
# File lib/lita/handlers/zendesk.rb, line 253
def uri_join(*args)
  args.join('/').gsub(/\/\s*\//, '/').gsub(/\/+/, '/').gsub(/^(https?:\/)/i, '\1/')
end
user_display(user) click to toggle source
# File lib/lita/handlers/zendesk.rb, line 240
def user_display(user)
  parts = []
  if user.name.to_s.length > 0
    parts.push user.name
  end
  if user.email.to_s.length > 0
    if parts.length < 1 || user.email != user.name
      parts.push "(#{user.email})"
    end
  end
  user_text = parts.join(' ')
end