==== Примеры JSON для обмена данными между системами ==== === Пример OrderTicket === Данный JSON должен формироваться посредством вызова API из нескольких разных источников. #Full json order example for copy and paste { "order_synced": 1, #[POST] - заявка из синхронизируемой части "ticket": 123, "status": 111, "priority": 1, "title": "123", "note": "123", "due_date": 2023-05-15T17:16:22.955601Z, "id_metaservice": 1, "is_global": false, "is_visible": false, "service": 1, "service_type": 1, "status_changed_date": "2023-05-15T17:16:22.955601Z", "time_placed": "2023-05-15T16:40:32.179777Z", "time_start": "2023-05-15T16:40:32.179777Z", "time_start_predicted": "2023-05-15T16:40:32.179777Z", "time_finish_predicted": "2023-05-15T16:40:32.179777Z", "time_start_real": "2023-05-15T16:40:32.179777Z", "time_finish_real": "2023-05-15T16:40:32.179777Z", "order_place_type": "address", "order_place_start": "р-н Беговой", "order_place_start_gps": "55.751941, 37.607513", "order_place_start_sector": 4, "order_place_start_real": "р-н Беговой", "order_place_start_real_gps": "55.751941, 37.607513", "order_place_finish_predicted": "р-н Мещанский", "order_place_finish_predicted_gps": "55.751941, 37.607513", "order_place_finish_sector": 4, "order_place_finish_real": "р-н Мещанский", "order_place_finish_real_gps": "55.751941, 37.607513", "predicted_price": 1000, "real_price": 1001, "payment_transaction_id": 1, "rating_id": 1, "provider": 1, "provider_screen_name": "Vasya Ispolnitelev", "receiver": 1, "receiver_screen_name": "Marfa Clientovna", "client_id": 1, "client_screen_name": "Fedor Client", "resource_id": 1, "attempts": null, "asap": true } === Вариант с комментариями источников для получения данных === [POST]/openlocal/api/orderslocal/ - данные которые будут заданы при пост запросе [PUT]/openlocal/api/orderslocal/id/ - данные которые буду изменены при пут запросе { "order_synced": 1, #[POST] - заявка из синхронизируемой части "ticket": 123, #id из tickets "status": 111, #[PUT] status из tickets "priority": 1, #[PUT] это берем из tickets, по идее можно будет повышать приоритет для привлечения внимания техподдержки "title": "123", #[PUT] это берем из tickets "note": "123", #[PUT] это берем из tickets "due_date": 2023-05-15T17:16:22.955601Z, #[PUT] это берем из tickets или из api сервиса - должно совпадать это значение - по сути это крайний срок жизни заказа "id_metaservice": 1, #[PUT] это из api сервиса, где хранится заказ "is_global": false, #[PUT] это из api сервиса, где хранится заказ "is_visible": false,#[PUT] это из api сервиса, где хранится заказ "service": 1, #[PUT] это из api сервиса, где хранится заказ "service_type": 1, #[PUT] это из api сервиса, где хранится заказ "status_changed_date": "2023-05-15T17:16:22.955601Z", #[PUT] это из tickets, для нового заказа оно эквивалентно time_placed "time_placed": "2023-05-15T16:40:32.179777Z", #[PUT] это из api сервиса, где хранится заказ, должно совпадать (хотя бы частично, если в tickets меньше информации хранится) с "created_date" в tickets "time_start": "2023-05-15T16:40:32.179777Z", #[PUT] это и все ниже - из api сервиса, где хранится заказ, если не написано иное "time_start_predicted": "2023-05-15T16:40:32.179777Z", #[PUT] "time_finish_predicted": "2023-05-15T16:40:32.179777Z", #[PUT] "time_start_real": "2023-05-15T16:40:32.179777Z", #[PUT] "time_finish_real": "2023-05-15T16:40:32.179777Z", #[PUT] "order_place_type": "address", #[POST][PUT] может быть address, coords или both "order_place_start": "р-н Беговой", #[POST][PUT] вычисляется на языке местности 1 раз на основе координат, если адрес не задавался "order_place_start_gps": "55.751941, 37.607513", #[POST][PUT] вычисляются на основе адреса, если координаты не задавались "order_place_start_sector": 4, #[POST][PUT] вычисляется 1 раз на основе координат "order_place_start_real": "р-н Беговой", #[POST][PUT] вычисляется на основе координат 1 раз по факту заполнения "order_place_start_real_gps": "55.751941, 37.607513", #[POST][PUT] фиксируется приложением в момент начала заказа "order_place_finish_predicted": "р-н Мещанский", #[POST][PUT] вычисляется 1 раз на основе координат или сектора, зависит от логики сервиса "order_place_finish_predicted_gps": "55.751941, 37.607513", #[POST][PUT] "order_place_finish_sector": 4, #[POST][PUT] "order_place_finish_real": "р-н Мещанский", #[POST][PUT] вычисляется 1 раз на основе координат "order_place_finish_real_gps": "55.751941, 37.607513", #[POST][PUT] фиксируется приложением в момент завершения заказа "predicted_price": 1000, #[PUT] рассчитывается на этапе регистрации заказа и хранимое "real_price": 1001, #[PUT] обновляется приложением, отправляется на сервис при необходимости в логике обработчиков "payment_transaction_id": 1, #[POST][PUT] "rating_id": 1, #[POST][PUT] "provider": 1, #[PUT] это из api сервиса, должно быть эквивалентно "assigned_to" в тикетах (если функционал позволяет назначить тикет на того, кто не в листе, если не позволяет - то assigned_to должно быть отдельно и может быть null либо назначенный сотрудник для обработки) "provider_screen_name": "Vasya Worker", "receiver": 1, #[PUT] "receiver_screen_name": "Marfa Wife", "client_id": 1, #[PUT] это из api сервиса, где хранится заказ - но должно совпадать с "created_by" в tickets "client_screen_name": "Fedor Client", "resource_id": 1, #[POST][PUT] это из api сервиса, где хранится заказ "attempts": 1, #[POST][PUT] это ниоткуда, должно добавляться пустым, обработчики с этим могут работать по необходимости "asap": true #информация о том, срочный ли заказ } === Минимально необходимая информация в JSON с примером данных === #minimal acceptable as order json example { "ticket": 123, "status": 111, "priority": 1, "title": "123", "note": "123", "due_date": 2023-05-15T17:16:22.955601Z, "id_metaservice": 1, "is_global": false, "is_visible": false, "service": 1, "service_type": 1, "status_changed_date": "2023-05-15T17:16:22.955601Z", "time_placed": "2023-05-15T16:40:32.179777Z", "time_start": null, "time_start_predicted": null, "time_finish_predicted": null, "time_start_real": null, "time_finish_real": null, "order_place_start": null, "order_place_start_gps": null, "order_place_start_sector": null, "order_place_start_real": null, "order_place_start_real_gps": null, "order_place_finish_predicted": null, "order_place_finish_predicted_gps": null, "order_place_finish_sector": null, "order_place_finish_real": null, "order_place_finish_real_gps": null, "predicted_price": null, "real_price": null, "payment_transaction_id": null, "rating_id": null, "provider": null, "provider_screen_name": null, "receiver": null, "receiver_screen_name": null, "client_id": null, "client_screen_name": null, "resource_id": null, "attempts": null, "asap": true } === Пример JSON обычной заявки в тикетах === #ticket json example { "id": 2, "status": 111, "created_date": "2023-05-15", "status_changed_date": "2023-05-15T17:16:22.955601Z", "priority": 0, "title": "Test", "note": "{\n \n \"ticket\": 1,\n \"state\": 1,\n \"id_metaservice\": 1,\n \"is_global\": false,\n \"is_visible\": false,\n \"service\": 1,\n \"service_type\": 1,\n\n \"time_placed\": 1}" "due_date": "2023-05-15", "task_list": 10, "created_by": 1, "type": 1, "assigned_to": 1 } === Пример минимального необходимого набора данных Ticket === #ticket minimal example { "id": 2, "status": 111, "created_date": "2023-05-15", "status_changed_date": "2023-05-15T17:16:22.955601Z", "priority": 0, "title": null, "note": null, "due_date": null, "task_list": 10, "created_by": 1, "type": 1, "assigned_to": null }