
Slackéç¥ã1æ¥200ä»¶ãAIã«èŠçŽãããã5ä»¶ã§æžãã 話
æãPCãéãã
Slackã®æªèªéç¥ â 200ä»¶è¶ ãã
ãã£ã³ãã«ãã²ãšã€ãã€éããŠãã¹ã¯ããŒã«ããŠããããã¯èªåã«é¢ä¿ãããïŒãã倿ããŠâŠ
æ°ã¥ãã° 1æé ãæ¶ããŠããã
ãããã200ä»¶ã®ãã¡æ¬åœã«èªåãã¢ã¯ã·ã§ã³ãã¹ããã®ã¯ ãããã5ä»¶ ã
æ®ãã®195ä»¶ã¯ãèªãã ã ããã§çµããã
ãã®1æéã人çã§æãç¡é§ãªæéã ãšæããŸãããïŒ
ä»ã¯ãAIã200ä»¶ã5ä»¶ã«èŠçŽããŠãããŸããæã®éç¥ãã§ãã¯ã¯ 5å ã§çµãããŸãã
Before / After

| Before | After |
| æªèªéç¥ | 200ä»¶ãå
šéšéã | AIã5ä»¶ã«èŠçŽ |
| æèŠæé | 1æé | 5å |
| éèŠãªæ
å ± | åãããã¡ | åªå
床ä»ãã§æœåº |
| èŠèœãšã | ãããã | ã»ãŒãŒã |
| 粟ç¥çè² è· | æããæå€§ | ã»ãŒãŒã |
1æé â 5åã幎éã§çŽ240æéïŒ30å¶æ¥æ¥Ã12ã¶æïŒã®ç¯çŽã
æçµŠ2,000åæç®ã§ 幎é48äžå ãéç¥ãèªãã ãã®äœæ¥ã«ãããã ãæã£ãŠããããšã«ãªããŸãã
ãªãéç¥ããå°çãã«ãªãã®ã
åé¡1ïŒå šãã£ã³ãã«ãçããéç¥ããã
ããããžã§ã¯ã鲿ãããéè«ãããã©ã³ãã©ãè¡ãïŒãããåãéã¿ã§éç¥ãæ¥ãã
åé¡2ïŒèªåå®ãŠãããªããã®ã9å²
ãã£ã³ãã«ã«åå ããŠããã ãã§ãå šã¡ãã»ãŒãžãæªèªã«ãªããèªåãã¢ã¯ã·ã§ã³ãã¹ããã®ã¯1å²ä»¥äžã
åé¡3ïŒãèŠèœãšãææãã§ã€ãå šéšèªã
ãéèŠãªã¡ãã»ãŒãžãèŠèœãšãããã©ããããããšããäžå®ã§ãçµå±å šéšã¹ã¯ããŒã«ããŠããŸãã
AIã«ä»»ããã°ããã®3ã€ã®åé¡ãå šãŠæ¶ããŸãã
å šäœã®æµã

ã¹ããã1: Slackã®éç¥ããšã¯ã¹ããŒããã
â
ã¹ããã2: AIã«ãéèŠãªãã®ã ãèŠçŽããŠããšæž¡ã
â
ã¹ããã3: åªå
床ä»ãã®5ä»¶ãµããªãŒãè¿ã£ãŠããæ¹æ³1ïŒOpenClawã§æ¯æèªååïŒããããïŒ
OpenClawã䜿ã£ãŠããæ¹ã¯ãWhatsAppã«ã¡ãã»ãŒãžãéãã ãã
æ¯æéãã¡ãã»ãŒãž
Slackã®æªèªã¡ãã»ãŒãžã確èªããŠã以äžã®ã«ãŒã«ã§èŠçŽããŠã
ãã«ãŒã«ã
1. èªåå®ãŠã®ã¡ã³ã·ã§ã³ (@here, @channel å«ã) ãæåªå
2. èªåãã¢ãµã€ã³ãããã¿ã¹ã¯ã»äŸé Œãæœåº
3. æéã®ãããã®ã¯æéãæèš
4. éè«ã»ãªã¢ã¯ã·ã§ã³ã ãã®ã¡ãã»ãŒãžã¯ç¡èŠ
5. æ®ãã¯ããã£ã³ãã«å¥ã®1è¡ãµããªãŒãã«ãŸãšãã
ãåºåãã©ãŒãããã
## ðŽ èŠã¢ã¯ã·ã§ã³ïŒä»æ¥äžïŒ
- [ãã£ã³ãã«å] å
容ïŒéä¿¡è
/ æå»ïŒ
## ð¡ 確èªããŠããã¹ã
- [ãã£ã³ãã«å] å
容ïŒéä¿¡è
/ æå»ïŒ
## ð¢ ãã£ã³ãã«å¥ãµããªãŒïŒèªã¿æµãOKïŒ
- #ãã£ã³ãã«å: 1è¡èŠçŽåºåäŸ

## ðŽ èŠã¢ã¯ã·ã§ã³ïŒä»æ¥äžïŒ
1. [#project-alpha] ç°äžãããããã¶ã€ã³ã¬ãã¥ãŒäŸé Œãæé:æ¬æ¥17æïŒ9:23ïŒ
2. [#sales] äœè€éšé·:ãæ¥é±ã®ææ¡è³æã仿¥äžã«å
±æããŠãïŒ10:05ïŒ
## ð¡ 確èªããŠããã¹ã
3. [#dev] æ¬çªãªãªãŒã¹ãææ¥14æã«å€æŽïŒéŽæš / 11:30ïŒ
4. [#general] æ¥é±ææã®å
šäœäŒè°ã15æâ16æã«å€æŽïŒäººäº / 8:45ïŒ
5. [#marketing] SNSãã£ã³ããŒã³ã®éå ±ïŒç®æšæ¯120%éæïŒå±±ç° / 12:00ïŒ
## ð¢ ãã£ã³ãã«å¥ãµããªãŒïŒèªã¿æµãOKïŒ
- #random: è±èŠã®å Žææ±ºãã®æç¥šäžïŒ15祚ïŒ
- #tech-share: GPT-5ã®ãªãŒã¯æ
å ±ã§çãäžãã
- #lunch: æ°ããã©ãŒã¡ã³å±ã®è©äŸ¡ïŒé«è©äŸ¡å€æ°ïŒ
- #dev: CIã®ãã«ãæéççž®ã®è°è«200ä»¶ã®éç¥ãã5ä»¶ã®ã¢ã¯ã·ã§ã³ã¢ã€ãã ã«ã
æèŠæéïŒ5åãã³ã¹ãïŒçŽ$0.03ïŒçŽ5åïŒã
æ¹æ³2ïŒSlack API + Pythonã§èªåå
æ¯ææåã§ã¡ãã»ãŒãžãéãã®ããé¢åãªæ¹ã¯ãå®å šèªååã§ããŸãã
ä»çµã¿
æ¯æ8æã«èªåå®è¡
â
Slack APIã§æªèªã¡ãã»ãŒãžãååŸ
â
Claude APIã§èŠçŽã»åªå
床ä»ã
â
èŠçŽçµæãSlack DMã«æçš¿ã³ãŒãïŒã³ããã§åããŸãïŒ
import os
import requests
from datetime import datetime, timedelta
from anthropic import Anthropic
# èšå®
SLACK_TOKEN = os.environ["SLACK_BOT_TOKEN"]
ANTHROPIC_KEY = os.environ["ANTHROPIC_API_KEY"]
MY_SLACK_USER_ID = "U01XXXXXXXX" # èªåã®Slack User ID
def get_unread_messages():
"""æªèªãã£ã³ãã«ã®ã¡ãã»ãŒãžãååŸ"""
headers = {"Authorization": f"Bearer {SLACK_TOKEN}"}
# æªèªã®ãããã£ã³ãã«ãååŸ
channels = requests.get(
"https://slack.com/api/conversations.list",
headers=headers,
params={"types": "public_channel,private_channel", "limit": 100}
).json().get("channels", [])
all_messages = []
since = (datetime.now() - timedelta(hours=16)).timestamp() # éå»16æé
for ch in channels:
if ch.get("is_member"):
msgs = requests.get(
"https://slack.com/api/conversations.history",
headers=headers,
params={"channel": ch["id"], "oldest": str(since), "limit": 50}
).json().get("messages", [])
for msg in msgs:
all_messages.append({
"channel": ch["name"],
"text": msg.get("text", ""),
"user": msg.get("user", "unknown"),
"ts": msg.get("ts", "")
})
return all_messages
def summarize_with_ai(messages):
"""AIã§èŠçŽ"""
client = Anthropic(api_key=ANTHROPIC_KEY)
messages_text = "\n".join([
f"[#{m['channel']}] {m['text']}" for m in messages
])
response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1500,
messages=[{
"role": "user",
"content": f"""以äžã®Slackã¡ãã»ãŒãžïŒ{len(messages)}ä»¶ïŒãèŠçŽããŠãã ããã
ãã«ãŒã«ã
1. ã¡ã³ã·ã§ã³ä»ãã»ã¿ã¹ã¯äŸé Œãæåªå
2. æéããããã®ã¯æèš
3. éè«ã¯1è¡ãµããªãŒã«å§çž®
4. ãèŠã¢ã¯ã·ã§ã³ãã確èªãã¹ãããèªã¿æµãOKãã®3段éã«åé¡
{messages_text}"""
}]
)
return response.content[0].text
def post_to_slack(summary):
"""èŠçŽãSlack DMã«æçš¿"""
headers = {"Authorization": f"Bearer {SLACK_TOKEN}"}
# èªåãžã®DMãã£ã³ãã«ãéã
dm = requests.post(
"https://slack.com/api/conversations.open",
headers=headers,
json={"users": MY_SLACK_USER_ID}
).json()
channel_id = dm["channel"]["id"]
requests.post(
"https://slack.com/api/chat.postMessage",
headers=headers,
json={
"channel": channel_id,
"text": f"*ãã¯ããããããŸããæ¬æ¥ã®SlackèŠçŽã§ã:*\n\n{summary}"
}
)
# å®è¡
messages = get_unread_messages()
print(f"{len(messages)}ä»¶ã®ã¡ãã»ãŒãžãååŸ")
if messages:
summary = summarize_with_ai(messages)
post_to_slack(summary)
print("èŠçŽãSlack DMã«æçš¿ããŸãã")
else:
print("æªèªã¡ãã»ãŒãžãªã")宿å®è¡ã®èšå®
WindowsïŒã¿ã¹ã¯ã¹ã±ãžã¥ãŒã©ïŒ:
æ¯æ8:00ã« python slack_summary.py ãå®è¡Mac/LinuxïŒcronïŒ:
0 8 * * 1-5 python /path/to/slack_summary.pyäžåºŠèšå®ããã°ãæ¯æèªåçã«SlackèŠçŽãDMã«å±ããŸãã
æ¹æ³3ïŒClaudeã«çŽæ¥è²Œãä»ããïŒã³ãŒãäžèŠïŒ
æãã·ã³ãã«ãªæ¹æ³ãæåã§ãããã³ãŒãäžèŠã§ãã
Slackã®ãã£ã³ãã«ãéã
æªèªã¡ãã»ãŒãžãã³ããŒ
Claudeã«è²Œãä»ããŠä»¥äžãéãïŒ
以äžã®Slackã¡ãã»ãŒãžãèŠçŽããŠã
èªåå®ãŠã®äŸé Œã»ã¡ã³ã·ã§ã³ãæåªå
ã§æœåºã
éè«ã¯1è¡ã«å§çž®ã
åªå
床ããé«/äž/äœãã§ã€ããŠã
---
ïŒã³ããããã¡ãã»ãŒãžïŒTeamsã§ãåãããšãã§ãã
Slack以å€ã§ããMicrosoft Teamsã§åãæ¹æ³ã䜿ããŸãã
| ããŒã« | éç¥ã®ååŸæ¹æ³ | AIãžã®åãæž¡ã |
| Slack | Slack API or ã³ãã | Claude API or OpenClaw |
| Teams | Graph API or ã³ãã | Claude API or OpenClaw |
| Chatwork | API or ã³ãã | Claude API or OpenClaw |
| Discord | Bot API or ã³ãã | Claude API or OpenClaw |
èŠããã«ããããã¹ããåããã°äœã§ãAIã«èŠçŽãããããããšããããšã§ãã
å¿çšïŒãã£ã³ãã«å¥ã«ã¹ã¿ã ã«ãŒã«
æ £ããŠãããããã£ã³ãã«ããšã«ã«ãŒã«ãèšå®ãããšããã«ç²ŸåºŠãäžãããŸãã
ãã£ã³ãã«å¥ã«ãŒã«:
- #project-alpha: ã¿ã¹ã¯ã»æéã»ãããã«ãŒãåªå
æœåº
- #sales: å£²äžæ°åã»é¡§å®¢ã¯ã¬ãŒã ãåªå
æœåº
- #dev: é害æ
å ±ã»ãªãªãŒã¹äºå®ãåªå
æœåº
- #general: 瀟å
è¡äºã»å¶åºŠå€æŽã®ã¿æœåº
- #random: å®å
šç¡èŠïŒãµããªãŒã«ãå«ããªãïŒããããããšã§ãæ¬åœã«éèŠãªæ å ±ã ãããã£ã«ã¿ãªã³ã°ãããŸãã
ã³ã¹ããŸãšã
| æ¹æ³ | ã³ã¹ã/å | äœæ¥æé | èªåå床 |
| OpenClaw | çŽ$0.03ïŒ5åïŒ | 5å | åèªå |
| Pythonå®å
šèªå | çŽ$0.03ïŒ5åïŒ | 0å | å
šèªå |
| Claude ã³ãã | çŽ$0.02ïŒ3åïŒ | 10å | æå |
| æåã§å
šéšèªã | ç¡æ | 1æé | â |
ãç¡æãã®æåã¯ãæçµŠæç®ã§2,000åã®ã³ã¹ããããã£ãŠããŸãã
5åã§1æéãåãæ»ãã ãããAIèŠçŽã®æ¬è³ªã§ãã
ãŸãšã

| æå | AIèŠçŽ |
| éç¥ç¢ºèª | 200ä»¶ãå
šéšéã | 5ä»¶ã«åçž® |
| æèŠæé | 1æé/æ¥ | 5å/æ¥ |
| 幎éã®æé | çŽ240æé | çŽ20æé |
| 幎éã³ã¹ãæç® | 48äžåïŒæçµŠ2,000åïŒ | 1,200åïŒ5åÃ240æ¥ïŒ |
| èŠèœãšã | ãããã | ã»ãŒãŒã |
200ä»¶ â 5ä»¶ã1æé â 5åã幎é48äžå â 1,200åã
Slackéç¥ã®å¥Žé·ã«ãªãã®ã¯ã仿¥ã§çµããã«ããŸãããã
é¢é£èšäºïŒ
ð åä¿¡ãã¬ã€ã®47ä»¶ãAIã3åã§åŠçããæ¹æ³
ð ChatGPT課éãããŸãã â æ$5ã§ä»äºãå®è¡ãããæ¹æ³
ð äŒè°ã®è°äºé²ãããæžããŠãªã â AIã3åã§ãŸãšããå šæé
ãã®èšäºãåèã«ãªã£ãããã¹ã & ãã©ããŒãé¡ãããŸãïŒ
ãéç¥å°çããè§£æŸããããã®å£°ãã³ã¡ã³ãã§èãããŠãã ããã