Bot

ライブラリを使用しないおうむ返しbotの作成について

goodwork_25c804

2024.09.25既読 83

先日@kunihiros様の記事( 

https://qiita.com/kunihiros/items/4cdec5784f21598cfee0
 )を参考にさせていただき、LINE WORKSのbotを作成いたしました。
そして、この度、上記記事のアレンジとして、上記記事で提供していただいているライブラリを使用せずに、botを作成しようと試みました。
しかしながら、ライブラリを使用してのbotはうまく機能したものの、ライブラリをなくし、自前でコードを作成した時、botの返信がなくなってしまいました。
以下のようなコードを書きましたが、機能しなかったので、修正点などがあれば、ご教授願えると、非常に助かります。
各情報はスクリプト プロパティーから取得するようにしてあります。

// 1. JWTを生成する関数
function getJwt(config) {
const time = Date.now();
const header = Utilities.base64Encode(JSON.stringify({ 'alg': 'RS256', 'typ': 'JWT' }));
const claimSet = Utilities.base64Encode(JSON.stringify({
'iss': config.CLIENT_ID,
'sub': config.SERVICE_ACCOUNT,
'iat': Math.floor(time / 1000),
'exp': Math.floor(time / 1000 + 3600)
}));
const signature = Utilities.base64Encode(Utilities.computeRsaSha256Signature(`${header}.${claimSet}`, config.PRIVATE_KEY));
return `${header}.${claimSet}.${signature}`;
}

// 2. Access Tokenを取得する関数
function getAccessToken(config) {
const jwt = getJwt(config);
const endpoint = 'https://auth.worksmobile.com/oauth2/v2.0/token';
const options = {
method: 'post',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
payload: {
'assertion': jwt,
'grant_type': 'urn:ietf:params:oauth:grant-type:jwt-bearer',
'client_id': config.CLIENT_ID,
'client_secret': config.CLIENT_SECRET,
'scope': config.SCOPE
}
};
return JSON.parse(UrlFetchApp.fetch(endpoint, options));
}

// 3. メッセージを送信する関数
function sendMessage(config, channelId, message) {
const accessToken = getAccessToken(config).access_token;
const url = `https://www.worksapis.com/v1.0/bots/id/channels/${channelId}/messages`;

const options = {
method: 'post',
headers: {
'Authorization': `Bearer ${accessToken}`,
'Content-Type': 'application/json'
},
payload: JSON.stringify({
'content': {
'type': 'text',
'text': message
}
})
};

// メッセージをLINE WORKSに送信
const response = UrlFetchApp.fetch(url, options);
Logger.log("Message Send Response: " + response.getContentText());
return response.getContentText();
}

// 4. メッセージ受信時に処理を行うdoPost関数
function doPost(e) {
if (e == null || e.postData == null || e.postData.contents == null) return;

// リクエストデータを取得
let requestJSON = e.postData.contents;
let requestObj = JSON.parse(requestJSON);

//おうむ返し
let text = requestObj.content.text;

// 環境変数を取得
let config = getEnv_();
// ユーザーのチャンネルIDを取得
let channelId = requestObj.source.userId; // これはユーザーIDとして扱っています

// LINE WORKSにメッセージを送信
sendMessage(config, channelId, text);
}

// 5. 環境変数を取得する関数
function getEnv_() {
let scriptProperties = PropertiesService.getScriptProperties();
return {
CLIENT_ID: scriptProperties.getProperty('client_id'),
CLIENT_SECRET: scriptProperties.getProperty('client_secret'),
SERVICE_ACCOUNT: scriptProperties.getProperty('service_account'),
PRIVATE_KEY: scriptProperties.getProperty('private_key'),
SCOPE: 'bot' , // bot操作用のスコープ
DOMAIN_ID: scriptProperties.getProperty('domain_id'), // domain_idをスクリプトプロパティから取得
ADMIN_ID: scriptProperties.getProperty('admin_id'), // admin_idをスクリプトプロパティから取得
BOT_ID: scriptProperties.getProperty('bot_id') // bot_idをスクリプトプロパティから取得
};
}


コメント0

前の投稿 Botからメッセージ送信したFlexible Templateにおいて、太字としたspan要素がモバイル版で正しく表示されない
次の投稿HRMOS勤怠でLINEWORKSと連携させたいが、LINEWORKS V2の連携ができていないと表示
リスト

まだ、解決できませんか?
今すぐ実際に使用しているLINE WORKSユーザーに質問してみましょう。