TECHNOLOGY

Line Messaging APIを使ってテンプレートメッセージを送信してみる

本記事では、Line Messaging APIを使って手軽にリッチコンテンツを送るためのテンプレートメッセージを、Pythonにより送信する方法を解説します。

目次

テンプレートメッセージとは?

テンプレートメッセージは、あらかじめ決まったレイアウト(テンプレート)に、画像・テキスト・ボタンなどを組み合わせて送信できるメッセージ形式です。テンプレートには次の4種類があります。

タイプ概要よく使われる例
ボタンテンプレート画像+テキスト+複数のボタンキャンペーン、クーポン配布
確認テンプレートシンプルな二択(YES/NO)予約確認、設定変更
カルーセルテンプレート複数のカードを横スクロール商品リスト、メニュー一覧
イメージカルーセル複数の画像を横スクロール写真ギャラリー、ビジュアル重視のリスト

テンプレートメッセージは、レイアウトはカスタマイズできませんが、手軽にリッチなUIが作れることや、ボタン付きでユーザー操作を誘導できること、実装が簡単であるという利点があります。

テンプレートメッセージで使用できるアクション

LINE Messaging APIにはアクションが定義されています。アクションは、ユーザーがボタンや画像などをタップしたときに発生する動作のことです。例えば、ユーザーがボタンを押したときに、外部リンクを開く場合に、この「外部リンクを開く」という動作がアクションになります。主なアクションを以下に示します。

アクション名アクション
タイプ
説明テンプレート
メッセージ対応
MessageAction(メッセージアクション)messageテキストを送信する可能
URIAction(URIアクション)uri外部URLにジャンプする可能
PostbackAction(ポストバックアクション)postbackサーバーにデータだけ送る(画面に表示されない)可能
DatetimePickerAction(日時選択アクション)datetimepicker日付・時間の選択UIを開く可能
LocationAction(位置情報アクション)location位置情報の送信画面を開く不可
CameraAction(カメラアクション)cameraカメラを起動する不可
CameraRollAction(カメラロールアクション)cameraRoll画像ライブラリを開く不可

LocationActionは配送先登録、店舗検索、CameraActionは写真投稿や身分証確認など、CameraRollActionは写真付きアンケート、レビュー投稿などが用途として考えられます。これらはテンプレートメッセージでは使用できませんが、Flex Messageでは使用できる場合があります。

これらの7つのアクションのうち、MessageActionURIAction以外はWebhookのエンドポイントがサーバー側に必要になります。

本記事では、テンプレートメッセージの概要と送信方法を解説することが目的のため、この2つのアクションを使用することにします。

Channel Access Tokenの取得方法

メッセージを送信するには、Channel Access TokenとユーザーIDが必要になります。

LINE DevelopersのコンソールでChannel Access Tokenを取得する方法や開発者用のユーザーIDの取得方法はこちらの記事をご参照ください。

参考記事

LINE Messaging APIを使ってスマホにLine通知を送信してみる

2025/4/20    ,

本記事では、LINEから提供されているメッセージの自動応答を行うためのLINE Messaging APIを使用して、ユーザーアカウントにLINE通知を送信する方法をご紹介します。具体的には、Pythonを使ってLINE Botを作成し、自分のLINEアカウントにメッセージを送信します。そのために、公式アカウントの作成方法やMessaging APIの設定手順や、push_message() の使い方を説明します。

パッケージのインストール

PythonでLINE Messaging APIを使用する場合には、次のパッケージをインストールします。

pip install line-bot-sdk

ボタンテンプレート

ボタンテンプレートは、LINEのMessaging APIを使って送信できる「画像やテキストと一緒に、複数のボタンを組み合わせたメッセージ」のことです。

メッセージの構造

(上から順に)

  • 画像
  • タイトル
  • 本文テキスト
  • ボタン(最大4つ)

例えば、次のようなラインメッセージを送ることができます。

ボタンテンプレートでメッセージを送る場合のPythonスクリプトは、次のようなフォーマットになります。LINEチャンネルアクセストークンと送信したいユーザーIDは、適切なものに変更してください。

from linebot import LineBotApi
from linebot.models import (
    TemplateSendMessage, ButtonsTemplate,
    MessageAction, URIAction
)

# LINEチャネルアクセストークンを設定する
LINE_ACCESS_TOKEN = 'YOUR_CHANNEL_ACCESS_TOKEN'
line_bot_api = LineBotApi(LINE_ACCESS_TOKEN)

# 送信したいユーザーのID
USER_ID = 'Uxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'

# ボタンテンプレートの作成(全パラメータ指定)
buttons_template = ButtonsTemplate(
    thumbnail_image_url='https://picsum.photos/600/400?grayscale', # サムネイル画像のURL
    image_aspect_ratio='square', # 'rectangle' or 'square'
    image_size='contain', # 'cover' or 'contain'
    image_background_color='#DDDDDD', # 背景色(例:グレー)
    title='新商品のお知らせ', # 上部タイトル(省略可)
    text='この商品はいかがですか?', # 本文(必須)
    default_action=URIAction( # 画像をタップした時の動作
        label='詳細を見る',
        uri='https://google.com/'
    ),
    actions=[ # ボタン(最大4つ)
        MessageAction(
            label='購入する',
            text='この商品を購入します'
        ),
        URIAction(
            label='詳細を見る',
            uri='https://google.com/'
        )
    ]
)

# テンプレートメッセージとしてラップして送信
template_message = TemplateSendMessage(
    alt_text='新商品のご案内', # 代替テキスト。古い端末などのメッセージが表示されない環境用に必須
    template=buttons_template
)

# メッセージを送信
line_bot_api.push_message(USER_ID, template_message)
オプション説明必須/
任意
thumbnail_image_url画像のURL(最大文字数:2000)を入力します。プロトコルはHTTPS(TLS1.2以降)で、画像フォーマットはJPEGまたはPNGです。最大横幅サイズは1024pxで、最大ファイルサイズは10MBです。任意
image_aspect_ratio画像のアスペクト比としてrectangle(デフォルト)またはsquareを指定します(rectangle = 1.51:1、square = 1:1)任意
image_size画像の表示形式として、cover(デフォルト)またはcontainを指定します。coverは画像領域全体に画像を表示します。画像領域に収まらない部分は切り詰められます。containは画像領域全体に画像全体を表示します。縦長の画像では左右に、横長の画像では上下に余白ができます。任意
image_background_color画像の背景色でRGB値で設定します。デフォルトは#FFFFFF(白)です。任意
titleタイトルに表示する文字列です。最大文字数は40です。任意
text本文のテキストです。画像もタイトルも指定しない場合は最大160文字、そうでない場合は最大60文字です。必須
default_action画像、タイトル、テキストの領域全体に対して設定できる、タップされたときのアクションを設定します。任意
actionsタップされたときのアクションを設定します(最大4件)必須

確認テンプレート

確認テンプレートは、LineのMessaging APIで使えるテンプレートメッセージの1つで、「はい/いいえ」のような、シンプルな2択の質問をユーザーに投げかけたいときに使われます。

メッセージの構造

(上から順に)

  • メッセージ
  • 2つのボタン

例えば、次のようなラインメッセージを送ることができます。

確認テンプレートでメッセージを送る場合のPythonスクリプトは、次のようなフォーマットになります。LINEチャンネルアクセストークンと送信したいユーザーIDは、適切なものに変更してください。

from linebot import LineBotApi
from linebot.models import (
    TemplateSendMessage, ConfirmTemplate,
    MessageAction
)

# LINEチャネルアクセストークンを設定する
LINE_ACCESS_TOKEN = 'YOUR_CHANNEL_ACCESS_TOKEN'
line_bot_api = LineBotApi(LINE_ACCESS_TOKEN)

# 送信したいユーザーのID
USER_ID = 'Uxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'

# 確認テンプレートの作成
confirm_template = ConfirmTemplate(
    text='この商品を購入しますか?',
    actions=[
        MessageAction(label='はい', text='はいと答えました'),
        MessageAction(label='いいえ', text='キャンセルしました')
    ]
)

# テンプレートメッセージとしてラップ
template_message = TemplateSendMessage(
    alt_text='商品の購入確認',
    template=confirm_template
)

# メッセージを送信
line_bot_api.push_message(USER_ID, template_message)
オプション説明必須/
任意
textメッセージのテキスト(最大240文字)必須
actionsタップされたときのアクション(2つのボタンに1つずつアクションを設定します)必須

カルーセルテンプレート

カルーセルテンプレートは、LINE Messaging APIで使えるテンプレートメッセージの一種で、複数のカード(アイテム)を横にスライドして表示できるUIです。それぞれのカードは次のような構成になっています。

カードの構成

(上から順に)

  • 画像
  • タイトル
  • 本文テキスト
  • 複数のボタン

ユーザーはカードを指でスライド(横スクロール)して、興味のあるものを選んでボタンをタップします。例えば、次のようなラインメッセージを送ることができます。

カルーセルテンプレートでメッセージを送る場合のPythonスクリプトは、次のようなフォーマットになります。LINEチャンネルアクセストークンと送信したいユーザーIDは、適切なものに変更してください。

from linebot import LineBotApi
from linebot.models import (
    TemplateSendMessage, CarouselTemplate, CarouselColumn,
    MessageAction, URIAction
)

# LINEチャネルアクセストークンを設定する
LINE_ACCESS_TOKEN = 'YOUR_CHANNEL_ACCESS_TOKEN'
line_bot_api = LineBotApi(LINE_ACCESS_TOKEN)

# 送信したいユーザーのID
USER_ID = 'Uxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'

# カルーセルのカラム(動物画像なし)
carousel_columns = [
    CarouselColumn(
        thumbnail_image_url='https://picsum.photos/id/1011/600/400',  # 街の風景
        image_background_color='#FFFFFF',
        title='都市の風景',
        text='この街は近代建築と自然が融合しています。',
        default_action=URIAction(
            label='詳細を見る',
            uri='https://google.com'
        ),
        actions=[
            MessageAction(label='気になる', text='都市の風景が気になります'),
            URIAction(label='もっと見る', uri='https://google.com')
        ]
    ),
    CarouselColumn(
        thumbnail_image_url='https://picsum.photos/id/1008/600/400',  # 建物
        image_background_color='#F5F5F5',
        title='近未来建築',
        text='モダンで洗練されたデザインの建築物です。',
        default_action=URIAction(
            label='詳細を見る',
            uri='https://google.com'
        ),
        actions=[
            MessageAction(label='気になる', text='この建築が気になります'),
            URIAction(label='もっと見る', uri='https://google.com')
        ]
    ),
    CarouselColumn(
        thumbnail_image_url='https://picsum.photos/id/1015/600/400',  # 青空と木
        image_background_color='#E0F7FA',
        title='自然の風景',
        text='空と緑が調和した癒しの風景です。',
        default_action=URIAction(
            label='詳細を見る',
            uri='https://google.com'
        ),
        actions=[
            MessageAction(label='気になる', text='自然の風景が気になります'),
            URIAction(label='もっと見る', uri='https://google.com')
        ]
    ),
]

# カルーセルテンプレートの作成
carousel_template = CarouselTemplate(
    columns=carousel_columns,
    image_aspect_ratio='rectangle',
    image_size='cover'
)

# メッセージとして送信
template_message = TemplateSendMessage(
    alt_text='おすすめの風景・建築一覧',
    template=carousel_template
)

# メッセージ送信
line_bot_api.push_message(USER_ID, template_message)
オプション説明必須/
任意
columnsカラムオブジェクトの配列(最大カラム数は10)必須
image_aspect_ratio画像のアスペクト比としてrectangle(デフォルト)またはsquareを指定します(rectangle = 1.51:1、square = 1:1)。すべてのカラムに適用されます。任意
image_size画像の表示形式として、cover(デフォルト)またはcontainを指定します。coverは画像領域全体に画像を表示します。画像領域に収まらない部分は切り詰められます。containは画像領域全体に画像全体を表示します。縦長の画像では左右に、横長の画像では上下に余白ができます。すべてのカラムに適用されます。任意

カルーセルのカラムオブジェクト(各カード)について次のオプションがある。

オプション説明必須/
任意
thumbnail_image_url画像のURL(最大文字数:2000)を入力します。プロトコルはHTTPS(TLS1.2以降)で、画像フォーマットはJPEGまたはPNGです。最大横幅サイズは1024pxで、最大ファイルサイズは10MBです。アスペクト比は1.51:1任意
image_background_color画像の背景色でRGB値で設定します。デフォルトは#FFFFFF(白)です。任意
titleタイトルに表示する文字列です。最大文字数は40です。任意
text本文のテキストです。画像もタイトルも指定しない場合は最大160文字、そうでない場合は最大60文字です。必須
default_action画像、タイトル、テキストの領域全体に対して設定できる、タップされたときのアクションを設定します。任意
actionsタップされたときのアクションを設定します(最大3件)必須

イメージカルーセル

イメージカルーセルテンプレートは、LINE Messaging APIで使えるテンプレートメッセージの一種で、複数の画像を横にスライドして見せるUI形式です。各画像には、タップしたときに実行されるアクション(リンクを開くなど)が1つずつ設定されています。つまり、「画像1枚=アクション1つ」というシンプルで視覚重視の構成です。

各カラムの構成

画像(アクション付き)

ユーザーは画像を横にスワイプして切り替えることができ、どれか1枚をタップすれば、それぞれに割り当てられたアクションが実行されます。

イメージカルーセルテンプレートでメッセージを送る場合のPythonスクリプトは、次のようなフォーマットになります。LINEチャンネルアクセストークンと送信したいユーザーIDは、適切なものに変更してください。

from linebot import LineBotApi
from linebot.models import (
    TemplateSendMessage, ImageCarouselTemplate, ImageCarouselColumn,
    URIAction
)

# LINEチャネルアクセストークンを設定する
LINE_ACCESS_TOKEN = 'YOUR_CHANNEL_ACCESS_TOKEN'
line_bot_api = LineBotApi(LINE_ACCESS_TOKEN)

# 送信したいユーザーのID
USER_ID = 'Uxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'

# 画像カルーセルのカラム(Picsumから3枚選定)
carousel_columns = [
    ImageCarouselColumn(
        image_url='https://picsum.photos/id/1016/600/400',
        action=URIAction(label='写真を見る', uri='https://google.com')
    ),
    ImageCarouselColumn(
        image_url='https://picsum.photos/id/1019/600/400',
        action=URIAction(label='写真を見る', uri='https://google.com')
    ),
    ImageCarouselColumn(
        image_url='https://picsum.photos/id/1020/600/400',
        action=URIAction(label='写真を見る', uri='https://google.com')
    ),
]

# 画像カルーセルテンプレートの作成
image_carousel_template = ImageCarouselTemplate(columns=carousel_columns)

# メッセージラップ
template_message = TemplateSendMessage(
    alt_text='画像ギャラリー',
    template=image_carousel_template
)

# メッセージ送信
line_bot_api.push_message(USER_ID, template_message)
オプション説明必須/
任意
columnsカラムオブジェクトの配列(最大カラム数は10)必須

画像カルーセルのカラムオブジェクト(各画像)について次のオプションがある。

オプション説明必須/
任意
image_url画像のURL(最大文字数:2000)を入力します。プロトコルはHTTPS(TLS1.2以降)で、画像フォーマットはJPEGまたはPNGです。最大横幅サイズは1024pxで、最大ファイルサイズは10MBです。アスペクト比は1:1必須
action画像がタップされたときのアクション必須

まとめ

本記事では、LINE Messaging APIを使ってテンプレートメッセージを送信する方法について、Pythonを用いた具体的な実装例とともに解説しました。

ボタンテンプレート、確認テンプレート、カルーセル、イメージカルーセルの4種類それぞれに特徴があり、用途に応じて使い分けることで、ユーザーとのリッチな対話が実現できます。

ぜひ自分のサービスやBotに応用して、より魅力的なLINEメッセージを作ってみてください。

-TECHNOLOGY
-,