{
  "info": {
    "name": "TryDesk — Incoming API v1",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
    "description": "Укажите integrationKey, полученный в TryDesk → Интеграции. Для нового сообщения меняйте eventId. Точный повтор с тем же eventId возвращает duplicate: true."
  },
  "auth": {
    "type": "bearer",
    "bearer": [
      {
        "key": "token",
        "value": "{{integrationKey}}",
        "type": "string"
      }
    ]
  },
  "variable": [
    {
      "key": "apiUrl",
      "value": "https://api.trydesk.io/v1/messages"
    },
    {
      "key": "integrationKey",
      "value": ""
    },
    {
      "key": "eventId",
      "value": "postman-customer-001"
    },
    {
      "key": "serviceEventId",
      "value": "postman-alarm-001"
    },
    {
      "key": "imageEventId",
      "value": "postman-image-001"
    },
    {
      "key": "deliveryUrl",
      "value": "https://europe-central2-helpdesk-1510b.cloudfunctions.net/deliveryApi"
    },
    {
      "key": "deliveryId",
      "value": ""
    },
    {
      "key": "leaseId",
      "value": ""
    },
    {
      "key": "deliveryRequestId",
      "value": "postman-claim-001"
    }
  ],
  "item": [
    {
      "name": "1. Обращение пользователя",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "body": {
          "mode": "raw",
          "raw": "{\n  \"eventId\": \"{{eventId}}\",\n  \"externalConversationId\": \"postman-chat-001\",\n  \"sender\": {\n    \"externalId\": \"postman-user-001\",\n    \"displayName\": \"Пользователь Postman\",\n    \"kind\": \"customer\"\n  },\n  \"message\": {\n    \"text\": \"Тестовое обращение из Postman\"\n  }\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        },
        "url": "{{apiUrl}}",
        "description": "Первый вызов: 201. Измените eventId для следующего нового сообщения."
      }
    },
    {
      "name": "2. Повтор того же события",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "body": {
          "mode": "raw",
          "raw": "{\n  \"eventId\": \"{{eventId}}\",\n  \"externalConversationId\": \"postman-chat-001\",\n  \"sender\": {\n    \"externalId\": \"postman-user-001\",\n    \"displayName\": \"Пользователь Postman\",\n    \"kind\": \"customer\"\n  },\n  \"message\": {\n    \"text\": \"Тестовое обращение из Postman\"\n  }\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        },
        "url": "{{apiUrl}}",
        "description": "После первого запроса: 200, duplicate: true; идентификаторы должны совпасть."
      }
    },
    {
      "name": "3. Служебное сообщение Alarm",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "body": {
          "mode": "raw",
          "raw": "{\n  \"eventId\": \"{{serviceEventId}}\",\n  \"externalConversationId\": \"alarm:postman\",\n  \"sender\": {\n    \"externalId\": \"alarm\",\n    \"displayName\": \"Alarm\",\n    \"kind\": \"service\"\n  },\n  \"message\": {\n    \"text\": \"Тестовое служебное сообщение из Postman\"\n  }\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        },
        "url": "{{apiUrl}}",
        "description": "Первый вызов: 201. Источник и канал определяются выбранным ключом интеграции."
      }
    },
    {
      "name": "4. Сообщение с изображением",
      "request": {
        "method": "POST",
        "header": [],
        "body": {
          "mode": "formdata",
          "formdata": [
            {
              "key": "payload",
              "type": "text",
              "value": "{\"eventId\":\"{{imageEventId}}\",\"externalConversationId\":\"postman-chat-001\",\"sender\":{\"externalId\":\"postman-user-001\",\"displayName\":\"Пользователь Postman\",\"kind\":\"customer\"},\"message\":{\"text\":\"Скриншот ошибки\"}}"
            },
            {
              "key": "images",
              "type": "file",
              "src": []
            }
          ]
        },
        "url": "{{apiUrl}}",
        "description": "Выберите файл в images. PNG/JPEG/статический WebP, до 10 MB на файл, до 3 файлов и 20 MB суммарно. Payload — Text. Content-Type с boundary задаст Postman. Повтор с тем же imageEventId и файлом: 200 duplicate: true. Файл свыше лимита: 413 image_too_large. Для картинки без текста используйте message: {}."
      }
    },
    {
      "name": "Delivery API — do not complete without actual provider send",
      "item": [
        {
          "name": "claim",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": "{{deliveryUrl}}/claim",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"deliveryId\": \"{{deliveryId}}\",\n  \"requestId\": \"{{deliveryRequestId}}\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "start",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": "{{deliveryUrl}}/start",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"deliveryId\": \"{{deliveryId}}\",\n  \"leaseId\": \"{{leaseId}}\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "complete",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": "{{deliveryUrl}}/complete",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"deliveryId\": \"{{deliveryId}}\",\n  \"leaseId\": \"{{leaseId}}\",\n  \"providerMessageIds\": [\n    \"REPLACE_WITH_ACTUAL_PROVIDER_MESSAGE_ID\"\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "fail",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": "{{deliveryUrl}}/fail",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"deliveryId\": \"{{deliveryId}}\",\n  \"leaseId\": \"{{leaseId}}\",\n  \"outcome\": \"unknown\",\n  \"code\": \"manual_result_unknown\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        }
      ]
    }
  ]
}
