ボットを作成する

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

始める前に

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

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

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

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

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

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

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

Webhook URLを設定する

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

  1. コンソールの[Channel基本設定]ページにWebhook URLを入力します。
  2. [Webhook送信]を選択してWebhookを有効にします(注:デフォルトではオフに設定されています)。
  3. 設定したWebhook URLでWebhookイベントを受け取れることを確認するため、[接続確認]ボタンをクリックし、「成功しました。」というメッセージが表示されるか確認します。

注:Webhook URLにはHTTPSを使用し、認定認証局で発行されたSSL証明書を設定する必要があります。認定認証局のリストを参照してください。

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

ボットを友だち追加する

コンソールの[Channel基本設定]ページにあるQRコードを読み取ります。

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

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

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

Webhookの動作を確認する

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

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

Webhookイベントを受信する

Webhookイベントを受信できるかどうか確認するには、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プラットフォームから送られたことを確認するために、ボットサーバーでリクエストヘッダーの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プラットフォームからWebhook URLに指定したボットサーバーに、Webhookイベントオブジェクトを含むHTTP POSTリクエストが送られます。Webhookイベントオブジェクトに含まれるデータに基づいて、ボットの動作を制御したり、ユーザーの要求に答えたりできます。

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

イベントタイプ 説明
メッセージイベント ユーザーがメッセージを送信したことを示すイベントです。このイベントには応答できます。
フォローイベント アカウントが友だち追加またはブロック解除されたことを示すイベントです。このイベントには応答できます。
フォロー解除イベント アカウントがブロックされたことを示すイベントです。
ポストバックイベント ユーザーが、ポストバックアクションを実行したことを示すイベントです。このイベントには応答できます。
ビーコンイベント LINE Beaconデバイスの受信圏をユーザーが出入りしたことを示すイベントです。このイベントには応答できます。詳しくは、「ビーコンを使う」を参照してください。
アカウント連携イベント ユーザーがLINEアカウントとプロバイダーが提供するサービスのアカウントを連携したことを示すイベントです。このイベントには応答できます。詳しくは、「ユーザーアカウントを連携する」を参照してください。

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

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

ボットを介して以下の操作を実行できます。

応答メッセージを送る

応答メッセージは、ユーザーがボットにメッセージを送ったり、ボットを友だち追加したりなどして生成されるイベントに対して送るメッセージです。応答メッセージは、応答トークンを含む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リファレンス』の「応答メッセージを送る」を参照してください。

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

注:一部のプランをご利用の場合にのみ、ボットからプッシュメッセージを送ることができます。詳しくは、LINE@のプランを参照してください。

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

プッシュメッセージを送るときは、toプロパティにユーザーIDを指定します。送信先のIDは、Webhookイベントオブジェクトに含まれています。メッセージの送信先ユーザーが1人か複数かに応じて、POSTリクエストを以下のエンドポイントに送信します。

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.line.me/v2/bot/message/{messageId}/content \
-H 'Authorization: Bearer {channel access token}'

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

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

ボットを友だち追加した、またはボットにメッセージを送信したユーザーの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リファレンス』の「プロフィールを取得する」を参照してください。

Messaging APIのその他の機能

Messaging APIで利用できるその他の主な機能は以下のとおりです。

グループチャット

ボットは1対1トークのみでなく、グループチャットに参加することもできます。グループチャットでのボットの使用方法については「グループチャット」を参照してください。

リッチメニュー

リッチメニューはカスタマイズできるメニューで、ユーザーがどのようにボットと対話できるか理解するのに役立ちます。ユーザーはいつでもトーク画面からこのメニューにアクセスすることができます。リッチメニューは、Messaging APIまたはLINE@マネージャーを使って作成できます。

詳しくは、「リッチメニューを使う」を参照してください。

ビーコン

LINE Beaconを使用して、ユーザーがビーコンの範囲内に入ったときにボットがユーザーとどう対話するか設定することができます。ビーコンの使用について詳しくは、「ビーコンを使う」を参照してください。

アカウント連携

アカウント連携機能を使うと、プロバイダー(企業や開発者)が提供するサービスの既存のユーザーアカウントを、ボットと友だちになっているLINEユーザーのアカウントとセキュアに連携できます。詳しくは、「ユーザーアカウントを連携する」を参照してください。

LINE@マネージャーを設定する

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

LINE@アカウントのすべての機能のリストについては、LINE@の機能紹介ページを参照してください。

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

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

LINE@マネージャーにアクセスして、ボットの基本情報を追加します。カバー画像、ロゴ、ボタン、提供する情報をカスタマイズすることができます。

LINE@マネージャーのアカウントページ

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

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

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

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

次のステップ

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