🐷
TypeScriptでオウム返しするLINE Botをつくる
TypeScriptで単純なLINE Botを作る方法を書きます。
ユーザーがLINEアプリから送信したテキストメッセージに対して、そのまま同じ文言を返すBotを作りたいと思います。
準備
TypeScriptでLINE BotをつくるにばSDKを利用すると便利です。Webサーバーとしてはexpressを用います。
yarn add @line/bot-sdk express
オウム返しするBotをつくる
オウム返しするBotは次のようなコードで実装できます。
import express, { Request, Response } from "express";
import {
middleware,
messagingApi,
MessageEvent,
TextMessage,
} from "@line/bot-sdk";
const { MessagingApiClient } = messagingApi;
import dotenv from "dotenv";
dotenv.config();
const app = express();
const config = {
channelSecret: process.env.LINE_API_SECRET || "",
};
app.post(
"/webhook",
middleware(config),
async (req: Request, res: Response) => {
const event = req.body.events[0] as MessageEvent;
if (event === undefined) {
// Webhook検証
return res.status(200).end();
}
// 簡略化のため、テキストメッセージとして扱う
const message = event.message as TextMessage;
// LINE Messaging APIクライアントの初期化
const client = new MessagingApiClient({
channelAccessToken: process.env.LINE_ACCESS_TOKEN || "",
});
// メッセージ返信
await client.replyMessage({
replyToken: req.body.events[0].replyToken,
messages: [
{
type: "text",
text: message.text, // オウム返し
},
],
});
}
);
const port = process.env.PORT || 3000;
app
.listen(port, () => {
console.log("Server is running on port", port);
})
.on("error", (err: Error) => {
throw new Error(`Server failed to start: ${err.message}`);
});
Webhookイベントオブジェクト
ユーザーがLINEアプリでメッセージを送信すると、LINEサーバーからWebhookイベントオブジェクトが送信されます。
{
"destination": "xxxxxxxxxx",
"events": [
// LINEアプリから送信されたメッセージ
]
}
events
にLINEアプリから送信されたメッセージが含まれます。メッセージは複数存在することもありますし、検証の場合は0件になります。
オウム返し
LINE SDKでLINE関連の操作を行うにはMessagingApiClient
を使います。
初期化するには、チャンネルアクセストークンが必要です。取得方法はいくつかありますが、簡単な方法はLINE Consoleから取得するのが便利です。
ユーザーから送信されたメッセージに返信するにはclient.replyMessage()
を用います。
返信内容はmessages
で指定します。
オウム返しするために、ユーザーから送信された内容をevents[].message.text
から取得して指定すれば大丈夫です。
まとめ
TypeScriptで単純なLINE Botを実装する方法を解説しました。
ユーザーがLINEアプリから送信した内容は、リクエストボディのevents
配列に含まれます。テキストメッセージの場合、message.text
に送信内容が設定されます。
ユーザーに返信するにはclient.replyMessage()
を使えば大丈夫です。
Discussion