[PYTHON] AWS Lambda + Twilio permet aux rappels de Google Agenda d'appeler avec notification vocale

Utilisez AWS et Twilio pour envoyer des notifications vocales des rappels d'agenda Google

Je reçois généralement diverses notifications de rappel par e-mail ou notification push, mais j'ai tendance à l'ignorer, alors j'ai pensé que ce serait bien si vous pouviez me notifier vocalement les rappels du calendrier Google.

Ce dont vous avez besoin à l'avance autre que les services AWS

  1. Adresse de réception (domaine d'origine) utilisée par AWS SES
  2. Compte Twilio
  3. Frais d'achat de numéro de téléphone et frais d'appel (soi-disant argent)

Constitution

Constitution.png

J'écrirai le flux général.

  1. Envoyez un e-mail de rappel de Google Agenda à Gmail
  2. Transfert de Gmail vers une autre adresse (AWS SES)
  3. Les données reçues par SES sont PUT à S3
  4. Lambda s'enflamme sous réserve de S3 PUT
  5. Envoyez les données d'appel à Twilio
  6. Appel de Twilio à l'utilisateur

Il y a plusieurs étapes, mais à part l'écriture du code Lambda, j'ai juste cliqué sur l'écran.

Acheter un numéro de téléphone avec Twilio (facturation)

Tout d'abord, inscrivez-vous sur Twilio.

Confirmation du SID et du TOKEN

twilio1.png

Après vous être inscrit et connecté, accédez au "Tableau de bord de la console" et notez le contenu de "ACCOUNT SID" et "AUTH TOKEN". Cela sera utilisé plus tard dans la fonction Lambda.

Acheter un numéro de téléphone

Ensuite, achetez le numéro de téléphone dont vous avez besoin pour passer l'appel. Vous devez facturer l'achat du numéro de téléphone. Chargez donc les points à l'avance sur la page "Facturation".

Après avoir rechargé les points, passez de «Tableau de bord de la console» à «Acheter un numéro». Puisque l'écran de recherche de numéro de téléphone est affiché

  1. Sélectionnez "Japon (ou États-Unis)" dans "Pays"
  2. Cochez "Appel vocal" dans "Fonctions disponibles"
  3. Rechercher

Vous devriez voir une liste des numéros de téléphone disponibles dans les résultats de recherche, alors achetez le numéro que vous aimez. twilio2.png

Lorsque vous achetez un numéro de téléphone, le numéro de téléphone acheté doit être affiché dans «Numéro de téléphone» et «Numéro de téléphone actif». Ce numéro est également utilisé dans la fonction Lambda, alors gardez-le à l'esprit.

___ * Si vous obtenez un compte Twilio, vous obtiendrez un numéro de téléphone pour un essai gratuit, donc cela peut être bien. J'ai facturé si rapidement que je ne sais pas combien je peux appeler gratuitement. ___

Transférer de Google Agenda à Gmail vers SES

Les paramètres de notification de Google Agenda à Gmail sont faciles, je ne les écrirai donc pas.

Gmail définit la condition sur "de: ([email protected])" dans "Paramètres" -> "Filtres et adresses bloquées" -> "Créer un filtre" et transfère à l'adresse suivante. C'est OK si vous définissez l'adresse de destination du transfert avec.

Paramètres AWS SES

Pour les paramètres AWS SES, les articles suivants seront utiles.

AWS Lambda Ensuite, nous allons créer une fonction Lambda.

code

Tout d'abord, écrivez le code localement. $ 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']

#Définissez le SID du compte et le jeton d'authentification sur la page du compte Twilio
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:
        #Extraire les données de messagerie transférées depuis Gmail
        response = s3.get_object(Bucket=bucket, Key=key)
        b = email.message_from_string(response['Body'].read())

        titleRegex = re.compile("Titre: (.+)")
        timeRegex = re.compile("Date et l'heure: \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())

                #Extraire le titre, la date et l'heure du corps de l'e-mail

                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'>Ceci est un rappel. aujourd'hui%À partir de s%Il existe une annexe pour l'art.</Say></Response>" % (timeText, titleText)

        #Rappeler le texte(Fait TwiML)Vers Twimlets Echo et appelez le numéro de téléphone désigné
        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)

Après avoir écrit le code, installez le SDK appelé twilio-python dans le même répertoire que la fonction Lambda.

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

Après avoir installé le SDK, créez un fichier Zip.

$ zip -r voice_reminder.zip .

Créer une fonction Lambda sur AWS

Ensuite, créez une fonction Lambda.

  1. "Créer une fonction Lambda"

  2. Sélectionnez "Fonction vierge"

  3. Dans "Paramètres de déclenchement", spécifiez le compartiment S3 créé lors de la configuration de SES. lambda-trigger.png

  4. Sélectionnez le déclencheur comme S3

  5. Sélectionnez le S3 pré-créé dans "Bucket"

  6. Réglez "Type d'événement" sur "Mettre"

  7. Définissez le préfixe (si le préfixe de la clé d'objet a été défini lors de la définition de SES, définissez-le de la même manière)

  8. Vérifiez la validité du déclencheur

  9. Réglez chaque élément dans "Paramètres des fonctions". スクリーンショット 2017-04-19 18.35.14.png

  10. Entrez le nom de la fonction

  11. Sélectionnez Python 2.7 pour "Runtime"

  12. Sélectionnez "Télécharger le fichier .ZIP" dans "Type d'entrée de code" et sélectionnez le fichier Zip créé précédemment.

  13. Entrez les éléments suivants dans les variables d'environnement lambda-env.png

  14. Définissez le SID du compte obtenu par Twilio dans "ACCOUNT_SID"

  15. Définissez "AUTH_TOKEN" sur le jeton d'authentification obtenu par Twilio

  16. Définissez le numéro de téléphone que vous souhaitez rappeler "REMIND_TO" (+8190 ******** etc.)

  17. Définissez le numéro de téléphone acheté auprès de Twilio dans "REMIND_FROM" (+8150 ******** etc.)

  18. Spécifiez «Rôle» et «Rôle existant» selon le cas. (Depuis l'accès S3, faites-le à l'avance avec IAM)

  19. Réglez «Timeout» dans «Paramètres détaillés» sur environ 30 secondes.

  20. Créez une fonction

Définir un calendrier dans Google Agenda

Après cela, définissez un rendez-vous dans Google Agenda et vérifiez si Twilio envoie un rappel vocal.

Je n'expliquerai pas Google Agenda en particulier, mais vous pouvez définir le délai de notification en sélectionnant "Modifier la notification" -> "Notification de rendez-vous" dans "Paramètres de l'agenda". Veuillez donc définir votre heure préférée.

en conclusion

Quand j'ai touché Twilio pour la première fois cette fois, j'ai senti qu'il serait intéressant de le combiner avec une architecture sans serveur comme AWS Lambda (maintenant).

Recommended Posts

AWS Lambda + Twilio permet aux rappels de Google Agenda d'appeler avec notification vocale
Créer des couches Lambda avec Lambda
Créez des tweets ordinaires comme une flotte avec AWS Lambda et Python
Utilisez Google Agenda à partage limité avec Lambda (Python) [cloudpack Osaka]
PyTorch avec AWS Lambda [importation Lambda]
[AWS] Créer une API avec API Gateway + Lambda
Notifier HipChat avec AWS Lambda (Python)