ボットを作成する

このガイドでは、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を受け取る

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

署名を検証する

リクエストが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

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

Webhookイベントを受け取る

サーバーがwebhookを受信できるかどうかを確認するには、LINEアプリ上でボットをブロックし、サーバーがLINEプラットフォームからwebhookフォロー解除イベントを受け取っていることをログで確認します。ボットでwebhookを受け取れることを確認した後で、再びボットを友だち追加します。

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)

リクエストボディの一部として送られる、JSONオブジェクトに含まれるデータを受け取って処理します。ボットが返信できるwebhookイベントには応答トークンが含まれています。Webhookイベントについて詳しくは、『APIリファレンス』の「Webhook」を参照してください。

応答メッセージを送る

応答メッセージは、ユーザーがボットにメッセージを送ったり、ボットを友だち追加したりなどして生成されるイベントに対して送られるメッセージです。応答メッセージは、応答トークンを持つwebhookイベントオブジェクトを含むwebhookイベントのみに送信できます。

応答メッセージを送るには、HTTP POSTリクエストを/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?"
        }
    ]
}'

詳しくは、『APIリファレンス』の「応答メッセージを送る」を参照してください。

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

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

プッシュメッセージは、ボットがいつでもユーザーに送ることのできるタイプのメッセージです。応答メッセージとは異なり、プッシュメッセージには応答トークンは不要です。

プッシュメッセージを個別のユーザーに送るには、HTTP POSTリクエストを/message/pushエンドポイントに送信します。複数ユーザーへ送る場合は、POSTリクエストを/message/multicastエンドポイントに送信します。userIdの値を使ってtoプロパティにユーザーを指定します。userIdwebhookイベントオブジェクトに含まれています。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"
        }
    ]
}'

詳しくは、『APIリファレンス』の「プッシュメッセージを送る」を参照してください。

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

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

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

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

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

ボットを友だち追加した、またはボットにメッセージを送信したユーザーのLINEプロフィール情報を取得するには、HTTP GETリクエストを/profileエンドポイントに送信します。このとき、URLにパラメーターとしてユーザーIDを指定します。このリクエストはユーザーの表示名、ユーザー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":"http://obs.line-apps.com/...",
    "statusMessage":"Hello world!"
}

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

Messaging APIのその他の機能

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

グループチャット

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

リッチメニュー

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

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

ビーコン

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

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

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

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

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

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

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

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

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

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

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

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

資料

LINEボットの開発について詳しくは、以下のページを参照してください。


ご意見やご要望がある場合

LINEプラットフォームのドキュメントやサービスについてご不明な点があるときは、まず「FAQ」ページをご覧ください。疑問が解決しない、またはドキュメントの内容やLINEプラットフォームの機能についてご要望があれば、以下のボタンをクリックするか、GitHubのLINE Platform feedbackリポジトリにイシューを作成してお知らせください。