openapi: 3.0.3
info:
  title: dial
  version: 1.0.1785756379855
  description: Сервис dial
  license:
    name: CC BY-NC-ND 4.0
    url: https://gitlab.infra.rtkit.dev/openapi/key/raw/main/LICENCE.md
tags:
  - name: broadcast_alert(internal auth)
    description: Внутренние методы. Требуют авторизацию. Доступны только во внутренней сети
  - name: sip_login(internal auth)
    description: Внутренние методы. Требуют авторизацию. Доступны только во внутренней сети
paths:
  /dial/internal/api/v1/broadcast_alert/start:
    post:
      summary: |-
        Метод запуска массового оповещения через домофоны.
        Метод доступен для: ApiKey
      operationId: BroadcastAlertService_PostBroadcastAlertStart
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostBroadcastAlertStartResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostBroadcastAlertStartResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "409":
          description: В базе данных хранится более новая версия объекта
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostBroadcastAlertStartResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/v1PostBroadcastAlertStartRequest"
        required: true
      tags:
        - broadcast_alert(internal auth)
      security:
        - oauth2:
            - dial:edit
          bearerHttp: []
      parameters:
        - in: header
          name: X-Request-Id
          schema:
            type: string
            format: uuid
          description: Уникальный идентификатор запроса. Создаётся клиентом на каждый запрос
        - in: header
          name: X-Device-Id
          schema:
            type: string
          description: Уникальный идентификатор устройства. Создаётся клиентом при первом
            запуске приложения. Если есть способ однозначно узнать идентификатор
            устройства, то создаётся на основе него и остаётся неизменным после
            переустановки приложения
        - in: header
          name: X-Api-Key
          schema:
            type: string
          description: Уникальный ключ для партнера. Создается администратором и
            передается партнерам.
        - in: header
          name: Canary
          schema:
            type: string
          description: Параметр балансировки запроса. Если для заголовка запроса
            установлено значение always, он будет перенаправлен на канареечный
            деплой. Если для заголовка установлено значение never, он никогда не
            будет перенаправлен на канареечный деплой
  /dial/internal/api/v1/sip_login:
    get:
      summary: |-
        Метод получения sip-логина устройства.
        Метод доступен для: ApiKey
      operationId: DialEmergencyService_GetSipLogin
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetSipLoginResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetSipLoginResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetSipLoginResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: abcNumber
          description: |-
            Фильтр по АБС-номеру устройства.
            # Паттерн: /^\+[1-9][0-9]{10}$/
          in: query
          required: true
          schema:
            type: string
        - in: header
          name: X-Request-Id
          schema:
            type: string
            format: uuid
          description: Уникальный идентификатор запроса. Создаётся клиентом на каждый запрос
        - in: header
          name: X-Device-Id
          schema:
            type: string
          description: Уникальный идентификатор устройства. Создаётся клиентом при первом
            запуске приложения. Если есть способ однозначно узнать идентификатор
            устройства, то создаётся на основе него и остаётся неизменным после
            переустановки приложения
        - in: header
          name: X-Api-Key
          schema:
            type: string
          description: Уникальный ключ для партнера. Создается администратором и
            передается партнерам.
        - in: header
          name: Canary
          schema:
            type: string
          description: Параметр балансировки запроса. Если для заголовка запроса
            установлено значение always, он будет перенаправлен на канареечный
            деплой. Если для заголовка установлено значение never, он никогда не
            будет перенаправлен на канареечный деплой
      tags:
        - sip_login(internal auth)
      security:
        - oauth2:
            - dial:read
            - dial:edit
          bearerHttp: []
components:
  schemas:
    ErrorScenarioNotFound:
      type: object
      title: Не найден сценарий оповещения
    protobufAny:
      type: object
      properties:
        "@type":
          type: string
      additionalProperties: {}
      title: Произвольный JSON
    rpcStatus:
      type: object
      properties:
        code:
          type: integer
          format: int32
        message:
          type: string
        details:
          type: array
          items:
            $ref: "#/components/schemas/protobufAny"
      title: Ошибка транспортного слоя
    v1GetSipLoginResponse:
      type: object
      properties:
        sipAccount:
          type: string
          title: SIP-Логин устройства
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1GetSipLoginResponseError"
      title: Ответ на запрос на получение списка устройств
    v1GetSipLoginResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
      title: Ошибка запроса на получение списка устройств
    v1PostBroadcastAlertStartRequest:
      type: object
      properties:
        toNumber:
          type: string
          title: |-
            Вызываемый номер.
            # Паттерн: /^\+[1-9][0-9]{10}$/
        fromNumber:
          type: string
          title: |-
            Вызывающий номер.
            # Паттерн: /^\+[1-9][0-9]{10}$/
      title: Запрос на запуск массового оповещения через домофоны
      required:
        - toNumber
        - fromNumber
    v1PostBroadcastAlertStartResponse:
      type: object
      properties:
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1PostBroadcastAlertStartResponseError"
      title: Ответ на запрос на запуск массового оповещения через домофоны
    v1PostBroadcastAlertStartResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
        scenarioNotFound:
          title: Звуковой файл не найден
          allOf:
            - $ref: "#/components/schemas/ErrorScenarioNotFound"
      title: Ошибка запроса
    v1ValidationError:
      type: object
      properties:
        path:
          type: string
          title: Путь к полю в формате наименования protobuf
        message:
          type: string
          title: Валидационное сообщение
      title: Ошибки валидации
      required:
        - path
        - message
  securitySchemes:
    bearerHttp:
      type: http
      scheme: bearer
      bearerFormat: JWT
    oauth2:
      type: oauth2
      flows:
        clientCredentials:
          tokenUrl: https://oauth2-staging.k8s.key.rt.ru/oauth2/token
          scopes:
            dial:edit: Предоставляет полный доступ в сервис dial
            dial:read: Предоставляет доступ на чтение данных из сервиса dial
servers:
  - url: https://keyapis-staging.k8s.key.rt.ru
    description: staging
  - url: https://{feature}.k8s.key.rt.ru/
    description: https feature
    variables:
      feature:
        default: ""
        description: Feature name
  - url: http://{feature}.k8s.key.rt.ru/
    description: http feature
    variables:
      feature:
        default: ""
        description: Feature name
  - url: https://localhost:3001
    description: localhost
  - url: http://localhost:3001
    description: localhost
  - url: https://keyapis.key.rt.ru
    description: production
