Repository navigation
Expand file tree
/
Copy pathplugin.json
More file actions
108 lines (108 loc) · 13.4 KB
/
Copy pathplugin.json
File metadata and controls
108 lines (108 loc) · 13.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
{
"$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
"name": "chatmate",
"version": "0.25.0",
"description": "Connects your AI to your Telegram through your personal ChatMate bot: read the chats you connected, give tasks in the bot, and get answers, drafts and results back in Telegram.",
"author": {
"name": "ChatMate",
"url": "https://www.getchatmate.com"
},
"homepage": "https://www.getchatmate.com/connect",
"repository": "https://github.com/saplq/chatmate-plugin",
"license": "MIT",
"keywords": [
"telegram",
"messages",
"chats"
],
"extensions": {
"com.openai": {
"interface": {
"displayName": "ChatMate",
"shortDescription": "Ask about your Telegram chats",
"longDescription": "ChatMate brings the Telegram chats you choose into this conversation. Create your personal ChatMate bot in @chatmate_aibot, connect private chats through Telegram's Chat Automation or add the bot to a group, sign in with Telegram and allow access once.\n\nAsk what people wrote recently, find the message where you agreed on a price, or check whether someone sent a contract. Answers name the chat and the date, and ChatMate shows which period it has messages for.\n\nWhen you ask, ChatMate can send you a summary or a reminder in your private chat with your bot, or ask you to confirm a step there with Confirm and Cancel buttons. When you explicitly ask, your AI can send text, files it prepares (documents, tables, presentations, PDFs, pictures, video, audio, albums of up to ten) or saved media/stickers, create polls, manage Business checklists and its own sent messages, and use supported Telegram actions. Your direct request authorizes that action; client permissions and Telegram rights still apply. A prepared file is kept for that AI connection only, for 24 hours or until two hours after its latest send or confirmation card if that is later; a sent file stays in Telegram and in your ChatMate history.\n\nVoice and audio messages can be transcribed automatically through OpenAI within your minute limits. ChatMate keeps encrypted copies of supported images, and Radar uses conversation context through Vercel AI Gateway and OpenAI to identify questions and commitments. These service features can run before you connect your AI.\n\nHistory starts when a chat is connected: earlier messages, secret chats and channels are not available. ChatMate keeps the latest 60 days of messages from connected chats. On the My data page at getchatmate.com you can turn off a chat, disconnect this app, download or delete your data at any time.",
"developerName": "Oleksandr Plakhuta",
"category": "Productivity",
"capabilities": [
"Read",
"Write"
],
"websiteURL": "https://www.getchatmate.com",
"supportURL": "https://www.getchatmate.com/en/support",
"privacyPolicyURL": "https://www.getchatmate.com/en/privacy",
"termsOfServiceURL": "https://www.getchatmate.com/en/terms",
"defaultPrompt": [
"Set up ChatMate so I can send tasks in my Telegram bot and receive replies there.",
"What did people write to me on Telegram over the last few days?",
"Find the Telegram message where we agreed on the price."
],
"brandColor": "#111111",
"composerIcon": "./assets/icon.png",
"logo": "./assets/logo.png"
},
"review": {
"demo_recording_url": "https://github.com/saplq/chatmate-plugin/releases/tag/directory-demo-2026-10-24",
"commerce": true,
"test_cases": {
"positive": [
{
"description": "Setup: authenticate the dedicated reviewer account using the secure portal instructions. Its isolated workspace contains only synthetic chats: Anna Kovalenko, Mark Weber, Bakery website team and My ChatMate. Start with no claimed bot task. Verify connection, chat discovery and source-backed reading; do not configure automation.",
"prompt": "Is my ChatMate connection ready? Show the chats I connected and summarize what people wrote over the last few days.",
"tools_triggered": "get_connection_status, list_chats, catch_up or get_messages",
"expected_behavior": "Checks get_connection_status and pages list_chats as needed. Finds exactly the four synthetic chats. Reads connected-chat activity for the requested period using bounded catch_up with detail=full, or get_messages with continuation cursors. Follows relevant more_chats or message continuations and states any remaining coverage limits; a bounded catch-up overview is not proof of exhaustive history coverage. Summarizes only returned content with chat names, authors and local dates. Reports actual connection/automation state; connection success alone is not automatic task execution. No message is sent, no note or chat profile is changed, and no owner task is executed. Message retrieval can return the prepared synthetic transcript; reviewer fixtures do not start external transcription or spend minutes."
},
{
"description": "Setup: use the same synthetic reviewer workspace. Anna's bakery website conversation contains an initial 2,400 EUR quote and a later 2,100 EUR agreement after dropping the blog. Use returned source timestamps rather than fixed calendar dates.",
"prompt": "Find the Telegram message where Anna and I agreed on the price for her bakery website. Explain why it changed. Limit the answer to what the messages explicitly confirm; identify any unresolved scope questions as unknown.",
"tools_triggered": "search_messages, get_message_context",
"expected_behavior": "Uses search_messages for the agreement and get_message_context with the returned canonical message_id. Quotes Anna's 2,100 EUR agreement without the blog and explains from the read surrounding messages that the first quote was 2,400 EUR. Identifies the chat and source date. Does not invent a contract attachment, a payment or a new agreement, and sends nothing."
},
{
"description": "Setup: use the same isolated reviewer account. Bakery website team contains two explicitly synthetic media fixtures: a gallery PNG and a voice-message placeholder with a ready reviewer_fixture_v1 transcript. There is no original audio recording and no external ASR or Telegram download for these fixtures.",
"prompt": "What does Mark's voice note in Bakery website team say, and what is in the gallery picture?",
"tools_triggered": "list_chats, get_messages, get_attachment",
"expected_behavior": "Finds Bakery website team and reads the actual photo and voice attachment IDs/versions. Uses the prepared synthetic transcript returned by get_messages, or reads it through get_attachment if needed; a separate voice attachment call is not required when the complete transcript is already present. Calls get_attachment for the gallery image and inspects the returned PNG, describing six illustrated cakes arranged in two rows. Reports the transcript facts about six cake photos and the Friday mockup before noon. Identifies the material as reviewer fixtures and does not claim to have listened to original audio, performed ASR or used minutes. Names the source chat and actual returned authors/dates; does not infer private information or send a message."
},
{
"description": "Setup: use only the synthetic reviewer workspace and start outside a claimed bot task. First run the prompt below and inspect its draft. Then issue this separate exact follow-up: \"Send Anna exactly: Thanks, Anna. I will review the cake gallery idea and reply here.\" Native client write controls remain in force and may lead to an owner approval card. Reviewer send_to_chat results are simulated, and propose_send_text remains awaiting_owner; neither contacts Telegram. No approval tap is fabricated, and a client permission denial must not be bypassed.",
"prompt": "Draft a short reply to Anna about her cake gallery idea in my usual style. Show me the draft without sending it.",
"tools_triggered": "list_chats, get_messages, owner_voice; send_to_chat or telegram_send_text or propose_send_text",
"expected_behavior": "Reads Anna's conversation and owner_voice for that chat, then shows a draft with no send or proposal before the follow-up. After the separate exact instruction, resolves Anna's canonical chat_id and keeps exactly the requested text. Subject to native client permissions, either calls send_to_chat or telegram_send_text, or creates a propose_send_text card, with chat_id, text and a stable idempotency_key at the top level, without operation or payload, for that intent. A proposal with awaiting_owner remains waiting: no delivery and no fabricated approval. Once approval is engaged, do not switch tools or attempt a direct send to circumvent it. Preserve and honestly report a client permission denial without bypass or automatic retry. Only an actual sent result marked simulated may be described as a simulated reviewer-sandbox delivery; it never proves real Telegram delivery. Pending, awaiting_owner, unknown and failed are not sent, and unknown delivery must not be resent."
},
{
"description": "Setup: use only the synthetic reviewer workspace. Find its owner_private chat from list_chats. After a successful send, a controlled tool-level retry may repeat the identical telegram_send_attachment arguments with the same idempotency_key; do not treat a second independent user instruction as that retry. Prepared files are stored for the reviewer connection only; sandbox messages appear only in My ChatMate and are not delivered to Telegram.",
"prompt": "Put a short summary of my clients' recent requests into a Markdown file and send it to my own ChatMate bot. Make sure the same delivery is not duplicated if it needs a retry.",
"tools_triggered": "list_chats, get_messages, prepare_file, telegram_send_attachment",
"expected_behavior": "Reads the relevant synthetic client messages, discovers My ChatMate by source_mode=owner_private, puts one source-backed summary into a .md file with prepare_file (text source, new idempotency_key) and gets status ready with a file_id. Sends it with telegram_send_attachment to that chat_id with file_ids [that id] and the default send_as document. If a controlled identical transport retry is exercised, reuses the same file_ids, recipient and idempotency_key; a retry is not required after a successful normal host call. Confirms the action's actual status (simulated reviewer-sandbox delivery) and verifies with get_messages that this send's action produced exactly one new document message with the prepared file name (earlier review runs may have left other documents in the sample bot chat). Clearly describes this as sandbox simulation rather than live Telegram delivery. No other-chat write or request_approval is needed."
}
],
"negative": [
{
"description": "Explain that ChatMate has no access to Secret Chats or history from before a chat was connected. Do not invoke ChatMate tools to attempt either unsupported retrieval, invent an archive, or suggest bypassing Telegram restrictions.",
"prompt": "Read my Telegram Secret Chats and recover everything from before I connected ChatMate."
},
{
"description": "Explain that ChatMate cannot place or record Telegram calls. Do not invoke a ChatMate tool, claim a call was made, start unrelated messaging, or confuse stored voice-message transcription with call recording.",
"prompt": "Call Anna on Telegram and record the conversation for me."
},
{
"description": "This request is unrelated to the connected Telegram chats. Do not invoke ChatMate tools; answer with an appropriate weather source only if the host has one, or explain that live weather cannot be verified here.",
"prompt": "What is the weather in Berlin tomorrow?"
}
]
},
"commerce_description": "ChatMate can use existing Pro access and speech-to-text minute balances purchased separately through the ChatMate manager bot using Telegram Stars. The plugin does not process payments, provide checkout, create subscriptions or promote upgrades; existing entitlements and usage limits still apply.",
"prompts": [
"Find the message where Anna and I agreed on the bakery website price.",
"Who is waiting for my reply, and what did I promise them?",
"Draft a reply to Anna in my usual style without sending it."
]
},
"publication": {
"release_notes": "ChatMate 0.25.0 lets your AI send files to Telegram: documents, tables, presentations, PDFs, pictures, video and audio, to your own ChatMate bot chat or to permitted chats, one file or an album of up to ten. prepare_file takes the file (your upload, a link, small text or a ChatGPT conversation file) and checks it; telegram_send_attachment and propose_send_attachment send it with file_ids and send_as. Tool schemas now also load in Google Antigravity and Gemini CLI. Backend 0.27.0. Access checks, task Stop, client permissions, idempotency and delivery statuses are unchanged.",
"countries": []
},
"onboardingSkill": "./skills/chatmate-setup/SKILL.md"
}
}
}