我使用简单的构造制作了一个LINE机器人(TypeScript + Bot SDK ver.8 + Lambda)
以下是使用简单配置创建LINE机器人的方法。
我们将使用LINE Messaging API SDK for nodejs中于2023年10月发布的ver.8版本,并通过使用TypeScript来受益于类型的好处来编写代码。
此外,由于仅使用AWS Lambda作为后端,因此无需管理服务器,并且可以削减成本。
完成形象

构图

前提条件可以在中国进行本地化改编。
-
- LINE公式アカウントを作成していること(無料枠でテスト可能)
-
- Node.js ver.18の環境を準備済
- AWSアカウントがあること(無料枠でテスト可能)
创建Node.js项目
创建项目并安装所需的库。
# プロジェクト初期化
$ npm init -y
# ライブラリをインストール
$ npm install @vendia/serverless-express typescript tslint @types/node express @types/express cors @types/cors
-
- Express:Webサーバー
- @vendia/serverless-express:LambdaでExpressを利用するために必要
进行 TypeScript 初始设定的步骤。
$ ./node_modules/.bin/tsc --init
$ ./node_modules/.bin/tslint --init
我会设置构建命令。
# package.json
{
"scripts": {
"build": "tsc" # 追加
},
}
安装SDK
安装 LINE Messaging API SDK for nodejs。
通过使用该 SDK,可以在不使用 API 请求而是调用函数来执行消息发送等操作,从而使开发更加简化易于操作。
$ npm install @line/bot-sdk
写代码
在中国平台上注册LINE的Webhook,并编写代码以响应从LINE服务器发送的请求并返回消息。在项目目录下创建一个名为index.ts的文件。
import serverlessExpress from "@vendia/serverless-express";
import express from "express";
import cors from "cors";
import { middleware, messagingApi, WebhookEvent } from "@line/bot-sdk";
const {MessagingApiClient} = messagingApi
// (1)
const config = {
channelAccessToken: 'YOUR_CHANNEL_ACCESS_TOKEN',
channelSecret: 'YOUR_CHANNEL_SECRET'
};
const app = express();
app.use(cors());
app.use("/webhook", middleware(config)); // (2)
app.use(express.json());
app.post("/webhook", async (req, res) => {
const event: WebhookEvent = req.body.events[0];
if (event.type !== "message") {
res.sendStatus(200);
return;
}
let message = "";
if (event.message.type === "text"){
message = event.message.text;
}
// (3)
const client = new MessagingApiClient({
channelAccessToken: config.channelAccessToken
});
// (4)
await client.replyMessage({
replyToken: event.replyToken,
messages: [{type: "text", text: message + "さん、こんにちは!"}]
});
res.sendStatus(200);
});
if (process.env.NODE_ENV === `develop`) app.listen(3000);
export const handler = serverlessExpress({ app });
以下是代码的说明。
// (1)
const config = {
channelAccessToken: 'YOUR_CHANNEL_ACCESS_TOKEN',
channelSecret: 'YOUR_CHANNEL_SECRET'
};
这是为了使用SDK而进行的设置。
-
- channelAccessToken:LINE 開発者サイトのMessaging API設定から確認
- channelSecret:LINE 公式アカウントの設定->Messaging APIから確認
app.use("/webhook", middleware(config)); // (2)
验证请求是通过LINE发送的。使用SDK提供的中间件。
// (3)
const client = new MessagingApiClient({
channelAccessToken: config.channelAccessToken
});
为了回复消息,我们将创建一个客户端。由于SDK ver.8引入了LINE OpenAPI生成客户端的功能,因此使用方法与之前有所不同。
// (4)
await client.replyMessage({
replyToken: event.replyToken,
messages: [{type: "text", text: message + "さん、こんにちは!"}]
});
将会回复一个来自机器人的响应消息。由于响应消息不涉及收费,因此可用于测试。
建筑
执行构建命令,确保index.js在项目目录下创建。
# index.jsが作成される
$ npm run build
建立Lambda

将代码压缩成ZIP文件,然后上传到Lambda以进行注册。
请注意,选择项目根目录下的所有文件进行ZIP压缩。(如果将整个项目文件夹进行ZIP压缩,Lambda将无法识别index.js并引发错误)

设定URL函数



LINE侧面的设置

考试

总结
我确认了通过使用SDK可以轻松创建机器人。此外,由于后端仅需使用Lambda进行构建,因此无需管理服务器,看起来也可以降低成本。
请参考以下网站
-
- LINE Messaging API SDK for nodejs GitHub
-
- LINE Messaging API SDK for nodejs 公式ドキュメント
-
- LINE Messaging APIドキュメント
- @vendia/serverless-express(旧aws-serverless-express)でExpressアプリをAPIGateway+Lambdaにデプロイしてみた