概要
Google Chat APIを利用したが、スレッドで返信するのに結構詰まったので簡単にまとめる
失敗した理由
(公式の記事)
ここで指定する必要があることに気が付かなかった
参考になった記事
実際のコード
require('dotenv').config();
const chat = require('@googleapis/chat');
/**
* 親メッセージを送信し、そのスレッドに子メッセージを送信する関数
*/
async function main() {
// 認証設定
const auth = new chat.auth.GoogleAuth({
keyFilename: '.credentials.json',
scopes: [
'https://www.googleapis.com/auth/chat.bot', // 今回はbotで作成したためこんな感じ
],
});
const authClient = await auth.getClient();
const chatClient = chat.chat({ version: 'v1', auth: authClient });
const spaceName = process.env.SEND_PLACE;
if (!spaceName) {
console.error('環境変数 SEND_PLACE が設定されていません。');
return;
}
const parentMessageText = '親メッセージ';
const childMessageText = '子メッセージ(スレッドへの返信)';
try {
// 親メッセージを送信
const sendParentMessageResult = await chatClient.spaces.messages.create({
parent: spaceName,
requestBody: {
text: parentMessageText,
},
});
const parentMessageData = sendParentMessageResult.data;
if (
!parentMessageData ||
!parentMessageData.thread ||
!parentMessageData.thread.name
) {
console.error(
'親メッセージの送信に失敗したか、スレッド情報が見つかりません。'
);
console.log('親メッセージ送信結果:', parentMessageData); // デバッグ用
return;
}
// 親メッセージのレスポンスからスレッドIDを取得
const threadName = parentMessageData.thread.name;
console.log(`親メッセージ "${parentMessageText}" を送信しました。`);
console.log('親メッセージ送信結果:', parentMessageData);
// 子メッセージを親メッセージのスレッドに送信
const sendChildMessageResult = await chatClient.spaces.messages.create({
parent: spaceName,
requestBody: {
text: childMessageText,
thread: {
name: threadName,
},
},
messageReplyOption: 'REPLY_MESSAGE_OR_FAIL', // ここが重要
});
console.log(
`子メッセージ "${childMessageText}" をスレッド "${threadName}" に送信しました。`
);
console.log('子メッセージ送信結果:', sendChildMessageResult.data);
} catch (err) {
console.error('処理中にエラーが発生しました:', err);
}
}
main();
この一行を追加することでスレッドに返信が可能である
+ messageReplyOption: 'REPLY_MESSAGE_OR_FAIL', // ここが重要
まとめ
設定探すの大変。それ以上にGoogleChat利用するためにアプリの設定とか構成やるのマジで面倒くさい、、、