LoginSignup
11
1

line-bot-sdk-gas で GAS に簡単に LINE ボットを構築できたので紹介する

Last updated at Posted at 2023-12-15

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メソッドに記載されているので、ご参照ください。

実装例

例として、ユーザーが友だち登録するとあいさつメッセージを送信する機能を実装していきます。

Pasted image 20231213141034.png

GAS にライブラリを追加する

まず GAS で SDK を利用するためにライブラリの追加をしていきます。

手順1:ライブラリ横の「+」ボタンを押下する

Pasted image 20231213131205.png

手順2:スクリプトID(下記)を入力して、「検索」を押下する

1EvYoqrPLkKgsV8FDgSjnHjW1jLp3asOSfDGEtLFO86pPSIm9PbuCQU7b

Pasted image 20231213131405.png

手順3:検索できたら「追加」を押下する

Pasted image 20231213131609.png

ライブラリ欄に「LineBotSDK」が表示されればライブラリの追加は完了です!

Pasted image 20231213131709.png

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 をデプロイします。

Pasted image 20231213224813.png

  • 種類:ウェブアプリ
  • アクセスできるユーザー:全員

上記を設定して「デプロイ」を押下する

Pasted image 20231213224400.png

デプロイすると URL が発行されるので、それを LINE Developers console に作成したチャネルの Messaging API 設定の Webhook URL に設定すれば準備は完了です!

※ LINE Developers console 上での作業は割愛しています。
以下記事がわかりやすいのでご参照ください。

おわりに

テスト用など簡単な LINE ボットを構築するときに GAS を使うのですが、このライブラリで簡単に実装できるのですごく助かります!これからも愛用していこうと思います。

参考文献

11
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
1