Я интегрирую API Zendesk ITSM в свою библиотеку python с помощью клиента Zenpy.
Для создания билета с помощью zenpy-клиента я могу установить репортера билета по идентификатору электронной почты, но для цессионария я не могу установить цессионария по идентификатору электронной почты.
Это код, который я пробовал до сих пор.
ticket_payload = Ticket(
description="some description",
type="task",
priority="high",
status="open"
)
ticket_payload.requester = User(email="[email protected]"])
ticket_payload.assignee = User(email="[email protected]")
response = self.zenpy_client.tickets.create(ticket_payload)
Ответный билет, который я получаю, имеет набор репортеров, но assigneee - None.
Если я передам идентификатор вместе с адресом электронной почты, как
ticket_payload.assignee = User(id= 354876354,email="[email protected]")
то он работает, и я вижу, что цессионарий настроен на билет. Но это не требуется для репортера.
Это дурное поведение дзенпи, или я что-то упускаю?
Мне потребовалось некоторое время, но я думаю, что понимаю вашу проблему. Из документа в разделе "Объекты API" в разделе "Свойства объекта":
Когда доступ к атрибуту assignee, Zenpy сначала пытается найти связанного пользователя в кеше Пользователя, и если он не может быть найден, генерирует и выполняет вызов API для извлечения, создания, кэширования и возврата объекта.
Я ошибочно предположил, что это означает, что я могу установить значение атрибута assignee, и zenpy будет искать его, а затем поместить идентификатор в поле assignee_id. Это неправильная интерпретация. Цитата означает, что если вы установите assignee_id, а затем попытаетесь получить доступ к атрибуту assignee, он будет искать его и вернуть. Но должен быть идентификатор.
В следующем разделе документов:
Важно отметить, что большинство разработчиков свойств выбрасывают всю информацию, кроме идентификатора. Это связано с тем, что Zendesk ожидает только id, поэтому любые изменения, внесенные в объект, не будут сохраняться автоматически.
Поэтому, когда вы устанавливаете правопреемника или запросчика без идентификатора, адрес электронной почты отбрасывается, а соответствующий идентификатор - None.
Что касается того, почему установлен идентификатор запроса, он, вероятно, установлен для пользователя, который используется для аутентификации запроса, а не для указанного.