Agent Skills by ALSEL
Anthropic Claude個人生産性⭐ リポ 0品質スコア 50/100

wecom-automation

WechatyフレームワークをベースにWeCom(企業向けWeChat)個人アカウントの自動化を実現するスキル。メッセージの受信、友達申請の自動承認、ナレッジベースを活用したQ&A応答、有人対応が必要な場合のアラート通知などの機能を提供します。企業向けWeComの個人ボットや自動化アシスタントの構築シナリオに最適です。

description の原文を見る

企业微信个人账号直连自动化。基于 Wechaty 框架实现企业微信消息接收、自动同意好友、知识库问答、人工介入提醒。适用于企业微信个人机器人和自动化助手场景。

SKILL.md 本文

企業微信個人アカウント直接接続自動化

Wechaty フレームワークを使用して企業微信個人アカウントを接続し、完全な AI アシスタント機能を実装します。企業微信ボット、自動化カスタマーサービス、個人アシスタントなどのシナリオに適用できます。

コア機能

1. 自動友達追加承認

  • 友達リクエストイベントの監視
  • 友達検証の自動承認
  • パーソナライズされたウェルカムメッセージの送信
  • ユーザー情報と情報源のタグ付け

2. インテリジェント Q&A(ナレッジベース基盤)

  • ベクトルナレッジベースへの企業知識の保存
  • セマンティック検索による質問マッチング
  • LLM による専門的な返信生成
  • マルチターンダイアログコンテキスト対応

3. 人的介入アラート

  • 信頼度閾値による自動判定
  • Telegram/飛書による人工スタッフへの通知
  • 未解決問題の記録と最適化用データ収集
  • カスタマーサービスへのスムーズなハンドオフ

4. メッセージタイプのサポート

  • テキストメッセージ(Q&A、ダイアログ)
  • 画像メッセージ(OCR、認識)
  • ファイルメッセージ(DOCX、PDF など)
  • 音声メッセージ(テキスト変換、音声相互作用)
  • リンクメッセージ(プレビュー、要約)
  • 名刺メッセージ(保存、処理)

テクニカルアーキテクチャ

┌──────────────┐
│  企業微信     │
│  個人アカウント│
└──────┬───────┘
       │
       ▼
┌──────────────────┐
│   Wechaty        │
│   (PadLocal)     │
└──────┬───────────┘
       │
       ▼
┌────────────────────┐
│  OpenClaw Gateway  │
│  (メッセージ分散、処理)│
└──────┬─────────────┘
       │
       ├──────────────┬──────────────┐
       │              │              │
       ▼              ▼              ▼
┌──────────┐   ┌──────────┐   ┌──────────┐
│ ベクトル  │   │  LLM API  │   │ 通知サービス│
│ナレッジベース│   │(Kimi/GPT) │   │(Telegram) │
│(PG+pgvec)│   └──────────┘   └──────────┘
└──────────┘

クイックスタート

プラン選択

企業微信個人アカウント直接接続には 2 つのプランがあります。

プラン A:Wechaty + PadLocal(推奨、個人向け)

メリット

  • シンプルな設定で簡単に開始可能
  • 高い安定性、公式メンテナンス
  • すべてのメッセージタイプに対応
  • 個人利用に適している

デメリット

  • PadLocal は有料(約 50 元/月)
  • 単一アカウント制限

適用シナリオ:個人アシスタント、小規模カスタマーサービス

プラン B:企業微信内部アプリケーション API(企業向け)

メリット

  • 公式 API、無料利用
  • 最高の安定性
  • 大規模デプロイに対応

デメリット

  • 企業認証が必要
  • 設定が相対的に複雑
  • API による機能制限あり

適用シナリオ:企業カスタマーサービス、大規模アプリケーション

本スキルはプラン A(Wechaty + PadLocal)を使用します

ステップ 1:PadLocal Token の申請

  1. https://github.com/wechaty/wechaty にアクセス
  2. "PadLocal" プロトコルを選択
  3. アカウントを登録して Token を取得
  4. Token を pass に保存:
pass insert api/wechaty-padlocal

ステップ 2:依存関係のインストール

# 1. Node.js 依存関係のインストール
cd ~/clawd/skills/wecom-automation
npm install

# 2. Python 依存関係のインストール
pip3 install -r requirements.txt

# 3. 環境変数の設定
cp .env.example .env

ステップ 3:環境変数の設定

~/clawd/skills/wecom-automation/.env を編集してください:

# Wechaty 設定
WECHATY_PUPPET=padlocal
WECHATY_TOKEN=$(pass show api/wechaty-padlocal)
WECHATY_LOG_LEVEL=info

# 企業微信アカウント設定
WECOM_NAME="企業微信ボット"
WECOM_QR_CODE_PATH=/tmp/wecom_qrcode.png

# ナレッジベース設定
KB_DB_URL=postgresql://postgres@localhost/wecom_kb
KB_SIMILARITY_THRESHOLD=0.7
KB_TOP_K=3

# LLM 設定
LLM_PROVIDER=kimi
LLM_API_KEY=$(pass show api/kimi)
LLM_API_BASE=https://api.moonshot.cn/v1
LLM_MODEL=moonshot-v1-8k

# 人的介入通知
NOTIFICATION_CHANNEL=telegram:8518085684
NOTIFICATION_ENABLED=true

# OpenClaw Gateway 設定
GATEWAY_URL=http://localhost:8080
GATEWAY_TOKEN=$(pass show api/openclaw-gateway)

ステップ 4:データベースの初期化

# データベースの作成
sudo -u postgres createdb wecom_kb

# テーブル構造の初期化
psql wecom_kb < ~/clawd/skills/wecom-automation/schema.sql

# サンプルナレッジベースのインポート
python3 ~/clawd/skills/wecom-automation/scripts/import_kb.py \
  --input ~/clawd/skills/wecom-automation/knowledge/sample.md \
  --category "よくある質問" \
  --key "$(pass show api/kimi)"

ステップ 5:ボットの起動

# 方法 1:直接実行
cd ~/clawd/skills/wecom-automation
npm start

# 方法 2:PM2 経由(推奨)
pm2 start ~/clawd/skills/wecom-automation/ecosystem.config.js

# ログの表示
pm2 logs wecom-bot

ステップ 6:QR コードをスキャンしてログイン

ボット起動後、QR コードが表示されます:

██████████████████████████████████
██                              ██
██  1. 企業微信を開く → スキャン ██
██  2. 下記 QR コードをスキャン  ██
██     してログイン              ██
██                              ██
██████████████████████████████████

[QR code image]

企業微信でスキャンしてログインすると、ボットが正常に動作します。

使用方法

シナリオ 1:新規友達の自動ウェルカムメッセージ

// workflows/on_friend_add.js
const { Contact } = require('wechaty')

bot.on('friendship', async friendship => {
  if (friendship.type() === Friendship.Type.Receive) {
    const contact = friendship.contact()

    // 友達リクエストを自動承認
    await friendship.accept()

    // ウェルカムメッセージを送信
    await contact.say(`👋 ${contact.name()} さん、ようこそ!

私は AI アシスタント小 a です。以下のことがお手伝いできます:
• よくある質問への回答
• アフターサービスリクエストの処理
• 注文ステータスの確認

複雑な問題がございましたら、人工スタッフにお繋ぎします。`)

    // データベースにユーザーを追加
    await saveUser(contact)
  }
})

シナリオ 2:ナレッジベース Q&A

// workflows/answer_question.js
const { Message } = require('wechaty')

bot.on('message', async msg => {
  if (msg.type() === Message.Type.Text) {
    const text = msg.text()
    const from = msg.from()

    // ナレッジベースを検索
    const results = await searchKnowledge(text)

    // 回答を生成
    const answer = await generateAnswer(text, results)

    // 人的介入が必要かどうかを判定
    if (answer.confidence < 0.7) {
      await escalateToHuman(from, text, answer)
    } else {
      await msg.say(answer.text)
    }
  }
})

シナリオ 3:ファイル処理(DOCX/PDF)

// workflows/handle_file.js
const { Message } = require('wechaty')

bot.on('message', async msg => {
  if (msg.type() === Message.Type.Attachment) {
    const file = await msg.toFileBox()

    // ファイルをダウンロード
    const filePath = `/tmp/${file.name}`
    await file.toFile(filePath)

    // ファイルを処理(内容抽出、分析など)
    const content = await extractFileContent(filePath)

    // 返信を送信
    await msg.say(`✅ ファイルを受け取りました:${file.name}\n\n処理中...`)

    // 処理後に返信
    await processAndReply(msg, content)
  }
})

シナリオ 4:人的介入アラート

// workflows/escalate.js
async function escalateToHuman(contact, question, answer) {
  // 1. ユーザーにメッセージを送信
  await contact.say('⏳ 人工スタッフにお繋ぎしています。お待ちください...')

  // 2. Telegram 経由で人工スタッフに通知
  const notification = `🚨 人的介入が必要です

ユーザー:${contact.name()}
質問:${question}
時刻:${new Date().toLocaleString()}

速やかに対応してください。`

  await sendTelegramNotification(notification)

  // 3. 未解決問題を記録
  await saveUnknownQuestion(contact, question)
}

ディレクトリ構造

~/clawd/skills/wecom-automation/
├── SKILL.md                    # このファイル
├── package.json                # Node.js 依存関係
├── requirements.txt            # Python 依存関係
├── ecosystem.config.js         # PM2 設定
├── .env.example                # 環境変数テンプレート
├── schema.sql                  # データベーステーブル構造
├── bot.js                      # Wechaty ボット メインファイル
├── config/
│   ├── knowledge.js            # ナレッジベース設定
│   └── escalation.js           # 人的介入ルール
├── workflows/
│   ├── on_friend_add.js        # 友達追加処理
│   ├── answer_question.js      # Q&A 処理
│   ├── handle_file.js          # ファイル処理
│   └── escalate.js             # 人的介入
├── lib/
│   ├── knowledge.js            # ナレッジベース操作
│   ├── llm.js                  # LLM 呼び出し
│   ├── notification.js         # 通知サービス
│   └── database.js             # データベース操作
└── knowledge/
    └── sample.md               # サンプルナレッジドキュメント

API リファレンス

企業微信 API ドキュメント

Wechaty ドキュメント

Kimi API ドキュメント

高度な機能

1. マルチターン対話の記憶

// Redis を使用してセッションコンテキストを保存
const redis = require('redis')
const client = redis.createClient()

async function getConversationHistory(userId) {
  const history = await client.get(`conv:${userId}`)
  return history ? JSON.parse(history) : []
}

async function appendMessage(userId, role, content) {
  const history = await getConversationHistory(userId)
  history.push({ role, content, timestamp: Date.now() })
  await client.set(`conv:${userId}`, JSON.stringify(history))
}

2. ファイル処理

// DOCX コンテンツの抽出
const docx = require('docx')

async function extractDocx(filePath) {
  const doc = await docx.Document.read(filePath)
  const text = doc.paragraphs.map(p => p.text).join('\n')
  return text
}

// PDF コンテンツの抽出
const pdf = require('pdf-parse')

async function extractPdf(filePath) {
  const data = await fs.readFile(filePath)
  const result = await pdf(data)
  return result.text
}

3. 音声テキスト変換

# Whisper API を使用
import openai

def transcribe_audio(audio_path):
    with open(audio_path, "rb") as audio:
        transcript = openai.Audio.transcribe(
            model="whisper-1",
            file=audio
        )
    return transcript["text"]

4. 画像 OCR

# Kimi Vision を使用
import openai

def ocr_image(image_path):
    with open(image_path, "rb") as image:
        result = openai.chat.completions.create(
            model="gemini-2.5-pro",
            messages=[{
                "role": "user",
                "content": "画像内のテキストを認識してください"
            }],
            image=image
        )
    return result.choices[0].message.content

監視とメンテナンス

ログの表示

# PM2 ログ
pm2 logs wecom-bot

# エラーログ
pm2 logs wecom-bot --err

# リアルタイムログ
pm2 logs wecom-bot --lines 100

パフォーマンス監視

// カスタムメトリクスを追加
const prometheus = require('prom-client')

const messageCounter = new prometheus.Counter({
  name: 'wecom_messages_total',
  help: 'Total messages received',
  labelNames: ['type']
})

const answerLatency = new prometheus.Histogram({
  name: 'wecom_answer_latency_seconds',
  help: 'Answer generation latency',
  buckets: [0.1, 0.5, 1, 2, 5, 10]
})

人的介入統計

-- 未解決問題の分布を表示
SELECT
    COUNT(*) as count,
    SUBSTRING(question, 1, 30) as question_preview
FROM unknown_questions
GROUP BY question_preview
ORDER BY count DESC
LIMIT 10;

-- 日次介入回数を表示
SELECT
    DATE(created_at) as date,
    COUNT(*) as escalations
FROM escalation_log
GROUP BY DATE(created_at)
ORDER BY date DESC
LIMIT 7;

トラブルシューティング

問題 1:QR コードをスキャンしてログインできない

# Wechaty ログを確認
pm2 logs wecom-bot --lines 50

# ボットを再起動
pm2 restart wecom-bot

# キャッシュをクリア
rm -rf /tmp/wechaty*
pm2 restart wecom-bot

問題 2:メッセージに返信しない

# ナレッジベース接続を確認
psql wecom_kb -c "SELECT COUNT(*) FROM knowledge_chunks;"

# LLM API をテスト
curl -X POST https://api.moonshot.cn/v1/chat/completions \
  -H "Authorization: Bearer $KIMI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"moonshot-v1-8k","messages":[{"role":"user","content":"テスト"}]}'

# 環境変数を確認
cat ~/clawd/skills/wecom-automation/.env | grep -E "^(LLM|KB|NOTIFICATION)"

問題 3:ファイルが受け取られない

# 一時ディレクトリの権限を確認
ls -la /tmp/

# ログディレクトリを作成
mkdir -p ~/clawd/skills/wecom-automation/logs
chmod 755 ~/clawd/skills/wecom-automation/logs

# ディスク容量を確認
df -h

セキュリティベストプラクティス

  1. キー管理

    • すべてのキーを pass で保存
    • 環境変数から参照し、ハードコーディングしない
    • 定期的に Token をローテーション
  2. データプライバシー

    • 顧客情報を暗号化して保存
    • 定期的に機密ログをクリア
    • データ保護規制を遵守
  3. アクセス制御

    • API インターフェースの認証
    • IP ホワイトリスト制限
    • リクエスト頻度制限
  4. 監査ログ

    • すべての人的介入を記録
    • 定期的にアクセスログを確認
    • 異常動作のアラート

拡張機能

1. プロアクティブマーケティング

// 定期的にプロモーション情報を配信
const schedule = require('node-schedule')

schedule.scheduleJob('0 10 * * 1-5', async () => {
  const users = await getActiveUsers(7)
  for (const user of users) {
    await user.say('🎉 本日の特別価格:...')
  }
})

2. グループ管理

// ユーザーをグループに自動招待
bot.on('friendship', async friendship => {
  const contact = friendship.contact()
  const room = await bot.Room.find({ topic: 'カスタマーグループ' })

  if (room) {
    await room.add(contact)
    await contact.say('カスタマーグループにご招待しました')
  }
})

3. データ統計

// 日次レポートを生成
async function generateDailyReport() {
  const stats = {
    newUsers: await countNewUsers(),
    questions: await countQuestions(),
    escalations: await countEscalations()
  }

  await sendReportToAdmin(stats)
}

関連スキル

  • wecom-cs-automation:企業微信カスタマーサービス API 方式
  • feishu-automation:飛書プラットフォーム自動化
  • notion-automation:Notion ナレッジベース統合
  • telegram-automation:Telegram 通知統合

コスト比較

プラン月額適用シナリオ
Wechaty + PadLocal約 50元個人、小規模チーム
企業微信内部アプリケーション無料企業、大規模
企業微信カスタマーサービス API従量課金企業カスタマーサービス

参考資料

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

詳細情報

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

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

関連スキル

汎用個人生産性⭐ リポ 7,456

newsblur-cli

ターミナルからNewsBlurを管理できます。フィードの閲覧、ストーリーの検索、記事の保存・共有、インテリジェンス分類器の学習、新しいフィードの発見、ワークフローの自動化がNewsBlur CLIで実現します。ユーザーがNewsBlurアカウントを操作したい場合、フィードの確認、購読管理、またはニュース読み込みに関するスクリプト構築時に活用してください。

by samuelclay
汎用個人生産性⭐ リポ 58,643

caveman-compress

自然言語のメモリファイル(CLAUDE.md、todos、preferences)を「原始人形式」に圧縮し、入力トークンを削減します。技術的な内容、コード、URL、構造はすべて保持したまま圧縮します。圧縮版が元のファイルを上書きし、人間が読める形のバックアップはFILE.original.mdとして保存されます。トリガー:/caveman-compress FILEPATH または「compress memory file」

by JuliusBrussee
ALSEL独自Anthropic Claude個人生産性

find-skills

日本語の意図から Agent Skills を発見する。「楽天SEOのスキル探して」「PDFを処理したい」「データ分析を自動化したい」などの日本語リクエストに対応。Claude Code (CLI)、Codex、Gemini CLI、claude.ai (Web) いずれでも動作。日本最大の Agent Skills データベース「Agent Skills by ALSEL」(11,000件超、全件日本語化、ダウンロード可能スキル8,600件超) から、ユーザーの意図に合うスキルを推薦・インストール案内する。

by 株式会社ALSEL
汎用個人生産性⭐ リポ 39,967

planning-and-task-breakdown

仕事を順序立てたタスクに分割します。仕様書や要件が明確にあり、実装可能なタスクに分解する必要がある場合に利用してください。タスクが大きすぎて着手しづらい場合、スコープを見積もる必要がある場合、または並列で作業を進められる場合に活用できます。

by addyosmani
Anthropic Claude個人生産性⭐ リポ 132,723

docx

このスキルは、ユーザーがWord文書(.docxファイル)を作成、読み込み、編集、操作したいときに使用します。以下の場合に実行してください:「Word文書」「.docx」などの記述、または目次・見出し・ページ番号・レターヘッドなどのフォーマットを含む専門的な文書の作成リクエスト。また、.docxファイルのコンテンツ抽出・再編成、文書への画像挿入・置換、Word形式での検索置換、変更履歴やコメント機能の使用、コンテンツを整形したWord文書への変換の場合も対象です。ユーザーが「レポート」「メモ」「手紙」「テンプレート」などの成果物をWord形式または.docxファイルで求める場合はこのスキルを使用してください。PDF、スプレッドシート、Google Docs、文書作成と無関係なコーディングタスクには使用しないでください。

by anthropics
汎用個人生産性⭐ リポ 39,967

idea-refine

アイデアを反復的に改善します。構造化された発散的思考と収束的思考を通じて、アイデアを洗練させることができます。「idea-refine」または「ideate」を使用してトリガーします。

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