ボットを作成する

このガイドでは、Messaging APIを使ってLINEボットを作成する方法を説明します。サンプルボットのデプロイから始めたい場合は、「Herokuでサンプルボットを作成する」を参照してください。

始める前に

以下の作業が完了していることを確認します。

  • ボット用のチャネルを作成する
  • ボットをホストするサーバーを用意する。Herokuのようなクラウドプラットフォームサービスを利用できます。

コンソールでボットを設定する

ボットアプリには、APIを呼び出すためのチャネルアクセストークンと、LINEプラットフォームからWebhookペイロードを受け取るためのWebhook URLが必要です。

チャネルアクセストークンを発行する

チャネルアクセストークンは長期間有効なアクセストークンで、APIを呼び出すときにAuthorizationヘッダーに設定する必要があります。チャネルアクセストークンはいつでもコンソールで再発行できます。

チャネルアクセストークンを発行するには、コンソールの[チャネル基本設定]ページにある[再発行]をクリックします。

Webhook URLを設定する

Webhook URLはボットサーバーのエンドポイントで、Webhookペイロードの送信先です。

  1. LINE Developersコンソールにログインし、Messaging APIのチャネルがあるプロバイダーをクリックします。

  2. Messaging APIのチャネルをクリックします。

  3. [Webhook URL]の[編集]をクリックし、Webhook URL(LINEプラットフォームからボットにイベントを送信する際の送信先URL)を入力して、[更新]をクリックします。

  4. [Webhook送信]の[編集]をクリックし、[利用する]を選択して、[更新]をクリックします。

    note [Webhook URL]を入力してから、[Webhook送信]を変更してください

    [Webhook URL]を入力する前に[Webhook送信]の設定を変更しても、自動的に[利用しない]に戻ります。[Webhook送信]が[利用する]に変更できたことを確認するには、ページを再読み込みします。

  5. [接続確認]をクリックします。

    設定したWebhook URLでWebhookイベントを受け取ると、「成功しました。」と表示されます。

注:Webhook URLにはHTTPSを使用し、認定認証局で発行されたSSL証明書を設定する必要があります。

コンソールの[チャネル基本設定]ページ:Webhook URL

LINE公式アカウントを友だち追加する

ボットを設定したチャネルに紐付けられたLINE公式アカウントを友だち追加します。これを行うには、コンソールの[チャネル基本設定]ページにあるQRコードを読み取ります。

セキュリティを設定する(任意)

LINEプラットフォームのAPIを呼び出せるサーバーをコンソールの[セキュリティ管理]ページで設定して、セキュリティを向上させることができます。ネットワークアドレスを登録するには、個別にIPアドレスを登録するか、サーバーが複数ある場合は、CIDR(Classless Inter-Domain Routing)記法を使用することができます。

[セキュリティ管理]ページ

Webhookの動作を確認する

ユーザーがLINE公式アカウントを友だち追加したりLINE公式アカウントにメッセージを送ったりすると、LINEプラットフォームからWebhook URLに指定したボットサーバーに、Webhookイベントオブジェクトを含むHTTP POSTリクエストが送られます。このリクエストのヘッダーには署名が含まれます。

ここでは、Webhookイベントを正常に受信できるかどうかの確認と、Webhookイベントの署名の検証の方法について説明します。

Webhookイベントを受信する

Webhookイベントを受信できるかどうか確認するには、LINEでLINE公式アカウントをブロックして、ボットサーバーがLINEプラットフォームからフォロー解除イベントを受信したかどうかをログで確認します。以下はログの例です。

2017-07-21T09:18:46.755256+00:00 app[web.1]: 2017-07-21 09:18:46.737  INFO 4 --- [io-13386-exec-2] c.e.bot.spring.KitchenSinkController     : unfollowed this bot: UnfollowEvent(source=UserSource(userId=Uxxxxxxxxxx...), timestamp=2017-07-21T09:18:46.031Z)

Webhookが正常に動作することを確認した後で、再びLINE公式アカウントを友だち追加します。

署名を検証する

リクエストがLINEプラットフォームから送られたことを確認するために、ボットサーバーでリクエストヘッダーのX-Line-Signatureを検証する必要があります。

  1. チャネルシークレットを秘密鍵として、HMAC-SHA256アルゴリズムを使用してリクエストボディからBase64でエンコードされたダイジェスト値を生成します。
  2. リクエストヘッダーにあるX-Line-Signatureの署名がダイジェスト値と一致することを確認します。

Python®で署名の検証を実装する例は以下のとおりです。

import base64
import hashlib
import hmac

channel_secret = ... # Channel secret string
body = ... # Request body string
hash = hmac.new(channel_secret.encode('utf-8'),
    body.encode('utf-8'), hashlib.sha256).digest()
signature = base64.b64encode(hash)
# Compare X-Line-Signature request header and the signature

詳細とコードサンプルについては、『Messaging APIリファレンス』の「署名を検証する」を参照してください。

Webhookイベントのタイプ

ユーザーがLINE公式アカウントを友だち追加したりLINE公式アカウントにメッセージを送ったりすると、LINEプラットフォームからWebhook URLに指定したボットサーバーに、Webhookイベントオブジェクトを含むHTTP POSTリクエストが送られます。Webhookイベントオブジェクトに含まれるデータに基づいて、ボットの動作を制御したり、ユーザーの要求に答えたりできます。

1対1のチャットでは以下のWebhookイベントを受信できます。詳しくは、『Messaging APIリファレンス』の「Webhookイベントオブジェクト」を参照してください。

イベントタイプ 説明
メッセージイベント ユーザーがメッセージを送信したことを示すイベントです。このイベントには応答できます。
フォローイベント LINE公式アカウントが友だち追加またはブロック解除されたことを示すイベントです。このイベントには応答できます。
フォロー解除イベント LINE公式アカウントがブロックされたことを示すイベントです。
参加イベント LINE公式アカウントがグループまたはトークルームに参加したことを示すイベントです。このイベントには応答できます。
退出イベント ユーザーがグループからボットを削除したか、ボットがグループまたはトークルームから退出したことを示すイベントです。
メンバー参加イベント ボットがメンバーになっているグループまたはトークルームにユーザーが参加したことを示すイベントです。このイベントには応答できます。
メンバー退出イベント ボットがメンバーになっているグループまたはトークルームからユーザーが退出したことを示すイベントです。
ポストバックイベント ユーザーが、ポストバックアクションを実行したことを示すイベントです。このイベントには応答できます。
ビーコンイベント ビーコンの電波の受信圏にユーザーが入ったことを示すイベントです。このイベントには応答できます。詳しくは、「ビーコンを使う」を参照してください。
アカウント連携イベント ユーザーがLINEアカウントとプロバイダーが提供するサービスのアカウントを連携したことを示すイベントです。このイベントには応答できます。詳しくは、「ユーザーアカウントを連携する」を参照してください。
デバイス連携イベント(LINE Things) ユーザーの操作により、デバイスとLINEが連携されたことを示すイベントです。
デバイス連携解除イベント(LINE Things) ユーザーの操作により、デバイスとLINEの連携が解除されたことを示すイベントです。
LINE Thingsシナリオ実行イベント(LINE Things) 自動通信のシナリオが実行されたことを示すイベントです。

グループチャットに特有のWebhookイベントについて詳しくは、「グループチャット」を参照してください。

エンドポイントにリクエストを送る

以下の操作を実行できます。

応答メッセージを送る

応答メッセージは、ユーザーがLINE公式アカウントを友だち追加したり、LINE公式アカウントにメッセージを送ったりなどして生成されるイベントに対して送るメッセージです。応答メッセージは、応答トークンを含むWebhookイベントのみに対して送信できます。

応答メッセージを送るには、HTTP POSTリクエストを/bot/message/replyエンドポイントに送ります。Authorizationヘッダーにはチャネルアクセストークンを、ボディには応答トークンを含めます。1回のリクエストでメッセージオブジェクトを最大5つまで送信できます。

Messaging APIを使用して送れるメッセージのタイプについて詳しくは、「メッセージタイプ」を参照してください。

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リファレンス』の「応答メッセージを送る」を参照してください。

プッシュメッセージを送る

プッシュメッセージは、任意のタイミングでユーザーに送信できるメッセージです。応答メッセージとは異なり、プッシュメッセージには応答トークンは不要です。

メッセージの送信先に応じて、POSTリクエストを以下のエンドポイントに送信します。

エンドポイント 送信先
/message/push 1人のユーザー
/message/multicast 複数のユーザー
/message/broadcast LINE公式アカウントと友だちになっているすべてのユーザー

宛先を指定してメッセージを送るときは、toプロパティにユーザーIDを指定します。送信先のIDは、Webhookイベントオブジェクトに含まれています。

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

Messaging APIを使用して送れるメッセージのタイプについて詳しくは、「メッセージタイプ」を参照してください。

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

詳しくは、『Messaging APIリファレンス』の以下のセクションを参照照してください。

ユーザーが送ったコンテンツを取得する

ユーザーが送った画像、動画、音声、およびファイルを取得するには、HTTP GETリクエストを/bot/message/{messageId}/contentエンドポイントに送ります。ユーザーが送ったコンテンツは一定期間後、自動的に削除されることに注意してください。

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

詳しくは、『Messaging APIリファレンス』の「コンテンツを取得する」を参照してください。

ユーザープロフィール情報を取得する

LINE公式アカウントを友だち追加した、またはLINE公式アカウントにメッセージを送信したユーザーのLINEプロフィール情報を取得するには、HTTP GETリクエストを/bot/profile/{userId}エンドポイントに送信します。このリクエストはユーザーの表示名、ユーザーID、プロフィール画像のURL、ステータスメッセージ(設定されている場合)を返します。

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

成功した場合、JSONオブジェクトが返されます。

{
    "displayName":"LINE Botto",
    "userId":"U4af4980629...",
    "pictureUrl":"https://obs.line-apps.com/...",
    "statusMessage":"Hello world!"
}

詳しくは、『Messaging APIリファレンス』の「プロフィールを取得する」を参照してください。

LINE Official Account Managerで設定する

LINE Official Account ManagerはLINE公式アカウントを管理するツールです。Messaging APIで提供される機能を利用するほかにも、アカウントページをカスタマイズしてユーザーエクスペリエンスを向上したり、タイムライン投稿を作成したり、さまざまな機能を利用できます。

LINE公式アカウントのすべての機能については、LINE for Businessウェブサイトの「LINE Account Connect」ページを参照してください。

アカウントページをカスタマイズする

アカウントページには、LINE公式アカウントに関する基本的な情報を設定します。ここで設定する情報はユーザーに表示されます。

LINE Official Account Managerにアクセスして、LINE公式アカウントの基本情報を追加します。

LINE Official Account Managerのアカウント設定ページ

あいさつメッセージを追加する(任意)

コンソール内の[チャネル基本設定]ページにある[友だち追加時あいさつ]のオプションを有効にすると、ユーザーがLINE公式アカウントを友だち追加したときにLINE公式アカウントから送られるあいさつメッセージを、LINE Official Account Managerで設定できます。別の方法として、Webhookフォローイベントを受け取ってからユーザーへプログラム的に応答することもできます。

自動応答メッセージを追加する(任意)

コンソール内の[チャネル基本設定]ページにある[自動応答メッセージ]のオプションを有効にすると、ユーザーが送ったメッセージに対する自動応答メッセージを、LINE Official Account Managerで設定できます。ただし、Messaging APIを使用すれば、Webhookイベントの内容に合わせた応答を返すようにボットをプログラムできるため、より多くの処理を実行できます。

次のステップ

Messaging APIで利用できる機能について詳しくは、『Messaging APIドキュメント』の各ページを参照してください。

{{ $t("form.question.helpful") }}

{{ $t("form.question.detail") }}

{{ $t("form.question.improve") }}

{{ $t("form.info.start") }}{{ $t("form.info.link") }}{{ $t("form.info.end") }}


{{ $t("form.result.success") }}
{{ $t("form.result.error") }}
{{ $t("form.result.errorLink") }}