Skip to main content

google-chat

CRITICAL: You MUST activate this skill BEFORE sending, reading, or managing Google Chat messages. Always trigger this skill as the first step when the user mentions "chat", "google chat", "message a space", "DM", or sending a chat message. Contains strict formatting mandates that override default messaging behavior.

소스 정보

저장소
gemini-cli-extensions/workspace
최근 소스 활동
2026년 3월 11일 19:39
감지된 SKILL.md 언어
영어
스타
645
포크
107

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
google-chat
description
CRITICAL: You MUST activate this skill BEFORE sending, reading, or managing Google Chat messages. Always trigger this skill as the first step when the user mentions "chat", "google chat", "message a space", "DM", or sending a chat message. Contains strict formatting mandates that override default messaging behavior.
# Google Chat Expert You are an expert at messaging and managing conversations through the Google Chat API. Follow these guidelines when helping users with chat tasks. ## Chat Message Formatting When composing messages (via `chat.sendMessage` or `chat.sendDm`), **always use Google Chat's supported markdown syntax**. Google Chat uses a specific subset of markdown that differs from standard markdown. You MUST convert any unsupported syntax before sending. ### Supported Formatting | Syntax | Renders As | Example | | :----------------- | :---------------- | :----------------------------- | | `*text*` | **bold** | `*Important update*` | | `_text_` | _italic_ | `_Please review_` | | `~text~` | ~~strikethrough~~ | `~no longer relevant~` | | `` `code` `` | `inline code` | `` `git status` `` | | ` ``` ` | code block | ` ```\ncode\n``` ` | | `* ` or `- ` | bulleted list | `* Item one\n* Item two` | | `<url\|text>` | hyperlink | `<https://example.com\|Click>` | | `<users/{userId}>` | @mention | `<users/12345678>` | ### Unsupported Syntax (Convert These) Always convert these before sending a message to Chat: | Unsupported Syntax | Convert To | | :-------------------------- | :------------------------------- | | `**bold**` (double `*`) | `*bold*` (single `*`) | | `[text](url)` markdown link | `<url\|text>` Chat link format | | `# Heading` | `*Heading*` (bold text) | | Nested lists | Flatten to a single-level list. | | `> blockquote` | Preserve the `>` character as-is | ### Message Formatting Examples #### Status Update ``` *Project Status Update* _Sprint 14 Summary:_ * Completed 12 of 15 story points * ~Deferred analytics dashboard~ (moved to Sprint 15) * Key PR: <https://github.com/org/repo/pull/42|#42 - Auth refactor> Next steps: `deploy-staging` pipeline runs tonight. ``` #### Code Snippet ```` Found the bug. The issue is in the handler: ``` func handleRequest(ctx context.Context) error { // Missing nil check here if ctx == nil { return ErrNilContext } return process(ctx) } ``` <users/12345678> can you review this fix? ```` ## Spaces vs. Direct Messages Google Chat has two main messaging contexts. Use the right tool for each: ### Spaces (Group Conversations) Spaces are shared group conversations with a display name. | Action | Tool | Key Parameter | | :----------------- | :--------------------- | :------------------------- | | Find a space | `chat.findSpaceByName` | `displayName` | | List all spaces | `chat.listSpaces` | _(none)_ | | Send a message | `chat.sendMessage` | `spaceName`, `message` | | Create a new space | `chat.setUpSpace` | `displayName`, `userNames` | ### Direct Messages (1:1) DMs are private conversations between two users, identified by email. | Action | Tool | Key Parameter | | :-------------- | :------------------- | :----------------- | | Find a DM space | `chat.findDmByEmail` | `email` | | Send a DM | `chat.sendDm` | `email`, `message` | > **Note:** `chat.sendDm` and `chat.findDmByEmail` both use `spaces.setup` under > the hood. If no DM space exists with the user, one is automatically created. > There is no need to create a DM space separately. > **Limitation:** DM tools only support 1:1 conversations. For group > conversations (3+ people), use `chat.setUpSpace` to create a named space > instead. ## Threading Threads keep related messages grouped together within a space. Use the `threadName` parameter to reply in an existing thread. ### How Threading Works 1. **Start a new thread**: Send a message without `threadName`. The response will include a `thread.name` you can use for replies. 2. **Reply to a thread**: Pass `threadName` when calling `chat.sendMessage` or `chat.sendDm`. The API uses `REPLY_MESSAGE_FALLBACK_TO_NEW_THREAD` — if the thread doesn't exist, a new thread is created. 3. **List threads**: Use `chat.listThreads` to discover threads in a space. It returns the most recent message of each unique thread in reverse chronological order. 4. **Get thread messages**: Use `chat.getMessages` with the `threadName` parameter to get all messages in a specific thread. ### Thread Example Workflow ``` 1. chat.listThreads({ spaceName: "spaces/AAAAN2J52O8" }) → Returns threads with thread.name values 2. chat.getMessages({ spaceName: "spaces/AAAAN2J52O8", threadName: "spaces/AAAAN2J52O8/threads/IAf4cnLqYfg" }) → Returns all messages in that thread 3. chat.sendMessage({ spaceName: "spaces/AAAAN2J52O8", message: "Thanks for the update!", threadName: "spaces/AAAAN2J52O8/threads/IAf4cnLqYfg" }) → Replies in the same thread ``` ## Unread Messages Use `unreadOnly: true` on `chat.getMessages` to filter for unread messages only. ### How It Works The unread filter: 1. Looks up the authenticated user's ID via the People API 2. Finds the user's membership in the space 3. Uses the `lastReadTime` from the membership to filter messages created after that timestamp 4. If no `lastReadTime` is found, all messages are returned (treats everything as unread) ### Combining Filters You can combine `unreadOnly` with `threadName` to get unread messages in a specific thread. The filters are joined with `AND`: ``` chat.getMessages({ spaceName: "spaces/AAAAN2J52O8", threadName: "spaces/AAAAN2J52O8/threads/IAf4cnLqYfg", unreadOnly: true }) ``` ## Space Management ### Creating a Space Use `chat.setUpSpace` to create a new named space with members: ``` chat.setUpSpace({ displayName: "Q1 Planning", userNames: ["users/12345678", "users/87654321"] }) ``` > **Important:** The `userNames` parameter expects user resource names in the > format `users/{userId}`, not email addresses. Use `people.getUserProfile` to > look up user IDs and convert the `people/{id}` resource name to `users/{id}`. ## Resource Name Formats Google Chat uses structured resource names. Here is a quick reference: | Resource | Format | Example | | :------- | :-------------------------------------- | :--------------------------------------- | | Space | `spaces/{spaceId}` | `spaces/AAAAN2J52O8` | | Message | `spaces/{spaceId}/messages/{messageId}` | `spaces/AAAAN2J52O8/messages/abc123` | | Thread | `spaces/{spaceId}/threads/{threadId}` | `spaces/AAAAN2J52O8/threads/IAf4cnLqYfg` | | User | `users/{userId}` | `users/12345678` |
GitHub에서 보기