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_search(response, raw_query)
click to toggle source
# File lib/lita/handlers/zendesk.rb, line 207 def ticket_search(response, raw_query) Lita.logger.info "#{logger_prefix}Processing Zendesk Ticket Search" tickets = client.search!(query: "#{QUERY_TICKETS_ALL} #{raw_query}") serp_count = reply_tickets response, tickets response.reply "Listing #{serp_count} of #{tickets.count} #{ticket_word(tickets.count)} matching #{raw_query}." 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