0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Google Chat API - thread返信編

Posted at

概要

Google Chat APIを利用したが、スレッドで返信するのに結構詰まったので簡単にまとめる

失敗した理由

image.png
公式の記事
ここで指定する必要があることに気が付かなかった

参考になった記事

実際のコード

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利用するためにアプリの設定とか構成やるのマジで面倒くさい、、、

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?