
本記事では、Line Messaging APIを使って手軽にリッチコンテンツを送るためのテンプレートメッセージを、Pythonにより送信する方法を解説します。
目次
- テンプレートメッセージとは?
- テンプレートメッセージで使用できるアクション
- Channel Access Tokenの取得方法
- パッケージのインストール
- ボタンテンプレート
- 確認テンプレート
- カルーセルテンプレート
- イメージカルーセル
- まとめ
テンプレートメッセージとは?
テンプレートメッセージは、あらかじめ決まったレイアウト(テンプレート)に、画像・テキスト・ボタンなどを組み合わせて送信できるメッセージ形式です。テンプレートには次の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つのアクションのうち、MessageAction
とURIAction
以外はWebhookのエンドポイントがサーバー側に必要になります。
本記事では、テンプレートメッセージの概要と送信方法を解説することが目的のため、この2つのアクションを使用することにします。
Channel Access Tokenの取得方法
メッセージを送信するには、Channel Access TokenとユーザーIDが必要になります。
LINE DevelopersのコンソールでChannel Access Tokenを取得する方法や開発者用のユーザーIDの取得方法はこちらの記事をご参照ください。
パッケージのインストール
PythonでLINE Messaging APIを使用する場合には、次のパッケージをインストールします。
pip install line-bot-sdk
ボタンテンプレート
ボタンテンプレートは、LINEのMessaging APIを使って送信できる「画像やテキストと一緒に、複数のボタンを組み合わせたメッセージ」のことです。
例えば、次のようなラインメッセージを送ることができます。
ボタンテンプレートでメッセージを送る場合の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択の質問をユーザーに投げかけたいときに使われます。
例えば、次のようなラインメッセージを送ることができます。
確認テンプレートでメッセージを送る場合の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メッセージを作ってみてください。