AWS LambdaとDeepSeek APIでLINE botを作る
2025/05/16 (金) - 09:00 Others
LINEのMessaging API&AWS Lambda&DeepSeek APIを組み合わせて自動返信するLINE Botを作成しました。構成は以下とします。LINE Messaging APIからAWS LambdaからDeepSeek APIを通しユーザーと会話するフローです。
LINEのbotを作成するには以下のものが必要です。また、あらかじめDeepSeek PlatformのAPIキーを用意しておきます。
- LINE Developers
- LINE 公式アカウント
LINE Developersの設定
まず、LINE Developersにアクセスし、ログインし開発者アカウントを設定します。LINEアカウントのチャットボットの肝となる「プロバイダー」を作成します。プロバイダーとはLINE開発ツールでサービスを提供する個人・組織のことです。
続いてMessaging APIチャネルの作成します。
LINE公式アカウントの作成
LINE公式アカウントの作成にアクセスし、アカウントを作成します。
チャネル基本設定
- [基本設定]でBOTの名前やアイコンなどを設定します。
- [機能の利用]でグループ・複数人トークへの参加を有無、写真や動画の受け取りの有無を設定します。[写真や動画の受け取り]は基本OFFが良いでしょう。
Messaging APIの設定
Messaging APIの設定はLINE Developersのコンソールから設定します。作ったチャンネルのアイコンをクリックし、[Messaging API設定]の[Webhook設定]からWebhook URLとWebhookの利用の有無を設定。
- [応答機能]のチャットを無効にする
- [Webhook]を有効にし、Messaging APIの設定を開く(後述)
- [応答機能]の応答メッセージを無効にする
- ページ下部にある[チャネルアクセストークン(長期)]を発行し控えておきます
AWS Lambdaの設定
AWS Lambdaにアクセスし新規で関数を作成します。[関数名]は任意の名前に設定し、[ランタイム]は[Python 3.x]を選択します。[アーキテクチャ]は[x86_64]のままにし[関数を作成]を実行します。
次に関数の設定に移動し、[環境変数]であらかじめ控えておいたDeepSeekのAPIキーと、LINEのチャネルアクセストークンを設定しておきます。今回はそれぞれDEEPSEEK_APIKEY
とLINE_ACCESS_TOKEN
という名前でキーを設定しました。
次に[コード]に移動し、Python 3.xとしてコードを実装します。コードの例は下記の通り。またPythonでAPI通信をするためにはrequestsモジュールが必要なのですが、Lambdaでは使えないので適宜レイヤーで追加しておきます。
コードの例
import json
import os
import requests
LINE_ACCESS_TOKEN = os.getenv('LINE_ACCESS_TOKEN')
DEEPSEEK_API_KEY = os.getenv('DEEPSEEK_APIKEY')
LINE_REPLY_API_URL = 'https://api.line.me/v2/bot/message/reply'
DEEPSEEK_API_URL = 'https://api.deepseek.com/chat/completions'
def lambda_handler(event, context):
body = json.loads(event['body'])
for message_event in body.get('events', []):
if message_event['type'] != 'message' or message_event['message']['type'] != 'text':
continue
user_message = message_event['message']['text']
reply_token = message_event['replyToken']
gpt_reply = ask_gpt(user_message)
reply_to_line(reply_token, gpt_reply)
return {
"statusCode": 200,
"body": json.dumps('OK')
}
def ask_gpt(user_input):
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {DEEPSEEK_API_KEY}"
}
data = {
"model": "deepseek-chat",
"messages": [
{"role": "system", "content": """* 日本語で返答してください
* あなたはユーザーのアシスタントです
* ユーザーのことを「センパイ」と呼称します
* ユーザーを慕う後輩のようなキャラクターです
* ユーザーに好意を持ち敬語で話します"""},
{"role": "user", "content": user_input}
]
}
response = requests.post(DEEPSEEK_API_URL, headers=headers, json=data)
response_data = response.json()
if 'choices' in response_data:
return response_data['choices'][0]['message']['content']
else:
return '現在応答できません'
def reply_to_line(reply_token, message_text):
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {LINE_ACCESS_TOKEN}"
}
data = {
"replyToken": reply_token,
"messages": [
{
"type": "text",
"text": message_text
}
]
}
requests.post(LINE_REPLY_API_URL, headers=headers, json=data)
コードを保存してデプロイしたら、Lambdaの[関数の概要]から[関数 URL]をコピーしておきます。
Messaging APIの設定
再びLINE DevelopersのコンソールからMessaging APIの設定にアクセスし、[Webhook URL]に先程作ったLambdaの[関数 URL]のエンドポイントを入力し[更新]を押下します。その後[検証]を押下し正常にレスポンス(200)が返ってくることを確認します。
同じ設定画面にあるQRコードをスマホで読み込み、LINEの友達に追加します。レッツトーク!
にゃるぴにも優秀な後輩アシスタントができました。今回は安価なDeepSeek APIで実装しましたがもちろんGPTのOpenAIのAPIでも構いません。
Messaging APIのプランと値段
Messaging APIはプランによって送信料が変わります。今回は自分用なので無料のコミュニケーションプランで作成しました。Messaging APIの料金は以下ページに掲載されています。
おしまい♥
おすすめ記事
- PC ブラウザ版のYoutubeでピクチャー イン ピクチャー(PiP)を使う
- Gitの.gitignoreに入れてるいつもファイルのメモ
- Grek,Gemini,Claude,GPT,DeepSeekの回答を比較してみた(物語のあらすじ編)
- 自治体Webサイトの災害時・緊急時対策
- プロジェクトが終了したら反省会をやろう
トラックバック & ピンバック
- この記事へのトラックバックURI:
- https://weblog.walk-life.me/lambda_deepseek_linebot/trackback/