Dieses kleine Projekt ist mir zu Silvester 2018 gekommen. Wie jedes Jahr schickt man all seinen Liebsten und Freunden eine Neujahres-SMS. Ganz schön viel Tipperei! Geht das nicht auch einfacher? Mit einer Automatisierung? Viel Zeit hatte ich aber nicht. Welche Lösung kann man in knapp einer Stunde bauen? Wie kann man das nachhaltig gestallten? Was kann ich als Benutzeroberfläche benutzen?
Das Ergebnis ist eine kleine Bastelei aus Google Contacts, Google App-Scripts und Twilio.
Da ich in der knappen Stunde keine Zeit habe, irgendwelche Oberflächen zu bauen, kam ich auf folgende Idee: In Google Contacts gibt es Gruppen. Warum nicht einfach eine Gruppe anlegen, mit den Kontakten, die meine SMS erhalten sollen. Das ging fix. Binnen weniger Minuten hatte ich eine Kontaktliste mit meinen Empfängern erstellt.
Wie setze ich das ganze um? Mit Google App-Scripts gibt es eine Online-Lösung zur schnellen Automatisierung von Prozessen. Man hat direkten Zugriff auf alle Google-Apis und fix Scripte schreiben und ausführen. Um die Nutzerauthentifizierung und die Anbindung der APIS kümmert sich die Laufzeitumgebung.
Automatisierung des SMS-Versands
Wie versende ich die SMS? Zwei Dienste fielen mir gleich ein. Twilio und Sipgate. Es gibt natürlich auch weitere, aber bei den beiden habe ich bereits einen Account. Nach kurzem Blick in die Dokumentation entschied ich mich aufgrund der vorhandenen Codebeispiele für Twilio. Copy paste, fertig!
function sendSMS(number, message){
var accountSid = "{{TWILIO-ACCOUNT SID}}";
var authToken = "{{TWILIO-AUTH-TOKEN}}";
var url = "https://api.twilio.com/2010-04-01/Accounts/" + accountSid + "/Messages.json";
var options = {
method: "post",
headers: {
Authorization: "Basic " + Utilities.base64Encode(accountSid + ":" + authToken)
},
payload: {
To: "+"+number,
MessagingServiceSid: '{{MESSAGESERVICE ID}}',
Body: message
}
};
var response = UrlFetchApp.fetch(url, options);
Logger.log(response);
}
Um seine Kontakte aufzurufen, kann man direkt über App-Scripts auf das Adressbuch des eingeloggten Nutzers (also mir) zugreifen. Meine Gruppe lautet „silvester“. Mit einer Zeile Code sind die Kontakte aus dem Adressbuch gezogen:
function sendGroupSMS() {
var message="Hey [[givenname]]! Ein frohes neues Jahr!";
var contacts=ContactsApp.getContactGroup('silvester').getContacts();
for(var i=0; i<contacts.length; i++){
var contact=contacts[i];
sendSMSToContact(contact, message);
}
}
Senden an Google Kontakte
Da meine Kontakte mehrere Nummern haben, iteriere ich einfach über alle Telefonnummern und sende die SMS nur an Mobilfunknummern. Da ich seit Jahren alle Nummern mit +49 eintrage, brauche ich die Nummer nicht weiter zu modifizieren. Wer den Script nachbaut, sollte das vielleicht noch beachten.
function sendSMSToContact(contact, message){
var numbers=contact.getPhones();
//Ersetzen der Platzhalter
message=message.replace('[[givenname]]', contact.getGivenName());
for(var i=0; i<numbers.length; i++){
//Leerzeichen und alles andere an nicht numerischen Dingen entfernen
var number=numbers[i].getPhoneNumber().replace(/\D/g,'');
//Nur and Handynummern senden
if(number.indexOf("491")===0){
sendSMS(number, message);
}
}
}
Das ging fix. Den Script führe ich direkt über die App-Scripts Console aus. Für eine richtige UI hat die Zeit nicht gereicht.
Ich habe leider erst nach dem Basteln fest gestellt, dass Twilio nicht das verwenden einer externen Rufnummer unterstützt. Man kann SMS nur über die Nummern des Anbieters versenden. Das ist natürlich sau blöd. Weil dann keiner meiner Kontakte weiß, dass die Nachricht von mir kommt.
Die Lösung? Naja, vielleicht einen anderen Anbieter verwenden. Das war für mich den Abend aber nicht mehr drin. Also hab ich kurzerhand die Messaging-Service Funktion genutzt. Damit kann man als Absender einen Alphanumerischen Text übergeben. So habe ich einfach als Absender meinen Namen gesetzt.
Cover-Photo by Vernon Raineil Cenzon on Unsplash
Spannend, eine andere Automatisierung mit Google App Scripts findet ihr hier.