SMS-Notifications über Google Kalender-Events einrichten

Julia
08.09.2022 0 1:31 min

Was ist sipgate.io?

SMS oder Faxe senden und empfangen, den Anrufverlauf abrufen, Anrufe initiieren und manipulieren – das alles kann sipgate.io! Mit unseren APIs können Sie unsere Telekommunikationsfunktionen flexibel in Ihre Projekte integrieren. Unsere Library und Tutorials unterstützen Sie dabei, Ihre Telefonie möglichst bequem zu gestalten. 

In diesem Tutorial

In diesem Tutorial richten wir die SMS-Benachrichtigung für Ihre Google-Kontakte über die kommenden Google Kalender-Events ein.

📝Anmerkung: Damit Sie erfolgreich alle Teilnehmenden mit einer SMS benachrichtigen können, müssen Sie diese als Google-Kontakte mit einer Rufnummer und einer E-Mail eingespeichert haben.

In diesem Projekt benutzen wir die Funktionalität der sipgate.io REST-API und als Entwicklungsumgebung verwenden wir Google Apps Script. Eine Dokumentation der Funktionen der sipgate.io REST-API finden Sie hier. Den vollständigen Code für dieses Tutorial finden Sie in unserem GitHub.

Step 1: das Projekt aufsetzen

Damit wir unser Projekt lokal erstellen, bearbeiten und aktualisieren können, installieren wir im ersten Schritt mit folgendem Befehl das Tool clasp:

npm install -g clasp

Im nächsten Schritt authentifizieren wir unseren Google Account mit dem Befehl clasp login. Das neue Google Apps Script-Projekt erstellen wir mit clasp create –title SMS-Notification-Service.

Sie können Ihr neues Projekt bei script.google.com sehen und verfolgen. Außerdem können wir jederzeit den lokal geschriebenen Code in das Remote Repository mit dem Befehl clasp push -w schreiben.

Step 2: Personal Access Tokens einrichten

Damit wir unser Projekt ausführen können, speichern wir den sipgate-Token als Skript-Properties im zugehörigen Apps Script Projekt ein. In den Projekt-Einstellungen fügen wir token und tokenID zu Skript-Eigenschaften hinzu und füllen die notwendigen Parameter dazu aus. Der eingerichtete Token soll den Scope session:sms:write haben. Mehr über die Personal Access Tokens können Sie gerne in unserer Dokumentation erfahren.

Im nächsten Schritt führen wir die Funktion smsNotificationService in der Entwicklungsumgebung aus. Unser Skript erstellt automatisch einen neuen Kalender SmsNotification, von dem die Termine und die Teilnehmenden-Liste entnommen werden.

Step 3: Daily Trigger erstellen

Idealerweise soll das Skript jeden Tag automatisch ausgeführt werden. Dazu verwenden wir den sogenannten Trigger bei Google Apps. Um einen neuen Trigger zu erstellen, gehen Sie auf den Trigger-Tab in Ihrer Entwicklungsumgebung und klicken Sie auf „Trigger hinzufügen“. Legen Sie im Menü die Event-Quelle auf „zeitgesteuert“ fest und geben Sie einen Daily Timer mit einem gewünschten Zeitrahmen an. Nachdem Sie diese Einstellung gespeichert haben, wird Ihr Skript automatisch jeden Tag während dieses Zeitraums ausgeführt!

Step 4: Code Walkthrough

Kontakte hinzufügen
Um die SMS-Benachrichtigung der Teilnehmenden zu ermöglichen, fügen wir unsere Kontakte in der Google Contacts App zum Skript hinzu.

📝Anmerkung: Aus Datenschutzgründen wird das Skript nur die Kontakte berücksichtigen, die eine Mail-Adresse und eine Rufnummer mit einem „Mobile“ Label enthalten.

Kalender-Events
Zu diesem Zeitpunkt haben wir bereits das Skript einmal ausgeführt und einen SmsNotification-Kalender erstellt ( Step 2: Personal Access Token einrichten). Jetzt können Sie gerne Ihre Termine oder Events in den Kalender eintragen und Ihre Google-Kontakte über die E-Mail-Adressen dazu einladen. Jede:r Teilnehmende bekommt eine SMS-Erinnerung einen Tag vor dem Termin in den eingestellten Zeitrahmen.
How It Works
In unserer Hauptfunktion smsNotificationService überprüfen wir zuerst, ob der SmsNotification-Kalender existiert. Das erreichen wir mit der Google Calendar App Integration für Google Apps Script. Wenn der Kalender noch nicht vorhanden ist, erstellt das Skript ihn für uns:

function smsNotificationService() {
  const name = "SmsNotification";
​
  if(!calendarExists(name)) {
    CalendarApp.createCalendar(name, {summary : 'All events in this calendar will send a sms notification'});
    console.log(`Created new calendar ${name}`);
  }
  
  ...
​
}
​
function calendarExists(name) {
  const calendars = CalendarApp.getCalendarsByName(name);
  return calendars.length > 0;
}

Anschließend sucht die Funktion calendar.getEventsForDay() nach Kalender-Events für den nächsten Tag im angegebenen Kalender. Von hier an können wir alle Informationen über jedes Event mit der folgenden Funktion getEventInformation(event) abrufen:

  function getEventInformation(event) {
  const emails = event.getGuests();
  const guests = emails.map(mail => ContactsApp.getContact(mail));
  return {
    dateTime: event.getStartTime(),
    recipients: guests
  };
}

Die Funktion verwendet die Integration der Contacts App für Google Apps Script, um die Kontakte abzurufen. Damit durchsuchen wir alle Teilnehmenden für das entsprechende Event und rufen ihre Telefonnummer ab. Allerdings filtert die Funktion automatisch nach Telefonnummern mit dem Label MOBILE_PHONE.

  const eventInformation = getEventInformation(event);
​
eventInformation.recipients.forEach(recipient => {
    const phones = recipient.getPhones();
​
    const mobilePhoneField = phones.find(x => x.getLabel().name() == 'MOBILE_PHONE');
​
    if (mobilePhoneField) {
        sendSMS(eventInformation.dateTime, mobilePhoneField.getPhoneNumber())
    }
});

Jetzt sind wir bereit, die SMS-Benachrichtigung über die anstehenden Events mit sipgate.io zu versenden! Dazu senden wir einfach eine HTTP-POST-Anfrage an die REST-API wie folgt:

  function sendSMS(dateTime, phoneNumber) {
  const date = dateTime.toLocaleDateString("de-DE");
  const time = dateTime.toLocaleTimeString("de-DE").substring(0, 5);
  const message = `Bitte denken Sie an Ihren Termin am ${date} um ${time} Uhr.`;
  
  const options = {
    'method' : 'post',
    'contentType' : 'application/json',
    'payload' : `{ "smsId": "s0", "recipient": "${phoneNumber.replace(/ /g, "")}", "message": "${message}" }`,
    'headers' : {
      'Authorization' : `Basic ${getBase64Token()}`
    },
  };
  const response = UrlFetchApp.fetch('https://api.sipgate.com/v2/sessions/sms', options);
  console.log(`Sent a reminder SMS to ${phoneNumber}`);
}

Troubleshooting

In diesem Abschnitt erwähnen wir die häufigsten Schwierigkeiten, die bei dem Durchlauf dieses Skripts entstehen können. Falls Sie weitere Fragen haben, können Sie uns gerne jederzeit kontaktieren oder einen Kommentar zu dem Tutorial hinterlassen.

Google findet von Teilnehmenden keine Rufnummer

Dies liegt höchstwahrscheinlich daran, dass ein Empfänger nicht als benutzerdefinierter Google-Kontakt hinzugefügt wurde, sondern über andere Quellen, sodass keine mobile Rufnummer von dem Kontakt vorhanden ist.

HTTP-Fehler

400 Fehlerhafte Anfrage (z. B. die Felder von Anfrage-Body sind leer oder enthalten nur Leerzeichen usw.)
401 token und/oder tokenId sind fehlerhaft
402 Ihr Kontostand reicht nicht aus
500 Interner Serverfehler oder unbehandelte fehlerhafte Anfrage

Fazit

In diesem Tutorial haben wir automatische SMS-Erinnerungen über die anstehenden Google Kalender-Events mit der sipgate.io REST-API & Google Apps Script eingerichtet. Sie können unser Beispiel gerne als Grundlage für Ihre Projekte verwenden und an Ihre Ziele beliebig anpassen.

Wenn Sie mehr über die Möglichkeiten unserer sipgate.io-Library erfahren möchten, schauen Sie sich gerne die anderen Tutorials in unserem Blog an.

Keine Kommentare


Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.