Já que este pacote não está no PyPI é necessário clona-lo do repositório com o seguinte comando:
git clone https://path.to.repo/python-libzen.git
pip install ./python-libzen
Use o argumento -e
para que o pacote seja instalado em modo 'editável' para fins de desenvolvimento e debug. Isso pode
apresentar problemas no python 3.11 com o setuptools em uma versão menor que 58.3.0.
Antes de começar a fazer as requisições é necessário definir as credenciais e a url da zendesk que será acessada. Isso pode ser feito de duas formas: via variáveis de ambiente ou via código.
Caso seja necessário realizar a autentificação via token, adicione '/token' no final do email do usuário e coloque o token no lugar da senha.
Note que o pacote jogará um erro caso as credenciais não sejam definidas antes de alguma função que realize requisições seja chamada.
Defina as seguintes variáveis de ambiente antes de executar o programa:
- ZENDESK_URL: Endereço da zendesk com o subdomínio.
- ZENDESK_NAME: E-mail para login. Acrecente '/token' no final caso deseje logar por token.
- ZENDESK_SECRET: Senha ou token para login.
Para criar variáveis de ambiente locais no terminal atualmente aberto você pode usar os seguintes comandos:
No windows: set VARIAVEL=valor
No *nix: export VARIAVEL=valor
Caso prefira extrair as credenciais de outro lugar, você pode passa-las
para a função set_authentication
inves de definir as variáveis de ambiente.
import libzen
email = ''
# Com autentificação básica
libzen.set_authentication('url', email, 'secret')
# Com token
libzen.set_authentication('url', email + '/token', 'token')
# Resto do código...
libzen.tickets.create(**ticket_props) -> int
Cria um ticket com os valores passados nos parâmetros nomeados (kwargs) como campos. Ele retorna o id do ticket criado.
NOTE: somente a descrição é obrigatória, porém cada zendesk pode adicionar campos para serem obrigatórios.
from libzen import tickets
ticket_id = tickets.create(description='this is a description', subject='suporte')
ticket = { 'description': 'foo', 'requester_id': 0}
ticket_id = tickets.create(**ticket)
libzen.tickets.create_many(tickets: list[dict]) -> str
Cria todos os tickets passados.
Retorna uma string com a url da tarefa (job result)
from libzen import tickets
print(tickets.create_many([
{ 'subject': 'foo'},
{ 'description': 'baz'}
]))
libzen.tickets.get_by_id(ticket_id: str | int) -> Optional[dict]
Retorna o ticket de um dado id ou None caso ele não exista.
from libzen import tickets
print(tickets.get_by_id(33435))
libzen.tickets.update(ticket_id: str | int, **ticket_props) -> dict
Semelhante a libzen.tickets.create, porém atualiza o ticket no lugar de criar.
Retorna o ticket completo e atualizado
from libzen import tickets
ticket_id = tickets.update(1, subject='suporte')
ticket = { 'description': 'foo'}
ticket_id = tickets.update(**ticket)
libzen.tickets.update_many(tickets: list[dict] ) -> str
Atualiza todos os tickets que foram passados.
Retorna uma string com a url da tarefa (job result)
from libzen import tickets
print(tickets.update_many([
{ 'id': 1, 'subject': 'foo'},
{ 'id': 2, 'description': 'baz'}
]))
libzen.tickets.append_tags(ticket_id: str | int, tags : list[str]) -> dict[str,str]
Adiciona tags ao ticket. Note que ele não sobrescreve as existentes. O retorno são todas as tags do ticket incluindo a que foi adicionada.
from libzen import tickets
tickets.append_tags(33435, ['tag1', 'tag2'])
libzen.tickets.delete(ids: str | int)
Apaga o ticket com o id.
from libzen import tickets
tickets.delete(33435)
libzen.tickets.delete_many(ids: list[str | int]) -> str
Apaga todos os tickets dos quais os ids foram passados como lista.
Retorna uma string com a url da tarefa (job result)
from libzen import tickets
print(tickets.get_by_id(33435))
libzen.tickets.import_one(**ticket_props) -> int
Semelhante a libzen.tickets.create, porém permite a adição de
comentários na criação do ticket e permite definir uma flag
para arquivar imediatamente o ticket se o status dele é fechado.
Retorna o ticket completo e atualizado
Note que por esse endpoint o campo created_at
não é de apenas
leitura. Mais informações sobre o endpoint.
from libzen import tickets
comments = [
{
"created_at": "2009-06-25T10:15:18Z",
"value": "I can upload"
},
{
"public": False,
"value": "multiple comments with it"
}
]
ticket = { 'comments': comments }
ticket_id = tickets.import_one(**ticket, archive_immediately=True, status='closed')
libzen.tickets.import_many(tickets: list[dict] ) -> str
Semelhante a libzen.tickets.import_one, porém permite cria multiplos tickets. Retorna uma string com a url da tarefa (job result)
from libzen import tickets
ticket_id = tickets.import_one(subject='suporte')
comments = [
{
"created_at": "2009-06-25T10:15:18Z",
"value": "I can upload"
},
{
"public": False,
"value": "multiple comments with it"
}
]
print(tickets.import_many([
{ 'subject': 'foo'},
{ 'comments': comments}
]))
libzen.comments.get(ticket_id: str | int) -> list[dict]
Retorna todos os comentário de um ticket.
from libzen import comments
comments = comments.get(555443)
print(comments[0])
libzen.ticket_fields.get_all() -> list[dict]
Retorna todos os campos de ticket.
from libzen import ticket_fields
fields = ticket_fields.get_all()
print(fields[0])
libzen.ticket_fields.get_all(ticket_id: str | int) -> Optional[dict]
Retorna as metricas de um ticket de um dado id ou None caso ele o ticket não exista.
from libzen import metrics
ticket_metrics = metrics.get(66)
print(ticket_metrics)
libzen.users.me() -> dict
Devolve informações do usuário logado.
from libzen import users
print(users.me())
libzen.users.create(**user_props) -> int
Cria um usuário com os valores passados nos parâmetros nomeados (kwargs) como campos. Ele retorna o id do usuário criado.
NOTE: somente o name é obrigatório.
from libzen import users
user_id = users.create(name='Jhon Doe', phone='555555555')
user = { 'name': 'foo', 'email': 'fo@baz.com'}
user_id = users.create(**user)
libzen.users.create_many(users: list[dict]) -> str
Cria todos os usuários passados.
Retorna uma string com a url da tarefa (job result)
from libzen import users
print(users.create_many([
{ 'name': 'foo', 'phone': '+000000'},
{ 'name': 'baz', 'email': 'foo@baz.com'}
]))
libzen.users.update(user_id: str | int, **user_props) -> int
Atualiza o usuário de id "user_id". Retorna o usuário criado.
from libzen import users
user = users.update(666, name='Jhon Doe', phone='555555555')
user = { 'name': 'foo', 'email': 'fo@baz.com'}
user = users.update(666, , **user)
libzen.users.get_by_id(requester_id: str | int) -> Optional[dict]
Retorna o usuário de um dado id ou None caso ele não exista.
from libzen import users
print(users.get_by_id(12345678))
libzen.users.delete(ids: str | int)
Apaga o usuário com o id.
from libzen import users
users.delete(33435)
libzen.users.delete_many(ids: list[str | int]) -> str
Apaga todos os usuários dos quais os ids foram passados como lista.
Retorna uma string com a url da tarefa (job result)
from libzen import users
print(users.get_by_id(33435))
libzen.search.generators.iterate_by_query(query: str, sort_by: str='created_at', order_by: str='asc', timeout: int=60)
Itera sobre todos resultados de uma pesquisa paginada.
from libzen.search import generators
for tickets in generators.iterate_by_query('type:ticket status:closed'):
print(tickets[0])
libzen.search.get_by_query(query: str, sort_by: str='created_at', order_by: str='asc', timeout: int=60) -> list[dict]
Retorna todos resultados de uma pesquisa paginada.
from libzen import search
tickets = search.get_by_query('type:ticket status:closed', sort_by='created_at', sort_order='asc'):
print(tickets[0])
libzen.search.export.iterate_by_query(query: str, timeout: int=60)
Itera sobre todos resultados de uma pesquisa no endpoint export. Para saber as diferenças entre esse endpoint e o normal, leia a documentação.
Note: diferente dos outros search.get_by_query e search.generators.iterate_by_query, é necessário prefixar com "query=".
from libzen.search import export
for tickets in export.iterate_by_query('query=tags:teste&filter[type]=ticket'):
print(tickets[0])
libzen.attachments.create(fp: TextIOWrapper | BufferedReader | BytesIO, filename: str| None=None) -> tuple[str, int]
Cria um anexo e retorna uma tupla com o token
e o id. O token
é usado para anexa-lo em comentários de ticket.
fp
é o arquivo a ser anexado, ele deve ser aberto em modo bytes. filename
é o nome do arquivo após ser postado na zendesk, se não passado, ele será nomeado com o nome de fp
.
O arquivo passado como parâmetro deve ser aberto em modo de 'bytes'. Filename
from libzen import attachments, tickets
with open("./some-cool-image.png", 'rb') as file:
token, id_ = attachments.create(file)
tickets.update(1, comment={
'body': 'here is a cool picture :^)',
'uploads': [token]
})
with open("./relatory.txt", 'rb') as file:
token, id_ = attachments.create(file)
tickets.update(1, comment={ 'body': 'You can see the relatory below.', 'uploads': [token] })
libzen.organizations.create(**organization_props) -> int
Cria uma organização com os valores passados nos parâmetros nomeados (kwargs) como campos. Ele retorna o id da organização criado.
NOTE: somente o nome é obrigatório.
from libzen import tickets
ticket_id = tickets.create(description='this is a description', subject='suporte')
ticket = { 'description': 'foo', 'requester_id': 0}
ticket_id = tickets.create(**ticket)
libzen.organizations.update(organization_id: str | int, **organization_props) -> dict
Semelhante a libzen.organizations.create, porém atualiza a organização no lugar de criar.
Retorna a organização completa e atualizado
from libzen import organizations
org_id = organizations.update(1, name='org name')
org = { 'description': 'foo'}
org_id = organizations.update(**org)
libzen.wait_for_job(url: string, sleep_time=5) -> dict
Espera um job ser terminado e retorna o conteúdo. sleep_time
é quanto vai esperar antes de tentar novamente.
from libzen import tickets, job_statuses
print(job_statuses.wait_for_job(tickets.create_many([
{ 'subject': 'foo'},
{ 'description': 'baz'}
])))
libzen.macros() -> list[dict]
Retorna todas as macros incluindo as desativadas.
from libzen import macros
macros = macros.get_all()
print(macros[0])