Blog de Amazon Web Services (AWS)

Entregue experiencias naturales y eficaces de servicio al cliente de Telefonía Móvil con Amazon Connect y Amazon Lex

Por Enrique Rodriguez, Arquitecto de Soluciones en AWS

Los proveedores de telefonía móvil gestionan un gran volumen de llamadas de servicio al cliente a diario. La tecnología de red en rápida evolución y las innovaciones de dispositivos están dando forma a las expectativas de los clientes.

Deleitar a las personas que llaman con una interacción rápida es fundamental para una estrategia exitosa de experiencia del cliente. Los suscriptores móviles se comunican con el servicio de atención al cliente por varias razones, como solicitar una nueva tarjeta SIM, cambiar un plan, verificar el pago adeudado, cancelar el servicio, solicitar un alta de servicio o activar un teléfono. Para satisfacer estas necesidades de los suscriptores, los proveedores deben escalar el servicio al cliente a través de múltiples canales mientras mejoran la eficiencia y la calidad de la comunicación a través de la automatización.

En este blog, revisamos una solución prediseñada de ejemplo – basadas en Amazon Lex – que automaticen la interacción con el cliente para activar una SIM, realizar un pago y reportar un dispositivo perdido o robado, entregando al cliente una experiencia natural y eficiente.

Resumen de la Solución

Amazon Lex proporciona funcionalidades avanzadas de Deep Learning de reconocimiento automático de voz (Automatic Speech Recognition, ASR) para convertir voz en texto, y comprensión del lenguaje natural (Natural Language Understanding, NLU) para reconocer la intención del texto. Estas funcionalidades permiten crear aplicaciones con experiencias de usuario atractivas y con interacciones realistas.

Para aplicaciones de la industria de las comunicaciones, Amazon Lex ofrece soluciones prediseñadas para entregar experiencias de conversación naturales, al mismo tiempo que optimiza los modelos de entrega de servicios y hace que las nuevas tecnologías de comunicación y medios sean accesibles para los clientes. Los bots prediseñados se configuran con intenciones (intents), frases (utterances) de muestra, y tipos de slots para casos de uso de servicios móviles. Además, estos bots se integran con los flujos de contacto de Amazon Connect.

Revisemos una conversación de muestra sobre una solicitud de una nueva tarjeta SIM con la solución prediseñada:

Agente: Gracias por llamar a ABC Mobile. ¿Cómo puedo ayudarte hoy?

Cliente: Necesito una nueva tarjeta SIM.

Agente: Veo que está llamando desde el número de teléfono móvil 1234567891. ¿Está llamando para cambiar la tarjeta SIM por este número de teléfono?

Cliente: Sí.

Agente: Para verificación, diga o ingrese su contraseña.

Cliente: 123456.

Agente: Gracias. A continuación, para este tipo de solicitud, tendré que enviar un mensaje de texto con un PIN único a su número de teléfono 1234567891. ¿Lo envío?

Cliente: Sí.

Agente: Ok. Ya lo he enviado. Por favor diga o ingrese el PIN recibido.

Cliente: 1234.

Agente: Entendido. Gracias por verificar. ¿Puedo seguir adelante y solicitar una nueva SIM para 1234567891?

Cliente: Sí.

Agente: Listo. Recibirá la tarjeta SIM en la dirección registrada en 4 a 6 días hábiles.

Cliente: ¡Gracias!

En la conversación de muestra anterior, la persona que llama desea solicitar una nueva tarjeta SIM. El bot de autoatención captura el código de acceso para su verificación y luego inicia la solicitud de una nueva tarjeta SIM.

El proyecto de ejemplo incluye un template de que permite desplegar bots de Amazon Lex para autenticación y servicios móviles. Esto  proporciona la capacidad de automatizar las conversaciones y el autoservicio de los clientes. El bot MobileServicesBot contiene intenciones para actividades de servicios móviles comunes, como solicitar una nueva tarjeta SIM, cambiar de plan, recibir una factura, cancelar un servicio, solicitar un nuevo servicio, activar un dispositivo y solicitar un cambio de número. Incluye las siguientes intenciones

  • RequestNewSim: esta intención captura la información del cliente y ayuda a realizar una solicitud de una nueva tarjeta SIM.
  • AddNewLine: esta intención captura la información del cliente y ayuda a realizar una solicitud para una nueva línea de servicio.
  • ReportLostDevice: esta intención captura información del cliente y ayuda a la persona que llama a informar sobre la pérdida de un dispositivo y suspender el servicio.
  • CheckPaymentDue: esta intención captura la información del cliente y proporciona información sobre el pago adeudado a la persona que llama.
  • MakePayment: esta intención captura información como el monto del pago, la tarjeta de crédito o los detalles del cheque electrónico, y procesa el pago.
  • FindAStore: esta intención captura el código postal y ayuda a la persona que llama a encontrar la tienda más cercana.
  • EndConversation: esta intención finaliza la conversación en función de la entrada del usuario, como «Gracias, terminé».
  • Fallback: esta intención se invoca cuando la entrada no coincide con ninguna de las intenciones configuradas.

La definición del bot incluye el diálogo completo junto con las indicaciones para administrar la conversación. El bot también se integra con una función de AWS Lambda que contiene código para simular la ejecución de la lógica de negocio.

Arquitectura de la Solución

Revisemos la arquitectura general de la solución (mirando el siguiente diagrama).

  • Usamos un bot de Amazon Lex para autenticar a la persona que llama, procesar transacciones (por ejemplo, «Solicitar una nueva línea») o proporcionar a la persona que llama la información solicitada (por ejemplo, «¿Cuál es el monto del pago adeudado?»).
  • Usamos AWS para simular el acceso a los sistemas backend y ejecutar la lógica de negocio necesaria para realizar transacciones. Para esta publicación, los datos que usamos se almacenan en una Tabla de Amazon DynamoDB.
  • Si necesita implementar esta experiencia en una llamada telefónica, puede implementar la funcionalidad en una

Incluimos un template para desplegar un stack de AWS CloudFormation que contiene estos recursos, así como los roles requeridos de AWS Identity and Access Management (IAM). Con los recursos desplegados, se puede utilizar la solución prediseñada para servicios móviles en el canal de Amazon Connect.

Prerrequisitos

Debe tener los siguientes requisitos previos antes de implementar la solución:

  • Una cuenta de AWS
  • Acceso a los siguientes servicios de AWS
    • Amazon Lex para crear bots
    • AWS Lambda para implementar las funciones de lógica de negocio
    • DynamoDB para crear las tablas
    • IAM con acceso para crear políticas y roles
    • AWS CloudFormation para desplegar el stack
  • Access Key y Secret key de AWS IAM
  • Opcionalmente, una instancia de Amazon Connect existente (si se desea implementar en Amazon Connect)

Desplegando la solución prediseñada

Para implementar esta solución, complete los siguientes pasos:

  1. Haga clic en Launch Stack para desplegar el Stack de CloudFormation una de las regiones disponibles para Amazon Lex y Amazon Connect.

Para Stack name, este blog usa el nombre asistente-telecom (usted puede elegir otro nombre si lo desea), como se muestra en la siguiente imagen.

  1. En la sección Parameters, ingrese los nombres de los recursos que se crearán: los bots de Amazon Lex (uno para autenticación y otro para la operación), la tabla de DynamoDB y el flujo de contacto de Amazon Connect. Si cuenta con una instancia de Amazon Connect existente activa, indique el ARN de la instancia de forma opcional.

  2. Revise la autorización para crear de recursos de IAM y haga clic en Crear stack. Después de unos minutos, su stack debería estar completo. Los recursos principales se enumeran a continuación
  • Amazon Lex bots: TelecomMobile and TelecomMobileAuthentication
  • Lambda functions: TelecomMobileFunction and TelecomMobileAuthenticationFunction
  • DynamoDB: telecom_mobile_table
  • Amazon Connect contact flow: TelecomMobileContactFlow
  • IAM roles: LexRole, LexImportRole, LambdaRole, ConnectRole
  1. Si proporcionó un ARN de instancia Amazon Connect durante la creación del Stack, abra el panel de Amazon Connect y elija Números de teléfono (Phone Numbers) en el menú Enrutamiento (Routing) en el panel de navegación.

  1. A continuación, asocie un número de teléfono con el flujo de contacto de servicios móviles.

Una vez asociado el número de teléfono, la solución está lista para ser probada.

Probando la Solución

Puede utilizar estos datos de muestra para probar el bot. Si utilizó una instancia de Amazon Connect como parte de la implementación, puede llamar al número de teléfono de Amazon Connect e interactuar con el bot. También puede probar la solución directamente en la consola de Amazon Lex V2 mediante voz o texto. Después de probar los flujos de conversación prediseñados, puede personalizar el bot, agregar más intenciones según sea necesario e integrarlo con sistemas backend adicionales.

Servicios Móviles: Capacidades Claves

Revisemos algunas de las funciones que ofrece la solución prediseñada, incluida la validación de datos contra el sistema backend y el flujo del contact center.

Validación del input del usuario

Los agentes autentican a las personas que llaman verificando los últimos cuatro dígitos de su documento de identidad o su contraseña. Si esta validación falla, el agente solicita a la persona que llama que vuelva a proporcionar la información. La solución prediseñada proporciona una función Lambda que realiza la validación con la información almacenada en el sistema backend. Además, la solución proporciona lógica para limitar el número de intentos de autenticación. Si la persona que llama ingresa información incorrecta tres veces, el bot finaliza la llamada.

El siguiente código muestra cómo administrar la entrada del usuario con la información de la cuenta:

```python
phone_number = dialog.get_slot('PhoneNumber', intent)
zip_code = dialog.get_slot('Zipcode', intent)

status, customer_id = mobile_system.get_customer_id(phone_number, zip_code)

if status == 'INVALID':
# unauthorized user
…
…
else:
# proceed with authentication fulfillment
…
…

```

El siguiente código muestra cómo limitar el número de intentos utilizando atributos de sesión en Lex:

  ```python

number_of_attempts = number_of_attempts + 1
dialog.set_session_attribute(
intent_request, 'number_of_attempts', str(number_of_attempts))

if status == 'INVALID':
# unauthorized user
if number_of_attempts >= 3:
message = "Por su seguridad, no hemos podido completar el requerimiento, \
hasta que pueda entregar la información solcitada. Adiós"
dialog.set_session_attribute(
intent_request, 'authentication_status', 'UNAUTHENTICATED')
return dialog.close(
active_contexts, session_attributes, intent, 
[{'contentType': 'PlainText', 'content': message}])

if number_of_attempts == 1:
prompt = "No encontré una coincidencia. Por favor diga o ingrese su número telefónico. \
Si necesitas tiempo para obtener la información, diga, espera un momento."
elif number_of_attempts == 2:
prompt = "No encontré una coincidencia. Inténtelo una vez más. \
Diga o ingrese su número telefónico."

return dialog.elicit_slot(
'PhoneNumber', active_contexts, session_attributes, init_state,
[{'contentType': 'PlainText', 'content': prompt}])

else:
# proceed with authentication fulfillment
message = "Gracias por confiar en nuestros servicios."
intent_request = dialog.set_session_attribute(
intent_request, 'authentication_status', 'AUTHENTICATED')
dialog.set_session_attribute(
intent_request, 'phone_number', phone_number)
dialog.set_session_attribute(
intent_request, 'customer_id', customer_id)
session_attributes = dialog.get_session_attributes(intent_request)
return dialog.close(
active_contexts, session_attributes, 
intent, [{'contentType': 'SSML', 'content': message}])

```

Integración con la base de datos

El agente debe obtener información de los clientes en la llamada. Por ejemplo, las personas que llaman pueden querer saber el monto del pago adeudado («¿Cuál es el monto de mi factura para este mes?») o la fecha de vencimiento del pago («¿Cuál es el último día para pagar mi factura?»). La solución incluye una función Lambda con un placeholder para código de lógica de negocio que se puede utilizar para integrarse con sistemas backend. La separación de la lógica de negocio de la gestión del diálogo le permite crear y mantener el código base.

El siguiente código muestra cómo integrarse con sistemas backend para recuperar información pertinente.

```python

payment_due = mobile_system.get_payment_due(customer_id)
if not payment_due:
response = responses.get('PaymentDueNotAvailable')
return dialog.elicit_intent(
active_contexts, session_attributes, intent,
[{'contentType': 'PlainText', 'content': response}])

response = responses.get(
'Response', payment_due_balance=payment_due['payment_due_balance'],
payment_due_date=payment_due['payment_due_date'], 
last_payment_amount=payment_due['last_payment_amount'],
last_payment_date=payment_due['last_payment_date'])
return dialog.elicit_intent(
active_contexts, session_attributes, intent,
[{'contentType': 'PlainText', 'content': response}])

```

El siguiente código auxiliar muestra cómo acceder a los datos de ejemplo en DynamoDB:

```python

def get_payment_due(customer_id):
customer = telecomdb.query(
KeyConditionExpression=Key('customer_id').eq(customer_id),
FilterExpression=Attr("record_type").eq('mobile'))
if customer and len(customer) == 0:
return None
customer = customer.get('Items')[0]
payment_due = {}
payment_due['payment_due_balance'] \
= customer['due_payment']['payment_due_balance']
payment_due['payment_due_date'] = \
= customer['due_payment']['payment_due_date']
payment_due['last_payment_amount'] \
= customer['last_payment']['last_payment_amount']
payment_due['last_payment_date'] = \
customer['last_payment']['last_payment_date']

return payment_due

```

Flujos de Contact Center

Puede utilizar este despliegue en un  Flujo de Contacto de Amazon Connect. Cuando los clientes llaman al Contact Center, la llamada es procesada por el flujo de contacto asignado al número de teléfono. El flujo de contacto utiliza un bloque Get Customer Input para invocar el bot de Amazon Lex. Revisemos el flujo de contacto de los servicios móviles.

Limpieza

Para evitar incurrir en cargos en el futuro elimine todos los recursos creados, eliminando el Stack desde CloudFormation (Seleccionar stack y “borrar”)

  1. Bots de Lex
  2. Funciones Lambda
  3. Tabla de DynamoDB
  4. Roles de IAM

Conclusión

Este blog contempla una solución prediseñada que Amazon Lex para la industria de las Telecomunicaciones que puede utilizar para acelerar la entrega de experiencias de conversación atractivas y sofisticadas. En este artículo, revisamos una solución para que los clientes de servicios móviles puedan automatizar tareas comunes como solicitar una tarjeta SIM o un teléfono, actualizar planes, realizar pagos y activar el servicio.

Al construir en AWS, tiene la capacidad de transformar el servicio al cliente y, al mismo tiempo, simplificar las operaciones en una infraestructura segura. La solución prediseñada entrega una experiencia de atención lista para implementar con Amazon Connect. Puede ampliar la solución con flujos de conversación adicionales que sean específicos para las necesidades de su organización. ¡Pruebe la solución de servicios móviles prediseñada en Amazon Lex hoy mismo!


Sobre el autor

Enrique Rodríguez es Arquitecto de Soluciones de Amazon Web Servicies (AWS) Basado en Chile actualmente ayudando a los clientes de la región a lograr sus desafíos en la nube. Con intereses en Machine Learning y Contact Center en la Nube.

Sobre los revisores

Rodrigo es arquitecto de soluciones senior en AWS. En su rol, ayuda a empresas de distinto tamaño a generar valor para su negocio mediante tecnologías de computación en la nube. Sus intereses incluyen Machine Learning y ciberseguridad. Se ha desempeñado por más de 10 años como profesional de tecnologías de la información, con foco en ciberseguridad e infraestructura de redes.

Victor Palomo es Arquitecto de Soluciones en Amazon Web Services con amplia experiencia en Contact Centers.