# メッセージを送信する

作成したボットは、任意のタイミングでユーザーにメッセージを送信したり、ユーザーからのメッセージに対して、応答メッセージで返信したりできます。また、さまざまなタイプのメッセージを利用できます。

dummy dummy
送信方法
  • 応答メッセージ
  • プッシュメッセージ(1対1)
  • マルチキャストメッセージ(1対多:ユーザーID指定)
  • ナローキャストメッセージ(1対多:絞り込み配信)
  • ブロードキャストメッセージ(1対多:すべての友だち)
メッセージタイプ
  • テキストメッセージ
  • スタンプメッセージ
  • 画像メッセージ
  • 動画メッセージ
  • 音声メッセージ
  • 位置情報メッセージ
  • イメージマップメッセージ
  • テンプレートメッセージ
  • Flex Message
メッセージタイプについて詳しくは、「メッセージタイプ」を参照してください。

# メッセージの送信方法

Messaging APIでは、大きく分けて2種類の送信方法を利用できます。

# ユーザーからのメッセージやアクションに応答する(応答メッセージ)

応答メッセージは、ユーザーがLINE公式アカウントを友だち追加したり、LINE公式アカウントにメッセージを送ったりしたときに、LINE公式アカウントがユーザーにメッセージで応答する場合に使用します。

ボディには、Webhookイベントに含まれている応答トークンを指定します。1回のリクエストでメッセージオブジェクトを最大5つまで送信できます。

リクエストの例

curl -v -X POST https://api.line.me/v2/bot/message/reply \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer {channel access token}' \
-d '{
    "replyToken":"nHuyWiB7yP5Zw52FIkcQobQuGDXCTA",
    "messages":[
        {
            "type":"text",
            "text":"Hello, user"
        },
        {
            "type":"text",
            "text":"May I help you?"
        }
    ]
}'

詳しくは、『Messaging APIリファレンス』の「応答メッセージを送る」を参照してください。

# 任意のタイミングでメッセージを送信する

以下のいずれかの方法で、任意のタイミングでユーザーにメッセージを送信できます。

送信方法 説明
プッシュメッセージ ユーザー、グループ、トークルームを指定してメッセージを送信します。たとえば、ショッピングサイトで商品を購入したユーザーに対して、商品の発送を通知する場合に使用します。
マルチキャストメッセージ 複数のユーザーに対して、同じメッセージを効率よく送信します。たとえば、ショッピングサイトを利用したことがあるユーザーに対して、新機能を一斉に通知する場合に使用します。
ナローキャストメッセージ 複数のユーザーに対して、同じメッセージを送信します。送信対象は、属性情報(性別や年齢、OSの種類、地域など)やリターゲティング(オーディエンス)を利用して指定します。
ブロードキャストメッセージ LINE公式アカウントと友だちになっているすべてのユーザーに、同じメッセージを送信します。

1回のリクエストでメッセージオブジェクトを最大5つまで送信できます。

メッセージ通数のカウント方法について

メッセージ通数は、メッセージの送信対象となった人数でカウントされます。たとえばメッセージオブジェクトを4件指定したプッシュメッセージを、5人いるトークルームに対して1回送った場合、カウントされるメッセージ通数は5通です。1回のリクエストで指定したメッセージオブジェクトの件数は、メッセージ通数には影響しません。

またLINE公式アカウントをブロックしているユーザーIDや、存在していないユーザーIDなど、メッセージが実際には届かないユーザーを宛先に指定してメッセージを送信した場合は、メッセージ通数にはカウントされません。

プッシュメッセージのリクエストの例

curl -v -X POST https://api.line.me/v2/bot/message/push \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer {channel access token}' \
-d '{
    "to": "U4af4980629...",
    "messages":[
        {
            "type":"text",
            "text":"Hello, world1"
        },
        {
            "type":"text",
            "text":"Hello, world2"
        }
    ]
}'

# 属性情報やリターゲティングを利用して複数のユーザーに送信する(ナローキャストメッセージ)

複数のユーザーに、任意のタイミングでメッセージを送信します。送信対象は、属性情報(性別や年齢、OSの種類、地域など)やリターゲティング(オーディエンス)を利用して指定できます。グループトークまたは複数人トークにメッセージを送ることはできません。

ナローキャストメッセージは、以下の流れで送信します。

  1. 送信対象を準備する
  2. ナローキャストメッセージの送信を開始する
  3. ナローキャストメッセージの進行状況を確認する
ナローキャストメッセージの送信は非同期で行われます

ナローキャストメッセージは、バックグラウンドで非同期に送信されます。ナローキャストメッセージを送信するリクエストが成功していたとしても、送信開始後に失敗している可能性があります。送信が成功したかどうかは、進行状況を確認してください。

# 送信対象を準備する

送信対象によって、準備する情報が異なります。これらの送信対象は、演算子(AND、OR、NOT)を利用して合成できます。たとえば、「メッセージAを受信したユーザー」または(OR)「メッセージBのURLをクリックしたユーザー」を送信対象にできます。

送信対象 準備する情報
LINE公式アカウントを友だち追加したすべてのユーザー なし
ユーザーIDやIFA(Identifier For Advertisers)で特定できるユーザー
過去に配信したメッセージのURLをクリックしたユーザー クリックリターゲティング用のオーディエンスを作成する
過去に配信したメッセージを開封したユーザー インプレッションリターゲティング用のオーディエンスを作成する
過去に配信したメッセージを受信したユーザー 過去に配信したナローキャストメッセージのリクエストIDを、レシピエントオブジェクトの再配信オブジェクトで指定する
チャットに特定のタグが付いているユーザー LINE Official Account Manager (opens new window)でチャットタグオーディエンスを作成する
特定の経路でLINE公式アカウントを友だち追加したユーザー LINE Official Account Manager (opens new window)で追加経路オーディエンスを作成する
過去に来店予約したユーザー LINE Official Account Manager (opens new window)で予約オーディエンスを作成する
LINE Tagのトラッキング情報で絞り込んだユーザー LINE Official Account Manager (opens new window)LINE広告 (opens new window)でウェブトラフィックオーディエンスを作成する
以前に送信した動画を視聴したユーザー LINE広告 (opens new window)で動画視聴オーディエンスを作成する
アプリ内のイベントに参加したユーザー(アプリを開く、アプリ内で購入するなど) LINE広告 (opens new window)でアプリイベントオーディエンスを作成する
以前に送信した画像をクリックしたユーザー LINE広告 (opens new window)で画像クリックオーディエンスを作成する
注意

チャットタグオーディエンス、追加経路オーディエンス、予約オーディエンス、ウェブトラフィックオーディエンス、アプリイベントオーディエンス、動画視聴オーディエンス、および画像クリックオーディエンスは、Messaging APIでは作成できません。

# オーディエンスが配信に利用できることを確認する

オーディエンスの作成は、バックグラウンドで非同期に行われます。オーディエンスのステータスがREADY(配信に利用可能)になったことを確認してから、ナローキャストメッセージの送信を開始します。

オーディエンスのステータスは、以下のエンドポイントで確認できます。

curl -v -X GET https://api.line.me/v2/bot/audienceGroup/{audienceGroupId} \
-H 'Authorization: Bearer {channel access token}'

レスポンスのstatusプロパティが、READY(配信に利用可能)になっていれば、そのオーディエンスを送信対象に指定して、ナローキャストメッセージの送信を開始できます。

オーディエンスのステータスを確認する方法について詳しくは、『Messaging APIリファレンス』の「オーディエンスの情報を取得する」を参照してください。

# ナローキャストメッセージの送信を開始する

ナローキャストメッセージは、以下のオブジェクトを組み合わせることで、複雑な条件でメッセージの送信対象を指定することができます。

たとえば、2つのオーディエンスどちらにも含まれているユーザーで、15〜20歳以外の女性にのみメッセージを配信するといった複雑な条件も指定できます。

narrowcast message

なお配信可能な上限数を超えてメッセージを送ろうとすると、配信に失敗します。 limit.upToRemainingQuotaプロパティを指定することで、配信可能な上限数の範囲内でメッセージを送信できます。 メッセージを配信可能な上限数については、「Messaging APIの料金」を参照してください。

配信可能なメッセージの上限数について

ナローキャストメッセージを送信するときは、recipientプロパティおよびfilter.demographicプロパティの設定にかかわらず、一時的にすべての友だちにメッセージを配信する前提で、配信予定メッセージ数が計算されます。配信予定メッセージ数が、当月分の上限目安を超えた場合は、ナローキャストメッセージを送信できません。

ただし、limit.maxプロパティで設定した最大送信数が、当月分の上限目安を超えなければ、ナローキャストメッセージを送信できます。

またlimit.upToRemainingQuotaプロパティをtrueにしておくことで、配信予定メッセージ数が、配信可能なメッセージの上限数を超えていてもエラーにはならず、上限数の範囲内で配信されます。ただし、配信可能なメッセージが0件の場合はステータスコード429 Too Many Requestsが返されます。

当月分の上限目安は、「当月に送信できるメッセージ数の上限目安を取得する」エンドポイントで確認できます。

上限目安を設定する方法については、「Messaging APIの料金」を参照してください。

ナローキャストの配信が完了するまでは他のメッセージの送信に失敗する場合があります

ナローキャストの配信時に、実際に配信されるメッセージ通数にかかわらず当月分の上限目安をすべて予約することがあります。上限目安がすべて予約されると、ナローキャストの配信が完了するまでは一時的に上限目安を超過した状態になります。その状態で他のメッセージを送信すると、You have reached your monthly limit.が返されて送信に失敗します。この現象は、以下の2つの条件を満たす場合に発生します。

  • ターゲットリーチの数が当月分の上限目安よりも多い
  • limit.maxプロパティが指定されていない、または当月分の上限目安数より多く設定されている

ナローキャストの配信が完了すると、予約されていたメッセージ通数が解放されメッセージの送信が可能になります。

送信失敗の発生を防ぐためには、ナローキャスト送信時にlimit.maxを上限目安を超過しない数値に設定してください。limit.maxを正しく設定することで、ナローキャスト配信時に予約されるメッセージ通数を制御できます。

limit.maxプロパティおよびlimit.upToRemainingQuotaプロパティの設定と、予約数の関係は下表のとおりです。

limit.max limit.upToRemainingQuota 予約数
未指定 false ターゲットリーチの数
任意の数値 false ターゲットリーチの数と、limit.maxのうちの最小値
未指定 true ターゲットリーチの数と、当月分の上限目安のうちの最小値
任意の数値 true ターゲットリーチの数、当月分の上限目安、limit.maxのうちの最小値

# レシピエントオブジェクト

送信するメッセージ(messagesプロパティ)と、送信対象(レシピエントオブジェクト)を指定してナローキャストメッセージの送信を開始できます。recipientプロパティを省略すると、LINE公式アカウントを友だち追加したすべてのユーザーが送信対象になります。

レシピエントオブジェクトには、オーディエンスオブジェクトもしくは再配信オブジェクトを指定します。

# オーディエンスオブジェクト

audienceGroupIdプロパティにオーディエンスIDを設定して、送信対象を指定します。

オーディエンスを作成するには、「オーディエンス管理」のAPIを使用します。

オーディエンスを表すレシピエントオブジェクトの例

{
    "type": "audience",
    "audienceGroupId": 5614991017776
}
# 再配信オブジェクト

requestIdプロパティに、ナローキャスト配信時に取得したリクエストID(X-Line-Request-Id)を設定することで、そのナローキャストを受信したユーザーを送信対象に指定します。

指定できるリクエストIDにはいくつかの条件があります

以下の条件をすべて満たすリクエストIDを、requestIdプロパティで指定してください。

  • ナローキャストメッセージの配信によって発行されたリクエストIDであること
  • 過去14日間(336時間)未満の配信であること
  • 送信処理が完了していること(「ナローキャストメッセージの進行状況を取得する」で、レスポンスのphaseプロパティの値がsucceededであること)
「送信対象が少なすぎる」というエラーについて

過去に送信したメッセージのリクエストIDを再配信オブジェクトで指定してメッセージを送ろうとしたが、「送信対象が少なすぎたためエラーになりました。」というerrorCodeが返ってきてしまった場合は、次のような原因が考えられます。

  • 前回のメッセージ送信後に、送信対象のユーザーのうち何人かがLINE公式アカウントをブロックしたため、送信対象の人数が減った
  • 演算子オブジェクトのANDやNOTで、他のオーディエンスオブジェクトやデモグラフィックフィルターオブジェクトと組み合わせて条件を絞り込んだ結果、送信対象の人数が減った

送信対象のユーザーの属性を推測できないようにするために、送信対象が一定数よりも少ない場合はナローキャストメッセージを送信できません。詳しくは、『Messaging APIリファレンス』の「属性情報やオーディエンスを利用したメッセージ送信の制限事項」を参照してください。

再配信オブジェクトを表すレシピエントオブジェクトの例

{
    "type": "redelivery",
    "requestId": "5b59509c-c57b-11e9-aa8c-2a2ae2dbcce4"
}

オーディエンスオブジェクトや再配信オブジェクトについて詳しくは、『Messaging APIリファレンス』の「レシピエントオブジェクト」を参照してください。

# デモグラフィックフィルターオブジェクト

デモグラフィックフィルターオブジェクト(filter.demographicプロパティ)を指定すると、友だちの属性情報(性別や年齢、OSの種類、地域など)を使用して、セグメント配信ができます。

属性情報の利用について
  • 属性情報は3日前の属性情報を元に絞込みます。
  • 属性を指定しない場合は、属性が「不明」になっているユーザーを含めた全員に配信されます。

性別を使用してフィルタリングするデモグラフィックフィルターオブジェクトの例

{
    "type": "gender",
    "oneOf": [
        "male",
        "female"
    ]
}

デモグラフィックフィルターオブジェクトについて詳しくは、『Messaging APIリファレンス』の「デモグラフィックフィルターオブジェクト」を参照してください。

# 演算子オブジェクト

演算子オブジェクトの積集合(AND)、和集合(OR)、差集合(NOT)を利用することで、レシピエントオブジェクトおよびデモグラフィックフィルターオブジェクトの複数の条件を組み合わせて送信対象を指定できます。

各演算子オブジェクト(AND、OR、NOT)を利用することで、複数の送信対象が以下のように組み合わされます。

operator object

演算子オブジェクトで条件を組み合わせたレシピエントオブジェクトの例

"recipient": {
    "type": "operator",
    "and": [
        {
            "type": "audience",
            "audienceGroupId": 5614991017776
        },
        {
            "type": "operator",
            "not": {
                "type": "redelivery",
                "requestId": "5b59509c-c57b-11e9-aa8c-2a2ae2dbcce4"
            }
        }
    ]
}
演算子オブジェクトは入れ子(ネスト)構造で送信対象を指定できます

レシピエントオブジェクトおよびデモグラフィックフィルターオブジェクトは、演算子オブジェクトを利用して入れ子(ネスト)構造で送信対象を指定できます。演算子オブジェクトは、ネストの深い階層から優先して適用されます。

以下の例では、送信対象は「AかつBかつEに当てはまるユーザーのうち、CかつDであるユーザーを除くAudienceA AND AudienceB AND NOT (AudienceC AND AudienceD) AND AudienceE)」として解釈されます。

operator object nest sample

{
    "type": "operator",
    "and": [
        {
            "type": "audience",
            "audienceGroupId": AudienceA
        },
        {
            "type": "audience",
            "audienceGroupId": AudienceB
        },
        {
            "type": "operator",
            "not": {
                "type": "operator",
                "and": [
                    {
                       "type": "audience",
                       "audienceGroupId": AudienceC
                    },
                    {
                       "type": "audience",
                       "audienceGroupId": AudienceD
                    },
                 ]
            }
        },
        {
            "type": "audience",
            "audienceGroupId": AudienceE
        },
    ]
}

# ナローキャストメッセージのリクエストの例

以下の条件でナローキャストメッセージを送信する場合のリクエストの例です。

  • オーディエンス(オーディエンスID:5614991017776)のユーザー
  • 過去に配信したナローキャスト(リクエストID:5b59509c-c57b-11e9-aa8c-2a2ae2dbcce4)を受信したユーザーを除外
  • 年齢20〜25歳の男女
  • 秋田県か愛知県在住
  • 友達期間が7日〜30日
  • 年齢35〜40歳の女性(男性を除外)
curl -v -X POST https://api.line.me/v2/bot/message/narrowcast \
-H 'Authorization: Bearer {channel access token}' \
-H 'Content-Type: application/json' \
-d '{
    "messages": [
        {
            "type": "text",
            "text": "test message"
        }
    ],
    "recipient": {
        "type": "operator",
        "and": [
            {
                "type": "audience",
                "audienceGroupId": 5614991017776
            },
            {
                "type": "operator",
                "not": {
                    "type": "redelivery",
                    "requestId": "5b59509c-c57b-11e9-aa8c-2a2ae2dbcce4"
                }
            }
        ]
    },
    "filter": {
        "demographic": {
            "type": "operator",
            "or": [
                {
                    "type": "operator",
                    "and": [
                        {
                            "type": "gender",
                            "oneOf": [
                                "male",
                                "female"
                            ]
                        },
                        {
                            "type": "age",
                            "gte": "age_20",
                            "lt": "age_25"
                        },
                        {
                            "type": "appType",
                            "oneOf": [
                                "android",
                                "ios"
                            ]
                        },
                        {
                            "type": "area",
                            "oneOf": [
                                "jp_23",
                                "jp_05"
                            ]
                        },
                        {
                            "type": "subscriptionPeriod",
                            "gte": "day_7",
                            "lt": "day_30"
                        }
                    ]
                },
                {
                    "type": "operator",
                    "and": [
                        {
                            "type": "age",
                            "gte": "age_35",
                            "lt": "age_40"
                        },
                        {
                            "type": "operator",
                            "not": {
                                "type": "gender",
                                "oneOf": [
                                    "male"
                                ]
                            }
                        }
                    ]
                }
            ]
        }
    },
    "limit": {
        "max": 100,
        "upToRemainingQuota": true
    }
}'

ナローキャストメッセージを送る方法について詳しくは、『Messaging APIリファレンス』の「ナローキャストメッセージを送る」を参照してください。

# ナローキャストメッセージの進行状況を確認する

ナローキャストメッセージは、バックグラウンドで非同期に送信されます。そのため、ナローキャストメッセージが正しく送信できたかどうかを確認するためのエンドポイントがあります。

curl -v -X GET https://api.line.me/v2/bot/message/progress/narrowcast?requestId={request_id} \
-H 'Authorization: Bearer {channel access token}'

ナローキャストメッセージの進行状況を確認する方法について詳しくは、『Messaging APIリファレンス』の「ナローキャストメッセージの進行状況を取得する」を参照してください。

# ナローキャストメッセージの使用制限について

ナローキャストメッセージを使用するには、以下の点に注意してください。

  • 属性情報を利用するには、100人以上のターゲットリーチが必要です。
  • 送信対象が50人以上になるように、オーディエンスと属性情報を組み合わせてください。この基準が満たされない場合は、ナローキャストメッセージを送信できません。ただし、以下の場合は、送信対象が50人未満でも送信できます。
    • 属性情報を利用せずにユーザーIDアップロード用のオーディエンスを使った場合
    • チャットタグオーディエンスを使った場合
  • ナローキャストメッセージを送信するときは、recipientプロパティでオーディエンスオブジェクトと再配信オブジェクトを合計10件まで指定できます。演算子オブジェクトの数に上限はありません。