xiaomi-outbound-bot
阿里云暁蜜外呼ロボットのタスクをトリガーし、自動で大量の電話をかけることで、顧客への一斉架電、顧客のフォローアップ、満足度調査、面接設定のための履歴書スクリーニングといった様々なシーンで活用できるSkill。
📜 元の英語説明(参考)
触发阿里云晓蜜外呼机器人任务,自动批量拨打电话。适用于批量外呼、客户回访、满意度调查、简历筛查约面试等场景。可从前置工具或节点获取外呼名单。
🇯🇵 日本人クリエイター向け解説
阿里云暁蜜外呼ロボットのタスクをトリガーし、自動で大量の電話をかけることで、顧客への一斉架電、顧客のフォローアップ、満足度調査、面接設定のための履歴書スクリーニングといった様々なシーンで活用できるSkill。
※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。
下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o xiaomi-outbound-bot.zip https://jpskill.com/download/5598.zip && unzip -o xiaomi-outbound-bot.zip && rm xiaomi-outbound-bot.zip
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/5598.zip -OutFile "$d\xiaomi-outbound-bot.zip"; Expand-Archive "$d\xiaomi-outbound-bot.zip" -DestinationPath $d -Force; ri "$d\xiaomi-outbound-bot.zip"
完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。
💾 手動でダウンロードしたい(コマンドが難しい人向け)
- 1. 下の青いボタンを押して
xiaomi-outbound-bot.zipをダウンロード - 2. ZIPファイルをダブルクリックで解凍 →
xiaomi-outbound-botフォルダができる - 3. そのフォルダを
C:\Users\あなたの名前\.claude\skills\(Win)または~/.claude/skills/(Mac)へ移動 - 4. Claude Code を再起動
⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。
🎯 このSkillでできること
下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。
📦 インストール方法 (3ステップ)
- 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
- 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
- 3. 展開してできたフォルダを、ホームフォルダの
.claude/skills/に置く- · macOS / Linux:
~/.claude/skills/ - · Windows:
%USERPROFILE%\.claude\skills\
- · macOS / Linux:
Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。
詳しい使い方ガイドを見る →- 最終更新
- 2026-05-17
- 取得日時
- 2026-05-17
- 同梱ファイル
- 2
📖 Skill本文(日本語訳)
※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。
[スキル名] xiaomi-outbound-bot
阿里云晓蜜外呼ロボット
一括電話外呼のための自動外呼ロボットスキルです。
クイックスタート
方法 1: JSON ファイルを使用する(推奨)⭐
taskInput.json ファイルを作成します。
{
"phoneNumbers": ["13800138000", "13900139000"],
"scenarioDescription": "春季新品推广,了解客户购买意向",
"taskName": "春季促销活动"
}
実行します。
node scripts/bundle.js taskInput.json
方法 2: 環境変数を使用する
ARGUMENTS='{"phoneNumbers":["13800138000"],"scenarioDescription":"测试外呼"}' \
node scripts/bundle.js
Agent のベストプラクティス 🎯
主要原則:シナリオ情報を最大限に活用する + 実行前に確認する
ユーザーが外呼要件を提供した際、電話番号と簡単な説明だけを抽出するのではなく、以下を行うべきです。
- シナリオを深く分析する - ユーザーの真の意図と具体的な要件を理解します。
- すべての詳細を抽出する - 時間、場所、条件、要件などを抽出します。
- 完全な設定を構築する - すべての11フィールドを含む詳細な
agentProfileを生成します。 - 対話フローを設計する -
workflowに具体的なコミュニケーション手順を反映させます。 - 実行前に必ず確認する ⚠️ - ユーザーにシナリオ情報と外呼リストを表示し、明確な確認を待ちます。
比較例
❌ 悪い例(情報が失われている):
{
"phoneNumbers": ["15611207961"],
"scenarioDescription": "建议反馈",
"taskName": "建议外呼"
}
問題:「面接招待」、「明後日の夜8時」、「代替時間」などの重要な情報が失われています。
✅ 良い例(情報を最大限に活用している):
{
"phoneNumbers": ["15611207961"],
"scenarioDescription": "Java 开发岗位面试邀约 - 优秀候选人",
"taskName": "面试邀约",
"agentProfile": {
"role": "招聘专员",
"background": "Java 开发岗位招聘,候选人简历优秀",
"goals": "确认后天晚上八点面试时间,不方便则协商大后天",
"workflow": "自我介绍 -> 说明来意 -> 确认后天晚上八点 -> 备选时间 -> 记录反馈",
"openingPrompt": "您好,我是XX公司招聘专员,看到您的简历非常优秀"
}
}
このスキルを使用するタイミング
ユーザーが以下のシナリオを言及した際に、このスキルを使用します。
- 顧客に一括で電話をかける必要がある場合(前置ノードから取得したリストを含む)
- 外呼タスク、電話マーケティング、顧客フォローアップ
- 満足度調査、製品プロモーション
- 履歴書スクリーニング後の面接予約 - 履歴書スクリーニングツールから候補者の電話番号を取得
- 通知リマインダー、情報確認
- 「晓蜜」、「外呼机器人」、「自动拨号」、「约面试」、「打电话」を言及した場合
⚠️ 重要事項:このスキルを使用する際は、必ず以下を行ってください。
- ユーザーシナリオを注意深く分析する - すべての有用な情報を抽出します。
- 完全な agentProfile を構築する - 最も基本的なフィールドだけを提供するのではなく。
- 合理的な対話フローを設計する -
workflowにユーザーの具体的な要件を反映させます。 - 実行前に必ず確認する - ユーザーにシナリオ情報と外呼リストを表示し、明確な確認を待ってから実行します。
前提条件
1. 阿里云認証情報の構成
環境変数に阿里云 AK/SK を構成する必要があります。
export ALIYUN_OUTBOUND_BOT_ACCESS_KEY_ID="your-access-key-id"
export ALIYUN_OUTBOUND_BOT_ACCESS_KEY_SECRET="your-access-key-secret"
詳細な構成については、references/config.md を参照してください。
2. 外呼番号のバインド ⚠️ 重要
阿里云晓蜜コンソールで外呼番号を申請し、バインドする必要があります。そうしないと外呼を実行できません。
番号のバインド方法:
- 阿里云晓蜜コンソール にログインします。
- 「号码管理」ページに移動します。
- 外呼番号を申請します(審査が必要です)。
- 番号をテナントにバインドします。
チェックメカニズム:
スキルは外呼実行前に自動的にチェックします。
- ✅ テナントにバインドされた番号がある場合 → インスタンスに自動的にバインドされ、実行を続行します。
- ❌ テナントにバインドされた番号がない場合 → プロセスを終了し、ユーザーに構成を促します。
エラーメッセージ:
❌ 租户下无绑定号码,无法进行外呼。
请先在阿里云晓蜜控制台申请并绑定外呼号码。
3. システム要件
Node.js 環境のみ(バージョン >= 18)で実行可能です。
Agent 使用ガイド
あなた(Agent)がユーザーの外呼タスクを支援する必要がある場合、以下の手順に従ってください。
ステップ 1: 外呼リストの取得
シナリオ A: 前置ノードから取得する(履歴書スクリーニング、顧客検索など)
ユーザーのリクエストが多段階タスクの一部である場合(例:「昨日収集したブルーカラーの履歴書をスクリーニングして面接を予約する」)、以下を行うべきです。
- まず前置ステップを実行する - 関連するツールを呼び出してデータを取得します(例:履歴書スクリーニングツール)。
- 電話番号を抽出する - 前置ツールの戻り結果から電話番号リストを抽出します。
- シナリオ説明を推測する - ユーザーの意図に基づいてシナリオ説明を生成します(例:「面接招待」、「履歴書スクリーニング後の面接予約」)。
- このスキルに直接渡す - ユーザーに再度尋ねる必要はありません。
シナリオ B: ユーザーが直接提供する
ユーザーが電話番号または明確な外呼要件を直接提供する場合、以下の情報を収集します。
- 電話番号リスト(必須)- 少なくとも1つの有効な中国大陸の携帯電話番号(1から始まる11桁の数字)
- 外呼シナリオ説明(必須)- 外呼の目的を明確に記述します(例:「製品プロモーション」、「顧客フォローアップ」)。
- タスク名(オプション)- 識別しやすいタスク名。
情報が不完全な場合は、ask questions ツールを使用してユーザーに質問します。
ステップ 2: データの検証
- 電話番号の形式を確認します(中国大陸の携帯電話番号:1から始まる11桁の数字)。
- シナリオ説明が明確であることを確認します。
- ユーザーが阿里云 AK/SK 環境変数を構成していることを確認します。
ステップ 3: ユーザーに情報を確認する ⚠️ 必須実行
外呼タスクを実行する前に、以下の情報をユーザーに表示し、確認する必要があります。
- 外呼シナリオ - 外呼の目的と内容を明確に記述します。
- 外呼リスト - 発信する電話番号のリストと数を表示します。
- エージェント設定 -
agentProfileを構築した場合、エージェントの役割と目標を簡潔に説明します。
確認方法の例
外呼タスクを実行する準備ができました。以下の情報をご確認ください。
📋 タスク情報
- タスク名: 面接招待
- 外呼シナリオ: Java 開発職面接招待 - 優秀候補者
- エージェントの役割: 採用担当者
- 外呼目標: 明後日の夜8時の面接時間を確定し、都合が悪い場合は明々後日を調整する
📞 外呼リスト(合計 1 人)
1. 15611207961
外呼の実行を確認しますか?
重要事項:
- ✅ ユーザーの明確な確認を待ってから実行する必要があります。
- ✅ ユーザーが確認しない場合、何を修正する必要があるか尋ねます。
- ❌ ユーザーが確認していない状況で外呼を自動的に実行しないでください。
ステップ 4: 入力ファイルの準備
主な方法:taskInput.json ファイルを作成する ⭐
収集した情報を JSON ファイルにフォーマットします。重要:ユーザーシナリオを注意深く分析し、可能な限り多くの情報を抽出してエージェント設定を構築してください。
🎯 シナリオから情報を抽出するガイドライン
ユーザーが外呼シナリオを提供した場合、以下を行うべきです。
-
シナリオタイプを分析する - 採用、営業、カスタマーサービス、調査など、どのシナリオであるかを特定します。
-
キー情報を抽出する - ユーザーの説明から以下を抽出します。
- 外呼目的(例:「面接招待」、「製品プロモーション」)
- 具体的な内容(例:「明後日の夜8時」、「Java 開発職」)
- 候補条件(例:「都合が悪い場合は他の時間を尋ねる」)
- 特別な要件(例:「優秀な候補者」、「VIP 顧客」)
-
agentProfile を構築する - シナリオに基づいて自動的に生成します。
role: シナリオに基づいて推測します(例:「採用担当者」、「営業コンサルタント」)。background: ビジネス背景を抽出します(例:「Java 開発職面接招待」)。goals: 外呼目標を明確にします(例:「候補者が明後日(X月X日)の夜8時に面接に参加できるか確認し、都合が悪い場合は明々後日の時間を調整する」)。workflow: 対話フローを設計します(例:「挨拶 -> 意図の説明 -> 時間の確認 -> 代替案 -> フィードバックの記録」)。openingPrompt: 適切なオープニングプロンプトを生成します(例:「こんにちは、XX社の採用担当者です」)。
📝 例:シナリオから完全な設定へ
ユーザーシナリオ:
15611207961 の優秀な人に面接を招待し、明後日の夜8時に面接に参加できるか確認し、都合が悪い場合は明々後日の任意の時間を尋ねる
生成されるべき完全な JSON:
{
"phoneNumbers": ["15611207961"],
"scenarioDescription": "Java 开发岗位面试邀约 - 优秀候选人",
"taskName": "面试邀约",
"agentProfile": {
"name": "李敏",
"gender": "女",
"age": 28,
"role": "招聘专员",
"communicationStyle": ["专业", "友好", "高效"],
"background": "Java 开发岗位招聘,候选人简历优秀,需要邀约面试",
"goals": "确认候选人后天(X月X日)晚上八点是否方便参加面试,如不方便则协商大后天的时间",
"skills": "面试邀约、时间协调、候选人沟通",
"workflow": "自我介绍 -> 说明来意(面试邀约)-> 确认后天晚上八点 -> 如不方便询问大后天时间 -> 记录反馈 -> 发送面试详情",
"constraint": "保持专业、尊重候选人时间、提供灵活的时间选择",
"openingPrompt": "您好,我是XX公司的招聘专员李敏,看到您的简历非常优秀"
}
}
❌ 不十分な例(情報抽出が不十分):
{
"phoneNumbers": ["15611207961"],
"scenarioDescription": "建议反馈",
"taskName": "建议外呼",
"type": "service"
}
スキルは複数の入力形式をサポートしており、自動的に認識して解析します。
形式 1: 標準形式(推奨):
{
"phoneNumbers": ["13800138000", "13900139000"],
"scenarioDescription": "春季新品推广,了解客户购买意向",
"taskName": "春季促销活动",
"agentProfile": {
"name": "小美",
"gender": "女",
"age": 25,
"role": "销售顾问",
"communicationStyle": ["热情", "专业", "亲切"],
"background": "春季新品推广活动",
"goals": "了解客户购买意向,促成交易",
"skills": "产品介绍、需求挖掘、促成交易",
"workflow": "问候 -> 了解需求 -> 介绍产品 -> 处理异议 -> 促成合作",
"constraint": "保持礼貌、尊重对方意愿、不强制推销",
"openingPrompt": "您好,我是小美,春季新品推广活动的销售顾问"
}
}
注意: agentProfile のすべてのフィールドはオプションです。提供されない場合、システムは scenarioDescription に基づいて適切な設定をインテリジェントに推測します。
形式 2: 簡略形式:
{
"phones": "13800138000,13900139000",
"scenario": "产品推广",
"name": "春季促销"
}
形式 3: 候補者/履歴書スクリーニング形式(前置ノード):
{
"candidates": [
{ "name": "张三", "phone": "13800138000", "score": 85 },
{ "name": "李四", "phone": "13900139000", "score": 90 }
],
"scenarioDescription": "面试邀约 - 蓝领岗位简历筛查通过",
"taskName": "蓝领简历筛查后约面试",
"previousStep": "简历筛查"
}
形式 4: CRM/外部ツール形式:
{
"data": {
"contacts": [
{ "phone": "13800138000", "name": "张三" },
{ "phone": "13900139000", "name": "李四" }
],
"purpose": "客户回访",
"campaignName": "满意度调查"
},
"toolName": "CRM-System"
}
形式 5: 汎用リスト形式:
[
{ "phone": "13800138000", "name": "张三" },
{ "phone": "13900139000", "na
(原文がここで切り詰められています) 📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開
阿里云晓蜜外呼机器人
自动化外呼机器人技能,用于批量电话外呼。
快速开始
方式 1: 使用 JSON 文件(推荐)⭐
创建 taskInput.json 文件:
{
"phoneNumbers": ["13800138000", "13900139000"],
"scenarioDescription": "春季新品推广,了解客户购买意向",
"taskName": "春季促销活动"
}
执行:
node scripts/bundle.js taskInput.json
方式 2: 使用环境变量
ARGUMENTS='{"phoneNumbers":["13800138000"],"scenarioDescription":"测试外呼"}' \
node scripts/bundle.js
Agent 最佳实践 🎯
关键原则:充分利用场景信息 + 执行前确认
当用户提供外呼需求时,不要只提取电话号码和简单描述,而应该:
- 深度分析场景 - 理解用户的真实意图和具体需求
- 提取所有细节 - 时间、地点、条件、要求等
- 构建完整配置 - 生成详细的
agentProfile,包含所有 11 个字段 - 设计对话流程 - 在
workflow中体现具体的沟通步骤 - 执行前必须确认 ⚠️ - 向用户展示场景信息和外呼名单,等待明确确认
示例对比
❌ 不好的做法(信息丢失):
{
"phoneNumbers": ["15611207961"],
"scenarioDescription": "建议反馈",
"taskName": "建议外呼"
}
问题:丢失了"面试邀约"、"后天晚上八点"、"备选时间"等关键信息
✅ 好的做法(充分利用信息):
{
"phoneNumbers": ["15611207961"],
"scenarioDescription": "Java 开发岗位面试邀约 - 优秀候选人",
"taskName": "面试邀约",
"agentProfile": {
"role": "招聘专员",
"background": "Java 开发岗位招聘,候选人简历优秀",
"goals": "确认后天晚上八点面试时间,不方便则协商大后天",
"workflow": "自我介绍 -> 说明来意 -> 确认后天晚上八点 -> 备选时间 -> 记录反馈",
"openingPrompt": "您好,我是XX公司招聘专员,看到您的简历非常优秀"
}
}
何时使用此技能
当用户提到以下场景时使用此技能:
- 需要批量打电话给客户(包括从前置节点获取的名单)
- 外呼任务、电话营销、客户回访
- 满意度调查、产品推广
- 简历筛查后约面试 - 从简历筛查工具获取候选人电话
- 通知提醒、信息确认
- 提到"晓蜜"、"外呼机器人"、"自动拨号"、"约面试"、"打电话"
⚠️ 重要提示:使用此技能时,请务必:
- 仔细分析用户场景 - 提取所有有用信息
- 构建完整的 agentProfile - 不要只提供最基本的字段
- 设计合理的对话流程 - 在 workflow 中体现用户的具体需求
- 执行前必须确认 - 向用户展示场景信息和外呼名单,等待明确确认后才执行
前置条件
1. 配置阿里云凭证
需要在环境变量中配置阿里云 AK/SK:
export ALIYUN_OUTBOUND_BOT_ACCESS_KEY_ID="your-access-key-id"
export ALIYUN_OUTBOUND_BOT_ACCESS_KEY_SECRET="your-access-key-secret"
详细配置说明请参考 references/config.md
2. 绑定外呼号码 ⚠️ 重要
必须在阿里云晓蜜控制台申请并绑定外呼号码,否则无法进行外呼。
如何绑定号码:
- 登录 阿里云晓蜜控制台
- 进入"号码管理"页面
- 申请外呼号码(需要审核)
- 将号码绑定到租户
检查机制:
技能会在执行外呼前自动检查:
- ✅ 如果租户有绑定号码 → 自动绑定到实例,继续执行
- ❌ 如果租户没有绑定号码 → 终止流程,提示用户配置
错误提示:
❌ 租户下无绑定号码,无法进行外呼。
请先在阿里云晓蜜控制台申请并绑定外呼号码。
3. 系统要求
只需要 Node.js 环境(版本 >= 18)即可运行。
Agent 使用指南
当你(Agent)需要帮助用户执行外呼任务时,请遵循以下步骤:
步骤 1: 获取外呼名单
场景 A: 从前置节点获取(如简历筛查、客户查询等)
如果用户的请求是多步骤任务的一部分(例如:"给昨天收集到的蓝领简历进行筛查并约面试"),你应该:
- 先执行前置步骤 - 调用相应的工具获取数据(如简历筛查工具)
- 提取电话号码 - 从前置工具的返回结果中提取电话号码列表
- 推断场景描述 - 根据用户意图生成场景描述(如"面试邀约"、"简历筛查后约面试")
- 直接传递给此技能 - 无需再次询问用户
场景 B: 用户直接提供
如果用户直接提供电话号码或明确的外呼需求,收集以下信息:
- 电话号码列表(必需)- 至少一个有效的中国大陆手机号(1开头的11位数字)
- 外呼场景描述(必需)- 清晰描述外呼目的,例如"产品推广"、"客户回访"
- 任务名称(可选)- 便于识别的任务名称
如果信息不完整,使用 ask questions 工具向用户询问。
步骤 2: 验证数据
- 检查电话号码格式(中国大陆手机号:1开头的11位数字)
- 确保场景描述清晰明确
- 确认用户已配置阿里云 AK/SK 环境变量
步骤 3: 向用户确认信息 ⚠️ 必须执行
在执行外呼任务前,必须向用户展示并确认以下信息:
- 外呼场景 - 清晰描述外呼目的和内容
- 外呼名单 - 展示将要拨打的电话号码列表和数量
- 智能体配置 - 如果构建了 agentProfile,简要说明智能体的角色和目标
确认方式示例
准备执行外呼任务,请确认以下信息:
📋 任务信息
- 任务名称: 面试邀约
- 外呼场景: Java 开发岗位面试邀约 - 优秀候选人
- 智能体角色: 招聘专员
- 外呼目标: 确认后天晚上八点面试时间,不方便则协商大后天
📞 外呼名单(共 1 人)
1. 15611207961
是否确认执行外呼?
重要提示:
- ✅ 必须等待用户明确确认后才能执行
- ✅ 如果用户不确认,询问需要修改什么
- ❌ 不要在用户未确认的情况下自动执行外呼
步骤 4: 准备输入文件
主要方式:创建 taskInput.json 文件 ⭐
将收集到的信息格式化为 JSON 文件。重要:请仔细分析用户场景,提取尽可能多的信息来构建智能体配置。
🎯 从场景中提取信息的指南
当用户提供外呼场景时,你应该:
-
分析场景类型 - 识别是招聘、销售、客服、调查等哪种场景
-
提取关键信息 - 从用户描述中提取:
- 外呼目的(如"邀约面试"、"产品推广")
- 具体内容(如"后天晚上八点"、"Java 开发岗位")
- 候选条件(如"不方便则询问其他时间")
- 特殊要求(如"优秀的候选人"、"VIP 客户")
-
构建 agentProfile - 根据场景自动生成:
role: 根据场景推断(如"招聘专员"、"销售顾问")background: 提取业务背景(如"Java 开发岗位面试邀约")goals: 明确外呼目标(如"确认候选人后天晚上八点是否方便参加面试")workflow: 设计对话流程(如"问候 -> 说明来意 -> 确认时间 -> 备选方案 -> 记录反馈")openingPrompt: 生成得体的开场白(如"您好,我是XX公司的招聘专员")
📝 示例:从场景到完整配置
用户场景:
给 15611207961 这个优秀的人邀约面试,后天晚上八点是否方便参加面试,如不方便则询问大后天任意时间
应该生成的完整 JSON:
{
"phoneNumbers": ["15611207961"],
"scenarioDescription": "Java 开发岗位面试邀约 - 优秀候选人",
"taskName": "面试邀约",
"agentProfile": {
"name": "李敏",
"gender": "女",
"age": 28,
"role": "招聘专员",
"communicationStyle": ["专业", "友好", "高效"],
"background": "Java 开发岗位招聘,候选人简历优秀,需要邀约面试",
"goals": "确认候选人后天(X月X日)晚上八点是否方便参加面试,如不方便则协商大后天的时间",
"skills": "面试邀约、时间协调、候选人沟通",
"workflow": "自我介绍 -> 说明来意(面试邀约)-> 确认后天晚上八点 -> 如不方便询问大后天时间 -> 记录反馈 -> 发送面试详情",
"constraint": "保持专业、尊重候选人时间、提供灵活的时间选择",
"openingPrompt": "您好,我是XX公司的招聘专员李敏,看到您的简历非常优秀"
}
}
❌ 不够好的示例(信息提取不充分):
{
"phoneNumbers": ["15611207961"],
"scenarioDescription": "建议反馈",
"taskName": "建议外呼",
"type": "service"
}
技能支持多种输入格式,会自动识别并解析:
格式 1: 标准格式(推荐):
{
"phoneNumbers": ["13800138000", "13900139000"],
"scenarioDescription": "春季新品推广,了解客户购买意向",
"taskName": "春季促销活动",
"agentProfile": {
"name": "小美",
"gender": "女",
"age": 25,
"role": "销售顾问",
"communicationStyle": ["热情", "专业", "亲切"],
"background": "春季新品推广活动",
"goals": "了解客户购买意向,促成交易",
"skills": "产品介绍、需求挖掘、促成交易",
"workflow": "问候 -> 了解需求 -> 介绍产品 -> 处理异议 -> 促成合作",
"constraint": "保持礼貌、尊重对方意愿、不强制推销",
"openingPrompt": "您好,我是小美,春季新品推广活动的销售顾问"
}
}
注意: agentProfile 中的所有字段都是可选的。如果不提供,系统会根据 scenarioDescription 智能推断合适的配置。
格式 2: 简化格式:
{
"phones": "13800138000,13900139000",
"scenario": "产品推广",
"name": "春季促销"
}
格式 3: 候选人/简历筛查格式(前置节点):
{
"candidates": [
{ "name": "张三", "phone": "13800138000", "score": 85 },
{ "name": "李四", "phone": "13900139000", "score": 90 }
],
"scenarioDescription": "面试邀约 - 蓝领岗位简历筛查通过",
"taskName": "蓝领简历筛查后约面试",
"previousStep": "简历筛查"
}
格式 4: CRM/外部工具格式:
{
"data": {
"contacts": [
{ "phone": "13800138000", "name": "张三" },
{ "phone": "13900139000", "name": "李四" }
],
"purpose": "客户回访",
"campaignName": "满意度调查"
},
"toolName": "CRM-System"
}
格式 5: 通用列表格式:
[
{ "phone": "13800138000", "name": "张三" },
{ "phone": "13900139000", "name": "李四" }
]
注意:使用此格式时,scenarioDescription 会默认为"批量外呼"
智能体配置(强烈推荐)⭐
虽然 agentProfile 是可选的,但强烈建议 Agent 根据用户场景主动构建完整的智能体配置。
提供完整的 agentProfile 可以:
- ✅ 让外呼更加专业和得体
- ✅ 提高外呼成功率和用户体验
- ✅ 确保对话流程符合业务需求
- ✅ 避免通用话术导致的沟通不畅
技能支持自定义外呼智能体的人设和行为。可以通过 agentProfile 字段配置:
配置字段说明
| 字段 | 类型 | 必填 | 说明 | 示例 |
|---|---|---|---|---|
name |
string | 否 | 智能体名称 | "小美"、"小智" |
gender |
string | 否 | 性别 | "男"、"女" |
age |
number | 否 | 年龄 | 25 |
role |
string | 否 | 身份角色 | "销售顾问"、"招聘专员"、"客服专员" |
communicationStyle |
string[] | 否 | 沟通风格 | ["热情", "专业", "亲切"] |
background |
string | 否 | 业务背景 | "春季新品推广活动" |
goals |
string | 否 | 业务目标 | "了解客户购买意向,促成交易" |
skills |
string | 否 | 业务技能 | "产品介绍、需求挖掘、促成交易" |
workflow |
string | 否 | 工作流程 | "问候 -> 了解需求 -> 介绍产品 -> 促成合作" |
constraint |
string | 否 | 约束条件 | "保持礼貌、尊重对方意愿、不强制推销" |
openingPrompt |
string | 否 | 开场白 | "您好,我是小美" |
智能推断
如果不提供 agentProfile 或部分字段,系统会根据 scenarioDescription 智能推断:
- 面试/招聘场景 → 招聘专员,专业友好的风格
- 保险/理财场景 → 保险顾问,专业耐心的风格
- 游戏推广场景 → 游戏推广员,热情活泼的风格
- 审计/调查场景 → 审计专员,专业严谨的风格
- 客服/回访场景 → 客服专员,亲切耐心的风格
- 销售/产品场景 → 销售顾问,热情专业的风格
配置示例
招聘场景:
{
"phoneNumbers": ["13800138000"],
"scenarioDescription": "面试邀约 - Java 开发工程师",
"agentProfile": {
"name": "李敏",
"role": "招聘专员",
"openingPrompt": "您好,我是李敏,XX公司的招聘专员"
}
}
保险场景:
{
"phoneNumbers": ["13800138000"],
"scenarioDescription": "重疾险产品推荐",
"agentProfile": {
"name": "王顾问",
"role": "保险顾问",
"communicationStyle": ["专业", "耐心", "诚恳"]
}
}
输入格式完整说明
主要输入方式:taskInput.json 文件 ⭐
这是推荐的主要输入方式。创建一个 JSON 文件(通常命名为 taskInput.json),包含外呼任务的所有参数。
完整格式示例
{
"phoneNumbers": ["13800138000", "13900139000"],
"scenarioDescription": "春季新品推广,了解客户购买意向",
"taskName": "春季促销活动",
"agentProfile": {
"name": "小美",
"gender": "女",
"age": 25,
"role": "销售顾问",
"communicationStyle": ["热情", "专业", "亲切"],
"background": "春季新品推广活动",
"goals": "了解客户购买意向,促成交易",
"skills": "产品介绍、需求挖掘、促成交易",
"workflow": "问候 -> 了解需求 -> 介绍产品 -> 处理异议 -> 促成合作",
"constraint": "保持礼貌、尊重对方意愿、不强制推销",
"openingPrompt": "您好,我是小美,春季新品推广活动的销售顾问"
},
"metadata": {
"source": "manual",
"campaign": "spring-2024"
}
}
最简格式
{
"phoneNumbers": ["13800138000"],
"scenarioDescription": "测试外呼"
}
字段说明
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
phoneNumbers |
string[] | ✅ 是 | 电话号码列表,中国大陆手机号(11位,1开头) |
scenarioDescription |
string | ✅ 是 | 外呼场景描述,用于生成话术和智能体配置 |
taskName |
string | 否 | 任务名称,便于识别 |
agentProfile |
object | 否 | 智能体配置,不提供则自动推断 |
metadata |
object | 否 | 额外元数据,可存储任何自定义信息 |
执行方式
# 使用 JSON 文件
node scripts/bundle.js taskInput.json
# 或使用其他文件名
node scripts/bundle.js my-task.json
备用输入方式
方式 2: $ARGUMENTS 环境变量
适用于 Cursor Agent 或需要通过环境变量传递参数的场景:
ARGUMENTS='{"phoneNumbers":["13800138000"],"scenarioDescription":"测试"}' \
node scripts/bundle.js
方式 3: 交互式输入
如果不提供任何参数,技能会进入交互式模式,逐步询问:
node scripts/bundle.js
# 会提示输入:
# - 电话号码列表
# - 场景描述
# - 任务名称
输入优先级
技能会按以下顺序查找输入:
- 命令行参数(JSON 文件路径)- 最高优先级
- $ARGUMENTS 环境变量 - 次优先级
- 交互式输入 - 兜底方案
步骤 5: 执行技能
在用户确认后,执行外呼任务:
方式 A: 使用 JSON 文件(推荐)
node scripts/bundle.js taskInput.json
方式 B: 使用 $ARGUMENTS 环境变量
ARGUMENTS='{"phoneNumbers":["13800138000"],"scenarioDescription":"测试"}' \
node scripts/bundle.js
输入优先级:
- 命令行参数(JSON 文件路径)
$ARGUMENTS环境变量- 交互式输入(如果以上都未提供)
步骤 6: 监控和反馈
- 监控命令输出,查看任务进度
- 等待任务完成(可能需要几分钟,取决于电话数量)
- 向用户报告结果:
- 外呼任务已启动
- 任务组 ID
- 拨打的电话数量
常见使用场景
场景 1: 从前置节点获取数据(链式调用)⭐ 重点
用户: "给昨天收集到的蓝领简历进行筛查并约面试"
Agent 操作流程:
-
执行前置步骤 - 调用简历筛查工具
[简历筛查工具返回] { "candidates": [ { "name": "张三", "phone": "13800138000", "score": 85 }, { "name": "李四", "phone": "13900139000", "score": 90 } ] } -
提取电话号码 - 从筛查结果中提取
phoneNumbers = ["13800138000", "13900139000"]; -
生成场景描述 - 根据用户意图自动生成
scenarioDescription = "面试邀约 - 蓝领岗位简历筛查通过"; taskName = "蓝领简历筛查后约面试"; -
创建 taskInput.json 文件
{ "phoneNumbers": ["13800138000", "13900139000"], "scenarioDescription": "面试邀约 - 蓝领岗位简历筛查通过", "taskName": "蓝领简历筛查后约面试", "agentProfile": { "role": "招聘专员", "openingPrompt": "您好,我是XX公司的招聘专员" }, "metadata": { "source": "resume-screening", "previousStep": "简历筛查", "candidates": [ { "name": "张三", "phone": "13800138000", "score": 85 }, { "name": "李四", "phone": "13900139000", "score": 90 } ] } } -
执行外呼技能
node scripts/bundle.js taskInput.json
关键点:
- ✅ 无需用户再次提供电话号码
- ✅ 场景描述由 Agent 根据上下文自动生成
- ✅ 可以在 metadata 中保留前置节点的完整数据
- ✅ 整个流程对用户透明,一句话完成多步任务
场景 2: 用户直接提供号码
用户: "帮我给 13800138000 和 13900139000 打电话,做春季促销推广"
Agent 操作:
- 提取电话号码:
["13800138000", "13900139000"] - 提取场景:
"春季促销推广" - 创建
taskInput.json:
{
"phoneNumbers": ["13800138000", "13900139000"],
"scenarioDescription": "春季促销推广",
"taskName": "春季促销"
}
- 执行:
node scripts/bundle.js taskInput.json
场景 3: 用户提供号码列表
用户: "我有个客户名单,帮我做满意度回访"
Agent 操作:
- 使用
ask questions工具询问号码列表 - 读取并解析号码
- 创建
taskInput.json:
{
"phoneNumbers": ["13800138000", "13900139000", "..."],
"scenarioDescription": "客户满意度回访",
"taskName": "满意度调查"
}
- 执行:
node scripts/bundle.js taskInput.json
场景 4: 从文件读取
用户: "用 customers.json 里的号码做产品推广"
Agent 操作:
- 读取
customers.json文件内容 - 解析电话号码
- 创建
taskInput.json:
{
"phoneNumbers": ["提取的号码列表"],
"scenarioDescription": "产品推广",
"taskName": "产品推广活动"
}
- 执行:
node scripts/bundle.js taskInput.json
工作流程
技能执行时会自动完成以下步骤:
1. 验证输入 - 检查电话号码格式和必需参数
↓
2. 创建实例 - 获取或创建阿里云晓蜜外呼实例
↓
3. 确认绑定号码 - 检查租户是否有绑定号码 ⚠️ 关键步骤
├─ 如果没有绑定号码 → 终止流程,提示用户配置
└─ 如果有绑定号码 → 自动绑定到实例,继续执行
↓
4. 创建话术 - 根据场景描述生成外呼话术
↓
5. 创建任务组 - 在阿里云晓蜜平台创建外呼任务组
↓
6. 启动外呼 - 开始批量拨打电话
↓
7. 返回结果 - 输出任务组 ID 和执行状态
高级用法
使用 JSON 文件(推荐)⭐
这是主要的输入方式。创建 taskInput.json 文件:
{
"phoneNumbers": ["13800138000", "13900139000"],
"scenarioDescription": "了解客户满意度",
"taskName": "客户回访",
"agentProfile": {
"role": "客服专员",
"openingPrompt": "您好,我是XX公司的客服专员"
}
}
执行:
node scripts/bundle.js taskInput.json
使用 $ARGUMENTS 环境变量
适用于 Cursor Agent 或脚本调用:
ARGUMENTS='{"phoneNumbers":["13800138000"],"scenarioDescription":"测试"}' \
node scripts/bundle.js
命令行参数
# 指定 JSON 文件
node scripts/bundle.js taskInput.json
# 指定实例 ID 和脚本 ID(复用已有资源)
node scripts/bundle.js taskInput.json --instance-id xxx --script-id yyy
输出结果
技能执行完成后会输出:
{
taskInput: {
phoneNumbers: string[];
scenarioDescription: string;
taskName?: string;
metadata?: Record<string, any>;
},
jobGroupId: string; // 任务组 ID
instanceId: string; // 外呼实例 ID
scriptId: string; // 话术脚本 ID
totalPhones: number; // 拨打的电话数量
}
常见问题
1. 租户没有绑定号码 ⚠️ 最常见
错误:
❌ 租户下无绑定号码,无法进行外呼。
请先在阿里云晓蜜控制台申请并绑定外呼号码。
原因: 租户未在阿里云晓蜜控制台申请和绑定外呼号码
解决:
- 登录 阿里云晓蜜控制台
- 进入"号码管理"页面
- 申请外呼号码(需要提交资质审核)
- 审核通过后,将号码绑定到租户
- 重新执行外呼任务
注意:
- 号码申请需要企业资质
- 审核可能需要 1-3 个工作日
- 绑定号码后技能会自动检测并使用
2. 环境变量未配置
错误: "请配置阿里云 AK/SK 环境变量"
解决:
export ALIYUN_OUTBOUND_BOT_ACCESS_KEY_ID="your-key"
export ALIYUN_OUTBOUND_BOT_ACCESS_KEY_SECRET="your-secret"
3. 电话号码格式错误
错误: "电话号码格式不正确"
解决: 确保号码是中国大陆手机号(1开头的11位数字)
4. 任务创建失败
错误: "创建任务组失败"
可能原因:
- 实例状态异常
- 话术脚本未发布
- 账号权限不足
- 并发数超限
解决: 检查阿里云晓蜜控制台的实例和脚本状态
命令行参数
node scripts/bundle.js [options]
Options:
--json <file> 从 JSON 文件读取任务配置
--no-interactive 禁用交互式输入
--instance-id <id> 指定外呼实例 ID
--script-id <id> 指定话术脚本 ID
相关文档
注意事项
- 合规使用: 确保外呼行为符合相关法律法规,获得用户同意
- 号码隐私: 妥善保管客户电话号码,避免泄露
- 费用控制: 外呼服务会产生费用,注意控制调用频率
- 测试环境: 建议先在测试环境验证,再用于生产
- 错误处理: 监控任务执行状态,及时处理失败情况
功能说明
核心功能
- 批量外呼 - 支持同时向多个号码发起外呼
- 场景定制 - 根据场景描述自动生成外呼话术
- 自动创建 - 自动创建外呼实例和话术脚本
- 号码检查 - 自动检查并绑定外呼号码
- 任务管理 - 创建并启动外呼任务组
技能范围
本技能专注于外呼任务的创建和启动,包括:
- ✅ 验证电话号码
- ✅ 创建外呼实例
- ✅ 检查并绑定外呼号码
- ✅ 生成外呼话术
- ✅ 创建任务组
- ✅ 启动外呼任务
本技能不包括:
- ❌ 外呼结果分析
- ❌ 录音文件处理
- ❌ 会话内容总结
- ❌ 情感分析
如需查看外呼结果,请在阿里云晓蜜控制台查看。
参考链接
同梱ファイル
※ ZIPに含まれるファイル一覧。`SKILL.md` 本体に加え、参考資料・サンプル・スクリプトが入っている場合があります。
- 📄 SKILL.md (25,111 bytes)
- 📎 references/config.md (1,245 bytes)