Seguir

Robotos - AT&T

La gestión de solicitudes de ciertos servicios de liberación de AT&T se lleva a cabo via la propia web de AT&T en https://www.att.com/deviceunlock/#/ para la cual solo es necesario identificarse como usuario NO-ATT, y proveer el IMEI, nombre y un email.

Una vez solicitado, ATT manda un correo con link de verificación para pinchar desde el correo. Una vez realizada la verificación, se pone en marcha el proceso que suele durar unas 12-24 horas de media, aunque ellos dice "2 business days" y en caso se puede ir a una semana.

El proceso se automatiza mediante un Roboto realizado con una combinación de scripts de PHP y la herramienta iMacros que opera en una instancia dedicada de una maquina windows en AWS.

Operativa del Roboto

El proceso a grandes rasgos se compone de un generador de solicitudes y un chequeador de estados.

El orden es:

  1. Solicitud de Liberación para el Servicio Básico de ATT es recibida y encolada en la tabla liberaciones_prov_no_api 
  2. Cron configurado chequea si hay pedidos en estado RECIBIDO a la espera de ser invocados.
  3. El Cron es un script php en maquina de producción que invoca internamente via cURL una llamada a la instanacia Windows donde reside iMacros (de ahora en adelante WinMacros) para lanzar una instancia de iMacros y realizar la solicitud en el portal de ATT.
  4. La maquina WinMacro tiene expuesto un servicio php que es el que se invoca desde fuera, y que internamente lanza iMacros y pasa los parametros a ejecutar en los distintos macros.
  5. iMacros debe poder gestionar la resolución de:
    1. Obtener una IP anónima de USA y frecuentemente rotada para no ser baneado
    2. Generar un nombre y apellido válido.
    3. Utilizar un EMAIL que luego pueda chequear y pinchar en el enlace de confirmación con cierto grado de novedad y que no sea baneado. 
    4. Resolver un CAPTCHA.
    5. Leer los distintos mensaje de error que se producen por varios motivos como son error de captcha, imei no att, pagos pendientes, etc. Algunos de estos errores se muestra a la hora de intentar hacer la solicitud, mientras que otros solo son mostrados cuando la solicitud ha sido puesta en marcha y se chequea el estado.
  6. En función del resultado de la generación de la solicitud se actualizan diversos sistemas para indicar si el pedido ya está en proceso, si ha sido denegado por datos no aceptados y otros motivos. Dependiendo del error o mensaje de respuesta se puede reprocesar el servicio por otra tool, enviar una devolución, actualizar un ticket, avisar a un agente, etc. Esta operativa se lanza desde un script de maquina en producción, invocado desde iMacros.
  7. Otro servicio cron realiza un chequeo y comprueba qué peticiones llevan al menos 3 horas desde la solicitud y chequea su estado. Si este es "en proceso", actualiza ticket y tablas de control. Si es denegado o aprobado, actua acordemente.

 

Cronificacion de Proceso 

El script del CRON que invoca el chequeo de solicitudes pendientes de lanzar está en:

1,8,17,27,35,43,54 * * * * nohup wget -O /dev/null --no-check-certificate --http-user=cron_user --http-passwd='GApLdYlM1mAS' 'https://secure.doctorsim.com/cms/caps/lista_pendientes_enviar.php?cron=1&action_type=pendientes_enviar&max_proc=3' > /dev/null 2>&1 &  #Roboto ATT

El chequeo de estado que solo chequea solicitudes con cambio cada 3 horas es:

6,23,40,10 * * * * nohup wget -O /dev/null --no-check-certificate --http-user=cron_user --http-passwd='GApLdYlM1mAS' 'https://secure.doctorsim.com/cms/caps/lista_pendientes_enviar.php?cron=1&action_type=pendientes_chequeo_status&max_proc=3' > /dev/null 2>&1 &  #Roboto ATT Status Check

En ambos scripts los parametros a destacar:

  • cron (1 o 0) para determinar si queremos que ejecute la llamada (1), o solamente visualizar los distintos estados (0 o ausente)
  • action_type (pendientes_enviar o pendientes_chequeo_status)
  • max_proc (numero de proceso de instancias iMacros en paralelo máximas). Más de 3 satura la maquina y consumo de CPU y posiblemente también puede implicar mayor posibildiad de baneo.

Panel de Estados

Se puede consultar el estado actual y listado de petiones de modo directo en:

https://secure.doctorsim.com/cms/caps/lista_pendientes_enviar.php

Los distintos elementos del menu indican:

  1. RECIBIDO (pendientes de ser recogidos por el CRON y lanzados)
  2. DESBLOQUEADO (completados con EXITO)
  3. PROCESANDO (Solicitados correctamente a la espera de veredicto)
  4. PROCESANDO_PENDING_LINK_CLICK (Expeción de error que no hemos clickado correctamente en el enlace o no ha llegado - Intervención manual)
  5. CANCELADO (Resultado negativo por varios motivos). Normalmente se devuelve, se pasan a premium o en algunos casos se reintenta automáticamente.
  6. DENIED_1 (Estado de pruebas. no se usa)
  7. DENIED_NOATT (Un estado que deveuvel ATT cuando detecta pedidos fraudulentos). Normalmente una nueva solicitud nueval, suele resultar en éxito. De momento se opera manualmente, invocando de nuevo. Pendiente automatizar.
  8. TODO (todo)

Tablas involucradas

Las tablas involucradas en todos los procesos son:

  • liberaciones_prov_no_api (gestion de encolamiento de peticiones y estado final para unlocker)
  • libs_att_auto_proc (logging de cada paso y estado de imacros) - fuerte verbose
  • roboto_emails (gestion de los emails usados)

 

Instancia Amazon WinMacro

El roboto y iMacros están instalados en la instancia WinMacro de Amazon. Es una t2.micro AMD64 con Windows Server 2012 R2, con IIS instalado, php y la aplicacion iMacros con licencia ENTERPRISE.

IP Elastica fija: 34.250.7.44

Acceso por Remote Desktop con credenciales en 1p.

También se ha habilitado acceso via FTP con TSL/SSL a la maquina para manipular los ficheros de script php e imacros.

La ruta donde están los ficheros es: /wwwroot/

La estructura de ficheros:

  • main.php (el script generico de solicitud de una peticion)
  • status.php (el script generico de chequeo de una solicitud)
  • status_code.php (include con distintas llamadas a macros para chequear respuestas de estado)
  • helper.php (funciones de ayuda)
  • iirunner.php (script para determinar cuantas instancias están activas - para evitar levantar más de las que queramos)
  • Carpeta macros_sp155ad2 (Todos los macros)
  • Carpeta downloads_df23338 (Carpeta para descargas - por ejemplo, el captcha que se resolverá)

 

Invocación de solicitudes

Para generar solicitud: 

http://34.250.7.44/main.php?imei=356565056249735&fname=Tami&lname=Deedra&id_ticket=1844816 (ojo, pinchando se realizará un solicitud real)

Para chequear estado:

http://34.250.7.44/status.php?id_ticket=1844816&imei=356565056249735&sol=NUL122490220262

Para chequear estado siempre es necesario el valor att_sol que suele empezar por NUL o CUL y que nos da ATT cuando la sol está en marcha.

 

Elementos del Proceso iMacros

IP Proxy

Para poder usar una IP distinta en cada petición tenemos una suscripción con 50 IPs distintas que usamos como proxy.  Las tiene la funcion dame_random_proxy_ip en helper.php y está a pelo sin control de uso de momento, extrayendo una aleatoriamente cada vez.

El servicio es: admin.instantproxies.com/ (claves en 1p).

Cada 2 o 3 meses viene bien escribirles para pedir que nos refresquen las IPs y nos den una serie nueva.

En cada petición de chequeo o solicitud, se setea una IP del proxy. El proxy está configurado solo para IPs externas, teniendo los dominios de doctorSIM como no validos para que estos no vayan por el proxy.

Captcha

Utilizamos https://anti-captcha.com/ para enviar las peticiones via el API y que nos responda con la resolución. El coste es de unas  centésimas de euro y el tiempo de respuesta suele estar en torno a los 10-15 segundo ( a veces hasta 30-50 en tiempos de picos). Fiabilidad del 80-90%. Si falla, hay politica de reintentos.

Hay que renovar el saldo periodicamente.

Correos

Para poder leer el contenido de los correos y tener una estrategia de uso variado de correos y no ser baneado.

Usamos context.io para conectar las cuentas de correo de GMAIL, previamente creadas y así podeer leer via API el contenido. Por cada cuenta de gmail que creamos, intentamos hacer uso de la funcionalida del punto (.) para multiplicarla por el numero de caracteres. P.ej. cuenta@gmail.com nos vale 6 veces si la usamos asi:

  • cuenta
  • c.uenta
  • cu.enta
  • cue.nta
  • cuen.ta
  • cuent.a

Actualmente usamos aprox 8 cuentas de gmail, que nos dan 130 variantes aprox. Conviene añadir cuentas nuevas y expirar las antiguas cada X tiempo.

Tenemos un macro en WinMacro que invoca un script en maquina en producción cms/caps/dame_email.php que hace chequeo en bucle hasta que recibe el correo y encuentra el link de validación.

Existe la opcion de usar webhooks en vez de chequeo, pero no está implementado todavia.

 

Gestion de Estados

Tras la finalización de cualquier proceso, ya sea de estado, generación de solicitud, etc, se invoca el script:

/cms/caps/log_proc.php?kd=fu328fefsdjhq3iuhfaksdfq382fhq928cfh9q&email=fsdfsd@dadasd.com&imei=353350071394102&sol=NUL122486090308&act=enprogreso

En función de los distintos estados, se llevan a cabo distintas acciones. Las acciones pasan por muchas variantes pero se puede encontrar aquí el esquema general.

 

Desde log_proc en función del motivo se hace:

  • Actulizar estado en liberaciones_prov_no_api con motivo y estado para que unlocker proceda.
  • Invocar un macro específico de ZD y aplicarlo al ticket.
  • Enviar un texto especifico y reprocesado por otra tool de manera automática
  • Escribir a slack
  • Añadir comentarios a ZD, añadir o quitar TAGS, asignar a un agente en particular.

Depuración

Slack Canal: #roboto_att

Estados y Progreso Visual

https://app.redash.io/doctorsim/public/dashboards/GsCgsf1aHsh7ixHZlGG5G5qoLil3SWwAnmu0tAYe

 

Detalles Técnicos de la implementación actual

  • Servicios afectados por Roboto: id_prov 28 con:
    • Samsung ATT Basico con opcion Premium (12)
    • iPhone Clean ATT (9)
    • Samsung Basico ATT (25)

 Particularidades , Troublehooting y Otros

- Si se rebootea WinMacro, se levanta automáticamente iirunner que es necesario para poder invocar iMacros desde php. El problema es que la lanzarse en modo automatica lo hace como servicio, y por lo tanto las invoaciones de iMacros no son visibles.

Si queremos ver las invocaciones de manera visual, tenemos que matar iiruner en el visor de procesos y volver a ejecutarlo. No es grave, porque si la maquina se levanta sola, se procesa correctamente todo, pero no es visual. Es solo para depurar.

- Como iMacros a veces falla por timeouts de ATT u otros motivos, a veces se quedan navegadores abiertos. Existe un proceso que se llama todas las horas en el minuto 16 (que no coincide con cron) para matar iMacros.

To do:

  • Pendiente configurar backup de maquina WinMacro
  • Pendiente pasar a instancia reservada de un año al menos para ahorro costes
  • Pendiente configurar repositorio para ficheros de WinMacro. De momento no tienen backup!
  • Pendiente paginación para panel.

 

 

¿Fue útil este artículo?
Usuarios a los que les pareció útil: 0 de 0
¿Tiene más preguntas? Enviar una solicitud

0 Comentarios

Inicie sesión para dejar un comentario.