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

サービスメッセージは、ユーザーからのリクエストに対する確認や応答としてユーザーが知るべき情報を、LINEミニアプリから通知する機能です。 たとえば、レストランや宿泊施設の予約の確認通知をユーザーに送信する場合に、サービスメッセージを利用できます。

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

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

LINEミニアプリから送られたサービスメッセージは、LINEミニアプリの種類にかかわらず「Service Messages」トークルームに表示されます。

サービスメッセージを送信するには、LINEミニアプリチャネルにサービスメッセージのテンプレートを追加し、サーバーからサービスメッセージAPIを呼び出します。

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

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

カテゴリ別のテンプレート

LINEミニアプリでは、Service Message Catalog (opens new window)でカテゴリ別にテンプレートを提供しています。これらのテンプレートは、ビジネスシーンを想定して作成しています。テンプレートはあらかじめフォーマットされていますが、ガイドラインに沿ってある程度カスタマイズすることで、サービスニーズに合ったものにすることができます。ユーザー層に合ったテンプレートを選択し、自分のアカウントにテストメッセージを送信してプレビューを確認してください。

また、LINE Developersコンソールでも、フォーマット済みのテンプレートをカテゴリ別に提供しています。

審査を通過する必要があります

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

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

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

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

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

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

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

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

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

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

    Published status 説明
    DEVELOPING 開発中(審査未申請)。審査を申請してください。
    PUBLISHING 審査通過。サービスメッセージテンプレートをサービスメッセージを送るAPIで使用できる状態です。

    続けて、審査を申請してください。

  4. ワークフロー]タブをクリックし、[審査担当者へのコメント]を入力して、[審査を申請する]をクリックします。

    LINEによる審査が始まります。

    LINEによる審査が終了すると、[サービスメッセージテンプレート]タブに審査結果が表示されます。 審査を通過したテンプレートのみ、サービスメッセージを送るAPIで使用できます。

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

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

# A. タイトルセクション

タイトルセクションは、以下の要素で構成されます。

ラベル 要素 必須 説明
A-1 タイトル 必須 フォーマット済み
A-2 サブタイトル 必須 フォーマット済み
注意

最大文字数を超えた場合は、末尾に省略記号が表示されます。省略記号が表示されないように、最大文字数の基準を守ってください。

# B. 詳細内容セクション

詳細内容セクションは、「Detailed」と「Simple」の2種類のレイアウトがあります。 詳細内容セクションに関する制約事項は次のとおりです。

[Detailed] は、短い項目名と内容で構成されます。

  • 最大14個のキーを指定できます。
  • キーの最大文字数:12文字
  • 値の最大文字数:36文字

[Simple] は自由形式の内容のみで構成されます。

  • 最大1個の値を指定できます。
  • 値の最大文字数:100文字
注意

最大文字数を超えた場合は、末尾に省略記号が表示されます。省略記号が表示されないように、最大文字数の基準を守ってください。

# C. ボタンセクション

ボタンセクションのデータ入力は必須です。 テンプレートごとのボタンおよびボタンのラベルの最大数は固定されているため、変更できません。

URLは、LINEミニアプリのページのパーマネントリンクを指定してください。

ラベル 要素 必須 説明
- 1個目のボタン 必須 ユーザーが、サービスメッセージの詳細を確認するためのURLをparamsに指定します。
- 2個目以降のボタン 任意 ボタンごとに、任意のURLをparamsに指定します。URLを指定したボタンのみ表示されます。

# D. フッターセクション

フッターセクションには、LINEミニアプリのアイコンとLINEミニアプリの名前が表示されます。 ユーザーがフッターをタップすると、そのLINEミニアプリのホームページが表示されます。

注意

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

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

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

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

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

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

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

    注意

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

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

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

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

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

    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の数だけ、同じ作業に対する後続のサービスメッセージを送信できます。

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

同じ作業に対する後続のサービスメッセージを送信するときは、新しいサービス通知トークンを発行する必要はありません。 前回サービスメッセージを送信したときにレスポンスに含まれていたサービス通知トークンを使用してください。

...
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の数だけ、同じ作業に対する後続のサービスメッセージを送信できます。