Class: Lita::Handlers::Zendesk

Inherits:
Handler
  • Object
show all
Defined in:
lib/lita/handlers/zendesk.rb

Constant Summary collapse

VERSION_URL =
'api/v2'
QUERY_TICKETS_ALL =
'tickets'
QUERY_TICKETS_ESCALATED =
'search.json?query=tags:escalated+status:open+status:pending+type:ticket'
QUERY_TICKETS_HOLD =
'search.json?query=status:hold+type:ticket'
QUERY_TICKETS_OPEN =
'search.json?query=status:open+type:ticket'
QUERY_TICKETS_NEW =
'search.json?query=status:new+type:ticket'
QUERY_TICKETS_PENDING =
'search.json?query=status:pending+type:ticket'
QUERY_TICKETS_UNSOLVED =
'search.json?query=status<solved+type:ticket'
QUERY_USERS =
'users'

Instance Method Summary collapse

Instance Method Details

#basic_credentialsObject



49
50
51
# File 'lib/lita/handlers/zendesk.rb', line 49

def basic_credentials
  Base64.encode64("#{config.user}:#{config.password}").gsub(/\s/,'')
end

#escalated_tickets(response) ⇒ Object



109
110
111
# File 'lib/lita/handlers/zendesk.rb', line 109

def escalated_tickets(response)
  ticket_count response, QUERY_TICKETS_ESCALATED, 'escalated'
end

#escalated_tickets_list(response) ⇒ Object



146
147
148
# File 'lib/lita/handlers/zendesk.rb', line 146

def escalated_tickets_list(response)
  ticket_list response, QUERY_TICKETS_ESCALATED, 'escalated'
end

#initObject



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/lita/handlers/zendesk.rb', line 27

def init
  @base_url = "https://#{config.subdomain.to_s}.zendesk.com"
  @version_url = "https://#{config.subdomain.to_s}.zendesk.com/#{VERSION_URL}"
  @tickets_url = "https://#{config.subdomain.to_s}.zendesk.com/tickets"

  if config.auth_type == 'password'
    @conn = Faraday.new(url: @version_url) do |faraday|
      faraday.headers['Authorization'] = "Basic #{basic_credentials}"
      faraday.response :json                    # JSON response
      faraday.response :logger                  # log requests to STDOUT
      faraday.adapter  Faraday.default_adapter  # make requests with Net::HTTP
    end
  else
    @conn = Faraday.new(url: @version_url) do |faraday|
      faraday.response :json                    # JSON response
      faraday.response :logger                  # log requests to STDOUT
      faraday.adapter  Faraday.default_adapter  # make requests with Net::HTTP
    end
    @conn.basic_auth("#{config.user}/token", config.token) 
  end
end

#new_tickets(response) ⇒ Object



104
105
106
# File 'lib/lita/handlers/zendesk.rb', line 104

def new_tickets(response)
  ticket_count response, QUERY_TICKETS_NEW, 'new'
end

#new_tickets_list(response) ⇒ Object



141
142
143
# File 'lib/lita/handlers/zendesk.rb', line 141

def new_tickets_list(response)
  ticket_list response, QUERY_TICKETS_NEW, 'new'
end

#onhold_tickets(response) ⇒ Object



119
120
121
# File 'lib/lita/handlers/zendesk.rb', line 119

def onhold_tickets(response)
  ticket_count response, QUERY_TICKETS_HOLD, 'on hold'
end

#onhold_tickets_list(response) ⇒ Object



156
157
158
# File 'lib/lita/handlers/zendesk.rb', line 156

def onhold_tickets_list(response)
  ticket_list response, QUERY_TICKETS_HOLD, 'on hold'
end

#open_tickets(response) ⇒ Object



114
115
116
# File 'lib/lita/handlers/zendesk.rb', line 114

def open_tickets(response)
  ticket_count response, QUERY_TICKETS_OPEN, 'open'
end

#open_tickets_list(response) ⇒ Object



151
152
153
# File 'lib/lita/handlers/zendesk.rb', line 151

def open_tickets_list(response)
  ticket_list response, QUERY_TICKETS_OPEN, 'open'
end

#pending_tickets(response) ⇒ Object



99
100
101
# File 'lib/lita/handlers/zendesk.rb', line 99

def pending_tickets(response)
  ticket_count response, QUERY_TICKETS_PENDING, 'pending'
end

#pending_tickets_list(response) ⇒ Object



136
137
138
# File 'lib/lita/handlers/zendesk.rb', line 136

def pending_tickets_list(response)
  ticket_list response, QUERY_TICKETS_PENDING, 'pending'
end

#ticket_count(response, url, ticket_type = '') ⇒ Object



61
62
63
64
65
66
67
# File 'lib/lita/handlers/zendesk.rb', line 61

def ticket_count(response, url, ticket_type = '')
  res = zendesk_request url
  ticket_count = res.body['count']
  ticket_word  = ticket_count == 1 ? 'ticket' : 'tickets'
  ticket_desc  = ticket_type == '' ? '' : "#{ticket_type} "
  response.reply "#{ticket_count} #{ticket_desc}#{ticket_word}."
end

#ticket_details(response) ⇒ Object



163
164
165
166
167
168
169
170
171
172
173
174
175
176
# File 'lib/lita/handlers/zendesk.rb', line 163

def ticket_details(response)
  ticket_id = response.matches[0][0]
  url = "#{QUERY_TICKETS_ALL}/#{ticket_id}.json"
  res = zendesk_request url
  data = res.body

  message = "Ticket #{data['ticket']['id']}: #{@tickets_url}/#{data['ticket']['id']}"
  message += "\nStatus: #{data['ticket']['status'].upcase}"
  message += "\nUpdated: " + data['ticket']['updated_at']
  message += "\nAdded: #{data['ticket']['created_at']}"
  message += "\nSubject: #{data['ticket']['subject']}"
  message += "\nDescription:\n-----\n#{data['ticket']['description']}\n-----\n"
  response.reply message
end

#ticket_list(response, url, ticket_type = '') ⇒ Object



69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/lita/handlers/zendesk.rb', line 69

def ticket_list(response, url, ticket_type = '')
  res = zendesk_request url
  tickets = res.body['results']
  tickets.each do |ticket|
    response.reply "Ticket #{ticket['id']} is #{ticket['status']}: #{@tickets_url}/#{ticket['id']} - #{ticket['subject']}"
  end
  ticket_length = tickets.length
  ticket_count = res.body['count']
  ticket_word  = ticket_count == 1 ? 'ticket' : 'tickets'
  ticket_desc  = ticket_type == '' ? '' : "#{ticket_type} "
  response.reply "Listing #{ticket_length} of #{ticket_count} #{ticket_desc}#{ticket_word}."
end

#tickets(count) ⇒ Object



82
83
84
# File 'lib/lita/handlers/zendesk.rb', line 82

def tickets(count)
  count == 1 ? 'ticket' : 'tickets'
end

#total_tickets(response) ⇒ Object



94
95
96
# File 'lib/lita/handlers/zendesk.rb', line 94

def total_tickets(response)
  ticket_count response, QUERY_TICKETS_ALL, 'total'
end

#total_tickets_list(response) ⇒ Object



131
132
133
# File 'lib/lita/handlers/zendesk.rb', line 131

def total_tickets_list(response)
  ticket_list response, QUERY_TICKETS_ALL, 'total'
end

#unsolved_tickets(response) ⇒ Object



89
90
91
# File 'lib/lita/handlers/zendesk.rb', line 89

def unsolved_tickets(response)
  ticket_count response, QUERY_TICKETS_UNSOLVED, 'unsolved'
end

#unsolved_tickets_list(response) ⇒ Object



126
127
128
# File 'lib/lita/handlers/zendesk.rb', line 126

def unsolved_tickets_list(response)
  ticket_list response, QUERY_TICKETS_UNSOLVED, 'unsolved'
end

#zendesk_request(url) ⇒ Object



53
54
55
56
57
58
59
# File 'lib/lita/handlers/zendesk.rb', line 53

def zendesk_request(url)
  init unless @conn
  if url.index('http') != 0
    url = "#{@version_url}/#{url}"
  end
  @conn.get url
end