目次
はじめに
こんにちは、ハヤシです。
突然ですが、誕生日なのに誰からもメッセージが届かなくてなんだか寂しい......そんな経験、ありますよね?
今回は、そんな悩みを解消すべくAWSを使って、誕生日にLINEのメッセージを送ってくれる友達を作りました。
LINEのMessaging API作成
LINEで任意のメッセージを送るには、メッセージを送るためのアカウントを作成し
Messaging APIを作成する必要があります。
以下より無料で簡単に作成可能です。
https://developers.line.biz/ja/services/messaging-api/
作成できたらこんなメッセージが送られるはずです。
想定通り動いたら、LINE Developersのコンソールからチャネルアクセストークン(長期)を発行しておきます。
これは後ほど使用するのでメモに取っておきましょう。
Lambda作成
次に、Lambdaを作成します。
と、その前に、メッセージを送る相手(自分)のユーザIDを確認します。
先ほど作成したアカウント宛に適当な文章を送って以下をLambdaで実行すると
CloudWatchのログストリーム内の"userId"に出力されます。
import json
import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)
def lambda_handler(event, context):
logger.info("Received event:")
logger.info(json.dumps(event))
return {
'statusCode': 200,
'body': json.dumps('OK')
}
これで必要な情報が揃いました。
ということで早速Lambdaを設定していきます。
コードは以下のとおりです。
import json
import urllib.request
import html
import boto3
LINE_ACCESS_TOKEN = "xxxxxx" #アクセストークン
LINE_USER_ID = "xxxxxx" #ユーザID
translate_client = boto3.client("translate")
def send_line_message(text):
req = urllib.request.Request(
"https://api.line.me/v2/bot/message/push",
data=json.dumps({
"to": LINE_USER_ID,
"messages": [{"type": "text", "text": text}]
}).encode("utf-8"),
headers={
"Content-Type": "application/json",
"Authorization": f"Bearer {LINE_ACCESS_TOKEN}"
},
method="POST"
)
urllib.request.urlopen(req)
def get_dad_joke():
req = urllib.request.Request(
"https://icanhazdadjoke.com/",
headers={
"Accept": "application/json",
"User-Agent": "Mozilla/5.0"
}
)
with urllib.request.urlopen(req) as res:
data = json.load(res)
return data["joke"]
def translate_text(text):
return translate_client.translate_text(
Text=text,
SourceLanguageCode="en",
TargetLanguageCode="ja"
)["TranslatedText"]
def lambda_handler(event, context):
joke_en = get_dad_joke()
joke_ja = translate_text(joke_en)
send_line_message(f"誕生日おめでとう!🥳\n\n{joke_en}\n\n{joke_ja}")
return {
"statusCode": 200
}
単なるおめでとうメッセージだけだとつまらないので
ランダムにおやじギャグを取得してくれるAPI(https://icanhazdadjoke.com/api) から
おやじギャグをメッセージに追加しました。
また、このAPIは英語で返されるため、Amazon Translateという
AWSの翻訳サービスを使用して英語と同時に日本語訳も送付するようにしました。
テストを実行してみると、想定通りメッセージが送られてきました!
Amazon EventBridgeの設定
あとはEventBridgeでLambdaを誕生日に実行するよう設定してやれば
毎年自動でメッセージが送られるようになりました。
さいごに
これで誕生日を寂しく過ごすこともなくなりました。
LambdaとMessaging APIを組み合わせるだけで簡単にLINEと連携できるので
他にもいろんな面白い使い道がありそうですね。
以上、最後までありがとうございました。
新米エンジニア