El desarrollo de aplicaciones suele requerir el envío de SMS a los usuarios. Por ejemplo, se envían códigos de verificación de registro, notificaciones de actualización de pedidos o mensajes promocionales. Este documento describe cómo automatizar el envío de SMS de forma rápida, segura y confiable mediante la integración de un SDK y la llamada a la API de Short Message Service de Alibaba Cloud.
Arquitectura
El flujo completo para llamar a la API de SMS involucra su aplicación, el SDK de Alibaba Cloud, Resource Access Management (RAM) y SMS.
El proceso es el siguiente: integre el SDK de Alibaba Cloud en su aplicación y use RAM para asignarle credenciales con permisos de SMS. Su aplicación utiliza estas credenciales para llamar a la API de SMS. Una vez que Alibaba Cloud autentica la solicitud y verifica su cumplimiento, transmite el mensaje a la puerta de enlace de SMS de Alibaba Cloud. Esta puerta de enlace entrega el SMS al celular del usuario a través de la red del operador.
Esta guía le muestra cómo llamar a la API de SMS con la operación SendMessageToGlobe como ejemplo. Aprenderá a:
Si ya tiene experiencia con llamadas a API, consulte directamente API reference y ejecute la operación que necesite.
Se recomienda usar el SDK para llamar a la API. Si prefiere construir sus propias solicitudes, consulte V3 request body & signature.
Antes de empezar
Elemento | Descripción | Referencias |
Permisos de usuario | En la consola de RAM, haga clic en el nombre de un usuario de RAM para consultar sus permisos. Asegúrese de que el usuario de RAM que llama a la API tenga el permiso obligatorio relacionado con SMS:
| |
| En la consola de RAM, haga clic en el nombre de un usuario de RAM. En la página de detalles del usuario, haga clic en la pestaña Signature para consultar el Template Code. | |
| El AccessKey Secret solo se muestra durante la creación. Si lo pierde, cree un nuevo par de AccessKey. | |
Saldo de la cuenta o cuota del paquete | Asegúrese de contar con un saldo de cuenta o una cuota de paquete suficiente. Consulte la cuota de su paquete en la página Resource Package Statistics o revise el saldo de su cuenta en la consola de Expenses and Costs. |
Configure las credenciales
Paso 1: Cree un usuario de RAM y otorgue permisos
Su cuenta raíz tiene permisos completos. Utilice un usuario de RAM para las llamadas a la API y las tareas habituales de operación y mantenimiento. Para obtener más información, consulte Overview.
Cree un usuario de RAM: vaya a la página Create User. Especifique la información obligatoria, seleccione Permanent AccessKey en Access Configuration y luego haga clic en OK. Guarde su AccessKey para usarlo más adelante.
Otorgue permisos al usuario de RAM: vaya a la página Users. Busque el usuario de RAM que creó y haga clic en Attach Policy en la columna OK. En el cuadro de búsqueda Attach Policy, introduzca AliyunDysmsFullAccess, seleccione la política y luego haga clic en Actions.
AliyunDysmsFullAccess: otorga permisos completos para gestionar el servicio de SMS.
AliyunDysmsReadOnlyAccess: otorga permisos de solo lectura para acceder al servicio de SMS.
Para crear una política personalizada, consulte RAM authorization.
Paso 2: Configure las credenciales de acceso
Almacene su AccessKey pair en variables de entorno. Configure environment variables on Linux, macOS, and Windows.
No codifique de forma fija su par de AccessKey. Obténgalo desde las variables de entorno.
El código de ejemplo usa las variables de entorno
ALIBABA_CLOUD_ACCESS_KEY_IDyALIBABA_CLOUD_ACCESS_KEY_SECRET.
Paso 3: Configure las variables de entorno
Windows
En Windows, configure las variables de entorno mediante Propiedades del sistema, CMD o PowerShell.
System properties
Este método establece variables de entorno permanentes.
Se requieren privilegios de administrador para modificar las variables del sistema.
Los cambios en las variables de entorno no afectan a las aplicaciones en ejecución. Reinicie cualquier interfaz de línea de comandos, IDE u otra aplicación abierta para aplicar la nueva configuración de variables.
En el escritorio de Windows, presione
Win+Q. En el cuadro de búsqueda, introduzca Edit the system environment variables y selecciónelo para abrir la ventana System Properties.En la ventana System Properties, haga clic en Environment Variables. En la sección System variables, haga clic en New. Establezca Variable name como
ALIBABA_CLOUD_ACCESS_KEY_IDy Variable value con su AccessKey ID. Repita este paso paraALIBABA_CLOUD_ACCESS_KEY_SECRET.Haga clic en OK en las tres ventanas para guardar la configuración y cerrarlas.
-
Abra una ventana de CMD o Windows PowerShell y ejecute los siguientes comandos para comprobar que las variables de entorno estén configuradas.
-
Comando de CMD:
echo %ALIBABA_CLOUD_ACCESS_KEY_ID% echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET%Microsoft Windows [Version 10.0.22621.3593] (c) Microsoft Corporation. All rights reserved. C:\Windows\System32>echo %ALIBABA_CLOUD_ACCESS_KEY_ID% LTAI C:\Windows\System32> -
Comando de Windows PowerShell:
echo $env:ALIBABA_CLOUD_ACCESS_KEY_ID echo $env:ALIBABA_CLOUD_ACCESS_KEY_SECRETWindows PowerShell Copyright (C) Microsoft Corporation. All rights reserved. Install the latest PowerShell for new features and improvements! https://aka.ms/PSWindows PS C:\Windows\system32> echo $env:ALIBABA_CLOUD_ACCESS_KEY_ID LTAIxxx PS C:\Windows\system32>
-
CMD
Permanent
Siga estos pasos para establecer una variable de entorno que persista en todas las sesiones nuevas del usuario actual.
-
Ejecute los siguientes comandos en CMD.
# Replace YOUR_ACCESS_KEY_ID with your AccessKey ID. setx ALIBABA_CLOUD_ACCESS_KEY_ID "YOUR_ACCESS_KEY_ID" # Replace YOUR_ACCESS_KEY_SECRET with your AccessKey secret. setx ALIBABA_CLOUD_ACCESS_KEY_SECRET "YOUR_ACCESS_KEY_SECRET" Abra una nueva ventana de CMD.
-
En la nueva ventana de CMD, ejecute los siguientes comandos para comprobar que las variables de entorno estén configuradas.
echo %ALIBABA_CLOUD_ACCESS_KEY_ID% echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET%
Temporary
Para establecer una variable de entorno únicamente en la sesión actual, ejecute los siguientes comandos en CMD.
# Replace YOUR_ACCESS_KEY_ID with your AccessKey ID.
set ALIBABA_CLOUD_ACCESS_KEY_ID=YOUR_ACCESS_KEY_ID
# Replace YOUR_ACCESS_KEY_SECRET with your AccessKey secret.
set ALIBABA_CLOUD_ACCESS_KEY_SECRET=YOUR_ACCESS_KEY_SECRET
Ejecute los siguientes comandos en la sesión actual para comprobar que las variables de entorno estén configuradas.
echo %ALIBABA_CLOUD_ACCESS_KEY_ID%
echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET%
PowerShell
Permanent
Siga estos pasos para establecer una variable de entorno que persista en todas las sesiones nuevas del usuario actual.
-
Ejecute los siguientes comandos en PowerShell.
# Replace YOUR_ACCESS_KEY_ID with your AccessKey ID. [Environment]::SetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID", "YOUR_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User) # Replace YOUR_ACCESS_KEY_SECRET with your AccessKey secret. [Environment]::SetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET", "YOUR_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User) Abra una nueva ventana de PowerShell.
-
En la nueva ventana de PowerShell, ejecute los siguientes comandos para comprobar que las variables de entorno estén configuradas.
echo $env:ALIBABA_CLOUD_ACCESS_KEY_ID echo $env:ALIBABA_CLOUD_ACCESS_KEY_SECRET
Temporary
Para establecer una variable de entorno únicamente en la sesión actual, ejecute los siguientes comandos en PowerShell.
# Replace YOUR_ACCESS_KEY_ID with your AccessKey ID.
$env:ALIBABA_CLOUD_ACCESS_KEY_ID = "YOUR_ACCESS_KEY_ID"
# Replace YOUR_ACCESS_KEY_SECRET with your AccessKey secret.
$env:ALIBABA_CLOUD_ACCESS_KEY_SECRET = "YOUR_ACCESS_KEY_SECRET"
Ejecute los siguientes comandos en la sesión actual para comprobar que las variables de entorno estén configuradas.
echo $env:ALIBABA_CLOUD_ACCESS_KEY_ID
echo $env:ALIBABA_CLOUD_ACCESS_KEY_SECRET
Linux
Permanent
Para establecer una variable de entorno que persista en todas las sesiones nuevas del usuario actual, agregue la variable al archivo de inicio de su shell.
-
Ejecute el siguiente comando para agregar la configuración de las variables de entorno al final del archivo
~/.bashrc.# Replace YOUR_ACCESS_KEY_ID with your AccessKey ID. echo "export ALIBABA_CLOUD_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bashrc # Replace YOUR_ACCESS_KEY_SECRET with your AccessKey secret. echo "export ALIBABA_CLOUD_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bashrcTambién puede editar manualmente el archivo
~/.bashrc. -
Ejecute el siguiente comando para aplicar los cambios.
source ~/.bashrc -
Vuelva a abrir una ventana de terminal y ejecute los siguientes comandos para comprobar que las variables de entorno estén configuradas. Reinicie su IDE antes de usar el SDK.
echo $ALIBABA_CLOUD_ACCESS_KEY_ID echo $ALIBABA_CLOUD_ACCESS_KEY_SECRET
Temporary
Siga estos pasos para establecer una variable de entorno únicamente en la sesión actual.
-
Ejecute los siguientes comandos.
# Replace YOUR_ACCESS_KEY_ID with your AccessKey ID. export ALIBABA_CLOUD_ACCESS_KEY_ID="YOUR_ACCESS_KEY_ID" # Replace YOUR_ACCESS_KEY_SECRET with your AccessKey secret. export ALIBABA_CLOUD_ACCESS_KEY_SECRET="YOUR_ACCESS_KEY_SECRET" -
Ejecute los siguientes comandos para comprobar que las variables de entorno estén configuradas.
echo $ALIBABA_CLOUD_ACCESS_KEY_ID echo $ALIBABA_CLOUD_ACCESS_KEY_SECRET
macOS
Permanent
Para establecer una variable de entorno que persista en todas las sesiones nuevas del usuario actual, agregue la variable al archivo de inicio de su shell.
-
Ejecute el siguiente comando en una terminal para comprobar el tipo de shell predeterminado.
echo $SHELL -
Siga los pasos correspondientes según el tipo de shell predeterminado.
Zsh
-
Ejecute el siguiente comando para agregar la configuración de las variables de entorno al final del archivo
~/.zshrc.# Replace YOUR_ACCESS_KEY_ID with your AccessKey ID. echo "export ALIBABA_CLOUD_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.zshrc # Replace YOUR_ACCESS_KEY_SECRET with your AccessKey secret. echo "export ALIBABA_CLOUD_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.zshrcTambién puede editar manualmente el archivo
~/.zshrc. -
Ejecute el siguiente comando para aplicar los cambios.
source ~/.zshrc -
Vuelva a abrir una ventana de terminal y ejecute los siguientes comandos para comprobar que las variables de entorno estén configuradas.
echo $ALIBABA_CLOUD_ACCESS_KEY_ID echo $ALIBABA_CLOUD_ACCESS_KEY_SECRET
Bash
-
Ejecute el siguiente comando para agregar la configuración de las variables de entorno al final del archivo
~/.bash_profile.# Replace YOUR_ACCESS_KEY_ID with your AccessKey ID. echo "export ALIBABA_CLOUD_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bash_profile # Replace YOUR_ACCESS_KEY_SECRET with your AccessKey secret. echo "export ALIBABA_CLOUD_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bash_profileTambién puede editar manualmente el archivo
~/.bash_profile. -
Ejecute el siguiente comando para aplicar los cambios.
source ~/.bash_profile -
Vuelva a abrir una ventana de terminal y ejecute los siguientes comandos para comprobar que las variables de entorno estén configuradas.
echo $ALIBABA_CLOUD_ACCESS_KEY_ID echo $ALIBABA_CLOUD_ACCESS_KEY_SECRET
-
Temporary
Siga estos pasos para establecer una variable de entorno únicamente en la sesión actual.
Los siguientes comandos funcionan tanto para Zsh como para Bash.
-
Ejecute los siguientes comandos.
# Replace YOUR_ACCESS_KEY_ID with your AccessKey ID. export ALIBABA_CLOUD_ACCESS_KEY_ID="YOUR_ACCESS_KEY_ID" # Replace YOUR_ACCESS_KEY_SECRET with your AccessKey secret. export ALIBABA_CLOUD_ACCESS_KEY_SECRET="YOUR_ACCESS_KEY_SECRET" -
Ejecute los siguientes comandos para comprobar que las variables de entorno estén configuradas.
echo $ALIBABA_CLOUD_ACCESS_KEY_ID echo $ALIBABA_CLOUD_ACCESS_KEY_SECRET
Después de modificar las variables de entorno, reinicie o actualice su entorno de compilación y ejecución. De esta manera, aplicaciones como IDE, interfaces de línea de comandos y servicios en segundo plano cargarán las nuevas variables.
Instale el SDK
Esta guía proporciona ejemplos para Java. Para otros lenguajes, consulte SDK reference.
-
Asegúrese de tener instalado Java 8 o una versión posterior.
Entorno de Java
-
Instale el SDK al agregar la siguiente dependencia de Maven. Reemplace
the-latest-versioncon el número de versión más reciente.<dependency> <groupId>com.aliyun</groupId> <artifactId>dysmsapi20180501</artifactId> <!-- Replace 'the-latest-version' with the latest version number: https://mvnrepository.com/artifact/com.aliyun/dysmsapi20180501 --> <version>the-latest-version</version> </dependency>
Use el SDK
1. Inicialice el cliente
El SDK de Alibaba Cloud admite inicializar el cliente con diversas credenciales, como un AccessKey o un token de STS. Para obtener más información, consulte Manage credentials. Este tema usa un AccessKey como ejemplo.
package com.aliyun.sample;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.dysmsapi20180501.Client;
public class Sample {
public static Client createClient() throws Exception {
Config config = new Config()
// Configure the AccessKey ID. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is configured in your runtime environment.
.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
// Configure the AccessKey secret. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is configured in your runtime environment.
.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
// The System.getenv() method retrieves a system environment variable. Do not hard-code your AccessKey credentials in the code.
// Configure the endpoint.
config.endpoint = "dysmsapi.ap-southeast-1.aliyuncs.com";
return new Client(config);
}
}
2. Construya el objeto de solicitud
Cree la solicitud de API y establezca los parámetros según sus necesidades.
Convención de nombres del objeto de solicitud: {APIName}Request. Por ejemplo, el objeto de solicitud para la API SendMessageToGlobe es SendMessageToGlobeRequest.
SendMessageToGlobeRequest sendSmsRequest = new SendMessageToGlobeRequest()
.setTo("<YOUR_VALUE>")
.setMessage("<YOUR_VALUE>");
3. Envíe la solicitud
Use la API SendMessageToGlobe para enviar una solicitud de API.
Convención de nombres del objeto de respuesta: {API name}Response. Por ejemplo, el objeto de respuesta para la API SendMessageToGlobe es SendMessageToGlobeResponse.
SendMessageToGlobeResponse sendSmsResponse = client.sendMessageToGlobe(sendSmsRequest);
También puede configurar otros parámetros de solicitud. Para obtener más información, consulte Initiate an API request.
Para conocer la configuración de tiempos de espera y reintentos, consulte Configure a timeout period y Configure a retry mechanism.
Para obtener información sobre los tipos de excepciones del SDK y su manejo, consulte Exception handling.
Ejemplo de código
La salida es similar a la siguiente:
{
"headers": {
"date": "Tue, 24 Oct 2023 07:47:17 GMT",
"content-type": "application/json;charset=utf-8",
"content-length": "263",
"connection": "keep-alive",
"keep-alive": "timeout=25",
"access-control-allow-origin": "*",
"access-control-expose-headers": "*",
"x-acs-request-id": "97B1D7B6-F2F6-3A50-97BC-A90B43EC962F",
"x-acs-trace-id": "29c11fe4c778b74774d5f5602f0e7975",
"etag": "2a+mcDRTDkXqx9VF7b6U57Q3"
},
"statusCode": 200,
"body": {
"ResponseCode": "OK",
"NumberDetail": {
"Region": "Taiwan",
"Country": "Taiwan, Province of China",
"Carrier": "FarEasTone"
},
"RequestId": "97B1D7B6-F2F6-3A50-97BC-A90B43EC962F",
"Segments": "1",
"ResponseDescription": "OK",
"To": "88691567****",
"MessageId": "191921698133637273"
}
}
Códigos de error de la API
Para obtener más información, consulte Error codes for international messages.
Costos y riesgos
Desglose de costos: el servicio de SMS se factura por mensaje y el precio varía según el país o la región. Para consultar los precios detallados, vea billing.
-
Riesgos principales:
Filtración de credenciales: un AccessKey filtrado puede comprometer todos los recursos de su cuenta, lo que genera cargos inesperados o extorsiones. En casos graves, su uso indebido también puede afectar a Alibaba Cloud o a otros usuarios. Para más detalles, consulte Handle leaked AccessKeys.
Cumplimiento de contenido: debe asegurarse de que el contenido enviado cumpla con las leyes y regulaciones del país o la región de destino. El incumplimiento puede provocar el bloqueo de mensajes o la suspensión de la cuenta.
Contenido relacionado
Depure las llamadas a la API en OpenAPI Explorer.
Use la operación BatchSendMessageToGlobe para enviar mensajes SMS por lotes.
Encuentre más casos de uso de Short Message Service en SDK examples.
Consulte las estadísticas de mensajes en el panel de control.