[PYTHON] J'ai essayé de faire sonner le téléphone lorsqu'il a été publié sur le poste IoT

Cet article est la suite de Cet article (Introduction à l'IoT).

Essayez de faire sonner le téléphone lorsqu'il est publié sur le poste intelligent IoT

Dans le précédent article IoT, j'ai reçu un e-mail lors de sa publication, mais ici, j'ai essayé d'utiliser la fonction AWS pour faire sonner le téléphone.

Lorsqu'un article de publipostage est détecté à l'aide d'une partie du mécanisme du centre d'appels appelé «Amazon Connect» via AWS serverless «Lambda», un appel est lancé vers le numéro de téléphone spécifié et une notification indiquant que l'article de publipostage est arrivé. Peut maintenant être fait.

Plus précisément, comme le montre la figure ci-dessous, nous créons une fonction pour démarrer une fonction Python sur "Lambda" à partir d'Amazon API Gateway à partir de la carte du micro-ordinateur, nous connecter à Amazon Connect et appeler le numéro de téléphone spécifié. .. L'avantage d'utiliser Amazon Connect est que lorsque le téléphone sonne, la voix synthétique peut lire la chaîne de caractères sur le Python de Lambda comme en japonais. Je ne l'ai pas vu cette fois, mais en rendant dynamique le contenu des paramètres d'ApiGateway, par exemple, il sera possible de dire l'heure de publication par la voix, et il sera possible de réaliser facilement une lecture dynamique à voix haute. ..

IoTポスト_FaaS経由電話で通知.png (60.6 kB)

Le temps nécessaire était d'environ 2 à 3 heures pour vérifier et prendre des captures d'écran de l'état où le compte était défini. Si vous y êtes habitué, cela prendra moins de 30 minutes.

Paramètres d'Amazon Connect

J'ai fait référence à l'article de blog suivant

Créez un mécanisme pour passer un appel avec Amazon Connect pour 4 $ par mois https://dev.classmethod.jp/cloud/aws/amazon-connect-system-alert/#toc-amazon-conenct

Premier,

Créer une instance Amazon Connect https://dev.classmethod.jp/cloud/aws/hello-connect-tokyo-region/#toc-amazon-connect

↑ Tout en regardant cela, effectuez de l'instance de Connect au réglage et au test.

88d67739-299f-43ec-8a30-1534c43c7152.png

746a170f-0104-4076-bda1-cade38615b4b.png

Si vous cochez l'option de téléphonie entrante et obtenez le numéro de téléphone - liez le flux de demande au numéro de téléphone, vous pouvez tester en appelant le numéro de téléphone obtenu. Après le test, décochez l'appel entrant dans les paramètres de l'option Téléphonie.

Paramètres Lambda

Vous pouvez passer un appel depuis Lambda via Python. Ici, j'ai créé une fonction avec le nom iotPost_AmazonConnect.

lambda_function.py


import boto3
import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)

def lambda_handler(event, context):
    logger.info(event)
    logger.info(context)

    connect = boto3.client('connect', region_name='ap-northeast-1')
 
    message = 'Notification de IoT Smart Post. La publication a été détectée. Veuillez sortir l'article envoyé et le vérifier. Merci d'utiliser.'
    logger.info(message)

    response = connect.start_outbound_voice_contact(
        DestinationPhoneNumber='+810000004717',
        ContactFlowId='edf8xxxx-xxxx-xxxx-xxxx-xxxxxxxx16f4',
        InstanceId='e82dxxxx-xxxx-xxxx-xxxx-xxxxxxxx6cf3',
        SourcePhoneNumber='+815000000000',
        Attributes={
            'message': message
        }
    )
    logger.info(response)

b14efede-1f92-4038-83ca-9146de809456.png

Définissez également le rôle de la fonction Lambda.

Ici, nous avons donné à cette fonction toute la puissance d'Amazon Connect (AmazonConnctFullAccess). 0d9215b2-a22e-450f-9cf6-bf47cebd1db3.png

Son ou test 1

Si vous appuyez sur le bouton de test ici et que vous le démarrez avec un json approprié, le téléphone sonnera et la chaîne de caractères spécifiée dans lambda_function.py sera lue à voix haute en japonais.

電話呼び出しイメージ

Configuration de la passerelle API

Comme le montre la figure ci-dessous dans l'article précédent, il s'agit généralement d'une image de l'un en tant que destination de notification d'AWS SNS. 一般的な位置づけ

Cette fois, nous allons appeler la fonction Lambda depuis API Gateway. J'ai pris une capture d'écran ici avec la configuration de la méthode POST, mais je l'ai en fait configurée avec la méthode GET. 56f3c482-1a9f-4949-b8b4-4a7d561378cb.png

Lorsque vous vérifiez la ressource, vous verrez un écran comme la capture d'écran.

Son ou test 2

Lorsque vous cliquez sur le test, le téléphone sonne réellement et vous pouvez entendre l'annonce. 1a3bbdda-f8bb-44b8-bf51-c91a7b4ca749.png

Son ou test 3

↓ Après avoir terminé les paramètres de la passerelle API, vous obtiendrez une URL comme celle-ci, donc lorsque vous y accédez réellement avec la méthode GET, le téléphone sonnera et vous serez averti qu'il a été publié. https://????????????.execute-api.ap-northeast-1.amazonaws.com/public a6714a54-ee6e-44f8-b156-2df363e6f399.png

Modifier l'URL de destination de la notification sur la carte du micro-ordinateur

Après cela, vous pouvez modifier l'URL de destination de la notification de la carte du micro-ordinateur avec Arduino IDE.

Le problème avec le certificat racine est ...

Étant donné que le côté ESP8266 (WiFiClientSecure.h sur Scketch) utilisé cette fois n'inclut pas le certificat serveur (certificat racine) pour AWS SSL, il n'est pas possible de communiquer directement avec ApiGateway par SSL, et http (non-SSL) ) Doit être transféré via un autre serveur ou CloudFront. Si la carte de micro-ordinateur réellement expédiée nécessite une communication cryptée telle que SSL, vous devez faire attention à l'émetteur et à la date d'expiration de ce certificat racine.

C'est tout pour DEMO.

Recommended Posts

J'ai essayé de faire sonner le téléphone lorsqu'il a été publié sur le poste IoT
Lorsque j'ai essayé de changer le mot de passe root avec ansible, je ne pouvais pas y accéder.
Quand j'ai essayé de créer un VPC avec AWS CDK mais que je n'ai pas pu le faire
Dans IPython, quand j'ai essayé de voir la valeur, c'était un générateur, donc je l'ai inventé quand j'étais frustré.
Quand j'ai essayé de faire une communication socket avec Raspberry Pi, le protocole était différent
Ce que j'ai fait quand j'étais en colère de le mettre avec l'option enable-shared
J'ai essayé de faciliter la modification du paramètre du proxy authentifié sur Jupyter
Lorsque j'essaye de créer Apache SSL, cela ne démarre pas.
J'ai essayé de publier automatiquement sur ChatWork au moment du déploiement avec Fabric et ChatWork Api
Quand j'ai essayé d'installer PIL et matplotlib dans un environnement virtualenv, j'en étais accro.
Quand j'ai essayé le concours AtCoder pour débutants, c'était un résultat terrible, alors je regarde en arrière
J'ai essayé de créer un site qui permet de voir facilement les informations mises à jour d'Azure
Le record auquel j'étais accro en mettant MeCab dans Heroku
J'ai essayé de rendre possible l'envoi automatique d'un e-mail en double-cliquant simplement sur l'icône [Python]
Un mémorandum lors de l'acquisition automatique avec du sélénium
J'ai regardé les méta-informations de BigQuery et essayé de les utiliser
J'ai essayé d'enregistrer une station sur la plateforme IoT "Rimotte"
J'ai essayé de créer une application de notification de publication à 2 canaux avec Python
L'histoire selon laquelle le gardien était confiné lorsque le laboratoire a été converti à l'IoT
J'ai essayé de créer un script qui retrace les tweets d'un utilisateur spécifique sur Twitter et enregistre l'image publiée à la fois
J'ai essayé de déplacer le ballon
J'ai essayé d'estimer la section.
[Python] Quand j'ai essayé de créer un outil de décompression avec un fichier zip que je connaissais juste, j'étais accro à sys.exit ()
J'ai essayé de créer un système pour acquérir automatiquement le guide des programmes → l'enregistrer dans le calendrier en un jour
J'ai essayé de rendre possible l'envoi automatique d'un e-mail en double-cliquant simplement sur l'icône [GAS / Python]
zoom J'ai essayé de quantifier le degré d'excitation de l'histoire lors de la conférence
Touches de karaoké assorties ~ J'ai essayé de le mettre sur Laravel ~ <en route>
[Zaif] J'ai essayé de faciliter le commerce de devises virtuelles avec Python
J'ai refactoré "J'ai essayé de faire d'Othello AI lorsque les débutants en programmation ont étudié python"
Machine de jugement de gorille, gorinator! !! J'ai essayé de le faire!
J'ai essayé de reconnaître le mot de réveil
J'ai essayé de résumer la modélisation graphique.
J'ai essayé d'estimer le rapport de circonférence π de manière probabiliste
J'ai essayé de toucher l'API COTOHA
J'ai créé une API Web
J'ai refactoré "J'ai essayé de faire un script qui enregistre les images postées à la fois en retournant sur les tweets d'un utilisateur spécifique sur Twitter".
L'arbre.plot_tree de scikit-learn était très simple et pratique, j'ai donc essayé de résumer comment l'utiliser facilement.
J'ai vérifié si l'API COTOHA pouvait comprendre Mansai, et c'était raisonnable.
D'une manière ou d'une autre, le code que j'ai écrit a fonctionné et j'ai été impressionné, alors je vais le poster
P100-PCIE-16GB a été ajouté au GPU de Google Colab avant que je le sache
Quand j'ai essayé de créer un environnement virtuel avec Python, cela n'a pas fonctionné
Je veux créer un lecteur de musique et enregistrer de la musique en même temps
J'ai essayé d'utiliser Resultoon sur Mac + AVT-C875, mais j'étais frustré en chemin.
J'ai essayé de vérifier le théorème du Big Bang [Est-il sur le point de revenir?]
J'ai essayé de récupérer les données de l'ordinateur portable en le démarrant sur Ubuntu
Je n'ai pas compris le redimensionnement de TensorFlow, alors je l'ai résumé visuellement.
J'ai fait de mon mieux pour créer une fonction d'optimisation, mais cela n'a pas fonctionné.
django geodjango auquel j'ai fait référence quand je suis resté coincé dans le tutoriel (édition)
Notez que j'étais accro à la configuration de TensowFlow
J'ai essayé d'optimiser le séchage du linge
[Introduction à json] Non, j'en étais accro. .. .. ♬
J'ai essayé de sauvegarder les données avec discorde
J'ai essayé de créer OneHotEncoder, qui est souvent utilisé pour l'analyse des données, afin qu'il puisse atteindre l'endroit qui démange.
J'ai essayé d'utiliser PyCaret à la vitesse la plus rapide
J'ai essayé de corriger la forme trapézoïdale de l'image
J'ai essayé de faire de l'IA pour Smash Bra
Qiita Job J'ai essayé d'analyser le travail
LeetCode j'ai essayé de résumer les plus simples