🕶️
LINEのグループIDを教えてくれるLINE Botを開発した
LINE Botを作る過程で、特定のLINEグループのIDを取得できるBotを開発しました。この記事では、開発の背景や手順、使用したGoogle Apps Script (GAS) のコードについて、わかりやすく解説します。
開発の背景
LINEグループIDは、グループの管理や外部システムとの連携を行う際に役立ちます。しかし、LINE公式の機能だけではグループIDを直接取得する方法がなく、これを手軽に実現できる方法を模索していました。
そこで、Google Apps Scriptを使い、指定のメッセージを送るだけでグループIDを返信してくれるLINE Botを作成しました。
実装の流れ
1. 必要な準備
LINE Developersコンソールの設定
- LINE Developersにアクセスして新しいチャネルを作成します。
- Messaging APIを有効化し、チャネルアクセストークンを取得します。
- Webhook URLにGASのデプロイURLを設定します。
Google Apps Scriptのセットアップ
- Google Driveから新しいスクリプトプロジェクトを作成します。
- 下記のコードをコピー&ペーストします。
コードの解説
以下が、Botの主な処理を行うコードです。
チャネルアクセストークンの保存
function setupProperties() {
const scriptProperties = PropertiesService.getScriptProperties();
scriptProperties.setProperty('CHANNEL_ACCESS_TOKEN', 'ここにアクセストークン');
}
setupProperties
関数は、アクセストークンをGASのスクリプトプロパティに保存します。この関数は、初回セットアップ時のみ実行してください。
LINEのWebhookを処理
function doPost(e) {
try {
const scriptProperties = PropertiesService.getScriptProperties();
const CHANNEL_ACCESS_TOKEN = scriptProperties.getProperty('CHANNEL_ACCESS_TOKEN');
const contents = JSON.parse(e.postData.contents);
contents.events.forEach(event => {
if (event.type === 'message' && event.message.type === 'text') {
const userMessage = event.message.text.trim();
if (userMessage === 'グループID') {
const groupId = event.source.groupId;
const replyMessage = groupId
? 'このグループのIDは: ' + groupId + ' です。'
: 'グループIDを取得できませんでした。';
replyToLine(event.replyToken, replyMessage, CHANNEL_ACCESS_TOKEN);
}
}
});
return ContentService.createTextOutput(JSON.stringify({status: 'success'})).setMimeType(ContentService.MimeType.JSON);
} catch (error) {
Logger.log('Error in doPost: ' + error);
return ContentService.createTextOutput(JSON.stringify({status: 'error', message: error.message})).setMimeType(ContentService.MimeType.JSON);
}
}
主なポイント
- Webhookデータの受信: LINEから送られてくるデータを解析。
- 条件分岐でメッセージ処理: ユーザーが「グループID」と入力した場合にグループIDを取得。
- エラー処理: 万が一のエラーにも対応する設計。
LINEへの返信処理
function replyToLine(replyToken, message, channelAccessToken) {
const url = 'https://api.line.me/v2/bot/message/reply';
const headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + channelAccessToken
};
const payload = {
replyToken: replyToken,
messages: [
{
type: 'text',
text: message
}
]
};
const options = {
method: 'post',
headers: headers,
payload: JSON.stringify(payload)
};
try {
const response = UrlFetchApp.fetch(url, options);
if (response.getResponseCode() !== 200) {
Logger.log('返信に失敗しました。ステータスコード: ' + response.getResponseCode());
}
} catch (error) {
Logger.log('Error in replyToLine: ' + error);
}
}
主なポイント
-
replyToken
: 返信に使用するLINE独自のトークン。 -
messages
: LINE Botが送るメッセージ内容を指定。 -
UrlFetchApp
: LINE APIを呼び出し、返信を送信。
動作確認とデプロイ
- デプロイ: GASで「ウェブアプリとしてデプロイ」を選択。
- Webhook URLの登録: デプロイURLをLINE Developersコンソールに設定。
- Botを招待: LINEグループにBotを追加。
注意
通常設定のままだとBotをグループに招待できません。
招待してもすぐに退会してしまいます。
Botのアカウント設定(?)でグループへの参加許可を承認する設定項目があるので、そこで承認するようにしましょう!
グループ内で「グループID」とメッセージを送信すると、BotがグループIDを返してくれるようになります。
結果と今後の改善点
結果
改善点
- メッセージのカスタマイズ: より多様なコマンドに対応。
- セキュリティ: Webhookのリクエスト検証を追加してセキュリティ強化。
まとめ
LINEグループIDを教えてくれるBotの作成は、GASとLINE Messaging APIを活用することで比較的簡単に実現できます。この記事を参考に、ぜひ自分の用途に合ったBotを作ってみてください!
あなたのLINE Bot開発の参考になれば幸いです!
Discussion