

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Actualice los contactos y el control de versiones de los contactos
<a name="contacts.versioning"></a>

 AWS Ground Station admite la actualización de contactos con un `SCHEDULED``PREPASS`, o [estado de `PASS` contacto](contacts.lifecycle.md#contact-statuses). Puedes usar la [UpdateContact](https://docs.aws.amazon.com/ground-station/latest/APIReference/API_UpdateContact.html)API para especificar la anulación de las efemérides de un contacto (incluidos los datos de seguimiento de acimut o elevación, OEM o TLE) sin tener que cancelarlos ni volver a programarlos. Esto resulta útil para las operaciones de satélites geosíncronos (GEO), en las que es necesario reasignar una antena a un satélite diferente durante un contacto, o para las operaciones de lanzamiento y las primeras operaciones (), en las que es necesario ajustar la orientación. LEOPs 

 Cada vez que reservas o actualizas un contacto, AWS Ground Station crea una nueva versión de contacto. Las versiones de contacto proporcionan un historial de los cambios realizados en un contacto y te permiten realizar un seguimiento del estado de cada actualización. 

## Cómo funciona el control de versiones de contactos
<a name="contacts.versioning.how-it-works"></a>

 Cuando llamas [ReserveContact](https://docs.aws.amazon.com/ground-station/latest/APIReference/API_ReserveContact.html), AWS Ground Station crea la primera versión del contacto (versión 1) y devuelve `versionId` la respuesta. Cada llamada posterior [UpdateContact](https://docs.aws.amazon.com/ground-station/latest/APIReference/API_UpdateContact.html)crea una nueva versión con un número de versión incrementado. 

 La [DescribeContact](https://docs.aws.amazon.com/ground-station/latest/APIReference/API_DescribeContact.html)API devuelve la [versión de `ACTIVE` contacto](#contacts.versioning.version-statuses) actual, incluida la información de la versión en el `version` campo de la respuesta. La [ListContacts](https://docs.aws.amazon.com/ground-station/latest/APIReference/API_ListContacts.html)API también incluye información sobre la versión de cada contacto. 

 Para ver una versión específica de un contacto, usa la [DescribeContactVersion](https://docs.aws.amazon.com/ground-station/latest/APIReference/API_DescribeContactVersion.html)API. Para ver todas las versiones de un contacto, usa la [ListContactVersions](https://docs.aws.amazon.com/ground-station/latest/APIReference/API_ListContactVersions.html)API. 

## Actualizar un contacto
<a name="contacts.versioning.update-contact"></a>

 Puedes llamar [UpdateContact](https://docs.aws.amazon.com/ground-station/latest/APIReference/API_UpdateContact.html)cuando un contacto esté en el estado PROGRAMADO, PREPASS o PASS. La API acepta los siguientes parámetros: 
+ **ContactiD**: el identificador del contacto que se va a actualizar.
+ **ClientToken: un token** de idempotencia que garantiza que la solicitud se procese solo una vez. Si reintentas una solicitud con el mismo token de cliente, AWS Ground Station devuelve la respuesta original sin volver a realizar la actualización. Muchas generan AWS SDKs automáticamente un token de cliente si no se proporciona ninguno.
+ **TrackingOverrides**: la nueva configuración de seguimiento del contacto. Esto incluye los ajustes de seguimiento del programa (acimut/elevación, TLE o efemérides OEM).
+ **SatelliteARN**: el ARN del satélite del contacto. Al cambiar el satélite objetivo junto con la configuración de seguimiento del programa, proporcione el ARN del nuevo satélite. Solo los clientes aprobados para ángulos de apuntamiento de acimut y elevación pueden establecer este valor en nulo. Todos los demás clientes deben incluir el ARN satelital del contacto.

**importante**  
 La `UpdateContact` API aplica todos los parámetros de la solicitud. Cualquier parámetro que se omita o se establezca explícitamente en nulo se trata como una solicitud para borrar ese valor, no para dejarlo sin cambios. Por ejemplo, si lo proporciona `trackingOverrides` pero lo omite`satelliteArn`, se borra el ARN del satélite. Asegúrese de incluir todos los valores deseados en cada solicitud de actualización. 

 Puede cambiar el satélite objetivo durante un contacto proporcionando uno nuevo `satelliteArn` junto con el correspondiente`trackingOverrides`. El nuevo satélite debe estar visible desde la estación terrestre mientras dure el contacto, ya que la hora de inicio y finalización del contacto no cambia con esta API. El nuevo satélite también debe estar a bordo de la estación terrestre y tener la licencia requerida por el perfil de la misión. El perfil de misión del contacto no se puede cambiar, por lo que el cambio de satélite solo es aplicable cuando ambos satélites utilizan el mismo perfil de misión. 

**importante**  
 La `UpdateContact` API no permite cambiar la hora de inicio, la hora de finalización o el perfil de misión de un contacto. Para cambiar estos valores, cancela el contacto y reserva uno nuevo. La `UpdateContact` API está diseñada para reorganizar la configuración de señalización de la antena, por ejemplo, al cambiar de un satélite a otro o actualizar los datos de las efemérides. 

**importante**  
 La `UpdateContact` API no admite contactos que tengan un perfil de misión que utilice configuraciones. [Configuración de descodificación y desmodulación de enlace de bajada de antena](how-it-works.config.md#how-it-works.config-antenna-downlink-demod-decode) Para cambiar la configuración de estos contactos, cancela el contacto y reserva uno nuevo. 

 La `UpdateContact` API devuelve el `contactId` y el nuevo`versionId`. La actualización se procesa de forma asíncrona. Se utiliza [DescribeContactVersion](https://docs.aws.amazon.com/ground-station/latest/APIReference/API_DescribeContactVersion.html)para comprobar el estado de la actualización. Algunas incluyen AWS SDKs un `ContactUpdated` camarero que sondea hasta que la AWS Command Line Interface versión alcance el estado ACTIVE o FAILED\_TO\_UPDATE. 

**nota**  
 Solo puede haber una actualización en curso a la vez. Si la última versión del contacto está en estado DE ACTUALIZACIÓN, la API devuelve un`ConflictException`. Espera a que la actualización actual alcance el estado ACTIVE o FAILED\_TO\_UPDATE antes de enviar otra actualización. 

## Estados de las versiones de contacto
<a name="contacts.versioning.version-statuses"></a>

Cada versión de contacto tiene uno de los siguientes estados:


| Status | Description (Descripción) | 
| --- | --- | 
| ACTUALIZANDO | La versión se está aplicando al contacto. La actualización se ha enviado y está siendo procesada por AWS Ground Station. | 
| ACTIVE | La versión es la configuración actualmente activa para el contacto. La estación terrestre utiliza los ajustes de esta versión. | 
| SUPERSEDED | La versión estaba activa anteriormente, pero se ha sustituido por una versión más reciente. | 
| NO SE PUDO ACTUALIZAR | No se pudo aplicar la actualización. El contacto vuelve a la versión previamente activa. Compruebe los failureMessage campos failureCodes y para obtener más información. | 

## Ejemplos de código
<a name="contacts.versioning.examples"></a>

 Los siguientes ejemplos muestran cómo utilizar el control de versiones por contacto APIs con el AWS SDK para Python (Boto3). 

### Ejemplo: actualizar un contacto
<a name="contacts.versioning.examples.update-contact"></a>

 En el siguiente ejemplo, se actualiza un contacto con nuevas anulaciones de seguimiento y se espera a que se complete la actualización con el camarero `ContactUpdated` Boto3. 

```
import boto3
import uuid

# Create AWS Ground Station client
ground_station_client = boto3.client("groundstation")

# The contact ID of an existing scheduled contact to update
contact_id = "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"

# Generate a unique client token for idempotency.
# If you retry the same request with the same client token,
# the API returns the same response without creating a duplicate version.
client_token = str(uuid.uuid4())

# Update the contact to use a different TLE ephemeris for tracking.
# The UpdateContact API applies all parameters in the request.
# Any parameter set to null is treated as a request to clear that value,
# not to leave it unchanged. Include all desired values in each request.
print(f"Updating contact {contact_id}...")

update_response = ground_station_client.update_contact(
    contactId=contact_id,
    clientToken=client_token,
    satelliteArn="arn:aws:groundstation::111122223333:satellite/a88611b0-f755-404e-b60d-57d8aEXAMPLE",
    trackingOverrides={
        "programTrackSettings": {
            "tle": {"ephemerisId": "b2c3d4e5-6789-01ab-cdef-EXAMPLE22222"}
        }
    },
)

contact_id = update_response["contactId"]
version_id = update_response["versionId"]
print(f"Update submitted. Contact: {contact_id}, Version: {version_id}")

# Wait for the update to complete using the ContactUpdated waiter.
# The waiter polls DescribeContactVersion until the version reaches
# ACTIVE (success) or FAILED_TO_UPDATE (failure) status.
# The waiter raises WaiterError if the version reaches FAILED_TO_UPDATE
# or if MaxAttempts is exceeded, so we use try/except to handle both cases.
print("Waiting for update to complete...")

from botocore.exceptions import WaiterError

waiter = ground_station_client.get_waiter("contact_updated")

try:
    waiter.wait(
        contactId=contact_id,
        versionId=version_id,
        WaiterConfig={
            "Delay": 5,
            "MaxAttempts": 180,
        },
    )
    print(f"Contact updated successfully. Version {version_id} is now active.")
except WaiterError as e:
    # WaiterError is raised when the version reaches FAILED_TO_UPDATE
    # or when MaxAttempts is exceeded. Retrieve the current version to inspect.
    version_response = ground_station_client.describe_contact_version(
        contactId=contact_id,
        versionId=version_id,
    )
    version_status = version_response["version"]["status"]
    if version_status == "FAILED_TO_UPDATE":
        failure_codes = version_response["version"].get("failureCodes", [])
        failure_message = version_response["version"].get("failureMessage", "")
        print(f"Update failed. Codes: {failure_codes}, Message: {failure_message}")
    else:
        print(f"Waiter timed out. Current version status: {version_status}. Error: {e}")
```

### Ejemplo: describe la versión de un contacto
<a name="contacts.versioning.examples.describe-contact-version"></a>

 En el siguiente ejemplo, se recuperan los detalles de una versión de contacto específica, incluidos su estado, configuración y cualquier información sobre errores. 

```
import boto3

# Create AWS Ground Station client
ground_station_client = boto3.client("groundstation")

contact_id = "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
version_id = 2

# Describe a specific version of a contact.
# Use this API to check the status of an update or to view the
# configuration that was active at a specific point in time.
print(f"Describing version {version_id} of contact {contact_id}...")

response = ground_station_client.describe_contact_version(
    contactId=contact_id,
    versionId=version_id,
)

# Display version details
version = response["version"]
print(f"Version ID: {version['versionId']}")
print(f"Status: {version['status']}")
print(f"Created: {version.get('created', 'N/A')}")

if version.get("activated"):
    print(f"Activated: {version['activated']}")

if version.get("superseded"):
    print(f"Superseded: {version['superseded']}")

# Display contact details for this version
print(f"\nContact ID: {response['contactId']}")
print(f"Contact Status: {response['contactStatus']}")
print(f"Ground Station: {response['groundStation']}")
print(f"Start Time: {response['startTime']}")
print(f"End Time: {response['endTime']}")

if response.get("satelliteArn"):
    print(f"Satellite ARN: {response['satelliteArn']}")

if response.get("trackingOverrides"):
    print(f"Tracking Overrides: {response['trackingOverrides']}")

# Check for failure details if the version failed to update
if version["status"] == "FAILED_TO_UPDATE":
    failure_codes = version.get("failureCodes", [])
    failure_message = version.get("failureMessage", "")
    print(f"\nFailure Codes: {failure_codes}")
    print(f"Failure Message: {failure_message}")
```

### Ejemplo: Listar las versiones de los contactos
<a name="contacts.versioning.examples.list-contact-versions"></a>

 En el siguiente ejemplo, se enumeran todas las versiones de un contacto para ver el historial completo de cambios y se utiliza la paginación para gestionar conjuntos de resultados de gran tamaño. 

```
import boto3

# Create AWS Ground Station client
ground_station_client = boto3.client("groundstation")

contact_id = "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"

# List all versions of a contact to view the full history of changes.
# Results are paginated. Use the nextToken to retrieve additional pages.
print(f"Listing versions for contact {contact_id}...")

paginator = ground_station_client.get_paginator("list_contact_versions")
page_iterator = paginator.paginate(
    contactId=contact_id,
    PaginationConfig={
        "MaxItems": 100,
        "PageSize": 20,
    },
)

for page in page_iterator:
    for version in page["contactVersionsList"]:
        version_id = version["versionId"]
        status = version["status"]
        created = version.get("created", "N/A")

        print(f"  Version {version_id}: status={status}, created={created}")

        if version.get("activated"):
            print(f"    Activated: {version['activated']}")

        if version.get("superseded"):
            print(f"    Superseded: {version['superseded']}")

        if status == "FAILED_TO_UPDATE":
            failure_codes = version.get("failureCodes", [])
            failure_message = version.get("failureMessage", "")
            print(f"    Failure Codes: {failure_codes}")
            print(f"    Failure Message: {failure_message}")

        if status == "UPDATING":
            print(f"    Update is currently in progress.")
```

## Consideraciones
<a name="contacts.versioning.considerations"></a>
+  Los contactos creados antes de que se introdujera la función de control de versiones de contactos no tienen información de versión. Al llamar [DescribeContactVersion](https://docs.aws.amazon.com/ground-station/latest/APIReference/API_DescribeContactVersion.html)o [ListContactVersions](https://docs.aws.amazon.com/ground-station/latest/APIReference/API_ListContactVersions.html)para estos contactos, se devuelve un`ResourceNotFoundException`. 
+  Al actualizar las anulaciones de seguimiento de un contacto en curso, hay un breve período de transición hasta que la antena se ajusta a la nueva configuración de señalización. Durante este tiempo, es posible que se interrumpa la recepción o transmisión de la señal. 
+  Las versiones de los contactos no se pueden eliminar. Se utiliza [ListContactVersions](https://docs.aws.amazon.com/ground-station/latest/APIReference/API_ListContactVersions.html)para ver el historial completo de los cambios realizados en un contacto. 
+  Solo se puede llamar a la `UpdateContact` API desde la región de programación del contacto. 