ローディングアニメーション
Messaging APIに、ローディングアニメーション表示機能が追加されました。
メッセージを送信してから返答が来るまでの間、指定した秒数だけローディングアニメーションが表示されます。また、表示中に返答が来ると自動的に消えます。
実装
既に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')
# 以下省略~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
最後に
実装にそれほど時間はかかりませんでした。
ユーザーがちゃんと送信できていることを確認できますし、返答を待つ時間のストレスを軽減できるのではないかと思います。