Google Apps Script

Google Apps Script es una plataforma de scripts basada en la nube que permite a los usuarios automatizar y ampliar la funcionalidad de las aplicaciones de Google Workspace (como Google Sheets, Google Docs, Google Drive, Gmail y más). Utiliza JavaScript para crear scripts y flujos de trabajo personalizados que pueden automatizar tareas repetitivas, integrarse con otros servicios de Google y crear interfaces de usuario personalizadas. Google Apps Script se puede utilizar para crear flujos de trabajo complejos, como la generación automática de informes, el envío de correos electrónicos personalizados, la actualización de datos en tiempo real o la gestión de archivos en Google Drive. Es especialmente útil para empresas e individuos que desean aumentar la productividad y agilizar tareas sin necesidad de conocimientos extensos de programación. La plataforma también permite la creación de complementos para personalizar aún más las aplicaciones de Google Workspace.

Esta es una colección de fragmentos de código que se pueden ejecutar dentro de Google Apps Script. Los fragmentos son altamente personalizables y pueden ser muy útiles cuando no se dispone de una infraestructura de servidor propia.

Google Calendar

Para cada función, el período de tiempo se puede ajustar cambiando la variable hours. El valor predeterminado es 96.

Enviar SMS

La función SevenCalendarSMS envía un SMS para cada evento que ocurra en el período de tiempo especificado.

function SevenCalendarSMS() {
    const apiKey = 'IHR_API_SCHLÜSSEL'
    const to = 'INSERT_YOUR_RECIPIENT_OF_CHOICE'
    const toPlaceholder = key => `:${key}:`
    const placeholder_id = toPlaceholder('ID')
    const placeholder_time = toPlaceholder('TIME')
    const placeholder_title = toPlaceholder('TITLE')
    const now = new Date()
    const statusTagKey = 'seven_status_sms'
    const statusTagValue = 'ok'
    const textTemplate = 'Google Calendar informs you about the upcoming event {placeholder_title} with ID {placeholder_id} starting at {placeholder_time}.'
    const calendarName = ''
    const delay = ''
    const flash = false
    const foreign_id = ''
    const from = 'GoogleApps'
    const hours = 96 // hours from now until end date
    const label = ''
    const performance_tracking = false
    const calendar = '' === calendarName ?
        CalendarApp.getDefaultCalendar() :
        CalendarApp.getCalendarsByName(calendarName)

    const events = calendar.getEvents(now, new Date(now.getTime() + (hours * 60 * 60 * 1000)))

    for (const event of events) {
        if (statusTagValue === event.getTag(statusTagKey)) continue

        let text = textVorlage
        Object.entries({
            [placeholder_id]: () => event.getId(),
            [placeholder_time]: () => event.getStartTime(),
            [placeholder_title]: () => event.getTitle()
        }).forEach(([k, v]) => text = text.replace(k, v()))

        const payload = {
            from: from,
            text,
            to
        }
        Object.entries({
            delay,
            flash,
            foreign_id,
            from: from,
            label,
            performance_tracking
        }).forEach(([k, v]) => {
            if (false !== v) {
                if (true === v) payload[k] = '1'
                else if ('' !== v) payload[k] = v
            }
        })

        const response = UrlFetchApp.fetch('https://gateway.seven.io/api/sms', {
            headers: {'X-Api-Key': apiKey},
            method: 'post',
            payload
        }).getContentText()

        if (100 !== Number.parseInt(response))
            throw new Error(`Unexpected status code "${response}".`)

        Logger.log(response)

        event.setTag(statusTagKey, statusTagValue)
    }
}

Llamada de voz

La función SevenCalendarVoice realiza una llamada de texto a voz para cada evento en el período de tiempo especificado.

function SevenCalendarVoice() {
    const apiKey = 'IHR_API_SCHLÜSSEL'
    const to = 'INSERT_YOUR_RECIPIENT_OF_CHOICE'
    const toPlaceholder = key => `:${key}:`
    const placeholder_id = toPlaceholder('ID')
    const placeholder_time = toPlaceholder('TIME')
    const placeholder_title = toPlaceholder('TITLE')
    const now = new Date()
    const statusTagKey = 'seven_status_voice'
    const statusTagValue = 'ok'
    const textTemplate = 'Google Calendar informs you about the upcoming event {placeholder_title} with ID {placeholder_id} starting at {placeholder_time}.'
    const calendarName = ''
    const from = '+49179876543210'
    const hours = 96 // hours from now until end date
    const calendar = '' === calendarName ?
        CalendarApp.getDefaultCalendar() :
        CalendarApp.getCalendarsByName(calendarName)
    const events = calendar.getEvents(now, new Date(now.getTime() + (hours * 60 * 60 * 1000)))

    for (const event of events) {
        if (statusTagValue === event.getTag(statusTagKey)) continue

        let text = textTemplate
        Object.entries({
            [placeholder_id]: () => event.getId(),
            [placeholder_time]: () => event.getStartTime(),
            [placeholder_title]: () => event.getTitle()
        }).forEach(([k, v]) => text = text.replace(k, v()))

        const payload = {
            from: from,
            text,
            to
        }

        const response = UrlFetchApp.fetch('https://gateway.seven.io/api/voice', {
            headers: {'X-Api-Key': apiKey},
            method: 'post',
            payload
        }).getContentText()

        Logger.log(response)

        const code = response.split('')[0]
        if ('100' !== code) throw new Error(`Unexpected status code "${code}".`)

        event.setTag(statusTagKey, statusTagValue)
    }
}

Google Contacts

Enviar SMS

La función SevenContactsSMS envía un SMS a todos tus contactos.

function SevenContactsSMS() {
    const apiKey = 'IHR_API_SCHLÜSSEL'
    const toPlaceholder = key => `:${key}:`
    const placeholder_id = toPlaceholder('ID')
    const placeholder_name = toPlaceholder('FULL_NAME')
    const placeholder_notes = toPlaceholder('NOTES')
    const textTemplate = 'Dear {placeholder_name} our new phone number is +4901234567890. Kind regards Phil from seven!'
    const delay = ''
    const flash = false
    const foreign_id = ''
    const from = 'GoogleApps'
    const label = ''
    const performance_tracking = false

    for (const contact of ContactsApp.getContacts()) {
        const phones = contact.getPhones()
        if (!phones.length) continue

        let text = textTemplate
        Object.entries({
            [placeholder_id]: () => contact.getId(),
            [placeholder_name]: () => contact.getFullName(),
            [placeholder_notes]: () => contact.getNotes()
        }).forEach(([k, v]) => text = text.replace(k, v()))

        const payload = {
            from: from,
            text,
            to: (phones.find(p => p.isPrimary()) || phones.shift()).getPhoneNumber()
        }
        Object.entries({
            delay,
            flash,
            foreign_id,
            from: from,
            label,
            performance_tracking
        }).forEach(([k, v]) => {
            if (false !== v) {
                if (true === v) payload[k] = '1'
                else if ('' !== v) payload[k] = v
            }
        })

        const response = UrlFetchApp.fetch('https://gateway.seven.io/api/sms', {
            headers: {'X-Api-Key': apiKey},
            method: 'post',
            payload
        }).getContentText()

        if (100 !== Number.parseInt(response))
            throw new Error(`Unexpected status code "${response}".`)

        Logger.log(response)
    }
}

Llamada de voz

La función SevenContactsVoice realiza una llamada de texto a voz a todos sus contactos.

function SevenContactsVoice() {
    const apiKey = 'IHR_API_SCHLÜSSEL'
    const toPlaceholder = key => `:{key}:`
    const placeholder_id = toPlaceholder('ID')
    const placeholder_name = toPlaceholder('FULL_NAME')
    const placeholder_notes = toPlaceholder('NOTES')
    const textTemplate = `Dear {placeholder_name} our new phone number is +4901234567890. Kind regards Phil from seven!`
    const from = '+49179876543210'

    for (const contact of ContactsApp.getContacts()) {
        const phones = contact.getPhones()
        if (!phones.length) continue

        let text = textTemplate
        Object.entries({
            [placeholder_id]: () => contact.getId(),
            [placeholder_name]: () => contact.getFullName(),
            [placeholder_notes]: () => contact.getNotes()
        }).forEach(([k, v]) => text = text.replace(k, v()))

        const payload = {
            from,
            text,
            to: (phones.find(p => p.isPrimary()) || phones.shift()).getPhoneNumber()
        }

        const response = UrlFetchApp.fetch('https://gateway.seven.io/api/voice', {
            headers: {'X-Api-Key': apiKey},
            method: 'post',
            payload
        }).getContentText()

        Logger.log(response)

        const code = response.split('')[0]
        if ('100' !== code) throw new Error(`Unexpected status code "${code}".`)
    }
}