Лента событий для ЭЗЗ
Эта страница описывает, как по ленте событий отличить титулы и ошибки. Работа с лентой событий для перевозочных документов описана на странице Работа с событиями.
Отличия титулов Т1 и Т2
Оба титула приходят с AttachmentType = Title, поэтому различать их нужно по другим полям:
Т1 |
Т2 |
|
|---|---|---|
|
|
|
Префикс |
|
|
Событие приходит в поле |
|
|
Ключевые события документооборота
С документом во время документооборота происходит множество событий — обрабатывать их все не нужно. Ниже в разделах перечислены главные события обработки ЭЗЗ — они указаны в том порядке, в котором приходят:
отправлен титул Т1 — событие для грузоотправителя,
получен титул Т1 — событие для перевозчика,
получены данные от ГИС ЭПД,
отправлен титул Т2 — событие для перевозчика,
получен титул Т2 от перевозчика — событие для грузоотправителя.
Кроме них на любой стадии документооборота могут произойти следующие события:
Ошибка — сущность с
AttachmentType = OuterDocflowи статусомType = Error. Код и текст ошибки находятся вStatus.Details.
Любое событие хранится в структуре BoxEvent: новое сообщение — в поле Message, дополнение к уже существующему сообщению — в поле Patch.
Для работы с событиями могут потребоваться следующие поля:
MessageId— идентификатор сообщения. У титулов Т1 и Т2 он один. По нему запросите сообщение методом GetMessage (V6).EntityId— идентификатор сущности внутри сообщения. У титула это идентификатор документа. Содержимое сущности получите методом GetEntityContent (V4).ParentEntityId— идентификатор родительской сущности. У подписи это документ, который она подписывает. У второго титула — первый титул цепочки.FromBoxId,ToBoxId— идентификаторы ящиков отправителя и получателя.DocumentNumber,DocumentDate— номер и дата документа.FileName— имя файла, ИдФайл.TypeNamedId— тип документа. Пригодится для отбора, если фильтр не был задан в самом запросе.ContentTypeId— версия и вид титула. По нему титулы различаются между собой.DocumentDirection— направление документа:Inbound— входящий,Outbound— исходящий.RecipientResponseStatus— статус ответа получателя.
Отправлен титул Т1
Это событие появляется в ленте грузоотправителя.
Событие отправки титула приходит в поле Message со следующими признаками:
EntityType = Attachment;AttachmentType = Title;ContentTypeId = kl_zakzvper_t1_05_01.
Подпись титула — соседняя сущность Signature. Ее ParentEntityId совпадает с EntityId титула Т1. В том же сообщении может быть сущность с AttachmentType = CustomData — ее ParentEntityId тоже совпадает с EntityId титула.
Какие поля из ответа стоит сохранить:
Параметр |
Значение |
Для чего сохранять |
|---|---|---|
|
Ящик организации перевозчика |
Идентифицировать ящик перевозчика: связывать ЭЗЗ с контрагентом, определять адресата исходящего Т1 и при необходимости использовать его в последующих вызовах API. |
|
Название организации перевозчика |
Отображать понятное наименование перевозчика в карточке ЭЗЗ и журналах без дополнительного запроса к API. |
|
Дата и номер ЭЗЗ |
Связывать событие с ЭЗЗ в учетной системе и находить документ по привычным реквизитам. |
|
Идентификатор сообщения |
По параметру можно запросить сообщение методом |
|
Идентификатор сущности в сообщении |
Идентификатор конкретного титула внутри сообщения. Нужен, чтобы запросить содержимое методом |
|
Имя файла, ИдФайл |
Нужен для сверки с XML, поиска документа в логах и обмена с учетной системой. |
|
Статус отправленного титула |
Сохраняет статус документа, чтобы показать текущее состояние отправленного Т1 и отследить его изменение при следующих событиях или сверке. |
Пример события:
{
"EventId": "2df98531-6321-45c4-9c34-fa6c34dfec9d",
"Message": {
"MessageId": "2df98531-6321-45c4-9c34-fa6c34dfec9d",
"FromBoxId": "5e23b73fa96e407bbc6ac80953a1d11a@diadoc.ru",
"FromTitle": "Иванов ИИ",
"ToBoxId": "2e5b881e47d445f7aba7d80047e18a42@diadoc.ru",
"ToTitle": "ООО Ромашка ПРВ эксп",
"Entities": [
{
"EntityType": "Attachment",
"EntityId": "b9bc9bc2-0648-49a3-b3a8-54d57ad59e54",
"AttachmentType": "Title",
"FileName": "ON_ZAKZVGO_2BM-9676394191-...-20260709_a810c497-....xml",
"DocumentInfo": {
"DocumentDate": "09.07.2026",
"DocumentNumber": "123",
"TypeNamedId": "LogisticsOrderRequest",
"Function": "default",
"DocumentDirection": "Outbound",
"RecipientResponseStatus": "WaitingForRecipientSignature",
"Version": "zakzvper_05_01_01",
"Title": "Заказ (заявка) №123 от 09.07.26",
"DocflowStatus": {
"PrimaryStatus": {
"Severity": "Info",
"StatusText": "Отправлен"
},
"PowerOfAttorneyGeneralStatus": {
"Severity": "Warning",
"StatusNamedId": "IsNotAttached",
"StatusText": "Не приложена доверенность"
}
}
},
"ContentTypeId": "kl_zakzvper_t1_05_01"
},
{
"EntityType": "Signature",
"EntityId": "8678e8c3-8a83-4b1f-a4df-3fcd6f93c9b9",
"ParentEntityId": "b9bc9bc2-0648-49a3-b3a8-54d57ad59e54",
"SignerBoxId": "5e23b73fa96e407bbc6ac80953a1d11a@diadoc.ru",
"PowerOfAttorneyAttachmentStatus": {
"StatusName": "PowerOfAttorneyRequired",
"Comment": "Документ подписан сертификатом физ. лица без МЧД"
}
},
{
"EntityType": "Attachment",
"EntityId": "659f45c7-e561-4f38-a6ba-055d4006b9f9",
"ParentEntityId": "b9bc9bc2-0648-49a3-b3a8-54d57ad59e54",
"AttachmentType": "CustomData"
}
],
"MessageType": "Letter"
},
"IndexKey": "CN7djz5U9i8"
}
Получен титул Т1
Это событие появляется в ленте перевозчика.
Событие получения титула приходит в поле Message со следующими признаками:
EntityType = Attachment;AttachmentType = Title;ContentTypeId = kl_zakzvper_t1_05_01.
Какие поля из ответа стоит сохранить:
Параметр |
Значение |
Для чего сохранять |
|---|---|---|
|
Ящик организации грузоотправителя |
Идентифицировать ящик грузоотправителя: связывать ЭЗЗ с контрагентом, определять отправителя входящего Т1 и при необходимости использовать его в последующих вызовах API. |
|
Идентификатор сообщения |
По параметру можно запросить сообщение методом |
|
Идентификатор сущности в сообщении |
Идентификатор конкретного титула внутри сообщения. Нужен, чтобы запросить содержимое методом |
* FromBoxId — это ящик контрагента. Получить его можно как из ленты событий, так и из титула Т1: для этого нужно распарсить титул, получить из него значение ИдФайл и получить из этого значения первый идентификатор в формате GUID. Это значение нужно передать в метод GetOrganization, чтобы получить идентификатор ящика boxId.
Пример события:
{
"EventId": "2df98531-6321-45c4-9c34-fa6c34dfec9d",
"Message": {
"MessageId": "2df98531-6321-45c4-9c34-fa6c34dfec9d",
"FromBoxId": "5e23b73fa96e407bbc6ac80953a1d11a@diadoc.ru",
"FromTitle": "АО «Грузоотправитель»",
"ToBoxId": "2e5b881e47d445f7aba7d80047e18a42@diadoc.ru",
"ToTitle": "ООО «Перевозчик»",
"Entities": [
{
"EntityType": "Attachment",
"EntityId": "b9bc9bc2-0648-49a3-b3a8-54d57ad59e54",
"AttachmentType": "Title",
"FileName": "ON_ZAKZVGO_2BM-9676394191-...-20260709_a810c497-....xml",
"DocumentInfo": {
"DocumentDate": "09.07.2026",
"DocumentNumber": "123",
"TypeNamedId": "LogisticsOrderRequest",
"Function": "default",
"DocumentDirection": "Inbound",
"RecipientResponseStatus": "WaitingForRecipientSignature",
"Version": "zakzvper_05_01_01",
"Title": "ЭЗЗ № 123 от 09.07.2026",
"DocflowStatus": {
"PrimaryStatus": {
"Severity": "Info",
"StatusText": "Ожидается подпись перевозчика"
}
}
},
"ContentTypeId": "kl_zakzvper_t1_05_01"
},
{
"EntityType": "Signature",
"EntityId": "8678e8c3-8a83-4b1f-a4df-3fcd6f93c9b9",
"ParentEntityId": "b9bc9bc2-0648-49a3-b3a8-54d57ad59e54",
"SignerBoxId": "5e23b73fa96e407bbc6ac80953a1d11a@diadoc.ru"
}
],
"MessageType": "Letter"
},
"IndexKey": "CN7djz5U9i8"
}
Получены данные ГИС ЭПД
Ответ ГИС ЭПД приходит в поле Patch со следующими признаками:
EntityType = Attachment;AttachmentType = OuterDocflow;DocflowNamedId = KlMt.
Какие поля из ответа стоит сохранить:
Параметр |
Значение |
Для чего сохранять |
|---|---|---|
|
Идентификатор сообщения |
По параметру можно связать статус с конкретным Т1 или Т2 ЭЗЗ в учетной системе; также по нему можно получить сообщение и последующие события. УИД из ответа
ГИС не заменяет |
|
Последнее полученное состояние внешнего документооборота |
Сохраняйте состояние из каждого события, а не только последнее: так будет видна история обработки, промежуточные статусы, успешное завершение или ошибка. |
Пример события:
{
"EventId": "554f66a0-5a2a-4d0d-beb9-4d409733c805",
"Patch": {
"MessageId": "2df98531-6321-45c4-9c34-fa6c34dfec9d",
"TimestampTicks": 639191804476497548,
"Entities": [
{
"EntityType": "Attachment",
"EntityId": "160527ae-4a11-4bd5-8c50-fedd0ba6a411",
"AuthorUserId": "",
"ParentEntityId": "b9bc9bc2-0648-49a3-b3a8-54d57ad59e54",
"Content": {
"Size": 194
},
"AttachmentType": "OuterDocflow",
"FileName": "b9bc9bc2-0648-49a3-b3a8-54d57ad59e54.json",
"NeedRecipientSignature": false,
"RawCreationDate": 639191804476497548,
"NeedReceipt": false,
"IsApprovementSignature": false,
"IsEncryptedContent": false,
"Labels": [],
"OuterDocflow": {
"DocflowNamedId": "KlMt",
"DocflowFriendlyName": "ГИС ЭПД",
"Status": {
"NamedId": "4000211000",
"FriendlyName": "Принят новый перевозочный документ",
"Type": "Success",
"Details": [
{
"Code": "mt-id",
"Text": "f21c5929-7935-447b-bcbd-a3ce610329bc"
}
]
}
},
"ContentTypeId": ""
}
],
"ForDraft": false,
"DraftIsRecycled": false,
"DraftIsTransformedToMessageIdList": [],
"DraftIsLocked": false,
"MessageIsDeleted": false,
"EntityPatches": [],
"MessageIsRestored": false,
"MessageIsDelivered": false,
"PatchId": "554f66a0-5a2a-4d0d-beb9-4d409733c805",
"MessageType": "Letter"
},
"IndexKey": "CN7dj0EwiUE"
}
* Статус 4000211000 в примере — принят новый документ.
Отправлен титул Т2
Это событие появляется в ленте перевозчика.
Событие отправки титула приходит в поле Patch со следующими признаками:
EntityType = Attachment;AttachmentType = Title;ContentTypeId = kl_zakzvper_t2_05_01.
ParentEntityId титула Т2 совпадает с EntityId титула Т1. У титулов Т1 и Т2 один MessageId.
Какие поля из ответа стоит сохранить:
Параметр |
Значение |
Для чего сохранять |
|---|---|---|
|
Идентификатор сообщения. У Т2 он совпадает с
|
По параметру можно найти уже созданный ЭЗЗ в учетной системе и все его дальнейшие события. |
|
Идентификатор сущности Т2 |
Чтобы однозначно идентифицировать отправленный Т2, подтвердить его отправку и отслеживать дальнейшие статусы. |
|
Идентификатор сущности исходного Т1, к которому относится Т2 |
Чтобы связать Т2 с исходным Т1 и восстановить цепочку титулов. |
Пример события:
{
"EventId": "b8949e39-ed3c-4c65-8bee-0e9c3683121b",
"Patch": {
"MessageId": "2df98531-6321-45c4-9c34-fa6c34dfec9d",
"Entities": [
{
"EntityType": "Attachment",
"EntityId": "19deb726-7a39-4ab8-8b8e-fb874a57bddb",
"ParentEntityId": "b9bc9bc2-0648-49a3-b3a8-54d57ad59e54",
"AttachmentType": "Title",
"FileName": "ON_ZAKZVPER_2BM-665913353909-...-20260709_cd90d8c9-....xml",
"Version": "zakzvper_05_01_01",
"ContentTypeId": "kl_zakzvper_t2_05_01"
},
{
"EntityType": "Signature",
"EntityId": "71f8d01f-200f-4eb2-b84d-4cee7148e48e",
"ParentEntityId": "19deb726-7a39-4ab8-8b8e-fb874a57bddb",
"SignerBoxId": "2e5b881e47d445f7aba7d80047e18a42@diadoc.ru"
},
{
"EntityType": "Attachment",
"EntityId": "182f7bb9-1463-4ba4-bfb5-c8f395c059be",
"ParentEntityId": "19deb726-7a39-4ab8-8b8e-fb874a57bddb",
"AttachmentType": "InvoiceConfirmation",
"FileName": "DP_PDOTPR_2BM-665913353909-...-20260709_182f7bb9-....xml",
"ContentTypeId": "delivery_confirmation_133_01_03"
}
],
"PatchId": "b8949e39-ed3c-4c65-8bee-0e9c3683121b",
"MessageType": "Letter"
},
"IndexKey": "CN7dl6ZBTXE"
}
Получен титул Т2
Это событие появляется в ленте грузоотправителя.
Сведения о титуле Т2 приходят в поле Patch со следующими признаками:
EntityType = Attachment;AttachmentType = Title;ContentTypeId = kl_zakzvper_t2_05_01.
ParentEntityId титула Т2 совпадает с EntityId титула Т1. В том же дополнении может быть подтверждение оператора о дате доставки с признаками AttachmentType = InvoiceConfirmation и FileName = DP_PDOTPR. Подтверждение приходит получателю титула.
Какие поля из ответа стоит сохранить:
Параметр |
Значение |
Для чего сохранять |
|---|---|---|
|
Идентификатор сообщения. У Т2 он совпадает с
|
По параметру можно найти уже созданный ЭЗЗ в учетной системе и все его дальнейшие события. |
|
Идентификатор сущности Т2 |
Нужен, чтобы отдельно от Т1 запросить содержимое Т2 методом |
|
Идентификатор ящика, из которого доставлена подпись перевозчика |
Нужен, чтобы сверить с ящиком перевозчика, указанным при отправке Т1 ( |
|
Имя файла, ИдФайл титула Т2 |
Нужен для хранения реквизитов титула, поиска и сверки с полученным XML. |
|
Идентификатор сущности исходного Т1, к которому относится Т2 |
Нужен для проверки, что Т2 относится именно к исходному Т1, и для восстановления связи титулов, если данные обрабатываются не по порядку или повторно. |
Пример события:
{
"EventId": "b8949e39-ed3c-4c65-8bee-0e9c3683121b",
"Patch": {
"MessageId": "2df98531-6321-45c4-9c34-fa6c34dfec9d",
"Entities": [
{
"EntityType": "Attachment",
"EntityId": "19deb726-7a39-4ab8-8b8e-fb874a57bddb",
"ParentEntityId": "b9bc9bc2-0648-49a3-b3a8-54d57ad59e54",
"AttachmentType": "Title",
"FileName": "ON_ZAKZVPER_2BM-665913353909-...-20260709_cd90d8c9-....xml",
"Version": "zakzvper_05_01_01",
"ContentTypeId": "kl_zakzvper_t2_05_01"
},
{
"EntityType": "Signature",
"EntityId": "71f8d01f-200f-4eb2-b84d-4cee7148e48e",
"ParentEntityId": "19deb726-7a39-4ab8-8b8e-fb874a57bddb",
"SignerBoxId": "2e5b881e47d445f7aba7d80047e18a42@diadoc.ru",
"PowerOfAttorneyAttachmentStatus": {
"StatusName": "PowerOfAttorneyRequired",
"Comment": "Документ подписан сертификатом физ. лица без МЧД"
}
},
{
"EntityType": "Attachment",
"EntityId": "182f7bb9-1463-4ba4-bfb5-c8f395c059be",
"ParentEntityId": "19deb726-7a39-4ab8-8b8e-fb874a57bddb",
"AttachmentType": "InvoiceConfirmation",
"FileName": "DP_PDOTPR_2BM-665913353909-...-20260709_182f7bb9-....xml",
"ContentTypeId": "delivery_confirmation_133_01_03"
}
],
"PatchId": "b8949e39-ed3c-4c65-8bee-0e9c3683121b",
"MessageType": "Letter"
},
"IndexKey": "CN7dl6ZBTXE"
}
Ошибки в ленте событий
Документ не доставлен до контрагента
Проверить статус доставки можно следующими способами:
По технологическому документу. Ориентируйтесь на
DP_PDOTPRв ленте получателя: это подтверждение оператора о дате доставки.По событию. Если документ не доставлен, в ленте появится дополнение
Patchс сущностьюEntityType = AttachmentиAttachmentType = DeliveryFailureNotification.
Пример уведомления о недоставке:
{
"AttachmentType": "DeliveryFailureNotification",
"FileName": "Notification.txt",
"NeedRecipientSignature": false,
"NotDeliveredEventId": "90866376-5b65-4348-b59e-2e1bef2c9c6f",
"RawCreationDate": 639198621623762911,
"NeedReceipt": false,
"IsApprovementSignature": false,
"IsEncryptedContent": false,
"Labels": [],
"ContentTypeId": ""
}
NotDeliveredEventId — идентификатор сообщения или дополнения, который не удалось доставить, — чтобы его получить, вызовите метод GetEvent (V3) и укажите NotDeliveredEventId в параметре eventId.
В этом же событии может быть сущность с причиной недоставки: если подпись оказалась невалидной, ее тип вложения будет иметь значение AttachmentType = SignatureVerificationReport.
Пример протокола проверки подписи:
{
"EntityType": "Attachment",
"EntityId": "7c1672b1-e9ca-44cb-a003-73425116bbcb",
"AuthorUserId": "",
"ParentEntityId": "2fbbf295-5028-4dc0-ad49-17ddd5b5fa6b",
"Content": {
"Size": -1
},
"AttachmentType": "SignatureVerificationReport",
"NeedRecipientSignature": false,
"RawCreationDate": 639198621623762911,
"NeedReceipt": false,
"IsApprovementSignature": false,
"IsEncryptedContent": false,
"Labels": [],
"ContentTypeId": ""
}
Машиночитаемая доверенность не прошла проверку
Результат проверки машиночитаемой доверенности хранится в сущности со следующими признаками:
EntityType = Attachment;AttachmentType = PowerOfAttorneyStatus.
Статус проверки хранится в структуре PowerOfAttorneyInfo. При StatusNamedId = ValidationError код ошибки будет храниться в поле OperationError.
Пример события:
{
"AttachmentType": "PowerOfAttorneyStatus",
"PowerOfAttorneyInfo": {
"FullId": {
"RegistrationNumber": "8d375c94-49a0-477c-8cc9-eca49ba0d88a",
"IssuerInn": "3812125023",
"RepresentativeInn": "662518094912"
},
"Status": {
"Severity": "Error",
"StatusNamedId": "ValidationError",
"StatusText": "При проверке доверенности произошла ошибка",
"Errors": [
{
"Code": "PowerOfAttorneyNotFound",
"Text": "Доверенность не найдена в реестре ФНС"
}
],
"OperationError": {
"Code": "PowerOfAttorneyNotFound",
"Text": "Доверенность не найдена в реестре ФНС"
}
},
"SendingType": "Metadata"
}
}
Ошибки от ГИС ЭПД
Результат проверки титула в ГИС ЭПД хранится в сущности со следующими признаками:
EntityType = Attachment;AttachmentType = OuterDocflow;DocflowNamedId = KlMt;Status.Type = Error.
Статусы обработки описаны в разделе Информация о статусе обработки.
Пример события:
{
"AttachmentType": "OuterDocflow",
"FileName": "dbf88c7d-5fd2-4cf9-bd9f-2e768d72d66a.json",
"NeedRecipientSignature": false,
"RawCreationDate": 639195228581087924,
"NeedReceipt": false,
"IsApprovementSignature": false,
"IsEncryptedContent": false,
"Labels": [],
"OuterDocflow": {
"DocflowNamedId": "KlMt",
"DocflowFriendlyName": "ГИС ЭПД",
"Status": {
"NamedId": "2000411000",
"FriendlyName": "XML не соответствует XSD схеме",
"Type": "Error",
"Details": [
{
"Code": "mt-id",
"Text": "34252a8c-6791-4867-bbfb-d23bf75921f1"
}
]
}
}
}
Ошибки из роуминга
Отправка перевозочных документов в роуминге — обмен документами между компаниями, которые пользуются услугами разных операторов электронного документооборота.
Если при отправке документа в роуминг возникла ошибка, она хранится в сущности со следующими признаками:
EntityType = Attachment;AttachmentType = RoamingNotification.
Напрямую статус роуминговой ошибки не возвращается. Чтобы узнать об ошибке, проверьте поле Content.Size: если значение равно нулю, ошибок нет, а если больше нуля — при отправке возникла ошибка. Помните, что поле Size — размер содержимого сущности в байтах, а не число ошибок.
Пример ответа без ошибки:
{
"EntityType": "Attachment",
"EntityId": "09047b24-be6b-54a8-0000-0d4729558232",
"AuthorUserId": "",
"ParentEntityId": "0202621b-0000-4eef-b0b1-6d2e755c908d",
"Content": {
"Size": 0
},
"AttachmentType": "RoamingNotification",
"NeedRecipientSignature": false,
"RawCreationDate": 639190893878602534,
"NeedReceipt": false,
"IsApprovementSignature": false,
"IsEncryptedContent": false,
"Labels": [],
"ContentTypeId": ""
}
Пример ответа с ошибкой:
{
"EntityType": "Attachment",
"EntityId": "30307f54-77d9-5443-8629-e21831084a80",
"AuthorUserId": "",
"ParentEntityId": "bf8b4bbf-68b2-41df-ab13-5f3e67d9e4e2",
"Content": {
"Size": 48
},
"AttachmentType": "RoamingNotification",
"NeedRecipientSignature": false,
"RawCreationDate": 639190046144754823,
"NeedReceipt": false,
"IsApprovementSignature": false,
"IsEncryptedContent": false,
"Labels": [],
"ContentTypeId": ""
}
Чтобы узнать, какая ошибка произошла, вызовите метод GetDocument (V3). Текст ошибки будет храниться в поле RoamingNotificationStatusDescription. При ошибке доставки в роуминг статус будет иметь значение RoamingNotificationStatusError.
Пример ответа:
{
"RoamingNotificationStatus": "RoamingNotificationStatusError",
"HasCustomPrintForm": false,
"CustomData": [],
"PacketId": "834d3117-0000-4f16-9d46-5490d32e15d6",
"DocumentDirection": "Outbound",
"LastModificationTimestampTicks": 639069112128562671,
"IsEncryptedContent": false,
"SenderSignatureStatus": "SenderSignatureCheckedAndValid",
"IsRead": true,
"RoamingNotificationStatusDescription": "Документооборот c таким первым титулом уже существует"
}