Esta función envía un fax desde un registro de Zoho Creator a través de la API de RingCentral: se autentica, almacena en caché el token de acceso para que no tenga que volver a autenticarse en cada llamada, extrae un PDF de un informe de Creator y lo envía a RingCentral como una solicitud multipart.
Reconstruido desde cero. El original ya no funciona. Hay dos razones. Primero, el original se autenticaba con grant_type=password ; RingCentral eliminó la concesión de contraseña (ROPC) el 31 de marzo de 2024 , por lo que ese código ahora falla en la primera llamada. Se ha reemplazado por el flujo de portador JWT , que es lo que RingCentral recomienda para integraciones desatendido de servidor a servidor. Segundo, el original no enviaba nada a RingCentral; enviaba la solicitud, incluido el token de portador , a un script PHP de terceros a través de HTTP simple y obtenía el PDF mediante un segundo relé de terceros. Ambos se han eliminado; esta versión llama directamente a RingCentral.
RC_Token con los campos Access_Token (varias líneas), Expiry_Time (fecha y hora), Added_User .creator_oauth_connection .CLIENT_ID , CLIENT_SECRET y el JWT en variables de Creator. Se muestran solo en línea a continuación para que el ejemplo se lea de forma coherente. // ============================================
// FAX DE RINGCENTRAL DESDE ZOHO CREATOR (AUTENTICACIÓN JWT)
// Función independiente. Se puede llamar desde un botón o un flujo de trabajo.
// ============================================
void ringcentral.sendFax(string faxNumber, string coverText, int recordId)
{
// --- Credenciales. Almacenarlas como variables de Creator, no en línea. ---
ID_CLIENTE = "SU_ID_CLIENTE_RINGCENTRAL";
SECRETO_DEL_CLIENTE = "SU_SECRETO_DEL_CLIENTE_DE_RINGCENTRAL";
JWT_CREDENTIAL = "SU_CREDENCIA_JWT_DE_LA_CONSOLA_RC";
API_SERVER = "https://platform.ringcentral.com";
// --- 1. Reutilizar un token almacenado en caché si aún es válido ---
accessToken = "";
cached = RC_Token[ID != null] ordenar por Added_Time descendente rango de 0 a 1;
if(cached.count() > 0 && zoho.currenttime < cached.Expiry_Time)
{
accessToken = cached.Access_Token;
}
demás
{
// --- 2. Flujo de portador JWT. Reemplaza la concesión de contraseña obsoleta. ---
authHeaders = Mapa();
authHeaders.put("Authorization","Basic " + zoho.encryption.base64Encode(CLIENT_ID + ":" + CLIENT_SECRET));
authHeaders.put("Content-Type","application/x-www-form-urlencoded");
authBody = Mapa();
authBody.put("grant_type","urn:ietf:params:oauth:grant-type:jwt-bearer");
authBody.put("aserción",JWT_CREDENTIAL);
authResp = invokeurl
[
URL: API_SERVER + "/restapi/oauth/token"
tipo: POST
parámetros: authBody
encabezados: authHeaders
];
accessToken = authResp.getJSON("access_token");
if(accessToken == null || accessToken == "")
{
info "Error de autenticación de RingCentral: " + authResp.toString();
devolver;
}
expiresIn = authResp.getJSON("expires_in").toLong();
eliminar de RC_Token[ID != null];
insertar en RC_Token
[
Usuario_añadido = zoho.loginuser
Token_de_acceso = token_de_acceso
Tiempo_de_Expiración = zoho.currenttime.addSeconds(expiresIn - 300)
];
}
// --- 3. Obtenga el PDF para enviar por fax, directamente desde Creator ---
Archivo PDF = URL de invocación
[
url: "https://creatorapp.zohopublic.com/TU_CUENTA/TU_APLICACIÓN/reportaje/Facturas/" + recordId + "/pdf"
tipo: GET
conexión: "creator_oauth_connection"
];
// --- 4. Envíe el fax. multipart/form-data, directamente a RingCentral. ---
faxHeaders = Mapa();
faxHeaders.put("Authorization","Bearer " + accessToken);
faxParams = Mapa();
faxParams.put("a",faxNumber);
faxParams.put("faxResolution","High");
faxParams.put("coverIndex",0);
faxParams.put("coverPageText",coverText);
faxResp = invokeurl
[
url: API_SERVER + "/restapi/v1.0/account/~/extension/~/fax"
tipo: POST
parámetros: faxParams
archivos: archivo pdf
encabezados: faxHeaders
];
msgId = faxResp.getJSON("id");
si(msgId != null)
{
info "Fax en cola. ID del mensaje " + msgId + ", estado " + faxResp.getJSON("messageStatus");
}
demás
{
info "Error de fax de RingCentral: " + faxResp.toString();
}
}
RC_Token reutiliza un token hasta cinco minutos antes de su vencimiento.from " no lo configuras tú. RingCentral toma el número de fax de envío de la configuración de fax saliente de la extensión. Incluir un from en la solicitud no tiene ningún efecto.API_SERVER por https://platform.devtest.ringcentral.com durante las pruebas. Los faxes en el entorno de pruebas no se envían ni se facturan. Conviene probarlo antes que confiar en él: el manejo que hace Deluge del parámetro files junto con parameters en una solicitud POST multipart varía según la versión de Creator. Ejecútalo en el entorno de pruebas de RingCentral y lee la respuesta antes de vincularla a un botón de producción. Si tu versión rechaza la combinación, envía el cuerpo JSON y el archivo adjunto como una carga útil multipart/mixed creada manualmente; RingCentral acepta ambas.
Este script forma parte de la biblioteca gratuita Creator Scripts Deluge.
Los 39 scripts de Deluge, el curso completo de Zoho Creator y todos los recursos descargables ahora son gratuitos. Obtén acceso gratuito →