Freshdesk

Freshdesk

Ноутбуки, используемые в примере:


В данной статье рассматривается пример получения данных с портала поддержки клиентов Freshdesk https://freshdesk.com. Пример не является шаблонным: в каждом случае задачи разнятся, и работать с данными придется по-другому.

Вот особенности данного кейса:

  • Количество получаемых данных небольшое - порядка 400 строк, поэтому все выгруженные и обработанные данные сохраняются в XLSX файл, а не в CSV или SQL базу данных.

  • Будут использоваться два ноутбука: первый для данных заявок, второй для данных контактов и агентов. На выходе будет два Excel файла для загрузки в платформу.

Здесь не рассматривается:


Сначала необходимо внимательно ознакомиться с описанием работы библиотеки python для Freshdesk:https://github.com/sjkingo/python-freshdesk, а также с API Freshdesk https://developers.freshdesk.com/api.

 

Теперь можно приступать к работе в JupyterLab.

  1. Создаем новый ноутбук для заявок, например, с именем Tickets.

  2. Первым блоком подключаем все необходимые нам для работы Python библиотеки:

    import petl as etl from freshdesk.api import API from datetime import date

     

  3. Вторым блоком подключаемся к Freshdesk, используя адрес своего портала и токен. Адрес портала нужно обязательно указывать с доменом freshdesk.com.

    a = API('yourname.freshdesk.com', 'gj34pg98hyatoken')

     

  4. Получаем заявки c 1 января 2015 года, кроме удаленных и помеченных как спам. Параметр filter_name необходим для получения всех заявок. Если его не указать, придут только открытые заявки, назначенные агенту, чей токен указан в подключении.

    tickets = a.tickets.list_tickets(updated_since='2015-01-01', filter_name=None)

     

  5. Кладем все данные в список, где каждый элемент - это словарь. Это нужно для создания таблицы petl в следующем шаге. В некоторых местах данные сразу преобразовываются к нужном виду, например, для tags данные в виде списка преобразуются в строку и разделяются пробелами.

    tickets_array = [] for t in tickets: tickets_array.append({'id': t.id, 'subject':t.subject, #'company_id': t.company_id, 'created_at': t.created_at.date(), 'due_by': t.due_by, # в отличие от created_at это просто строка. Ну и так сойдет. 'fr_due_by': t.fr_due_by, # Снова строка, ну ок 'priority': t.priority, 'requester_id': t.requester_id, 'responder_id': t.responder_id, 'status': t.status, 'type': t.type, 'source': a.tickets.get_ticket(t.id)._source, 'tags': ' '.join(t.tags), 'description_text': a.tickets.get_ticket(t.id).description_text, })

     

  6. Создаем таблицу petl с указанными столбцами и наполняем ее данными о заявках.

    table1 = etl.fromdicts(tickets_array, header=['id','subject', 'due_by', 'fr_due_by', 'priority', 'requester_id', 'responder_id', 'status', 'type', 'source', 'tags', 'description_text', 'created_at' ])

     

  7. Вручную расшифровываем кастомные статусы тикетов. Они уникальны для каждого портала Freshdesk. В данном случае их всего четыре. У вас их может не быть вовсе.

    table2 = etl.convert(table1, 'status', {'status_8': 'В ожидании третьей стороны', 'status_9': 'Тестирование', 'status_10': 'В разработке', 'status_11': 'Запланирована удаленная сессия', })

     

  8. Выгружаем в Excel.

    etl.toxlsx(table2, 'tickets.xlsx')

     


  1. Создаем новый ноутбук для заявок, например, с именем Contacts. Импортируем библиотеки.

    import petl as etl from freshdesk.api import API

     

  2. Вторым блоком подключаемся к Freshdesk, используя адрес своего портала и токен. Адрес портала нужно обязательно указывать с доменом freshdesk.com.

    a = API('yourname.freshdesk.com', 'gj34pg98hyatoken')

     

  3. Записываем в две переменные информацию о контактах и агентах.

    contacts = a.contacts.list_contacts() agents = a.agents.list_agents()

     

  4. В рамках данного примера мы хотим на выходе сформировать одну общую таблицу контактов, где будут и обычные контакты (клиенты), и агенты. Причем, чтобы отличать обычных контактов от агентов, мы добавим дополнительный столбец isAgent. Также, чтобы отличать штатного агента от временного добавим столбец isOccasional.
    Создаем переменную, куда будем помещать все данные в виде списка.

    contacts_array = []

     

  5. Сначала помещаем всю информацию об обычных контактах в нашу переменную. Здесь же мы вычисляем название компании company_name по адресу электронной почты контакта.
    Для столбца isAgent конечно же ставим False, так как мы сейчас работаем с обычными контактами. Для столбца isOccasional ставим None, так как обычный контакт не может быть ни штатным, ни временным агентом.

    for c in contacts: contacts_array.append({'id': c.id, 'name': c.name, 'email': c.email, 'company_name': c.email.split("@")[1].split(".")[0].capitalize(), 'isAgent': False, # это кастомное поле, во фрешдеске его нет 'isOccasional': None, # Только для агентов })

     

  6. Добавляем в ту же переменную информацию об агентах.

    for a in agents: contacts_array.append({'id': a.id, 'name': a.contact['name'], 'email': a.contact['email'], 'company_name': None, # у агентов нет компании 'isAgent': True, # это кастомное поле, во фрешдеске его нет 'isOccasional': a.occasional, })

     

  7. Формируем таблицу petl на основе единой информации о контактах и агентах в contacts_array.

    table = etl.fromdicts(contacts_array, header=['id','name', 'email', 'company_name', 'isAgent', 'isOccasional'])

     

  8. Экспортируем в Excel.

    etl.toxlsx(table, 'contacts.xlsx')

 

Полученные файлы можно брать и загружать в платформу через стандартный загрузчик. На этом работа в ViXtract завершена.