APIリファレンス 開発ガイドライン クイックスタート ガイド - メッセージを送信する
- テキストの文字数のカウント
- ユーザーIDを取得する
- スタンプ
- LINE絵文字
- オーディエンスを使う
- クイックリプライを使う
- 送信したメッセージの統計情報を取得する
- LINE URLスキームでLINEの機能を使う
- LINEでビーコンを使う
- LINE公式アカウントの友だちを増やす
- ユーザーアカウントの連携
- アイコンと表示名をカスタマイズする
- ローディングのアニメーションを表示する
- メンバーシップ機能を使う
- 引用トークンを取得する
- 失敗したAPIリクエストを再試行する
- LINE公式アカウントの利用を停止する
- Messaging APIの利用を停止する
- チュートリアル - 応答ボットを作る
Webhook リッチメニュー LINE Bot Designer Flex Message 概念 リファレンス リソース
APIリファレンス 開発ガイドライン クイックスタート ガイド - メッセージを送信する
- テキストの文字数のカウント
- ユーザーIDを取得する
- スタンプ
- LINE絵文字
- オーディエンスを使う
- クイックリプライを使う
- 送信したメッセージの統計情報を取得する
- LINE URLスキームでLINEの機能を使う
- LINEでビーコンを使う
- LINE公式アカウントの友だちを増やす
- ユーザーアカウントの連携
- アイコンと表示名をカスタマイズする
- ローディングのアニメーションを表示する
- メンバーシップ機能を使う
- 引用トークンを取得する
- 失敗したAPIリクエストを再試行する
- LINE公式アカウントの利用を停止する
- Messaging APIの利用を停止する
- チュートリアル - 応答ボットを作る
Webhook リッチメニュー LINE Bot Designer Flex Message 概念 リファレンス リソース
# チュートリアル - 応答ボットを作る
このチュートリアルでは、Node.jsとMessaging APIを使って、応答ボットでメッセージを送信する方法を学びます。
Messaging APIは、サービスとLINEユーザーとの間で双方向のコミュニケーションを可能にする機能です。Messaging APIの機能を利用して、ユーザーとの交流を深めることができます。様々な種類のメッセージの送信、ユーザープロフィールの取得、ユーザーが送信したコンテンツの取得など、その機能は多岐にわたります。
このチュートリアルを最後まで進めると、ユーザーが送信したメッセージに自動的に応答するアプリが作成できます。
# 始める前に
このチュートリアルは、JavaScriptとNode.jsの基本的な知識を必要とします。また、チュートリアルをスムーズに進めるために、「Messaging APIの概要」を読んでおくことをお勧めします。
このチュートリアルでは、Messaging APIの仕様を理解するために、LINEプラットフォームのSDKを使わずにNode.jsでMessaging APIを使用する方法を説明します。Node.jsを使ったプロジェクトで、Messaging APIをより少ないコード行数で素早く利用したい場合は、LINE Messaging API SDK for nodejs (opens new window)を利用してください。
# 準備
チュートリアルで応答ボットを作成するために、まずは必要なシステムへの登録と、ツールをインストールします。
アカウントを登録するもの:
LINE Developersコンソールのアカウント:LINE DevelopersコンソールにLINEアカウントまたはビジネスアカウントでログインし、まだお持ちでなければ開発者アカウントを作成してください。
Heroku (opens new window)アカウント
Herokuの無料プランは廃止されましたHerokuの無料プランは、2022年11月27日をもって廃止されました。このチュートリアルを無料で試したい場合は、他のプラットフォームを利用してください。詳しくは、「Heroku’s Next Chapter (opens new window)」を参照してください。
インストールするもの:
# 1. Herokuの設定
ターミナルまたはコマンドラインツールで、以下のコマンドを実行し、Heroku CLIにログインします。
heroku login
次に、チュートリアル用のディレクトリを作成し、そのディレクトリに移動します。そして、Gitを初期化してHerokuを使ったアプリを作成します。{Name of your app}
は、msg-api-tutorial-{YYYYMMDD}
などの一意の名前に置き換えてください。
mkdir sample-app
cd sample-app
git init
heroku create {Name of your app}
アプリが問題なく作成されると、HerokuのURLがhttps://{Name of your app}.herokuapp.com/
のような形式で生成されます。このURLはチュートリアルの中で必要になります。生成されたHerokuのURLを、ブラウザで開いてください。ウェルカムページが表示されます。
# 2. プロジェクトの設定
npmがプロジェクトを識別できるように、package.json
ファイルを作成する必要があります。このファイルには、プロジェクトのメタデータと依存関係を定義する必要があります。package.json
は、npmパッケージを初期化するためのコマンドnpm init
で作成します。このチュートリアルでは特別な設定は必要ないので、-y
コマンドを使用して、パッケージをセットアップするための質問をすべてスキップします。
npm init -y
以下のようなpackage.json
が作成されます。
{
"name": "sample-app",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}
次に、スタートスクリプトを定義します。スタートスクリプトは、Herokuのようなサーバープラットフォームに、サーバーの起動時にどのファイルを使用するかを知らせるためのものです。このチュートリアルでは、サーバーの設定ファイルとしてindex.js
を設定します。テキストエディタでpackage.json
を開き、"start"
プロパティに"node index.js"
を指定してください。
{
"name": "sample-app",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"start": "node index.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}
以下のコマンドを実行して、Express.js (opens new window)のパッケージをインストールします。Express.jsは軽量なNode.jsのウェブサーバーフレームワークです。
npm install express
Express.jsをインストールすると、package.json
にパッケージの依存関係が追加されます。また、同時にnode_modules
というディレクトリが作成されます。このディレクトリには、ローカルでインストールしたパッケージが保存されますが、Herokuにはプッシュされないようにします。このディレクトリを除外するために、.gitignore
ファイルを作成します。
touch .gitignore
作成した.gitignore
ファイルをテキストエディタで開き、以下のように除外したいディレクトリ名をファイルに追加します。
node_modules/
これにより、指定したディレクトリがプッシュされることはありません。
# 3. ボットの実装
準備が完了しました。応答ボットを実装しましょう。
# 3-1. グローバル設定
サーバー設定のためのJavaScriptファイルindex.js
を作りましょう。
touch index.js
作成したindex.js
ファイルには、先ほどインストールしたexpress
パッケージをインポートするコードと、インスタンス化するコードを追加します。また、ボットがHTTPリクエストを処理できるようにhttps
パッケージもインポートします。このパッケージは、Node.jsにデフォルトで付属しているので、インストールする必要はありません。
index.js
をテキストエディタで開き、以下のコードを追加しましょう。
const https = require("https");
const express = require("express");
const app = express();
続いて、設定プロセスを簡素化する目的と、認証情報を保護する目的で環境変数を追加します。process.env.PORT
は、サーバーがどのポートでListenするかを指定します。process.env.LINE_ACCESS_TOKEN
は、Messaging APIを呼び出すために必要なチャネルアクセストークンを指定します。index.js
で、インポートしたパッケージの下に、以下を追加します。
const PORT = process.env.PORT || 3000;
const TOKEN = process.env.LINE_ACCESS_TOKEN;
# 3-2. ミドルウェアの設定
Express.jsは、ミドルウェアのウェブフレームワークです。ミドルウェア関数を使って、リクエストとレスポンスのサイクルを決めることができます。
このチュートリアルでは、Express.jsに付属する関数express.json()
とexpress.urlencoded()
を使用します。これらの関数は、それぞれリクエストオブジェクトをJSON、文字列、配列として扱うためにあらかじめ用意されているミドルウェア関数です。ミドルウェアの機能を使用するために、app.use()
を呼び出します。index.js
ファイルに以下のコードを追加します。
app.use(express.json());
app.use(
express.urlencoded({
extended: true,
})
);
# 3-3. ルーティングの設定
ボットサーバーに基本的なルーティングロジックを追加しましょう。ヘルスチェック等の失敗を防ぐために、ドメインのルート(/
)へのHTTP GETリクエストに対して、ステータス200
を返すようにします。index.js
ファイルに以下のコードを追加します。
app.get("/", (req, res) => {
res.sendStatus(200);
});
次に、app.listen()
関数を使って、サーバーにリスナーを設定します。リスナーのポートには、先ほど設定した環境変数PORT
を指定します。そのため、特に異なる指定がされていない限り、3000
をListenします。index.js
に、以下のコードを追加します。
app.listen(PORT, () => {
console.log(`Example app listening at http://localhost:${PORT}`);
});
Listenする準備ができたので、LINEプラットフォームからWebhook URLに送られてくるリクエストを処理するコードを追加しましょう。ユーザーがボットにメッセージを送信すると、LINEプラットフォームは、ボットサーバーがホストするWebhook URLにHTTP POSTリクエスト(Webhookイベント)を送信します。LINEプラットフォームからのリクエストに応答するために、app.post()
関数を使って、リクエストをルーティングします。index.js
の、app.get()
とapp.listen()
関数の間に、以下のコードを追加します。
app.post("/webhook", function (req, res) {
res.send("HTTP POST request sent to the webhook URL!");
});
このコードは、/webhook
エンドポイントにHTTP POSTリクエストが送られてきたときに、HTTP POST request sent to the webhook URL!
というHTTPレスポンスを返すようにボットサーバーに指示するものです。
ここまでで、index.js
は以下のようになっているはずです。
const https = require("https");
const express = require("express");
const app = express();
const PORT = process.env.PORT || 3000;
const TOKEN = process.env.LINE_ACCESS_TOKEN;
app.use(express.json());
app.use(
express.urlencoded({
extended: true,
})
);
app.get("/", (req, res) => {
res.sendStatus(200);
});
app.post("/webhook", function (req, res) {
res.send("HTTP POST request sent to the webhook URL!");
});
app.listen(PORT, () => {
console.log(`Example app listening at http://localhost:${PORT}`);
});
# 3-4. 応答メッセージを送る
応答ボットのコア機能である、ユーザーのメッセージに応答する機能を実装します。まず、ユーザーからメッセージを受信したことを識別する必要があります。Webhook URLで、type
プロパティの値がmessage
になっているメッセージイベントオブジェクトを受信したら、ユーザーからメッセージが送信されたと識別します。
本番用として、不特定多数のユーザー向けにボットを公開する場合には署名の検証が必要です。HTTPリクエストがLINEプラットフォームから送られたことを確認するために、リクエストヘッダーのx-line-signature
に含まれる署名を検証してください。
署名の検証方法について詳しくは、「署名を検証する」を参照してください。
ユーザーに応答するには、応答メッセージを送るエンドポイント(https://api.line.me/v2/bot/message/reply
)を使います。index.js
のapp.post
から、応答メッセージを送るエンドポイント(https://api.line.me/v2/bot/message/reply
)を呼び出します。以下のコードでapp.post
を置き換えてください。それぞれの処理の詳しい説明は、コードコメントで確認してください。
app.post("/webhook", function (req, res) {
res.send("HTTP POST request sent to the webhook URL!");
// ユーザーがボットにメッセージを送った場合、応答メッセージを送る
if (req.body.events[0].type === "message") {
// APIサーバーに送信する応答トークンとメッセージデータを文字列化する
const dataString = JSON.stringify({
// 応答トークンを定義
replyToken: req.body.events[0].replyToken,
// 返信するメッセージを定義
messages: [
{
type: "text",
text: "Hello, user",
},
{
type: "text",
text: "May I help you?",
},
],
});
// リクエストヘッダー。仕様についてはMessaging APIリファレンスを参照してください。
const headers = {
"Content-Type": "application/json",
Authorization: "Bearer " + TOKEN,
};
// Node.jsドキュメントのhttps.requestメソッドで定義されている仕様に従ったオプションを指定します。
const webhookOptions = {
hostname: "api.line.me",
path: "/v2/bot/message/reply",
method: "POST",
headers: headers,
body: dataString,
};
// messageタイプのHTTP POSTリクエストが/webhookエンドポイントに送信された場合、
// 変数webhookOptionsで定義したhttps://api.line.me/v2/bot/message/replyに対して
// HTTP POSTリクエストを送信します。
// リクエストの定義
const request = https.request(webhookOptions, (res) => {
res.on("data", (d) => {
process.stdout.write(d);
});
});
// エラーをハンドリング
// request.onは、APIサーバーへのリクエスト送信時に
// エラーが発生した場合にコールバックされる関数です。
request.on("error", (err) => {
console.error(err);
});
// 最後に、定義したリクエストを送信
request.write(dataString);
request.end();
}
});
# 4. Messaging APIチャネルを準備する
Messaging APIの機能を利用するには、Messaging APIチャネルを作成し、Webhook URLを登録する必要があります。作成していない場合は、チャネルを作成してください。
LINE DevelopersコンソールのMessaging APIチャネルの[Messaging API設定]タブで、チャネルアクセストークンを発行します。このトークンは、「Herokuでアプリをデプロイする」で使用します。
次にWebhook URLを登録します。[Messaging API設定]タブで、[Webhook URL]に、「Herokuの設定」で取得したHerokuのURLを元に、サーバーがWebhookをListenするURLを入力します。URLはhttps://{Name of your app}.herokuapp.com/webhook
という形式になっています。[Webhook URL]はhttps://{Name of your app}.herokuapp.com/
ではないので注意してください。
HerokuのURLを忘れてしまった場合は、Heroku Dashboard (opens new window)で確認できます。
[Webhookの利用]を有効にします。
ボットをテストするために、[Messaging API設定]タブのQRコードを読み取って、ボットに紐づけられたLINE公式アカウントを友だちとして追加します。テストのために、[応答メッセージ]と[あいさつメッセージ]は無効にしてください。
これで、Messaging APIチャネルの準備が整いました。
# 5. Herokuでアプリをデプロイする
先ほど「グローバル設定」で、環境変数LINE_ACCESS_TOKEN
の値をチャネルアクセストークンとして使うように設定しました。Herokuにデプロイしたアプリを正常に動作させるために、環境変数LINE_ACCESS_TOKEN
を登録する必要があります。
環境変数にチャネルアクセストークンを登録するために、ターミナルまたはコマンドラインツールで、以下のコマンドを実行してください。LINE_ACCESS_TOKEN
には、「Messaging APIチャネルを準備する」で取得したチャネルアクセストークンを設定します。
heroku config:set LINE_ACCESS_TOKEN={チャネルアクセストークンをここに入力してください}
これで、アプリをHerokuにデプロイする準備が整いました。作成したコードをHerokuにプッシュしましょう。ターミナルまたはコマンドラインツールで、以下のコマンドを実行してください。
git add .
git commit -m "First commit"
git push heroku main
# Webhook URLを検証する
ボットをテストする前に、Webhookが正常に動作しているか確認しましょう。「Messaging APIチャネルを準備する」で作成したチャネルの[Messaging API設定]タブに移動します。[Webhook URL]の[検証]をクリックし、Webhookが動作するかを確認します。Webhook URLに問題がない場合、「成功」のメッセージが表示されます。これでサンプルボットが完成しました。
# ボットを試す
LINEでボットにメッセージを送ってみてください。このようなメッセージが届くはずです。
# トラブルシューティング
ボットが正常に動作していない場合は、以下のコマンドを実行することでHerokuのログを確認できます。
heroku logs --tail
# 次のステップ
このボットには、さまざまな機能を追加できます。その例をいくつかご紹介します。
- リッチメニューを使って、ユーザーがタップ可能なオプションを追加する。
- ユーザーが特定のアクションを実行したときに送信されるアクションオブジェクトを使って、レスポンスを送信する。
- ユーザープロフィールを取得して、カスタマイズしたメッセージを送信する。
前述の通り、LINE Messaging API SDK for nodejs (opens new window)を使えば、より素早くボットを開発できます。こちらもぜひご検討ください。