-
Notifications
You must be signed in to change notification settings - Fork 1
/
zendesk.py
94 lines (73 loc) · 2.77 KB
/
zendesk.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
from errbot import BotPlugin, botcmd
import logging
log = logging.getLogger(name='errbot.plugins.Zendesk')
try:
import requests
except ImportError:
log.error("Please install 'requests' python package")
class Zendesk(BotPlugin):
"""Plugin for Zendesk"""
def get_configuration_template(self):
""" configuration entries """
config = {
'api_url': None,
'api_user': None,
'api_pass': None,
'domain': None,
}
return config
@botcmd(split_args_with=" ")
def zendesk(self, msg, args):
""" Returns the subject of the ticket along with a link to it.
Example:
!zendesk <id>
"""
ticket = args.pop(0)
if ticket == '':
self.send(msg.frm,
'id is required',
message_type=msg.type,
in_reply_to=msg,
groupchat_nick_reply=True)
return
username = self.config['api_user']
password = self.config['api_pass']
api_url = self.config['api_url']
domain = self.config['domain']
url = '{0}/tickets/{1}.json'.format(api_url, ticket)
display_url = '{0}/tickets/{1}'.format(domain, ticket)
req = requests.get(url, auth=(username, password))
log.debug('ticket url: {}'.format(url))
if req.status_code == requests.codes.ok:
data = req.json()
requester_user = self._get_name_by_id(data['ticket']['requester_id'])
# This is a cases where a ticket is created but not assigned
assignee_id = data['ticket']['assignee_id']
if assignee_id is None:
assignee_user = 'Unassigned'
else:
assignee_user = self._get_name_by_id(data['ticket']['assignee_id'])
response = '{0} created by {2} on {1}. Assigned: {5}, Status: {4} - {3}'.format(
data['ticket']['subject'],
data['ticket']['created_at'],
requester_user,
display_url,
data['ticket']['status'],
assignee_user
)
else:
response = 'Id {0} not found.'.format(ticket)
self.send(msg.frm,
response,
message_type=msg.type,
in_reply_to=msg,
groupchat_nick_reply=True)
def _get_name_by_id(self, id):
username = self.config['api_user']
password = self.config['api_pass']
api_url = self.config['api_url']
url = '{0}/users/{1}.json'.format(api_url, id)
log.debug('user url: {}'.format(url))
req = requests.get(url, auth=(username, password))
data = req.json()
return data['user']['name']