---
title: LINEユーザーにメッセージを送付する
description: このページでは、KurocoとLINEのMessaging APIを連携し、KurocoからLINEユーザーにメッセーを送信する方法を説明します。
---

このページでは、KurocoとLINEのMessaging APIを連携し、KurocoからLINEユーザーにメッセーを送信する方法を説明します。  

## 概要
Kuroco には LINEユーザーに対してメッセージを送信する機能が備わっています。
具体的には、LINE Messaging APIを用いて、KurocoからLINEへメッセージを送信するような命令を送る事で、ユーザーにメッセージが送信されます。
メッセージの送信はカスタム処理に該当する記述を行う必要があります。

LINE公式アカウントへの友だち追加時に、LINEユーザーIDでKurocoへのユーザー登録(ログインする権限はなし)を行い、トリガー機能を使ってKuroco内のさまざまなイベントをトリガーとし、任意のタイミングで任意のユーザーにLINEメッセージを送信出来ます。

### 学べること
以下の手順で、KurocoからLINEユーザーにメッセージを送信します。

- [概要](#概要)
  - [学べること](#学べること)
  - [前提条件](#前提条件)
- [LINE Developersコンソールでチャネルを作成する](#line-developersコンソールでチャネルを作成する)
- [LINEの接続設定をする](#lineの接続設定をする)
- [Kurocoの管理画面からLINEとの連携をする](#kurocoの管理画面からlineとの連携をする)
- [LINE公式アカウントの友だち追加時のWebhookからLINEユーザーIDを取得する](#line公式アカウントの友だち追加時のwebhookからlineユーザーidを取得する)
  - [グループを準備する](#グループを準備する)
  - [Webhookを受けるエンドポイントを作成する](#webhookを受けるエンドポイントを作成する)
  - [ユーザー登録を行うカスタム処理を作成する](#ユーザー登録を行うカスタム処理を作成する)
  - [LINEのチャネル設定でWebhook URLを設定する](#lineのチャネル設定でwebhook-urlを設定する)
  - [LINE公式アカウントを友だち追加して動作の確認をする](#line公式アカウントを友だち追加して動作の確認をする)
- [Kuroco のカスタム処理を使ってユーザーにメッセージを送信する](#kuroco-のカスタム処理を使ってユーザーにメッセージを送信する)


### 前提条件
LINE公式アカウントへの友だち追加時に送信されるWebhookを利用して、LINEユーザーIDを取得します。  

:::tip
LINEアカウントを使ってKurocoにメンバー登録する方法として、OAuth連携機能を利用することも可能です。  
詳しくは[LINE公式アカウントの友だち追加時のWebhookからLINEユーザーIDを取得する](#line公式アカウントの友だち追加時のwebhookからlineユーザーidを取得する)のヒントをご確認ください。
:::

## LINE Developersコンソールでチャネルを作成する

まず、LINE Developersコンソールにてチャネルを作成する必要があります。LINEアカウントを持っていない場合はLINEアカウントを作成してください。

[LINE Developersコンソール](https://developers.line.biz/console/) にログインしてください（初回ログイン時のみ、開発者として登録するか否かを尋ねられるので、開発者として登録してください）。
![Image from Gyazo](https://t.gyazo.com/teams/diverta/c2e109a56aa8cb881adcd0e5e28623e1.png)

次に新規プロバイダーを作成します。「作成」ボタンをクリックしてください。
![Image from Gyazo](https://t.gyazo.com/teams/diverta/eacf32b52ded57fc7a1ebd02c122317d.jpg)

プロバイダー名を指定します。ここでは「KurocoSampleProvider」とします。
![Image from Gyazo](https://t.gyazo.com/teams/diverta/d601dea82a0716748ee88573482dc670.png)

つづいて、チャネルを作成します。「新規チャネル作成」をクリックしてください。
![Image from Gyazo](https://t.gyazo.com/teams/diverta/12230fb49e360e11c7ff30933e342ffc.png)

チャネルの種類は「Messaging API」を選択してください。
![Image from Gyazo](https://t.gyazo.com/teams/diverta/b1dcb7a1d1371416968eb40e24be08ab.png)

新規チャネル作成画面に遷移します。
![Image from Gyazo](https://t.gyazo.com/teams/diverta/87c346ac1bf5f74e2aa4ab5cee2c2361.png)

以下のように各項目を入力し「作成」ボタンをクリックしてください。

項目名 | 入力値
:-- | :--
チャネルの種類 | Messaging API
プロバイダー | 前述の手順で作成したプロバイダーを指定してください。
会社・事業者の所在国・地域 | 法人の場合は会社の所在国・地域を、個人の場合は店舗や居住地の所在国・地域を選択してください。
チャネルアイコン | チャネルのアイコンとなる画像をアップロードしてください。
チャネル名 | チャネル名を指定してください。
チャネル説明 | チャネルの説明を入力してください。
大業種 | 大業種を選択してください。
小業種 | 小業種を選択してください。
メールアドレス | このチャンネルの管理者となる方のメールアドレスを入力してください。
LINE公式アカウント利用規約 | 内容を確認の上、チェックを入れてください。
LINE公式アカウントAPI利用規約 | 内容を確認の上、チェックを入れてください

確認のダイアログが表示されますので、問題なければ「OK」をクリックしてください。
![Image from Gyazo](https://t.gyazo.com/teams/diverta/491b09c974859024efc03a78e1445027.png)

作成すると、以下のようにチャネルが表示されます。クリックして詳細情報を確認してください。
![Image from Gyazo](https://t.gyazo.com/teams/diverta/fdfd6dbdafcb3460f63e9f53e36c0d89.png)

以上で、チャネルが作成できました。  
チャネルIDは後述で使用しますので控えておいてください。

## LINEの接続設定をする

次にKurocoとLINEの接続設定を行います。

まず、公開鍵・秘密鍵のペアを準備し、先ほど作成したチャネルの設定画面にて公開鍵を登録する必要があります。

公開鍵・秘密鍵のペアを作成する方法はいくつかありますが、お使いのウェブブラウザが[Web Crypto API](https://developer.mozilla.org/ja/docs/Web/API/Web_Crypto_API) に対応している（たとえばGoogle Chromeブラウザなどの）場合、[SubtleCrypto.generateKey()](https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/generateKey) メソッドを使って秘密鍵と公開鍵を生成できます。
ここではGoogle Chromeを例に公開鍵・秘密鍵の作成方法を説明します。

Google Chromeを起動し、ブラウザのデベロッパーツールを開きます。
![Image from Gyazo](https://t.gyazo.com/teams/diverta/5697287cf9708a12ec94785a53a1e48e.png)

JavaScriptコンソールに以下のコードを入力して実行(エンターキーを押下)します。
```js
(async () => {
  const pair = await crypto.subtle.generateKey(
    {
      name: "RSASSA-PKCS1-v1_5",
      modulusLength: 2048,
      publicExponent: new Uint8Array([1, 0, 1]),
      hash: "SHA-256",
    },
    true,
    ["sign", "verify"]
  );

  console.log("=== private key ===");
  console.log(
    JSON.stringify(
      await crypto.subtle.exportKey("jwk", pair.privateKey),
      null,
      "  "
    )
  );

  console.log("=== public key ===");
  console.log(
    JSON.stringify(
      await crypto.subtle.exportKey("jwk", pair.publicKey),
      null,
      "  "
    )
  );
})();
```
![Image from Gyazo](https://t.gyazo.com/teams/diverta/b69f7fedf9b26c0a52978e79b58ad68c.png)
成功すると以下のような秘密鍵と公開鍵が生成されます。

**秘密鍵の例**

```json
{
  "alg": "RS256",
  "d": "B6A6he..........",
  "dp": "ogd_VFa..........",
  "dq": "qt9TJZV..........",
  "e": "AQAB",
  "ext": true,
  "key_ops": [
    "sign"
  ],
  "kty": "RSA",
  "n": "wQoAaMQmz..........",
  "p": "92ODEIUZY..........",
  "q": "x8ItprfI7..........",
  "qi": "kfmYirMr.........."
}
```

**公開鍵の例**

```json
{
  "alg": "RS256",
  "e": "AQ..........",
  "ext": true,
  "key_ops": [
    "verify"
  ],
  "kty": "RSA",
  "n": "wQoAaMQm.........."
}
```

先ほど作成したチャネルの設定画面にてアサーション署名キーの横にある［公開鍵を登録する］ボタンをクリックします。
![Image from Gyazo](https://t.gyazo.com/teams/diverta/7e835fd433d8e21e609ef31fb4222cdd.png)

作成した公開鍵を入力します。［登録］ボタンをクリックします。
![Image from Gyazo](https://t.gyazo.com/teams/diverta/2231bdf4ecd91adbdb76e5474a4d17c9.png)

公開鍵の登録に成功すると、kidが表示されるのでコピーして控えてください。
![Image from Gyazo](https://t.gyazo.com/teams/diverta/56d4b1a5f0af4c8f5c94442ef399cdb3.png)

## Kurocoの管理画面からLINEとの連携をする

次にKuroco管理画面へ移動し、[外部システム連携] -> [LINE]に遷移します。

![Image from Gyazo](https://t.gyazo.com/teams/diverta/cdafbf54c83d9b00c93fdb3051059d4e.png)

[LINE]欄の「有効にする」にチェックを入れ、上述で控えたチャンネルID、秘密鍵、アサーション署名キー（kid）を入力して[更新する]をクリックください。

以上でKuroco側の設定は終わりです。

## LINE公式アカウントの友だち追加時のWebhookからLINEユーザーIDを取得する

次に、LINEユーザーが公式アカウントを友だち追加した時に、そのユーザーがKurocoのメンバーとして自動登録されるように設定します。

:::tip
LINEアカウントを使ってKurocoにメンバー登録する方法として、OAuth連携機能を利用することも可能です。  
- OAuth連携でLINEログインをして、LINEユーザーIDを保存するは、[外部アカウントを使用したOAuth認証によるSSOを実装する](/ja/docs/tutorials/implementing-oauth-sp-based-sso/)を参照してください。
- LINEログインのチャネルと、Messaging APIのチャネルは同じプロパイダー内に設定してください。
- LINEログインの[チャネル基本設定]->[リンクされたボット]でMessaging APIのチャネルをリンクしてください。
:::

### グループを準備する

「LINEユーザー」というグループを作成します。作成したグループのIDを控えます。
![Image from Gyazo](https://t.gyazo.com/teams/diverta/20414fdbbd8ae917d65110348366db01.png)


### Webhookを受けるエンドポイントを作成する

Kuroco側に、LINEのイベントを受けるためのWebhook用エンドポイントを作成します。
セキュリティを`Cookie`としているAPIに以下の設定でエンドポイントを作成します。

項目名 | 入力値
:-- | :--
パス|`line/webhook`
モデル | Api / Api/v1 / request_api_post
サマリ | LINE Webhook用エンドポイント
APIリクエスト制限 | None
name | line_webhook

![Image from Gyazo](https://t.gyazo.com/teams/diverta/9dc74895d2b5237433c98b051b1a6da0.png)

また、メンバー登録用にもう一つエンドポイント作成します。
セキュリティを`動的トークン`としているAPIに以下の設定でエンドポイントを作成します。

項目名 | 入力値
:-- | :--
パス|`member/line/register`
モデル | メンバー / Member/v1 / insert
サマリ | LINEメンバー登録
APIリクエスト制限 | Group Auth / 管理者
default_group_id | 上記で作成したグループのID
not_login_after_insert | チェックなし
login_ok_flg | チェックなし
use_columns | `name1`, `email`, `login_ok_flg`

![Image from Gyazo](https://t.gyazo.com/teams/diverta/02343e446e18e4a1900619da33bf5290.png)

![Image from Gyazo](https://t.gyazo.com/teams/diverta/eed0c7363791df46f1d88816c82c2331.png)


### ユーザー登録を行うカスタム処理を作成する

以下の内容でカスタム処理を作成します。

- タイトル: LINE Webhook
- カテゴリ：未分類
- 識別子: line_webhook
- 処理：（以下参照）

```smarty reference title="line_webhook"
https://github.com/diverta/kuroco-documents/blob/main/sample_code/custom_function/request_api_post/line_webhook.txt
```

### LINEのチャネル設定でWebhook URLを設定する
LINEデベロッパーコンソールにて、Messaging APIチャンネル設定画面の[Messaging API]タブを開きます。  
[Webhook URL]に上記で作成したエンドポイントを登録します。

![Image from Gyazo](https://t.gyazo.com/teams/diverta/934709ad63ab8898abf92a2fbb6e9d9d.png)


### LINE公式アカウントを友だち追加して動作の確認をする

Messaging APIチャンネル設定画面に掲載されている[QRコード]をお手持ちの端末で撮影し、LINE公式アカウントを友だち追加します。

![Image from Gyazo](https://t.gyazo.com/teams/diverta/2081d26dfbfa429810af4aeac8585595.png)

公式チャンネル名が表示されるので、確認して[友だち追加]をタップします。

![Image from Gyazo](https://t.gyazo.com/teams/diverta/cb6abb67c1afacd41deebd35037458d9.png)

Kuroco管理画面のメンバー一覧画面にメンバーが追加されていることを確認します。

![Image from Gyazo](https://t.gyazo.com/teams/diverta/88d1cc1f3eee6a3ba1e3026c7835be09.png)

![Image from Gyazo](https://t.gyazo.com/teams/diverta/9b0cdba7885c734810583c471f41f40c.png)

## Kuroco のカスタム処理を使ってユーザーにメッセージを送信する

テストのため、カスタム処理を作成し以下のように記載してください。

- タイトル: LINE test
- カテゴリ：未分類
- 識別子: line_test
- 処理：（以下参照）
  
```smarty
{sendmail
    var=result
    subject='LINE message test' 
    contents="こんにちは[emoji:5ac21a8c040ab15980c9b43f:001][emoji:5ac21a8c040ab15980c9b43f:002][emoji:5ac21a8c040ab15980c9b43f:003] " 
    to="Uxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@text.line.r-cms.jp" 
}
```

`to` には `(LINEユーザーID)@text.line.r-cms.jp` の形式で入力してください。

`contents` には上記のように絵文字を含めることが可能です。絵文字を挿入したい箇所に以下のように記載してください。  
```
[emoji:(プロダクトID):(絵文字ID)]
```
利用可能な絵文字については[LINE絵文字定義](https://developers.line.biz/ja/docs/messaging-api/emoji-list/#line-emoji-definitions)をご参照ください。

**送信結果**
![Image from Gyazo](https://t.gyazo.com/teams/diverta/9ecbea49d63df38adc9e6b1e3b7f3c33.png)

