Envía SMS desde Zoho Creator con la API GoTo Connect y Deluge.

Envía mensajes de texto desde Zoho Creator con GoTo Connect (anteriormente LogMeIn Jive).

Dos funciones permiten enviar mensajes de texto desde una aplicación de Zoho Creator mediante GoTo Connect: una mantiene actualizado un token de acceso OAuth y la otra envía el mensaje. Si vinculas la segunda función a un botón, tus usuarios podrán enviar un mensaje de texto a un contacto sin salir de la aplicación.

Actualizado para el cambio de marca de GoTo. LogMeIn se convirtió en GoTo y Jive en GoTo Connect, por lo que el host de mensajería cambió: el original se publicó en api.jive.com/messaging/v1/messages , y el endpoint documentado ahora es api.goto.com/messaging/v1/messages . El antiguo host todavía responde, pero es una infraestructura heredada no documentada sin fecha de cierre publicada; no cree en ella. El host de autenticación no ha cambiado y sigue siendo correcto en authentication.logmeininc.com , lo cual es contraintuitivo pero se confirma con la documentación actual de GoTo. La forma del cuerpo de la solicitud no cambió. Ambas funciones también se han movido de la antigua postUrl() a invokeurl .

Antes de empezar

  • Una aplicación para desarrolladores de GoTo con el ámbito messaging.v1.send y un token de actualización inicial. Empiece en el Centro para desarrolladores de GoTo .
  • Formulario GOTO_Token de un solo registro con Access_Token y Refresh_Token (ambos de varias líneas). Introduzca Refresh_Token manualmente la primera vez.
  • Un formulario que contiene información sobre sus usuarios y sus números de contacto: en este ejemplo, Care_Coordinators con Work_Email y Work_Phone .

Función 1: obtener un token de acceso

 cadena GOTO.getAccessToken()
{
    ID_CLIENTE = "SU_ID_CLIENTE_IGUAL";
    SECRETO_DEL_CLIENTE = "TU_SECRETO_DE_CLIENTE_DE_VENTA";

    almacenado = GOTO_Token[ID != null] ordenar por Added_Time descendente rango de 0 a 1;

    headerMap = Mapa();
    headerMap.put("Authorization","Basic " + zoho.encryption.base64Encode(CLIENT_ID + ":" + CLIENT_SECRET));
    headerMap.put("Content-Type","application/x-www-form-urlencoded");

    bodyMap = Mapa();
    bodyMap.put("grant_type","refresh_token");
    bodyMap.put("refresh_token",stored.Refresh_Token);

    respuesta = invokeurl
    [
        URL: "https://authentication.logmeininc.com/oauth/token"
        tipo: POST
        parámetros: bodyMap
        encabezados: mapa de encabezados
    ];

    accessToken = response.getJSON("access_token");
    refreshToken = response.getJSON("refresh_token");

    if(accessToken == null || accessToken == "")
    {
        info "Error al autenticar GoTo: " + response.toString();
        devolver "";
    }

    almacenado.Access_Token = accessToken;
    // GoTo rota el token de actualización. Manténgalo o la integración fallará al cabo de 30 días.
    if(refreshToken != null && refreshToken != "")
    {
        almacenado.Refresh_Token = refreshToken;
    }
    devolver token de acceso;
} 

Función 2: enviar el mensaje

 void GOTO.sendSMS(string msg, string toPhone)
{
    // El número del remitente proviene del registro del usuario que ha iniciado sesión.
    getUser = Care_Coordinators[Work_Email == zoho.loginuserid];
    if(getUser.count() == 0 || getUser.Work_Phone == null || getUser.Work_Phone == "")
    {
        info "No se ha configurado ningún número de envío para " + zoho.loginuserid;
        devolver;
    }
    fromPhone = "+1" + getUser.Work_Phone.replaceAll("[^0-9]","");

    accessToken = thisapp.GOTO.getAccessToken();
    si(accessToken == "")
    {
        devolver;
    }

    headerMap = Mapa();
    headerMap.put("Authorization","Bearer " + accessToken);
    headerMap.put("Content-Type","application/json");

    contactos = Lista();
    contactos.agregar(alTeléfono);

    carga útil = Mapa();
    payload.put("ownerPhoneNumber",fromPhone);
    payload.put("contactPhoneNumbers",contacts);
    payload.put("body",msg);

    respuesta = invokeurl
    [
        URL: "https://api.goto.com/messaging/v1/messages"
        tipo: POST
        parámetros: payload.toString()
        encabezados: mapa de encabezados
    ];

    info "Respuesta de GoTo SMS: " + response.toString();
} 

La trampa de los 30 días. Los tokens de actualización de GoTo caducan a los 30 días y se renuevan : se recibe uno nuevo en la respuesta y el anterior deja de funcionar. Si no se actualiza el valor, todo funciona perfectamente durante un mes y luego falla silenciosamente. Esta actualización se realiza mediante la línea ` stored.Refresh_Token = refreshToken , y es la línea más importante de la primera función.

Conectándolo a un botón

Abra un formulario sin estado desde un botón de informe para que el usuario pueda redactar el mensaje:

 void Open.txtMessage(int recordId)
{
    openUrl("#Form:TXT_MSG?LID=" + recordId,"ventana emergente");
}

El formulario sin estado recopila el cuerpo del mensaje y llama a thisapp.GOTO.sendSMS(input.Message, input.To_Phone); al enviarlo.

Notas

  • E.164 o nada. Ambos números deben ser +1XXXXXXXXXX . El replaceAll("[^0-9]","") elimina cualquier formato que hayan escrito los usuarios.
  • El número de origen debe pertenecer a tu cuenta de GoTo y estar habilitado para recibir SMS. Un número que solo admita llamadas de voz se autenticará correctamente, pero fallará al enviar el mensaje.
  • Las operadoras estadounidenses exigen el registro 10DLC para la mensajería de aplicación a persona. El tráfico no registrado se filtra, a menudo sin que se muestre ningún error.

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 →