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.
J'écrirai le flux général.
Il y a plusieurs étapes, mais à part l'écriture du code Lambda, j'ai juste cliqué sur l'écran.
Tout d'abord, inscrivez-vous sur Twilio.
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.
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é
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.
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. ___
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.
Pour les paramètres AWS SES, les articles suivants seront utiles.
AWS Lambda Ensuite, nous allons créer une fonction Lambda.
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 .
Ensuite, créez une fonction Lambda.
"Créer une fonction Lambda"
Sélectionnez "Fonction vierge"
Dans "Paramètres de déclenchement", spécifiez le compartiment S3 créé lors de la configuration de SES.
Sélectionnez le déclencheur comme S3
Sélectionnez le S3 pré-créé dans "Bucket"
Réglez "Type d'événement" sur "Mettre"
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)
Vérifiez la validité du déclencheur
Réglez chaque élément dans "Paramètres des fonctions".
Entrez le nom de la fonction
Sélectionnez Python 2.7 pour "Runtime"
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.
Entrez les éléments suivants dans les variables d'environnement
Définissez le SID du compte obtenu par Twilio dans "ACCOUNT_SID"
Définissez "AUTH_TOKEN" sur le jeton d'authentification obtenu par Twilio
Définissez le numéro de téléphone que vous souhaitez rappeler "REMIND_TO" (+8190 ******** etc.)
Définissez le numéro de téléphone acheté auprès de Twilio dans "REMIND_FROM" (+8150 ******** etc.)
Spécifiez «Rôle» et «Rôle existant» selon le cas. (Depuis l'accès S3, faites-le à l'avance avec IAM)
Réglez «Timeout» dans «Paramètres détaillés» sur environ 30 secondes.
Créez une fonction
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.
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