LINE DC Advent Calendar 2023
本記事は LINE DC Advent Calendar 2023 の16日目の記事です。
はじめに
LINE Developers Community の LT 大会に登壇し、個人開発した LINE ボットについて紹介しました!
下記の 1:17:00 ぐらいから出てきます。
本記事の目的
上記動画で紹介している LINE ボットは GAS をサーバーとして、Messaging API を利用しています。
GAS から Messaging API を利用する際に、kobanyan さんの line-bot-sdk-gas という Messaging API の GAS 用 SDK を利用させていただいたのですが、初心者の私にも非常に便利だったので、勝手に紹介します。
使い方
呼び出し方
Messaging API のアクセストークンをもたせた状態でインスタンスを作成します。
const lineClient = new LineBotSDK.Client({
channelAccessToken: 'アクセストークン',
});
インスタンスからメソッド(replyMessage()
など)を呼び出すだけで Messaging API の各機能を実装できます。
lineClient.replyMessage(replyToken, { type: 'text', text: 'こんにちは' });
メソッド
使用できるメソッド(関数)に関しては、line-bot-sdk-gasのメソッドに記載されているので、ご参照ください。
実装例
例として、ユーザーが友だち登録するとあいさつメッセージを送信する機能を実装していきます。
GAS にライブラリを追加する
まず GAS で SDK を利用するためにライブラリの追加をしていきます。
手順1:ライブラリ横の「+」ボタンを押下する
手順2:スクリプトID(下記)を入力して、「検索」を押下する
1EvYoqrPLkKgsV8FDgSjnHjW1jLp3asOSfDGEtLFO86pPSIm9PbuCQU7b
手順3:検索できたら「追加」を押下する
ライブラリ欄に「LineBotSDK」が表示されればライブラリの追加は完了です!
doPost で HTTP リクエストを受け付ける
まず前提として Messaging API からの Webhook 送信を GAS で受け付ける必要があります。
GAS では以下のように doPost
関数を定義することで、HTTP リクエストを受け付けることができます。
function doPost(e) {
// WebHookで取得したJSONデータをオブジェクト化し、取得
const event = JSON.parse(e.postData.contents).events[0];
const eventType = event.type;
const replyToken = event.replyToken;
// 友だち登録された場合に実行
if(eventType === 'follow') {
greetRegisteredUser(event, replyToken)
}
}
あいさつメッセージの送信
あいさつメッセージ送信の関数群を実装していきます。
下記はコード全体です。
* スクリプトが持つスクリプトプロパティを取得して、呼び出し元に渡す
* @return {string} scriptPropertiesValues スクリプトプロパティの内容
*/
function getScriptPropertiesValues() {
var scriptProperties = PropertiesService.getScriptProperties();
var scriptPropertiesValues = scriptProperties.getProperties();
return scriptPropertiesValues;
}
const scriptPropertyValues = getScriptPropertiesValues();
const accessToken = scriptPropertyValues['accessToken'];
// インスタンス生成
const lineClient = new LineBotSDK.Client({
channelAccessToken: accessToken // アクセストークン
});
function greetRegisteredUser(event, replyToken) {
// ユーザー情報
const userId = event.source.userId;
// LINE API でユーザー情報を取得するメソッド
const user = getUserProfile(userId, replyToken);
const userDisplayName = user.displayName;
const pictureUrl = user.pictureUrl;
lineClient.replyMessage(replyToken, [
{
type: 'text',
text: `こんにちは、${userDisplayName} さん!`,
},
{
type: 'image',
originalContentUrl: pictureUrl,
previewImageUrl: pictureUrl,
},
]);
}
function getUserProfile(userId) {
//LINE Messaging APIにリクエストし、ユーザーからの投稿に返答する
const result = lineClient.getProfile(userId);
return result;
}
インスタンスの生成
まず LineBotSdk のインスタンスを生成します。
今回、チャネルへのアクセストークンをスクリプトプロパティという GAS プロジェクトの保管場所に配置しているので、その取得処理も記載しています。
* スクリプトが持つスクリプトプロパティを取得して、呼び出し元に渡す
* @return {string} scriptPropertiesValues スクリプトプロパティの内容
*/
function getScriptPropertiesValues() {
var scriptProperties = PropertiesService.getScriptProperties();
var scriptPropertiesValues = scriptProperties.getProperties();
return scriptPropertiesValues;
}
const scriptPropertyValues = getScriptPropertiesValues();
const accessToken = scriptPropertyValues['accessToken'];
const lineClient = new LineBotSDK.Client({
channelAccessToken: accessToken // アクセストークン
});
ユーザー情報の取得
getProfile
関数を使用してユーザー情報を取得します。
function getUserProfile(userId) {
//LINE Messaging APIにリクエストし、ユーザーからの投稿に返答する
const result = lineClient.getProfile(userId);
return result;
}
メッセージの送信
取得したユーザー情報からユーザー名 と ユーザーのアイコン画像 を抽出し、replyMessage
関数を使用してそれらを送信します。
function greetRegisteredUser(event, replyToken) {
// ユーザー情報
const userId = event.source.userId;
// LINE API でユーザー情報を取得するメソッド
const user = getUserProfile(userId, replyToken);
const userDisplayName = user.displayName;
const pictureUrl = user.pictureUrl;
lineClient.replyMessage(replyToken, [
{
type: 'text',
text: `こんにちは、${userDisplayName} さん!`,
},
{
type: 'image',
originalContentUrl: pictureUrl,
previewImageUrl: pictureUrl,
},
]);
}
これ実装は完了です!
デプロイして Messaging API とつなげる
GAS をデプロイします。
- 種類:ウェブアプリ
- アクセスできるユーザー:全員
上記を設定して「デプロイ」を押下する
デプロイすると URL が発行されるので、それを LINE Developers console に作成したチャネルの Messaging API 設定の Webhook URL に設定すれば準備は完了です!
※ LINE Developers console 上での作業は割愛しています。
以下記事がわかりやすいのでご参照ください。
おわりに
テスト用など簡単な LINE ボットを構築するときに GAS を使うのですが、このライブラリで簡単に実装できるのですごく助かります!これからも愛用していこうと思います。
参考文献