Carta CRM(顧客管理ツール)から企業レコードを検索して取得するスキルです。 **次のような場合に使用:** ユーザーが「企業を検索して」「会社の詳細を教えて」「〇〇についての情報を」「IDから企業を探して」「ドメインで会社を検索」「登録している企業一覧を見せて」「/search-companies」といったような指示をした場合 取得される情報には、企業ID、企業名、カスタム項目などの詳細が含まれます。取得した企業IDは、企業情報を更新するスキルと組み合わせて使用できます。
Searches for and retrieves company records from the Carta CRM. Use this skill when the user says things like "find a company", "search companies", "look up a company", "show me company details for [name]", "full details on [name]", "tell me about [name]", "get company by ID", "get company by domain", "list companies", "what companies do we have", or "/search-companies". Returns company details including ID, name, and custom fields. The company ID returned can be used with the update-company skill.
<!-- carta:plugin-version --> <carta-plugin>carta-crm:1.14.2</carta-plugin>
Carta CRM(顧客管理システム)の中から企業を検索します。特定の1社の名前を指定すれば、その企業の詳細情報カードが表示されます。複数社の検索を指定すれば、一覧表が表示されます。この区別で処理を分けることが最初の判断です。
fetch_company_by_domainで1社が確定しますユーザーが1社の名前を挙げた場合は、「検索」や「探して」という言葉を使っていても詳細表示として扱います。判断が曖昧な場合は、一覧として扱い、「どのような企業を探しているのか詳しく教えてください」と確認します。
crm_call_toolを使って確認してください。crm_view_toolは使わないでください。 このステップはあなたの内部処理用です。crm_view_toolを使うと、結果の配列がすべて個数に圧縮されてしまい、必要な企業IDと詳細情報が失われ、ユーザーが求めていない一覧表示になってしまいます。
crm_call_tool({
"name": "crm:search_companies",
"arguments": { query: "<企業名>", limit: 10 }
})
マッチした数によって、以下のように処理を分けます:
crm_view_tool({ "name": "crm:fetch_company_by_id", "arguments": { id: "<id>" } })
crm_view_tool({
"name": "crm:search_companies",
"arguments": { query: "<企業名>", limit: 10 }
})
その後、「複数の企業が見つかりました — どれですか?」と聞きます。ユーザーが選んだら、その企業のfetch_company_by_idを呼び出します。勝手に上位の結果を開くと、ユーザーが意図しない企業が自信満々に表示されてしまいます。ドメイン指定の場合、企業名の確認は不要です — 1回の呼び出しで1社が確定します:
crm_view_tool({ "name": "crm:fetch_company_by_domain", "arguments": { domain: "<domain>" } })
1回のリクエストで表示する企業カードは最大1枚です。ユーザーが複数社の名前を挙げた場合は、複数のカードを重ねて表示するのではなく、どれを開くか選ぶよう求めてください。
ユーザーのフィルター条件が特定のフィールドに対応している場合は、まずスキーマ(データ構造)を確認して有効なフィールドID(データ項目の識別子)を取得します。これはスキーマ検索なので、crm_call_toolを使います:
crm_call_tool({ "name": "crm:get_company_fields", "arguments": {} })
ユーザーの指示を最も詳しく対応するフィールドにマッピングして、filters(フィールドID、演算子、値の組み合わせ)として渡します。フィールドが対応しない場合だけ、自由形式のqueryにフォールバック(代替)してください。フィールドIDを推測してはいけません — 組織によって異なります。
crm_view_tool({
"name": "crm:search_companies",
"arguments": {
query: "<検索キーワード>",
limit: 20
}
})
ユーザーがもっと結果を見たいと言ったら、limitの数を増やしてください。offsetを使ってページネーション(段階的な表示)をしてください。
CRMのビュー表示は組織ごとに有効・無効が設定され、1社の詳細カードはさらに別の設定の上に制御されます。上記のcrm_view_tool呼び出しは、以下のような返答をすることがあります:
CRM tool 'search_companies' has no view — call it with crm_call_tool instead. (「CRM ツール『search_companies』にビューがありません —
crm_call_toolで呼び出してください」)
これは失敗ではなく通常の応答です — この組織ではそのビュー表示が有効になっていません。その呼び出しを同じ内容でcrm_call_toolに切り替えて実行し、結果をテキストとしてステップ4の形式で提示してください。crm_view_toolを再実行したり、このメッセージをユーザーに報告したりしないでください。
詳細表示のリクエストで情報カードのビューが利用できない場合も、同じように処理します。ステップ2でのcrm_call_toolでの企業名確認は続け、選ばれた企業の情報をテキストで提示してください。
情報カードが表示された場合、ユーザーは企業の全情報を見ています。フィールドを繰り返し説明しないでください。ユーザーが求めたことに答えるか、1行で確認するだけです。
テーブルが表示された場合、ユーザーはすべての行を既に見ています。テキストで再び列挙したり、形式を変えたり、要約したりしないでください — テーブルの内容が重複します。ユーザーが実際に求めた質問に答えるか、1行で確認するだけです(例:「14社が見つかりました — IDは最初の列にあり、/update-companyで使えます」)。
crm_call_toolにフォールバックした場合、空でないすべてのフィールドを読みやすい形式で表示し、IDは目立つように示してください — ユーザーが/update-companyを実行する際に必要です。
企業が見つからない場合:
「検索条件に一致する企業は見つかりません。別の企業名、キーワード、またはドメインでお試しください。」
<!-- carta:plugin-version --> <carta-plugin>carta-crm:1.14.5</carta-plugin>
Look up companies in the Carta CRM. A request about one named company renders that company's card; a request for a set renders a table. Route on that distinction first — it decides every call below.
fetch_company_by_domain already identifies one record.A named single company is a detail request even when the user says "search" or "find". If it's genuinely unclear, treat it as a list and ask what they want to narrow to.
Resolve through crm_call_tool, never crm_view_tool. This step is for you, not the
user: a view call collapses every array in the response to a count, so the rows — and the
id you need — never reach you, and the user gets a list they did not ask for.
crm_call_tool({
"name": "crm:search_companies",
"arguments": { query: "<company name>", limit: 10 }
})
Then branch on how many candidates came back:
crm_view_tool({ "name": "crm:fetch_company_by_id", "arguments": { id: "<id>" } })
crm_view_tool({
"name": "crm:search_companies",
"arguments": { query: "<company name>", limit: 10 }
})
Then ask: "Several companies match — which one did you mean?" When they pick, call
fetch_company_by_id for it. Opening the top hit unasked shows the wrong record with
full confidence.By domain, there is nothing to resolve — one call, one card:
crm_view_tool({ "name": "crm:fetch_company_by_domain", "arguments": { domain: "<domain>" } })
Render at most one card per request. If the user named several companies, ask which to open rather than stacking views.
When the user's filters map to specific fields, discover the valid field_ids first. This
is a schema lookup, so it goes through crm_call_tool:
crm_call_tool({ "name": "crm:get_company_fields", "arguments": {} })
Map the user's intent to the most specific matching fields and pass them as filters
({ field_id, operator, value }). Fall back to the free-text query only when no field
matches. Never guess a field_id — they vary per organisation.
crm_view_tool({
"name": "crm:search_companies",
"arguments": {
query: "<search term>",
limit: 20
}
})
Increase limit if the user asks to see more results. Use offset to paginate.
CRM views are enabled per organisation, and single-record views behind a second flag on
top of that. So any crm_view_tool call above may answer with:
CRM tool 'search_companies' has no view — call it with crm_call_tool instead.
That is a normal response, not a failure — this organisation does not have that view
enabled. Retry that one call verbatim through crm_call_tool and present the result as
text per Step 4. Do not retry crm_view_tool, and do not report the message to the
user.
A detail request whose card has no view still resolves the same way: keep the
crm_call_tool resolve from Step 2 and present the chosen record as text.
When a card rendered, the user sees the whole record. Do not restate its fields. Answer what they asked, or acknowledge in one line.
When a table rendered, the user already sees every row. Do NOT re-list, re-format, or
summarise them as text — that duplicates the table. Answer the question they actually
asked, or acknowledge in one line (e.g. "Found 14 companies — the ID is in the first
column, for /update-company.").
When you fell back to crm_call_tool, display all non-empty fields in a readable
summary and show the ID prominently — the user will need it to run /update-company.
If no companies are found:
"No companies found matching your search. Try a different name, keyword, or domain."
原文・著作権は Anthropic および各プラグイン作者に帰属します。日本語訳は Claude API による自動翻訳です。