Automatizujte připomenutí textových zpráv pomocí Airtable, Twilio Studio a JavaScript

Ve svém posledním příspěvku na blogu na Airtable jsem ukázal, jak odeslat textovou zprávu za méně než jednu minutu bez kódu pomocí aplikace Send SMS Airtable – ale věděli jste, že v Airtable můžete také psát skripty a vytvářet automatizace, které běží v různé intervaly? V tomto příspěvku se naučíte automatizovat textové zprávy z Airtable pomocí Twilio Studio a JavaScriptu.

Předpoklady

  • Účet Twilio – zaregistrujte se zde zdarma a získejte dalších 10 $, pokud upgradujete prostřednictvím tohoto odkazu
  • Vaše SID účtu Twilio a ověřovací token:najdete je v konzole účtu zde
  • SID klíče API a tajný klíč API:vygenerujte je zde
  • Číslo Twilio s možností SMS (tento rychlý start vám pomůže začít)
  • Účet Airtable s tarifem Pro nebo Enterprise – více o zkušební verzi Pro zde

Budete potřebovat klíč Airtable API a základní ID pro přístup k základně z vaší aplikace. Klíč API získáte ze stránky svého účtu. Základní ID získáte z automaticky vygenerované dokumentace API, když kliknete na základnu, kterou chcete použít (Blog Airtable x Twilio pokud používáte kopii základny Airtable tohoto projektu). Můžete jej získat buď z adresy URL, nebo z úvodu sekce.

Nastavte si Twilio Studio Flow

V konzole Twilio Studio vytvořte nový tok aplikace Studio. Až budete požádáni o použití šablony, vyberte od začátku . Nazval jsem to Hydrate . Z knihovny widgetů na plátně Studio přetáhněte Odeslat zprávu widget a připojte jej k Rest API spoušť. Klikněte na widget a nastavte jeho Tělo zprávy konfigurace být

{{trigger.request.parameters.msg}}

--toto bude zpráva, kterou odešleme z Airtable.

Uložte a publikujte svůj tok Airtable a poznamenejte si jeho SID. To lze nalézt vedle každého toku ve vašem seznamu toků.

Nastavte si Airtable

Zkopírujte si tuto připravenou základnu Airtable sem a vyberte Hydr9 tab. Obsahuje Zprávu sloupec obsahující zprávy, které vám připomínají, abyste pili vodu. Zahrnuje také jejich odpovídající Odesláno booleans typu Checkbox. Nejprve se ujistěte, že všechny záznamy zde nemají žádné zaškrtnutí. Po odeslání zprávy bude odpovídající záznam obsahovat zaškrtnutí v poli Odesláno sloupec.

Vytvořte si automatizaci Airtable

Automatizace Airtable „umožňují konfigurovat vlastní pracovní postupy spouštěcí akce přímo ve vaší základně Airtable“, což vám umožňuje automatizovat opakující se úkoly. Další informace o automatizaci v Airtable naleznete na této stránce. Chcete-li začít, klikněte na Automatizace v pravém horním rohu

a poté „Vytvořit vlastní automatizaci“ v části Navrhované automatizace sekce.

Pojmenujte svou automatizaci (něco jako připomenutí hydratace ). U spouštěče, který spustí automatizaci, klikněte na V naplánovanou dobu . Toto spustí automatizaci každých x-počet minut, hodin, dní, týdnů...je to na vás!

Pro účely tohoto kurzu pod Typ intervalu Minuty a pro Načasování vyberte každých 15 minut . Automatizaci můžete spustit třeba 10 minut od aktuálního času.

Přidejte akce do svých automatizací

Po spuštění automatizace Airtable přidáme nějaké akce. Klikněte na Přidat akci .

Nejprve vyberte Najít záznamy k vyhledávání záznamů v naší Airtable base hydr9 zpráv. Vyberte Hydr9 tabulky a poté v části Najít záznamy na základě , zvolte Podmínka kam Odesláno není zaškrtnuto.

Při každém spuštění automatizace prohledá základnu Airtable pro záznamy, které ještě nebyly odeslány. Tuto akci můžete otestovat a uvidíte, že bylo nalezeno šest záznamů odpovídajících této podmínce:

Nyní přidejte další akci – tentokrát je to Spustit skript .

const {AIRTABLE_API_KEY, AIRTABLE_BASE_ID, TWILIO_STUDIO_SID, TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN, TWILIO_PHONE_NUMBER, MY_PHONE_NUMBER, recordsFoundMsgList, numRecordsFound, recordsFoundIds} = input.config();

Pod tímto řádkem udělejme funkci pro vytvoření Studio Execution. Zahrnujeme také pomocnou funkci b2a pomoci s kódováním a dekódováním base64.

const studioCreateExecution = async (payload, twilioStudioSid, twilioAccountSid, twilioAuthToken) => {
    try {
        const basicAuth = b2a(`${twilioAccountSid}:${twilioAuthToken}`);
        const CREATE_EXECUTION_URL = `https://studio.twilio.com/v2/Flows/${twilioStudioSid}/Executions`;
        const result = await fetch(CREATE_EXECUTION_URL, {
            method: 'POST',
            headers: {
                'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
                'Authorization' : `Basic ${basicAuth}`
            },
            body: new URLSearchParams(payload)
        })
        return result.json();
    } catch(e) {
        console.error(e);
        throw e;
    }
}
//Credits: https://gist.github.com/oeon/0ada0457194ebf70ec2428900ba76255
const b2a = (a) => {
  var c, d, e, f, g, h, i, j, o, b = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", k = 0, l = 0, m = "", n = [];
  if (!a) return a;
  do c = a.charCodeAt(k++), d = a.charCodeAt(k++), e = a.charCodeAt(k++), j = c << 16 | d << 8 | e, 
  f = 63 & j >> 18, g = 63 & j >> 12, h = 63 & j >> 6, i = 63 & j, n[l++] = b.charAt(f) + b.charAt(g) + b.charAt(h) + b.charAt(i); while (k < a.length);
  return m = n.join(""), o = a.length % 3, (o ? m.slice(0, o - 3) :m) + "===".slice(o || 3);
}

Dále chceme získat tabulku Airtable (Hydr9 ), zaškrtněte políčko Odesláno a zjistěte, zda tam nejsou nějaké značky zaškrtnutí, a vytvořte pole nazvané recordMsgsentIdArr plné ID záznamů obsahujících zprávy, které posíláme.

let table = base.getTable('Hydr9');
let field = table.getField("Sent");
let query = await table.selectRecordsAsync();
let recordMsgSentIdArr = [];

Poté vytvoříme ovladač() metoda, která obsahuje maso našeho skriptu Airtable. Pokud nejsou nalezeny žádné záznamy, kam Odesláno není v posledním kroku/akci zaškrtnuto (to znamená, že všechny zprávy byly odeslány jednou), resetujeme tabulku tak, aby všechny záznamy v Odeslané jsou nezaškrtnuté.

const driver = async() => {
    console.log(`numRecordsFound ${numRecordsFound}`);
    if(numRecordsFound == 0) {
        for (let record of query.records) {
            table.updateRecordAsync(record, {
            "Sent": false,
        })    
        }
    }

V opačném případě budeme chtít získat první záznam v poli, jehož zprávy ještě nebyly odeslány (toto bude zpráva odeslaná), a vytvořit užitečné zatížení, které se má vrátit. Užitná část obsahuje informace potřebné k odeslání SMS v Twilio:a to telefonní číslo, from Twilio telefonní číslo a zpráva.

 let msg = recordsFoundMsgList.slice(-1); //first in array
    const payload = {
        'To': MY_PHONE_NUMBER,
        'From': TWILIO_PHONE_NUMBER,
        'Parameters': JSON.stringify({
            'msg': msg
        })
    };

Nakonec vezmeme ID odeslaného záznamu a přidáme ho do recordMsgSentIdArr pole, vytvořte Studio Execution a vraťte obě tyto proměnné, aby je bylo možné použít v další automatizační akci Airtable s output.set . Více o výstupu informací v automatizaci Airtable se můžete dozvědět zde.

    let recordMsgSentId = recordsFoundIds.slice(-1); //first in array
    recordMsgSentIdArr.push(recordMsgSentId);

    const result = await studioCreateExecution(payload, TWILIO_STUDIO_SID, TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN);
    output.set('recordMsgSentId', recordMsgSentId);
    output.set('result', JSON.stringify(result));
}
await driver();

Kompletní kód skriptu je níže:

const {AIRTABLE_API_KEY, AIRTABLE_BASE_ID, TWILIO_STUDIO_SID, TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN, TWILIO_PHONE_NUMBER, MY_PHONE_NUMBER, recordsFoundMsgList, numRecordsFound, recordsFoundIds} = input.config();
const studioCreateExecution = async (payload, twilioStudioSid, twilioAccountSid, twilioAuthToken) => {
    try {
        const basicAuth = b2a(`${twilioAccountSid}:${twilioAuthToken}`);
        const CREATE_EXECUTION_URL = `https://studio.twilio.com/v2/Flows/${twilioStudioSid}/Executions`;
        const result = await fetch(CREATE_EXECUTION_URL, {
            method: 'POST',
            headers: {
                'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
                'Authorization' : `Basic ${basicAuth}`
            },
            body: new URLSearchParams(payload)
        })
        return result.json();
    } catch(e) {
        console.error(e);
        throw e;
    }
}
//Credits: https://gist.github.com/oeon/0ada0457194ebf70ec2428900ba76255
const b2a = (a) => {
  var c, d, e, f, g, h, i, j, o, b = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", k = 0, l = 0, m = "", n = [];
  if (!a) return a;
  do c = a.charCodeAt(k++), d = a.charCodeAt(k++), e = a.charCodeAt(k++), j = c << 16 | d << 8 | e, 
  f = 63 & j >> 18, g = 63 & j >> 12, h = 63 & j >> 6, i = 63 & j, n[l++] = b.charAt(f) + b.charAt(g) + b.charAt(h) + b.charAt(i); while (k < a.length);
  return m = n.join(""), o = a.length % 3, (o ? m.slice(0, o - 3) :m) + "===".slice(o || 3);
}
let table = base.getTable('Hydr9');
let field = table.getField("Sent");
let query = await table.selectRecordsAsync();
let recordMsgSentIdArr = [];
const driver = async() => {
    console.log(`numRecordsFound ${numRecordsFound}`);
    if(numRecordsFound == 0) {
        for (let record of query.records) {
            table.updateRecordAsync(record, {
            "Sent": false,
        })    
        }
    }
    let msg = recordsFoundMsgList.slice(-1); //first in array
    const payload = {
        'To': MY_PHONE_NUMBER,
        'From': TWILIO_PHONE_NUMBER,
        'Parameters': JSON.stringify({
            'msg': msg
        })
    };
    let recordMsgSentId = recordsFoundIds.slice(-1); //first in array
    recordMsgSentIdArr.push(recordMsgSentId);

    const result = await studioCreateExecution(payload, TWILIO_STUDIO_SID, TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN);
    output.set('recordMsgSentId', recordMsgSentId);
    output.set('result', JSON.stringify(result));
}
await driver();

Pokud kliknete na modré Test tlačítko v pravém horním rohu, měli byste vidět výstup jako tento obsahující numRecordsFound , recordsFoundMsgList , recordsFoundIds , Výsledek a recordMsgsentId a měli byste také dostat textovou zprávu obsahující první zprávu Záznam bez zaškrtnutí:

To vše je dobré a zábavné – byla odeslána textová zpráva! Co se však stane, když jsou všechny zprávy odeslány a numRecordsFound trefí 0? Níže přidejte další akci Spustit skript typu Aktualizovat záznam>/em>. Vyberte Hydr9 Tabulka a pod Záznam id klikněte na modré tlačítko plus a podle pokynů na obrázku níže vyberte recordMsgSentId .

V části Pole , klikněte na + Vybrat pole následuje Odesláno .

Do pole zadejte true .

Pokud byly všechny zprávy odeslány (každý záznam obsahuje kontrolu), tabulka aktualizuje záznamy tak, že žádná nebude obsahovat kontrolu a automatizace může začít znovu. Nyní byste měli dostávat textové zprávy každých 15 minut nebo dokud nevypnete automatizaci! Frekvenci, ve které automatika běží, můžete samozřejmě změnit.

Preferujete více učení přes video? Podívejte se na tento TikTok shrnující tento tutoriál!

Závěr

Airtable automatizace usnadňují automatizaci akcí a skriptů. Namísto zásahu do Twilio Studio Flow můžete napsat skript pro zásah do TwiML bin nebo Twilio Function a posílat hromadné automatické textové zprávy na více telefonních čísel (místo vstupní proměnné může být telefonní číslo pro text v Základna Airtable, jak je znázorněno v tomto příspěvku na blogu Twilio!) Dejte mi online vědět, co s Airtable a Twilio budujete. Zůstaňte naladěni na další obsah Airtable na blogu Twilio, jako je tento tutoriál o vytváření aplikace pro průzkum pomocí Pythonu nebo o tom, jak používat Airtable jako databázi pro vaši aplikaci Twilio.