LoginSignup
2
1

AWS Lambdaで、LINE Botにローディングアニメーションを表示

Last updated at Posted at 2024-05-13

ローディングアニメーション

Messaging APIに、ローディングアニメーション表示機能が追加されました。

メッセージを送信してから返答が来るまでの間、指定した秒数だけローディングアニメーションが表示されます。また、表示中に返答が来ると自動的に消えます。

loading_animation.gif

実装

既にGASで実装した記事は出ているため、今回は、AWS Lambdaで実装しました。
ローディングアニメーションの部分だけ抜き出すと下記のようになります。

UserIDは環境変数から取得しています。

lambda.py
# LINE Botの設定
line_config = {
    'channelSecret': os.environ['CHANNEL_SECRET'],
    'channelAccessToken': os.environ['CHANNEL_ACCESS_TOKEN'],
}    

# ローディングアニメーション
url_loading = "https://api.line.me/v2/bot/chat/loading/start"
headers_loading = {
    "Content-Type": "application/json",
    "Authorization": f'Bearer {line_config["channelAccessToken"]}'
}
payload_loading = {
    "chatId": UserID,
    "loadingSeconds": 20
}
response = requests.post(url_loading, headers=headers_loading, data=json.dumps(payload_loading)) 

以前書いた記事に、こちらを追加すると下記のようになります。

↓ 以前書いた記事

lambda.py
import os
import json
import boto3
import requests
import csv
import io

# GPTのAPIKEY
OPENAI_API_KEY = os.environ['OPENAI_API_KEY']

# UserID
UserID = os.environ["UserID"]

# AWS Lambdaハンドラー関数
def lambda_handler(event, context):
    
    # LINE Botの設定
    line_config = {
        'channelSecret': os.environ['CHANNEL_SECRET'],
        'channelAccessToken': os.environ['CHANNEL_ACCESS_TOKEN'],
    }    
    
    # ローディングアニメーション
    url_loading = "https://api.line.me/v2/bot/chat/loading/start"
    headers_loading = {
        "Content-Type": "application/json",
        "Authorization": f'Bearer {line_config["channelAccessToken"]}'
    }
    payload_loading = {
        "chatId": UserID,
        "loadingSeconds": 20
    }
    response = requests.post(url_loading, headers=headers_loading, data=json.dumps(payload_loading)) 
        
    # Lambdaクライアントの作成
    lambda_client = boto3.client('lambda')
    
    # S3のバケット名とファイルキーを取得
    bucket_name = 'linebot-text'
    file_key = 'linebot_text.csv'

    # S3オブジェクトを取得
    s3 = boto3.client('s3')
    
    # S3からファイルをダウンロードしてcsvデータを読み取る
    response = s3.get_object(Bucket=bucket_name, Key=file_key)
    data = response['Body'].read().decode('utf-8')

# 以下省略~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    

最後に

実装にそれほど時間はかかりませんでした。
ユーザーがちゃんと送信できていることを確認できますし、返答を待つ時間のストレスを軽減できるのではないかと思います。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1