【AWS】lineにメッセージを送る方法のまとめ(lambdaの使用)
はじめに
こんにちは。
みなさまLineって使ってますか?私はLineを使い始めたのは大学2年くらいの頃でかれこれ10年くらい使っています。
高校の頃、友人や家族と連絡を取ると言ったら、電話以外ですと「メール」が主流でした。
ガラケーでぽちぽちメールをしてたのを思い起こすと懐かしさを感じます。
ガラケーのメールはPOPプロトコルで、携帯端末に保存する仕組みでした。メールの保存上限もあるため、大事なメールは大切に保管して・・・と言ったこともしてましたが、センチメンタルな行動だったたなーと思いキュンキュンします。
話は変わり、今ではそんなメールに変わりコミュニケーションツールの「Line」が主流になってるのかなと思います。
海外事情はよくわかりませんが、私の周りの方と連絡を取ると言ったらこのLineを通じてコミュニケートすることになります。
電話も無料でできちゃうので手放せないですよね。
さて、それなりにLineが普及しているわけですが、そんな中でもこのLineを使っていないユーザもいるかと思います(決して悪いといっているわけではないです!)。
そう言った方とは私のgmailなどのフリーメールに連絡を送ってもらっているわけですが、私はメールをメインにコミュニケートをすることはないので通知を見落としがちです。
→メルマガに埋もれてしまう・・・
そこで、今回はそんなLineをしていない方からにも、私のlineにメッセージを送ることを可能とする仕組みを模索しました。
自身のスキルアップも兼ねAWSなどのサービスを用いることにしましたので、そこで身に付けたことを本記事にまとめようと思います。
作るものの概要
今回は「Line notify」とAWSの「lambda」、「レイヤー」の機能を使用します。
Line notifyで「Line上でメッセージ送信したい相手に対するトークン」を発行し、そのトークンを用いてメッセージを送信するコードをlambdaに実装します。
今回はここまでの機能のみをまとめますが、今後はAWSの「APIゲートウェイ」も利用し、webアプリを通じてlambdaを叩くような仕組みも実装したいと考えてます。
使用する機能一覧
作業手順
Line notify
- トークンの取得
以下、line notifyのサイトにて通知を送りたい相手(グループ、個人)に対して、1対となるトークンを発行する
https://notify-bot.line.me/ja/
★Line notifyは自身のlineアカウント(メールアドレス)にて、ログイン可能
★トークンは外部に公開しないこと!
- テスト
以下、curlコマンドを実行することで、Lineにメッセージを送信する。
curl -X POST -H 'Authorization: Bearer __YOUR_TOKEN__' -F "message=Hello!" https://notify-api.line.me/api/notify
AWS
Lambda
import os import requests # Line Notify ACCESS_TOKEN = os.environ["access_token"] HEADERS = {"Authorization": "Bearer %s" % ACCESS_TOKEN} URL = "https://notify-api.line.me/api/notify" def lambda_handler(event, context): data = {'message': "send_test"} #lineに通知 requests.post(URL, headers=HEADERS, data=data)
レイヤー
- 以下の手順でレイヤーに設定する。
1. 事前に上記のモジュールをダウンロード・zip化する(python環境の構築方法は省略する)
pip install hoge mkdir hoge pip install -t ./hoge hoge zip -r hoge.zip hoge
2. AWS上にて、任意のレイヤーを作成する
3. 2.に1.のzip化したデータをアップロードする(lambdaからimport可能となる)
4. lambdaで作成した関数に対して2.のレイヤーを紐付ける
(AWSのlambdaページを開き)lambda→関数→(自分の作成した関数名)→設定→デザイナー(layers(0)を選択)
上記を選択した後に登場する「レイヤー」フォームにて「レイヤーの追加」を選択し、今回作成したレイヤーを追加する
- 注意事項
レイヤーにアップロードするzipは、以下構造を満たしてないとlambdaからimportできません!
pillow.zip | python/PIL └ python/Pillow-5.3.0.dist-info