https://d226lax1qjow5r.cloudfront.net/blog/blogposts/translating-sms-messages-with-aws-translate-dr/TW_Translate-SMS_Amazon_1200x675.png

Traducir mensajes SMS con Amazon Translate

Publicado el May 11, 2021

Tiempo de lectura: 10 minutos

En mi post anterior, mostré cómo podemos configurar la traducción de mensajes de texto con la API de traducción de Google. Voy a continuar con esa misma idea en este post usando AWS Translate.

Visión general

En este post, te muestro cómo crear un SMS entrante de Vonage entrante de Vonage y traducir el mensaje al inglés utilizando la herramienta AWS Translate.

Para empezar, necesitarás configurar los siguientes elementos:

Vonage API Account

To complete this tutorial, you will need a Vonage API account. If you don’t have one already, you can sign up today and start building with free credit. Once you have an account, you can find your API Key and API Secret at the top of the Vonage API Dashboard.

Cree su proyecto

La configuración de este ejemplo es mínima y sólo necesitas un par de paquetes para ponerte en marcha.

  • aws-sdk - este es el SDK oficial de AWS Translate

  • express - web framework para servir el webhook

  • dotenv - un paquete para cargar variables de entorno

  • body-parser - middleware para que Express gestione el objeto webhook entrante

Inicialice el proyecto y luego instale los requisitos anteriores utilizando npm o yarn.

npm init && npm install aws-sdk express dotenv body-parser # or yarn init && yarn add aws-sdk express dotenv body-parser

Una vez instalado, cree una cuenta index.js y .env archivo.

touch index.js .env

A continuación, abra el archivo index.js y pon el siguiente código dentro:

'use strict';
require('dotenv').config();

const express = require('express');
const bodyParser = require('body-parser');
const AWS = require("aws-sdk");

const app = express();

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

const server = app.listen(3000, () => {
  console.log(`Express server listening on port ${server.address().port} in ${app.settings.env} mode`);
});

Esto configurará el servidor para ejecutar el ejemplo.

Instalación de ngrok

Los webhooks deben estar disponibles públicamente para que el servicio de Vonage pueda llegar a la aplicación cuando se reciban mensajes SMS entrantes. Podrías enviar tu código a un servidor disponible públicamente, o puedes usar ngrok para permitir que el tráfico público llegue a tu aplicación local.

Puede obtener más información sobre la instalación ngrok con este post. Después de que tengas todo listo puedes iniciar ngrok usando el siguiente comando para crear tu túnel.

ngrok http 3000

Anote la dirección ngrok dirección, ya que la necesitará en un paso posterior.

Configuración de AWS Translate

Una vez que tenga los elementos iniciales configurados, ahora puede crear un Usuario IAM con el rol AWS Translate adjunto.

Create New IAM UserCreate New IAM User

Dé un nombre al nuevo usuario y marque la casilla para Programmable Access.

Set User DetailsSet User Details

A continuación el usuario IAM requerirá la TranslateFullAccess adjunta. Esto le dará al usuario IAM acceso a la funcionalidad Traducir.

Set User PermissionsSet User Permissions

Revise la configuración del usuario y, a continuación, haga clic en Create.

Review and Create UserReview and Create User

Una vez finalizado el proceso de creación Access Key ID y Secret Access Key.

Get the Access Key ID and SecretGet the Access Key ID and Secret

Cree un nuevo .env y copia y pega lo siguiente:

AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_REGION=

Con las credenciales del usuario de IAM que acabas de crear, completa los detalles en el archivo .env guarda y continúa para crear el número de teléfono de Vonage.

Cómo configurar los mensajes SMS entrantes de Vonage

Este ejemplo requiere un número de teléfono de vonage para recibir mensajes entrantes. Podemos hacerlo utilizando la CLI de Vonage desde una terminal.

Comprar un número de teléfono virtual

El primer paso será adquirir un número (siéntase libre de utilizar un ISO 3166 alfa-2 según sea necesario).

vonage numbers:search US Country Number Type Cost Features ─────── ─────────── ────────── ──── ───────── US 12017621343 mobile-lvn 0.90 VOICE,SMS US 12017782770 mobile-lvn 0.90 VOICE,SMS US 12018011956 mobile-lvn 0.90 VOICE,SMS US 12018099074 mobile-lvn 0.90 VOICE,SMS US 12018099756 mobile-lvn 0.90 VOICE,SMS vonage numbers:buy 12017621343 US

Aunque la ruta real a utilizar en la aplicación no está configurada, le darás un nombre /message. Es necesario vincular el número de teléfono a esta ruta para que los mensajes entrantes sepan a dónde dirigirse. Obtenga el ngrok nombre de host de la configuración anterior y utilícelo aquí:

vonage number:update 12017621343 US --url=https://my-ngrok-hostname/message

Ahora tenemos el webhook de Vonage configurado como un lugar para enrutar los mensajes SMS entrantes.

Finalizar la solicitud

Todo lo que queda para este tutorial es crear la ruta Express para manejar los datos entrantes y un par de pequeñas funciones para realizar realmente la traducción.

Crear el Webhook

Primero, debemos crear el código del webhook. Vonage tiene una función integrada para configurar el comportamiento predeterminado de SMS. En el panel de configuración puedes cambiar el método HTTP por defecto. El mío es POST-JSON. Yo recomendaría usar esta configuración si es posible, sin embargo el código usado en este ejemplo manejará las tres opciones en caso de que no puedas modificar esta configuración.

Default Vonage SMS HTTP MethodDefault Vonage SMS HTTP Method

Abra el archivo index.js y, en la parte inferior, pegue el siguiente código:

// Reading the inbound SMS messages
const handleRoute = (req, res) => {

  let params = req.body;

  if (req.method === "GET") {
    params = req.query
  }

  if (!params.to || !params.msisdn) {
    res.status(400).send({'error': 'This is not a valid inbound SMS message!'});
  } else {
    translateText(params);
    res.status(200).end();
  }

};

El fragmento anterior es el método que pasaremos a las rutas. Si el webhook de mensajes entrantes utiliza POST utilizará req.bodyy utilizará req.query para la opción GET opción . Siempre y cuando la carga útil de entrada esté configurada correctamente, el objeto se enviará junto con el método translateText para mostrar la traducción.

Ahora puede añadir la ruta y los métodos HTTP a la aplicación.

app.route('/message')
  .get(handleRoute)
  .post(handleRoute)
  .all((req, res) => res.status(405).send());

El código anterior creará los archivos GET y POST para gestionar cualquiera de los mensajes SMS entrantes. Si se utiliza cualquier otro método, se devolverá una 405 - Method Not Allowed se devolverá una respuesta.

El webhook está listo y la pieza final son las traducciones propiamente dichas.

Método de traducción

En el paso anterior llamamos translateText. Este paso creará ese método.

Utilizar el paquete aws-sdk es muy sencillo. Primero instanciamos la clase AWS.Translate que nos proporcionará el método translate.translateText método Éste se llama dentro de translateText y utiliza el campo text del objeto de mensaje SMS entrante. El SourceLanguageCode idioma se establece en autoy la TargetLanguageCode es cualquier código de dos letras para el idioma a traducir.

function translateText(params) {
  var translate = new AWS.Translate({region: process.env.AWS_REGION})
  var opts = {
    SourceLanguageCode: 'auto',
    TargetLanguageCode: 'en',
    Text: params.text
  };
  translate.translateText(opts, function(err, data) {
    if (err) {
      console.log('error', err);
    }
    else{
      console.log(`Original Text: ${params.text}`);
      console.dir(`Translation: ${data.TranslatedText}`);
    }
  });
}

Ahora puedes probar la funcionalidad iniciando el servidor y enviando un mensaje de texto al número que compraste anteriormente.

node index.js # Text "Hola" to your phone number # expected response Original Text: Hola Translation: Hello

AWS Translate hace un trabajo increíble detectando el idioma entrante y procesando la traducción rápidamente. Diviértete y pruébalo.

Recapitulemos

El ejemplo anterior es sólo una pequeña introducción a la traducción, pero debería ser un buen comienzo para ponerte en marcha. A partir de aquí, puedes traducir el mensaje entrante y, a continuación, traducir el mensaje saliente al idioma correcto también (futura entrada del blog, seguro).

Puede encontrar una versión completa de este tutorial en https://github.com/nexmo-community/sms-translate-aws-js.

Si quiere saber más sobre los proyectos Extend que tenemos, puede visitar integración para obtener más información.

Compartir:

https://a.storyblok.com/f/270183/384x384/444c073b5e/kellyjandrews.png
Kelly J AndrewsAntiguo miembro del equipo

Kelly J Andrews es desarrolladora de Nexmo y lleva más de 30 años jugando con los ordenadores. Utilizó BASIC por primera vez a los 5 años.

No fue hasta que creó su primera página web en 1997 y probó JavaScript por primera vez cuando encontró su verdadera vocación. Kelly lucha ahora por JavaScript, el código comprobable y la entrega rápida.

Se le puede encontrar cantando karaoke, haciendo magia o animando a los Cubs y a los Fighting Irish.