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

#base_urlObject



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

def base_url
  "https://#{config.subdomain.to_s}.zendesk.com"
end

#basic_credentialsObject



52
53
54
# File 'lib/lita/handlers/zendesk.rb', line 52

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

#escalated_tickets(response) ⇒ Object



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

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

#escalated_tickets_list(response) ⇒ Object



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

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

#initObject



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

def init
  @base_url = base_url
  @version_url = "#{@base_url}/#{VERSION_URL}"
  @tickets_url = "#{@base_url}/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



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

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

#new_tickets_list(response) ⇒ Object



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

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

#onhold_tickets(response) ⇒ Object



129
130
131
# File 'lib/lita/handlers/zendesk.rb', line 129

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

#onhold_tickets_list(response) ⇒ Object



166
167
168
# File 'lib/lita/handlers/zendesk.rb', line 166

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

#open_tickets(response) ⇒ Object



124
125
126
# File 'lib/lita/handlers/zendesk.rb', line 124

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

#open_tickets_list(response) ⇒ Object



161
162
163
# File 'lib/lita/handlers/zendesk.rb', line 161

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

#pending_tickets(response) ⇒ Object



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

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

#pending_tickets_list(response) ⇒ Object



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

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

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



64
65
66
67
68
69
70
# File 'lib/lita/handlers/zendesk.rb', line 64

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



173
174
175
176
177
178
179
180
181
182
183
184
185
186
# File 'lib/lita/handlers/zendesk.rb', line 173

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



72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/lita/handlers/zendesk.rb', line 72

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



85
86
87
# File 'lib/lita/handlers/zendesk.rb', line 85

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

#total_tickets(response) ⇒ Object



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

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

#total_tickets_list(response) ⇒ Object



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

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

#unsolved_tickets(response) ⇒ Object



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

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

#unsolved_tickets_list(response) ⇒ Object



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

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

#zd_instance_info(response) ⇒ Object



92
93
94
# File 'lib/lita/handlers/zendesk.rb', line 92

def zd_instance_info(response)
  response.reply "Using Zendesk instance at: #{base_url}"
end

#zendesk_request(url) ⇒ Object



56
57
58
59
60
61
62
# File 'lib/lita/handlers/zendesk.rb', line 56

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