# サービスメッセージを送信する

サービスメッセージは、LINEミニアプリ上でのユーザーの操作(アクション)に対する確認や応答として、ユーザーが知っておくべき情報をLINEミニアプリから通知する機能です。 たとえば、ユーザーがLINEミニアプリ上でレストランや宿泊施設を予約した場合、「予約」という1つの操作に対して、予約完了や前日のリマインドといったサービスメッセージを最大5回まで送信できます。

サービスメッセージの送信条件

サービスメッセージは、LINEミニアプリ上でのユーザーの操作(アクション)に対する確認や応答としてのみ送信できます。 値下げ、ショッピング特典、新商品、割引クーポン、プロモーションなどの情報を含む広告やイベントの通知は禁止されています。 サービスメッセージの条件について詳しくは、「サービスメッセージの条件」を参照してください。

LINEミニアプリから送られたサービスメッセージは、LINEミニアプリの種類にかかわらず、LINEミニアプリを提供する地域ごとに決められたトークルームに表示されます。

日本 タイ 台湾
LINEミニアプリ お知らせ LINE MINI App Notice LINE MINI App 通知
LINEミニアプリ お知らせ LINE MINI App Notice LINE MINI App 通知

# サービスメッセージを送信する際の流れ

サービスメッセージを送信するには、サービスメッセージテンプレートとサービス通知トークンが必要です。以下の手順に沿って、送信してください。

  1. LINE Developersコンソールで、LINEミニアプリチャネルにサービスメッセージのテンプレートを追加します。
  2. LINEミニアプリ上でのユーザーの操作(アクション)を元にサービス通知トークンを発行してサービスメッセージを送信します。
  3. 2で発行された新しいサービス通知トークンを利用して、リマインダーなど後続のサービスメッセージを送信します。
審査を通過する必要があります

手順1でLINEミニアプリチャネルに追加したサービスメッセージテンプレートをサービスメッセージを送るAPIで利用するには、LINEによる審査を通過する必要があります。

# サービスメッセージのテンプレートを追加する

LINEが提供しているテンプレートの中から、サービスメッセージで利用するテンプレートを選択して、LINEミニアプリチャネルに追加します。サービスメッセージのテンプレートは、LINEミニアプリチャネルごとに20個まで追加できます。

テンプレートはカテゴリ別に提供しており、LINE Developersコンソールで確認できます。また、自分のLINEアカウントにテストメッセージを送信して、実際にプレビューを確認することもできます。サービスメッセージのテンプレートを追加する手順は、以下のとおりです。

  1. LINE Developersコンソールで、テンプレートを追加するLINEミニアプリチャネルを選択し、[サービスメッセージテンプレート]タブをクリックします。
注意
  1. チャネルを作成しながら、公式テンプレートの作成を進めることができます。
  • チャネルの作成中は、次のことができます:
    • 新しいテンプレートの追加
    • すべてのテンプレートリストの参照
    • テンプレート詳細の参照
    • テンプレート使用事例の編集
    • テンプレートの削除
    • シミュレータ-でのテストメッセージ送信
  1. 審査が進行中の場合、公式テンプレートの使用にいくつかの制限が適用されます。
  • チャネルの審査進行中でも次のことはできます:
    • テンプレート詳細の参照
    • シミュレーターでのテストメッセージ送信
    • テンプレート詳細の参照
  • しかしこの段階では、次のことはできません:
    • すべてのテンプレートのリストの参照
    • テンプレートの使用事例の編集
    • テンプレートの削除
  1. チャネルが公開されたら、本番用チャネルで公式テンプレートを使用できます(#1の準備段階と同じ条件が適用されます)。

チャネルの審査中は、新しいテンプレートを追加できません。チャネルが審査を通過するまでは、シミュレーターで利用可能なテストメッセージのみ送信できます。 ただし、審査プロセスは、過去に正常に追加された既存のテンプレート(公式テンプレートとカスタムテンプレートの両方)には影響しません。

  1. 追加]をクリックします。

  2. 以下の項目を設定します。

    項目 説明
    テンプレートを選択する サービスメッセージAPIで利用するテンプレートを選択します。
    テンプレート詳細 選択したテンプレートの詳細が表示されます。サービスメッセージを送るAPIを実行するときに、[API用テンプレート名]に表示されている文字列({template name}_{BCP 47 language tag})をtemplateNameに指定してください。
    プレビュー テストメッセージのプレビューが表示されます。テストメッセージは、[テストメッセージを送信する]の[送信する]をクリックすると、LINE DevelopersコンソールにログインしているLINEアカウントに送信されます。
    テストメッセージを送信する テンプレート変数と値のペアを指定するJSONオブジェクトを入力します。入力した内容をもとに[プレビュー]が更新されます。
    • コピー]:JSONオブジェクトをクリップボードにコピーします。
    • Reset]:JSONオブジェクトの編集内容を破棄します。
    • 送信する]:LINE DevelopersコンソールにログインしているLINEアカウントに、テストメッセージが送信されます。
    使用事例 このテンプレートを送信する状況を正確に入力してください。
    注意

    使用事例]に入力した事例から逸脱した方法でテンプレートを使用した場合は、テンプレートの使用を停止する場合があります。

  3. 追加]をクリックします。

    サービスメッセージテンプレートの一覧に戻ります。

    追加したテンプレートの[公開状況]に審査の状況が表示されます。

    公開状況 説明
    開発中 開発中(審査未申請)。LINEミニアプリチャネルのAdmin権限またはTester権限を持つ開発者に対して、開発用のチャネルからサービスメッセージを送る場合にのみ使用できます。
    公開中 審査通過済み。LINEミニアプリチャネルのユーザーに対して、本番用のチャネルからサービスメッセージを送る場合に使用できます。

# テンプレートの各要素について

サービスメッセージは、(A)タイトル、(B)詳細内容、(C)ボタン、(D)フッターで構成されています。 テンプレートは使用例に応じて、これらのセクションを組み合わせて作成してください。 また、サービスメッセージの目的に最も適したテンプレートを利用してください。

ラベル セクション 説明
A タイトル タイトルセクションは、以下の要素で構成されます。
  • タイトル(A-1)
  • サブタイトル(A-2)
B 詳細内容 詳細内容セクションには、テンプレートの種類に応じて次の2種類のレイアウトがあります。
  • 「detailed」:1個のキーが必須です。キーの最大数は選択したテンプレートによって異なります。文字数については、「各要素の最大文字数」を参照してください。
  • 「simple」: 最大1個のキーを指定できます。文字数については、「各要素の最大文字数」を参照してください。
C ボタン 選択したテンプレートによって、使用できるボタンの数は異なります。また、URLを設定したボタンのみが表示されます。URLは、LINEミニアプリのページのパーマネントリンクを指定してください。
  • 1個目のボタンは必須で、[詳細はこちら]として表示されます。
  • 2個目以降のボタンは任意で、選択したテンプレートによってあらかじめ定義されています。
D フッター LINEミニアプリのアイコンとLINEミニアプリの名前が表示されます。ユーザーがフッターをタップすると、そのLINEミニアプリのホームページが表示されます。
LINEミニアプリのステータスが「公開中」以外の場合のフッター

LINEミニアプリのステータスが「開発中」や「審査中」の場合は、本来のフッターの代わりにLINEのアイコンと、「Service Message」というテキストが表示されます。ステータスが「公開中」に切り替わると、設定したLINEミニアプリのアイコンとLINEミニアプリの名前が表示されます。

# 各要素の最大文字数

詳細内容セクションの「detailed」と「simple」は、それぞれキーの値に推奨文字数および最大文字数(ソフトリミット、ハードリミット)があります。

項目 推奨文字数 ソフトリミット ハードリミット
detailed 10 36 50
simple 32 100 150

それぞれのキーの値は、推奨文字数以下にすることを推奨します。推奨文字数を超えると、表示可能な領域から溢れた文字が省略記号(...)に置き換えられたり、サービスメッセージが送信できなくなったりします。

文字数 どう表示されるか
推奨文字数以下 テキストはすべて表示される
推奨文字数より大きく、ソフトリミット以下 表示可能な領域から溢れた文字が省略記号(...)に置き換えられる場合がある
ソフトリミットより大きく、ハードリミット以下 表示可能な領域から溢れた文字が省略記号(...)に置き換えられる
ハードリミットより大きい エラーとなり、サービスメッセージが送信できない

キーの値の文字数はUTF-16の符号単位ではなく、書記素クラスタ (opens new window)単位でカウントします。テキストの文字数のカウントについて詳しくは、『Messaging APIドキュメント』の「テキストの文字数のカウント」を参照してください。

# 最初のサービスメッセージを送信する

ユーザーが操作を行ったり何かを要求したりした後で、LINEミニアプリから初めてサービスメッセージを送信する場合の手順を説明します。

テスト配信をお勧めします

サービスメッセージをユーザーに送信する前に、開発者のみを対象としたテスト送信を行い、サービスメッセージが実際にどのように表示されるか確認することをお勧めします。

LINEミニアプリの開発では短期のチャネルアクセストークンを使用してください

LINEミニアプリチャネルでは、長期のチャネルアクセストークンおよび、任意の有効期間を指定できるチャネルアクセストークン(チャネルアクセストークンv2.1)は使用できません。

LINEミニアプリの開発では、短期のチャネルアクセストークンを使用してください。

以下はチャネルアクセストークンとliff.getAccessToken()で取得するアクセストークン(以降、LIFFのアクセストークン)を使って、サービス通知トークンを発行し、サービスメッセージを送信するまでのイメージ図です。これらのイメージ図では、チャネルアクセストークンに短期のチャネルアクセストークンを使用しています。

relationship of tokens


AOA flow 1

  1. あらかじめチャネルアクセストークンを取得しておきます。

    チャネルアクセストークンは、サービスメッセージを送信するたびに取得しなおす必要はありません。

  2. 通知するときに、LINEミニアプリでliff.getAccessToken()を実行して、LIFFのアクセストークンを取得します。

  3. 手順2で取得したLIFFのアクセストークンを、サーバーに送信します。

  4. サービス通知トークンを発行します。

    手順1で取得したチャネルアクセストークンと、手順2で取得したLIFFのアクセストークンを利用します。

    final OkHttpClient notifierApiClient = new OkHttpClient().newBuilder().build();
    final MediaType mediaType = MediaType.parse("application/json");
    final RequestBody notificationTokenRequestBody = RequestBody.create(mediaType, "{'liffAccessToken': 'eyJhbGciOiJIUzI1NiJ9…​'");
    final Request notificationTokenRequest = new Request.Builder()
      .url(BASE_URL + "/notifier/token")
      .method("POST", notificationTokenRequestBody)
      .addHeader("Content-Type", "application/json")
      .addHeader("Authorization", "Bearer W1TeHCgfH2Liwa...")
      .build();
    final NotificationTokenResponse response = notifierApiClient.newCall(request).execute();
    String notificationToken = notificationTokenResponse.getNotificationToken();
    int tokenRemainingCount = notificationTokenResponse.getRemainingCount();
    
  5. 最初のサービスメッセージを送信します

    手順4で取得したサービス通知トークンを利用します。

    なお、使用するテンプレートにテンプレート変数がある場合は、paramsにキーと値のペアを指定してください。 必須要素のテンプレート変数を指定しないと、エラーが返されます。

    paramsの例:

    {
      ...
      "params": {
        // params sample to be updated
        "variable-name": "value",
        "button_uri_1": "detailView?userId=1234&purchaseID=5678"
      }
      ...
    }
    
    final RequestBody notificationRequestBody = RequestBody.create(mediaType,"{
      'templateName': 'reservation_confirmation_en',
      'notificationToken': '34c11a03-b726-49e3-8ce0-949387a9…​',
      'params': {
        'template-field-name': 'field-value',
        'template-field-name': 'field-value',
      }}");
    final Request notificationRequest = new Request.Builder()
      .url(BASE_URL + "/notifier/send?target=service")
      .method("POST", notificationRequestBody)
      .addHeader("Content-Type", "application/json")
      .addHeader("Authorization", "Bearer W1TeHCgfH2Liwa...")
      .build();
    final NotificationResponse notificationResponse = notifierApiClient.newCall(request).execute();
    notificationToken = notificationResponse.getNotificationToken();
    tokenRemainingCount = notificationResponse.getRemainingCount();
    
    サービスメッセージの送信後、レスポンスに含まれるサービス通知トークンを保存してください

    サービスメッセージの送信後、レスポンスに含まれるサービス通知トークン(notificationToken)を必ず保存してください。このサービス通知トークンは、同じ操作(アクション)に対して、後続のサービスメッセージを送信するときに使用します。サービス通知トークンの有効期間内であれば、レスポンスに含まれるremainingCountの数だけ、同じ操作に対する後続のサービスメッセージを送信できます。

    それぞれの操作(アクション)は、レスポンスに含まれるセッションID(sessionId)で区別できます。

サービス通知トークンは、発行から1年間(31,536,000秒間)有効です。有効期限が切れるまでの間、たとえばユーザーの「予約」という1つの操作に対して、LINEミニアプリから最大5回のサービスメッセージを送信できます。2回目以降のサービスメッセージ送信について詳しくは、「後続のサービスメッセージを送信する」を参照してください。

AOA flow 2


AOA flow 3

# 後続のサービスメッセージを送信する

同じ操作に対する後続のサービスメッセージを送信するときは、前回サービスメッセージを送信したときにレスポンスに含まれていたサービス通知トークンを使用します。

後続のサービスメッセージを送信するために、最初のサービスメッセージを送信する際に使ったチャネルアクセストークンとLIFFのアクセストークンを再利用して、新たにサービス通知トークンを発行してはいけません。

...
JsonObject subsequentMessage = Json.createObjectBuilder()
  .add("notificationToken", notificationToken)
  .add("templateName", templateName)
  .add("params", templateData)
  .build();
...

if (tokenRemainingCount < 0)
{
  notificationRequestBody = RequestBody.create(mediaType, subsequentMessage.toString());
  notificationRequest = new Request.Builder()
        .url(BASE_URL + "/notifier/send?target=service")
        .method("POST", notificationRequestBody)
        .addHeader("Content-Type", mediaType.toString())
        .addHeader("Authorization", "Bearer W1TeHCgfH2Liwa...")
        .build();
  notificationResponse =
        notifierApiClient.newCall(notificationRequest).execute();
  notificationToken = notificationResponse.getNotificationToken();
  tokenRemainingCount = notificationResponse.getRemainingCount();
}
サービスメッセージの送信後、レスポンスに含まれるサービス通知トークンを保存してください

サービスメッセージの送信後、レスポンスに含まれるサービス通知トークン(notificationToken)を必ず保存してください。このサービス通知トークンは、同じ操作(アクション)に対して、後続のサービスメッセージを送信するときに使用します。サービス通知トークンの有効期間内であれば、レスポンスに含まれるremainingCountの数だけ、同じ操作に対する後続のサービスメッセージを送信できます。

それぞれの操作(アクション)は、レスポンスに含まれるセッションID(sessionId)で区別できます。