[PYTHON] AWS Lambda + Twilio Machen Sie aus einem Google-Kalender eine Sprachbenachrichtigung zum Anrufen

Verwenden Sie AWS und Twilio, um Sprachbenachrichtigungen über Google-Kalendererinnerungen zu senden

Normalerweise erhalte ich verschiedene Erinnerungsbenachrichtigungen per E-Mail oder Push-Benachrichtigung, aber ich neige dazu, diese zu übersehen. Daher dachte ich, es wäre schön, wenn Sie mich per Sprache über Google-Kalendererinnerungen informieren könnten.

Was Sie im Voraus benötigen, außer AWS-Services

  1. Empfangsadresse (ursprüngliche Domain), die von AWS SES verwendet wird
  2. Twilio-Konto
  3. Kaufgebühr für Telefonnummer und Anrufgebühr (sogenanntes Geld)

Verfassung

Constitution.png

Ich werde den allgemeinen Ablauf schreiben.

  1. Senden Sie eine Erinnerungsmail von Google Kalender an Google Mail
  2. Übertragen Sie von Google Mail an eine andere Adresse (AWS SES)
  3. Die von SES empfangenen Daten werden an S3 übergeben
  4. Lambda zündet vorbehaltlich S3 PUT
  5. Senden Sie Anrufdaten an Twilio
  6. Rufen Sie von Twilio aus den Benutzer an

Es gibt viele Schritte, aber außer dem Schreiben des Lambda-Codes habe ich nur auf den Bildschirm geklickt.

Telefonnummer mit Twilio kaufen (Abrechnung)

Melden Sie sich zunächst unter Twilio an.

Bestätigung von SID und TOKEN

twilio1.png

Wechseln Sie nach der Anmeldung und Anmeldung zum "Konsolen-Dashboard" und notieren Sie sich den Inhalt von "ACCOUNT SID" und "AUTH TOKEN". Dies wird später in der Lambda-Funktion verwendet.

Telefonnummer kaufen

Kaufen Sie dann die Telefonnummer, die Sie für den Anruf benötigen. Sie müssen den Kauf der Telefonnummer in Rechnung stellen, also berechnen Sie die Punkte im Voraus auf der Seite "Abrechnung".

Wechseln Sie nach dem Aufladen der Punkte von "Console Dashboard" zu "Buy a Number". Da wird der Bildschirm zur Suche nach Telefonnummern angezeigt

  1. Wählen Sie "Japan (oder USA)" unter "Land".
  2. Aktivieren Sie "Sprachanruf" unter "Verfügbare Funktionen".
  3. Suchen

In den Suchergebnissen sollte eine Liste der verfügbaren Telefonnummern angezeigt werden. Kaufen Sie also die gewünschte Nummer. twilio2.png

Wenn Sie eine Telefonnummer kaufen, sollte die gekaufte Telefonnummer unter "Telefonnummer" und "Aktive Telefonnummer" angezeigt werden. Diese Nummer wird auch in der Lambda-Funktion verwendet. Denken Sie also daran.

___ * Wenn Sie ein Twilio-Konto haben, erhalten Sie eine Telefonnummer für eine kostenlose Testversion, sodass dies möglicherweise in Ordnung ist. Ich habe so schnell aufgeladen, dass ich nicht sicher bin, wie viel ich kostenlos anrufen kann. ___

Übertragung von Google Kalender zu Google Mail zu SES

Die Benachrichtigungseinstellungen von Google Kalender zu Google Mail sind einfach, daher schreibe ich sie nicht.

Google Mail setzt die Bedingung unter "Einstellungen" -> "Filter und blockierte Adressen" -> "Neuen Filter erstellen" auf "von: ([email protected])" und leitet sie an die folgende Adresse weiter. Es ist in Ordnung, wenn Sie die Übertragungszieladresse mit festlegen.

AWS SES-Einstellungen

Für die AWS SES-Einstellungen sind die folgenden Artikel hilfreich.

AWS Lambda Als nächstes erstellen wir eine Lambda-Funktion.

Code

Schreiben Sie zuerst den Code lokal. $ mkdir voice_reminder
$ cd voice_reminder
$ vim lambda_function.py

lambda_function.py


# -*- coding: utf-8 -*-
import os
import re
import json
import email                                                                                                                                  
import base64
import urllib

import boto3
from twilio.rest import Client                                                                                                                
account_sid = os.environ['ACCOUNT_SID']
auth_token = os.environ['AUTH_TOKEN']

#Legen Sie die Konto-SID und das Authentifizierungstoken auf der Twilio-Kontoseite fest
client = Client(account_sid, auth_token)

s3 = boto3.client('s3')

def lambda_handler(event, context):
    bucket = event['Records'][0]['s3']['bucket']['name']
    key = urllib.unquote_plus(event['Records'][0]['s3']['object']['key']).decode('utf8')

    titleText = None
    timeText = None

    try:
        #Extrahieren Sie die aus Google Mail übertragenen E-Mail-Daten
        response = s3.get_object(Bucket=bucket, Key=key)
        b = email.message_from_string(response['Body'].read())

        titleRegex = re.compile("Titel: (.+)")
        timeRegex = re.compile("Datum (und Uhrzeit: \d{4}/\d{2}/\d{2} \(.+\) (\d{2}\:\d{2}) ~ (\d{2}\:\d{2}) .+")

        if b.is_multipart():
            for payload in b.get_payload():
                line = base64.b64decode(payload.get_payload())

                #Extrahieren Sie den Titel sowie Datum und Uhrzeit des E-Mail-Textes

                title = titleRegex.search(line)
                if title is not None:
                    titleText = title.group(1)

                time = timeRegex.search(line)
                if time is not None:
                    timeText = time.group(1)

    except Exception as e:
        print(e)
        raise e

    if titleText is not None and timeText is not None:
        twiml = "<Response><Pause length='3'/><Say voice='woman' language='ja-jp'>Dies ist eine Erinnerung. heute%Von s%Es gibt einen Zeitplan für s.</Say></Response>" % (timeText, titleText)

        #Text erinnern(TwiML gemacht)Zu Twimlets Echo und rufen Sie die angegebene Telefonnummer an
        call = client.api.account.calls\
                .create(to=os.environ['REMIND_TO'],
                        from_=os.environ['REMIND_FROM'],
                        url="http://twimlets.com/echo?Twiml="+urllib.quote(twiml.encode("utf-8")))
        print(call.sid)

Installieren Sie nach dem Schreiben des Codes das SDK namens twilio-python im selben Verzeichnis wie die Lambda-Funktion.

$ pip install twilio -t /path/to/voice_reminder

Erstellen Sie nach der Installation des SDK eine Zip-Datei.

$ zip -r voice_reminder.zip .

Erstellen Sie eine Lambda-Funktion in AWS

Erstellen Sie als Nächstes eine Lambda-Funktion.

  1. "Erstellen einer Lambda-Funktion"

  2. Wählen Sie "Leere Funktion"

  3. Geben Sie unter "Triggereinstellungen" den S3-Bucket an, der beim Einstellen von SES erstellt wurde. lambda-trigger.png

  4. Wählen Sie den Trigger als S3

  5. Wählen Sie den vorgefertigten S3 in "Bucket"

  6. Setzen Sie "Event Type" auf "Put"

  7. Legen Sie das Präfix fest (wenn das Objektschlüsselpräfix beim Festlegen von SES festgelegt wurde, machen Sie es gleich)

  8. Überprüfen Sie die Gültigkeit des Triggers

  9. Stellen Sie jeden Punkt unter "Funktionseinstellungen" ein. スクリーンショット 2017-04-19 18.35.14.png

  10. Geben Sie den Namen der Funktion ein

  11. Wählen Sie Python 2.7 für "Runtime"

  12. Wählen Sie "ZIP-Datei hochladen" unter "Code-Eintragstyp" und wählen Sie die zuvor erstellte Zip-Datei aus.

  13. Geben Sie die folgenden Elemente in die Umgebungsvariablen ein lambda-env.png

  14. Legen Sie die von Twilio erhaltene Konto-SID in "ACCOUNT_SID" fest.

  15. Setzen Sie "AUTH_TOKEN" auf das von Twilio erhaltene Auth Token

  16. Stellen Sie die Telefonnummer ein, an die Sie "REMIND_TO" erinnern möchten (+8190 ******** usw.)

  17. Stellen Sie die bei Twilio gekaufte Telefonnummer in "REMIND_FROM" ein (+8150 ******** usw.)

  18. Geben Sie gegebenenfalls "Rolle" und "Vorhandene Rolle" an. (Seit dem S3-Zugriff machen Sie es im Voraus mit IAM)

  19. Stellen Sie "Timeout" unter "Detaillierte Einstellungen" auf ca. 30 Sekunden ein.

  20. Erstellen Sie eine Funktion

Legen Sie einen Zeitplan in Google Kalender fest

Legen Sie danach einen Termin in Google Kalender fest und prüfen Sie, ob Twilio eine Spracherinnerung sendet.

Ich werde Google Kalender nicht besonders erläutern, aber Sie können den Benachrichtigungszeitpunkt festlegen, indem Sie "Benachrichtigung bearbeiten" -> "Terminbenachrichtigung" unter "Kalendereinstellungen" auswählen. Stellen Sie daher bitte Ihre Lieblingszeit ein.

abschließend

Als ich Twilio dieses Mal zum ersten Mal berührte, hielt ich es für interessant, es mit einer Architektur ohne Server wie AWS Lambda (jetzt) zu kombinieren.

Recommended Posts

AWS Lambda + Twilio Machen Sie aus einem Google-Kalender eine Sprachbenachrichtigung zum Anrufen
Bilden Sie Lambda-Schichten mit Lambda
Machen Sie mit AWS Lambda und Python gewöhnliche Tweets flottenartig
Betreiben Sie die eingeschränkte Freigabe von Google Kalender mit Lambda (Python) [Cloudpack Osaka]
PyTorch mit AWS Lambda [Lambda-Import]
[AWS] API mit API Gateway + Lambda erstellen
Benachrichtigen Sie HipChat mit AWS Lambda (Python)