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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    項目 説明
    テンプレートを選択する サービスメッセージAPIで利用するテンプレートを選択します。
    テンプレート詳細 選択したテンプレートの詳細が表示されます。サービスメッセージを送るAPIを実行するときに、[Template Name]に表示されている文字列({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個のキーが必須で、キーの最大数は選択したテンプレートによって異なります。キーの値の最大文字数は36文字です(メッセージを適切に送信するために、10文字以下にすることをお勧めします)。
  • 「simple」: 1個のキーが必須で、テンプレートの種類にかかわらず、キーの最大数は1です。キーの値の最大文字数は100文字です(メッセージを適切に送信するために、32文字以下にすることをお勧めします)。
C ボタン 選択したテンプレートによって、使用できるボタンの数は異なります。また、URLを設定したボタンのみが表示されます。URLは、LINEミニアプリのページのパーマネントリンクを指定してください。
  • 1個目のボタンは必須で、[詳細はこちら]として表示されます。
  • 2個目以降のボタンは任意で、選択したテンプレートによってあらかじめ定義されています。
D フッター LINEミニアプリのアイコンとLINEミニアプリの名前が表示されます。ユーザーがフッターをタップすると、そのLINEミニアプリのホームページが表示されます。
LINEミニアプリのステータスが「公開中」以外の場合のフッター

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

最大文字数を超えると省略記号が表示されます

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

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

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

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

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

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

    セッションは、レスポンスに含まれるセッションID(sessionId)で区別できます。

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

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

...
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)で区別できます。