成約した取引がCRMに何日も放置されてから、経理が請求書を作成します。営業担当者が通知を忘れたか、経理がSlackメッセージを見逃したかです。Nidish社の2026年RevOps監査レポートによると、営業と経理の統合は、請求ミス、更新漏れ、そしてキャッシュフロー問題に発展する単純なタイミングの遅れによって、最も「コストのかかる」漏れが発生するポイントです。
コードを書かずにワークフローだけを利用したい場合は、営業チーム向けの使い方をご覧ください。

この記事で作るもの
- 成約したが請求書が紐付けられていない取引を検索
- 各取引の連絡先と請求情報を取得
- 正しい明細で請求書を作成
- 重複を防ぐため取引に請求済みマークを付ける
セットアップ時間:MCPで5分、SDKで15分です。
オプション A:Codex、Cursor、ClaudeからMCPで実行する(5分)
AIにオーケストレーションを任せたい開発者向けです。ロジックを説明すれば、エージェントが実行します。
実際の動作をご覧ください:

1. Sanka MCPを接続
MCP設定に以下を追加します:
{
"mcpServers": {
"sanka": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://mcp.sanka.com/mcp",
"--resource",
"https://mcp.sanka.com/mcp"
]
}
}
}
2. やりたいことを説明する
過去7日間に更新された「成約」ステータスの取引をすべて見つけてください。
請求書が紐付けられていない各取引について:
1. 関連する連絡先の請求先住所を取得
2. 取引金額を1つの明細として請求書を作成
3. 請求書を取引に紐付け
4. 取引を請求済みとしてマーク
実行前に作成内容を表示してください。
3. 結果を確認する
エージェントは以下を行います:
- 請求書のない取引を一覧表示
- 各取引の請求書ペイロードを表示
- 確認を待つ
- 作成と更新を実行
- 成功またはエラーを報告
制御はあなたの手元にあります。エージェントがAPIコールを処理します。

オプション B:SDKで構築する(15分)
本番スクリプト、スケジュールジョブ、またはバージョン管理が必要な場合向けです。
1. SDKをインストール
pip install sanka-sdk
2. 構築する
from sanka_sdk import Sanka
from datetime import datetime, timedelta
client = Sanka(api_key="sk_live_...")
# 過去7日間の成約取引を検索
seven_days_ago = (datetime.now() - timedelta(days=7)).isoformat()
deals = client.deals.list(
filters={
"status": "closed-won",
"updated_at": {"gte": seven_days_ago}
}
)
for deal in deals.data:
# 請求書が既に存在するか確認
existing_invoices = client.invoices.list(
filters={"deal_id": deal.id}
)
if existing_invoices.data:
print(f"取引 {deal.id} には既に請求書があります、スキップ")
continue
# 請求情報のため連絡先を取得
contact = client.contacts.get(deal.contact_id)
# 請求書を作成
invoice = client.invoices.create({
"contact_id": contact.id,
"deal_id": deal.id,
"due_date": (datetime.now() + timedelta(days=30)).isoformat(),
"line_items": [
{
"description": deal.name,
"quantity": 1,
"unit_price": deal.amount
}
],
"billing_address": contact.billing_address,
"status": "draft"
})
# 取引を請求済みとして更新
client.deals.update(deal.id, {
"custom_fields": {
"invoiced": True,
"invoice_id": invoice.id
}
})
print(f"取引 {deal.name} の請求書 {invoice.id} を作成しました")
3. 自動化する
これを日次のcronジョブとして実行するか、取引ステータス変更時にwebhookでトリガーします:
# Webhookハンドラーの例(Flask)
@app.route("/webhooks/deal-closed", methods=["POST"])
def handle_deal_closed():
payload = request.json
deal_id = payload["deal_id"]
# 上記と同じロジック、ただし単一の取引に対して
deal = client.deals.get(deal_id)
if deal.status == "closed-won":
create_invoice_for_deal(deal)
return {"status": "ok"}

技術チーム向けのスコアカード例
これらの指標は導入設計時のテンプレートとして使ってください。4.2日の基準値は Scratchpadの2023 RevOps Trends Report に基づき、その他の導入前数値は自社の実測値に置き換えてください。
| 指標 | 導入前 | 導入後 |
|---|---|---|
| 平均請求書発行遅延 | 4.2日 | 即日 |
| 手動請求書作成 | 100% | 0%(自動下書き) |
| 請求書重複エラー | 月3件 | 0件 |
東京からリモートで働きながら複数地域のチームをサポートしていると、タイムゾーンに対応した自動化は便利というより必須に感じられます。ニューヨークで午後5時に取引が成約したとき、請求書は東京の誰かが起きるまで待つべきではありません。
次のステップ
- 営業チーム向けの使い方 — ノーコードパスを求めるチーム向け
- MCPドキュメント — 完全なMCPセットアップとツールリファレンス
- SDKリファレンス — 完全なSDKメソッドドキュメント
- 受注から入金までのソリューション — より広い自動化ワークフロー
MCPを接続して質問することから始めましょう:「請求書がない成約済み取引はどれですか?」
