Agent Skills by ALSEL
Anthropic Claudeソフトウェア開発⭐ リポ 0品質スコア 50/100

google-chat-messages

Google Chatの受信Webhookを通じてメッセージを送信します。テキスト、リッチカード(cardsV2)、スレッド返信に対応し、TypeScript型定義・カードビルダーユーティリティ・ウィジェットリファレンスも含みます。スクリプトからGoogle Chatへの投稿、チャットボット返信の構築、通知カードの送信、Webhook連携の実装、カードやスレッドのトラブルシューティングを行いたい場合に活用してください。

description の原文を見る

Send Google Chat messages via incoming webhooks — text, rich cards (cardsV2), threaded replies. TypeScript types, card builder utility, widget reference inline. Use whenever the user wants to post to Google Chat from a script, build a chatbot reply, send a notification card, build a Google Chat webhook integration, or troubleshoot card / threading issues.

SKILL.md 本文

Google Chat メッセージ

Incoming webhooks を使用して Google Chat スペースにメッセージを送信します。テキストメッセージ、リッチカード (cardsV2)、スレッド返信を生成します。

生成内容

  • Google Chat フォーマット対応のテキストメッセージ
  • ヘッダー、セクション、ウィジェット付きのリッチカードメッセージ (cardsV2)
  • スレッド付き会話
  • 再利用可能な webhook 送信ユーティリティ

ワークフロー

ステップ 1: Webhook URL を取得

Google Chat で:

  1. スペースを開く > スペース名をクリック > Manage webhooks
  2. webhook を作成 (名前を付け、必要に応じてアバター URL を追加)
  3. webhook URL をコピー

URL を環境変数またはシークレットマネージャーに保存してください。ハードコーディングは避けてください。

ステップ 2: メッセージタイプを選択

用途タイプ複雑度
シンプルな通知テキストメッセージ
構造化された情報 (ステータス、ダイジェスト)カードメッセージ (cardsV2)
継続的な更新スレッド返信
アクションボタン (URL を開く)ボタン付きカード

ステップ 3: メッセージを送信

assets/webhook-sender.ts を使用して送信ユーティリティを利用してください。構造化されたカード構成には assets/card-builder.ts を使用してください。

テキストフォーマット

Google Chat は標準の Markdown を使用しません。

フォーマット構文
太字*text**important*
イタリック_text__emphasis_
打消し線~text~~removed~
等幅フォント`text``code`
コードブロック```text```複数行コード
リンク<url|text><https://example.com|Click here>
ユーザーをメンション<users/USER_ID><users/123456>
全員をメンション<users/all><users/all>

非対応: **二重アスタリスク**、見出し (###)、ブロッククォート、テーブル、インライン画像。

テキストメッセージの例

await sendText(webhookUrl, '*Build Complete*\n\nBranch: `main`\nStatus: Passed\n<https://ci.example.com/123|View Build>');

cardsV2 構造

カードは cardsV2 フォーマットを使用します (従来のカードより推奨)。

const message = {
  cardsV2: [{
    cardId: 'unique-id',
    card: {
      header: {
        title: 'Card Title',
        subtitle: 'Optional subtitle',
        imageUrl: 'https://example.com/icon.png',
        imageType: 'CIRCLE'  // or 'SQUARE'
      },
      sections: [{
        header: 'Section Title',  // optional
        widgets: [
          // widgets go here
        ]
      }]
    }
  }]
};

ウィジェットリファレンス

cardsV2 セクション内で利用可能なすべてのウィジェットタイプ。

textParagraph

フォーマット済みテキストブロック。Google Chat フォーマット (*bold*, _italic_, <url|text>) に対応。

{
  textParagraph: {
    text: '*Status*: All systems operational\n_Last checked_: 5 minutes ago'
  }
}

decoratedText

ラベル付き値とオプションアイコン。キー値データに最も汎用的なウィジェット。

基本:

{
  decoratedText: {
    topLabel: 'Environment',
    text: 'Production',
    bottomLabel: 'Last deployed 2h ago'
  }
}

開始アイコン付き:

{
  decoratedText: {
    topLabel: 'Status',
    text: 'Healthy',
    startIcon: { knownIcon: 'STAR' }
  }
}

カスタムアイコン URL 付き:

{
  decoratedText: {
    topLabel: 'GitHub',
    text: 'PR #142 merged',
    startIcon: {
      iconUrl: 'https://github.githubassets.com/favicons/favicon.svg',
      altText: 'GitHub'
    }
  }
}

ボタン付き:

{
  decoratedText: {
    topLabel: 'Alert',
    text: 'CPU at 95%',
    button: {
      text: 'View',
      onClick: { openLink: { url: 'https://monitoring.example.com' } }
    }
  }
}

クリック可能 (ウィジェット全体):

{
  decoratedText: {
    text: 'View full report',
    wrapText: true,
    onClick: { openLink: { url: 'https://reports.example.com' } }
  }
}

テキストラップ付き:

{
  decoratedText: {
    topLabel: 'Description',
    text: 'This is a longer description that should wrap to multiple lines instead of being truncated',
    wrapText: true
  }
}

buttonList

1 つ以上のアクションボタン。ボタンは URL を開くか、アクションをトリガーします。

シングルボタン:

{
  buttonList: {
    buttons: [{
      text: 'Open Dashboard',
      onClick: { openLink: { url: 'https://dashboard.example.com' } }
    }]
  }
}

複数ボタン:

{
  buttonList: {
    buttons: [
      {
        text: 'Approve',
        onClick: { openLink: { url: 'https://app.example.com/approve/123' } },
        color: { red: 0, green: 0.5, blue: 0, alpha: 1 }
      },
      {
        text: 'Reject',
        onClick: { openLink: { url: 'https://app.example.com/reject/123' } }
      }
    ]
  }
}

アイコン付きボタン:

{
  buttonList: {
    buttons: [{
      text: 'View on GitHub',
      icon: { knownIcon: 'BOOKMARK' },
      onClick: { openLink: { url: 'https://github.com/org/repo/pull/42' } }
    }]
  }
}

image

スタンドアロン画像ウィジェット。

{
  image: {
    imageUrl: 'https://example.com/chart.png',
    altText: 'Monthly usage chart'
  }
}

divider

ウィジェット間の水平線区切り線。

{ divider: {} }

折りたたみ可能なセクション

セクションは折りたたみ可能で、最初の N 個のウィジェットのみが表示されます:

{
  header: 'Details',
  collapsible: true,
  uncollapsibleWidgetsCount: 2,  // 最初の 2 個を表示、残りを折りたたみ
  widgets: [
    { decoratedText: { topLabel: 'Status', text: 'Active' } },
    { decoratedText: { topLabel: 'Region', text: 'AU' } },
    // これらは最初は折りたたまれています
    { decoratedText: { topLabel: 'Instance', text: 'prod-01' } },
    { decoratedText: { topLabel: 'Memory', text: '2.1 GB' } },
    { decoratedText: { topLabel: 'CPU', text: '45%' } }
  ]
}

既知のアイコン

decoratedText とボタンウィジェットの knownIcon を介して利用可能なアイコン。

{ startIcon: { knownIcon: 'STAR' } }
// または
{ icon: { knownIcon: 'EMAIL' } }
アイコン名用途
AIRPLANE旅行、フライト
BOOKMARK保存、参照、リンク
BUS輸送、トランジット
CAR運転、輸送
CLOCK時間、期間、スケジュール
CONFIRMATION_NUMBER_ICONチケット、予約
DESCRIPTIONドキュメント、ファイル
DOLLAR金銭、価格、コスト
EMAILメール、メッセージ
INVITE招待
MAP_PIN位置情報、住所
MEMBERSHIPメンバー、ユーザー
MULTIPLE_PEOPLEチーム、グループ
OFFER取引、プロモーション
PERSON個別ユーザー
PHONE電話番号、通話
SHOPPING_CART商取引、購入
STAR評価、お気に入り、重要
STOREショップ、小売
TICKETチケット、イベント
VIDEO_CAMERAビデオ、ミーティング

リストにないアイコンの場合、公開アクセス可能な画像 (正方形、理想的には 24x24 または 48x48 ピクセル) を使用して iconUrl を使用してください。

スレッド処理

threadKey を使用してメッセージをスレッドでまとめます:

// 最初のメッセージ — スレッドを作成
const response = await sendCard(webhookUrl, card, {
  threadKey: 'deploy-2026-02-16'
});

// スレッドに返信 — &messageReplyOption=REPLY_MESSAGE_FALLBACK_TO_NEW_THREAD を追加
const threadUrl = `${webhookUrl}&messageReplyOption=REPLY_MESSAGE_FALLBACK_TO_NEW_THREAD`;
await sendCard(threadUrl, replyCard, {
  threadKey: 'deploy-2026-02-16'
});

threadKey はクライアントが割り当てた文字列です。関連メッセージには一貫したキーを使用してください (例: deploy-{date}alert-{id})。

一般的なパターン

通知カード

import { buildCard, sendCard } from './assets/card-builder';
import { sendWebhook } from './assets/webhook-sender';

const card = buildCard({
  cardId: 'deploy-notification',
  title: 'Deployment Complete',
  subtitle: 'production - v2.1.0',
  imageUrl: 'https://example.com/your-icon.png',
  sections: [{
    widgets: [
      { decoratedText: { topLabel: 'Environment', text: 'Production' } },
      { decoratedText: { topLabel: 'Version', text: 'v2.1.0' } },
      { decoratedText: { topLabel: 'Status', text: '*Healthy*', startIcon: { knownIcon: 'STAR' } } },
      { buttonList: { buttons: [{ text: 'View Deployment', onClick: { openLink: { url: 'https://dash.example.com' } } }] } }
    ]
  }]
});

ダイジェストカード (週間サマリー)

const digest = buildCard({
  cardId: 'weekly-digest',
  title: 'Weekly Summary',
  subtitle: `${count} updates this week`,
  sections: [
    {
      header: 'Highlights',
      widgets: items.map(item => ({
        decoratedText: { text: item.title, bottomLabel: item.date }
      }))
    },
    {
      widgets: [{
        buttonList: {
          buttons: [{ text: 'View All', onClick: { openLink: { url: dashboardUrl } } }]
        }
      }]
    }
  ]
});

エラー防止

間違い修正
テキストの **bold***bold* (シングルアスタリスク) を使用
[text](url) リンク<url|text> フォーマットを使用
cardsV2 ラッパーなしカードを { cardsV2: [{ cardId, card }] } でラップ
スレッド返信がスレッドでないwebhook URL に &messageReplyOption=REPLY_MESSAGE_FALLBACK_TO_NEW_THREAD を追加
Webhook が 400 を返すJSON 構造をチェック — 一般的な問題はトップレベルで text または cardsV2 が欠落している
カードが表示されないsections に少なくとも 1 つのウィジェットがあることを確認

アセットファイル

ファイル用途
assets/types.tscardsV2 の TypeScript 型定義
assets/card-builder.tsカードメッセージを構築するユーティリティ
assets/webhook-sender.tsエラーハンドリング付きで webhook に POST

ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
jezweb
リポジトリ
jezweb/claude-skills
ライセンス
MIT
最終更新
不明

Source: https://github.com/jezweb/claude-skills / ライセンス: MIT

関連スキル

汎用ソフトウェア開発⭐ リポ 39,967

doubt-driven-development

重要な判断はすべて、本番環境への展開前に新しい視点から対抗的レビューを実施します。速度より正確性が重要な場合、不慣れなコードを扱う場合、本番環境・セキュリティに関わるロジック・取り消し不可の操作など影響度が高い場合、または後でバグを修正するよりも今検証する方が効率的な場合に活用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 1,175

apprun-skills

TypeScriptを使用したAppRunアプリケーションのMVU設計に関する総合的なガイダンスが得られます。コンポーネントパターン、イベントハンドリング、状態管理(非同期ジェネレータを含む)、パラメータと保護機能を備えたルーティング・ナビゲーション、vistestを使用したテストに対応しています。AppRunコンポーネントの設計・レビュー、ルートの配線、状態フローの管理、AppRunテストの作成時に活用してください。

by yysun
OpenAIソフトウェア開発⭐ リポ 797

desloppify

コードベースのヘルスチェックと技術負債の追跡ツールです。コード品質、技術負債、デッドコード、大規模ファイル、ゴッドクラス、重複関数、コードスメル、命名規則の問題、インポートサイクル、結合度の問題についてユーザーが質問した場合に使用してください。また、ヘルススコアの確認、次の改善項目の提案、クリーンアップ計画の作成をリクエストされた際にも対応します。29言語に対応しています。

by Git-on-my-level
汎用ソフトウェア開発⭐ リポ 39,967

debugging-and-error-recovery

テストが失敗したり、ビルドが壊れたり、動作が期待と異なったり、予期しないエラーが発生したりした場合に、体系的な根本原因デバッグをガイドします。推測ではなく、根本原因を見つけて修正するための体系的なアプローチが必要な場合に使用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 39,967

test-driven-development

テスト駆動開発により実装を進めます。ロジックの実装、バグの修正、動作の変更など、あらゆる場面で活用できます。コードが正常に動作することを証明する必要がある場合、バグ報告を受けた場合、既存機能を修正する予定がある場合に使用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 39,967

incremental-implementation

変更を段階的に実施します。複数のファイルに影響する機能や変更を実装する場合に使用してください。大量のコードを一度に書こうとしている場合や、タスクが一度では完結できないほど大きい場合に活用します。

by addyosmani
本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: jezweb · jezweb/claude-skills · ライセンス: MIT