Odoo と Claude:ERPに照会する社内向けSlackボットの作り方
Odoo Claude Slackボットは、自然言語を受け取り、Odooの管理されたsearch_readテンプレートに変換してSlack上で回答を返します。レコードルール(アクセス制御)はそのまま維持されます。
このドキュメントでは、現在の手順、Odoo→Claude→Odooのデータフロー、そしてインテグレータに渡せる具体的な入力/出力例を示します。
焦点はAIによるERPチャットボット(Slack)とClaudeとOdooを結ぶAPIボットにあります。比較のためにGPT-4を触れる場面もありますが、以下の実装例はAnthropicの構造化出力を前提としています。
各工程で使うOdooのモデル名やフィールド名を明記しているため、曖昧な“AI”用語に頼らず作業工数を見積もれます。
一度コアループが安定すれば、自然な会話形式のERPクエリや追加の対話機能は派生的に導入できます。
DasoloはEU内ホスティングのミドルウェア上でAnthropic Claudeを展開しますが、ここで示すOdooフィールド名やトリガーはリージョンに関わらず有効です。
本文中はSEOと運用双方の明確さを保つために、Odoo Claude Slackボットを手順・フロー・実例それぞれで繰り返し参照します。
重要な考え方として、Claudeはミドルウェアに構造化JSONを返す“作業者”と扱い、各フィールドの書き込みを人が逐一監視する必要がない設計を推奨します。
このページの構成
現状の手作業フロー
現場では、オペレーション担当がSlackで経理に売掛金や在庫のスナップショットを求めるたびに、経理はOdooからエクスポートしてピボットのスクリーンショットを送り、返信までに数十分を要することがよくあります。
臨時のSQL実行や広範な管理権限を付与できないため、簡単な問い合わせでもチケット待ちになる運用が常態化しています。
AIを活用したERPチャットボットは、実データのsearch_read結果に基づかないと数値を“幻覚”してしまい、デモで失敗するケースが多いです。
一つのデータベースに複数会社を混在させている場合、レコードルールを無視すると誤った会社の情報を返し重大なミスに繋がります。
Odoo Claude Slackボットは、自然言語をそのままデータベースに投げるのではなく、管理されたOdooクエリへ変換することが必須です。
例:倉庫担当がSlackで顧客の与信状況を聞くと、経理は仕方なく債権年齢表をPDFで出力して返す――安全なセルフサーブがないためです。
プロジェクトマネージャーが開発者にタスク状況を尋ねると、開発者はOdoo Projectからコンテキストを切り替えて回答する必要があり生産性が落ちます。
在庫に関する不正確な“記憶”ベースの回答は、実際の在庫が古いキャッシュを参照しているとオーバーセルにつながります。
ITは、読み取り専用の業務問い合わせだけに限定したいユーザーに対して広範なOdooアクセスを与えることに抵抗があります。
Slack上のジョークや雑談で高コストなクエリが大量発生しないよう、ユーザー単位のレート制限を設けます。
費用対効果を説明するために、ミドルウェア導入前にレコード種別ごとに二週間の節約分(分単位)をOdooの一覧画面横のスプレッドシート列で追跡するのがおすすめです。
AIが承認フローを迂回しないよう、データマップ作成時に“下書き専用”フィールドを明確にしてから本番Webhookを有効にしてください。
運用後も、Claudeが作成した下書き運用に合わせて内部Wikiや研修資料を更新しないと、6か月経っても古い手順が残ることがあります。
ITセキュリティから顧客メールがEU外へ出る懸念が出たら、Anthropicのリージョン設定やマスク(赤塗り)ルールを示すアーキ図で説明して承認を取りましょう。
データの流れ:Odoo → Claude → Odoo
トリガー:許可されたチャンネル内でのSlackメンションまたはDM(ボットスコープ)。
Odoo読み取り:slack.userとres.usersのマッピングでcompany_idsとグループを特定。ミドルウェアはstock、AR、PO、project.task用のsearch_readテンプレートを公開します。
Claudeの役割:ユーザー意図を解析し、model、domain、fields、limit、自然文整形指示を含むツール呼び出し用JSONを返します。
返答生成:ミドルウェアがOdooのXML-RPC/JSON-RPCをユーザー資格情報で実行し、取得した行データをClaudeに渡してSlackブロック形式で整形、メッセージを返します。v1では書き込み操作は行いません。
人間の承認:機密性の高い問合せにはSlack上で承認ボタンを表示し、承認後にパートナーレベルのAR詳細を表示する運用にします。
ここで示すアーキテクチャは、Dasoloが複数ワークスペース向けに提供するOdoo Claude Slackボットの方式と整合しています。
Slackユーザーはメールでres.usersにマップされ、未マップ時はOAuthのリンクを返してOdooプロファイル紐付けを促します。
ツールレジストリで許可するモデルは stock.quant、purchase.order.line、account.move.line(open)、project.task など。フィールドは許可リストで制限します。
Claudeに生のSQLを与えることはありません。ミドルウェアが意図JSONからdomain配列を組み立てます。
v1では書き込みを無効にし、将来的なv2では作成系操作に対して承認ボタンを必須にしてsudo権限のサービスユーザーで実行します。
レスポンス整形はSlackブロックで行い、表示行は最大20行。溢れた場合はOdooのフィルタ済み一覧へのリンクを提示します。
パワーユーザー向けに、実行されたOdooドメインを説明する「ドメインを説明」ボタンを付けて透明性を確保します。
Anthropicが529などで過負荷を返す可能性に備え、ミドルウェアはキューワーカーと指数バックオフを使って再試行し、OdooのWebhookがユーザー保存をブロックしないようにします。
ミドルウェアでpydanticやjsonschemaを使った構造化出力の検証を行い、不正なJSONは開発用チャネルに生テキストつきで送って調査します。
プロンプトテンプレートはv1、v2といったバージョン管理を行い、本番は環境変数でアクティブ版を切り替えられるようにしてチューニングを安全に展開します。
書き込みが発生した場合はOdooの監査ログにAPIユーザーのuidを残して、四半期レビューで誰が承認したか追跡できるようにします。
ステージングでは本番の匿名化ペイロードを毎週再生してプロンプト変更を検証し、実顧客データに触れずにテストします。
マルチカンパニー環境ではcompany_idごとの機能フラグを用意し、一社のみでパイロットし他は従来運用を継続できます。
実務での利用イメージ
シナリオ:倉庫管理者が特定SKUの発注状況を問い合わせる場合
ユーザー:SKU WL-4421の発注数量と到着予定は? ボットはproduct_idを解決し、purchase.order.lineでpurchase状態の行を検索してベンダー、数量、date_plannedをSlack表で返します。
続けて「Vendor Acmeだけに絞って」と来たら、Claudeは前回文脈を参照しつつも新たに絞り込んだドメインで最新のクエリを実行し、古い在庫数に基づく幻覚を避けます。
CFOが「上位5社の未回収合計を教えて」と尋ねれば、ボットはパートナー名、amount_residual、会計のフィルタ済みビューへのリンクを含む表を返します。
オペレーションが「本日遅延している製造指示は?」と聞けば、ボットはmrp.productionの状態がnot doneでdate_planned_startが本日以前のものを会社タイムゾーン考慮でクエリします。
あいまいな在庫の問い合わせには、まず倉庫ロケーションを確認する追問をしてから二度目のクエリを実行します。
トリガーから下書き出力までの想定待ち時間を文書化してください。多くのチームはメールやトランスクリプトは90秒以内、PDF抽出は5分以内を目標にします。
導入前に2週間のシャドウモードを並行運用し、Claudeがテストフィールドに書き込みする間は人が通常通り作業して結果の品質を比較します。
エッジケース:会社横断クエリの遮断
ユーザーがアクセス権のない子会社のARを要求した場合、ボットは行数などを漏らさない説明を返してアクセス拒否を明確にします。
res.usersのcompany_idsに基づくレコードルールが、Claudeが数値を整形する前に境界を強制します。
UATチェックリスト:テストレコードでトリガー、JSONログの検証、下書きフィールドの確認、承認書き込み、チャッター監査エントリの確認、テストデータのロールバック。
Odoo Claude Slackボットの本番化条件:最初の10件の本番運用でエージェントや担当者の満足度が90%以上、JSON検証エラー率が5%未満。
主な利点
- 時間短縮効果:担当者は同じOdooフィールドを毎時間打ち直す代わりにAIが作成した下書きを確認するだけになります。
- 一貫性:ボットはシフトや拠点を超えて同じ分類・フォーマット規則を適用します。
- 速度:取り込みから最初のアクションまでの時間が短縮されます。トリガーが作成イベントで動くため、終業時の一括処理を待つ必要がなくなります。
- 拡張性:次のワークフローはプロンプトスキーマとWebhookを複製するだけで追加可能で、インフラを再構築する必要はありません。
- 監査性:Claude呼び出しごとに入力・出力・人による上書きをビジネスレコードにログします。
- ガバナンス:顧客向けや財務系の書き込みは必ず人間の承認を必要とし、コンプライアンス要件を満たします。
- オンボーディング:新人はAI生成の下書きをテンプレートとして利用し、古いPDF手順書を読むより早く業務を学べます。
- 統合性:同じミドルウェアは将来のワークフローにも対応可能で、Anthropic API利用以外に新たな外部ベンダー契約は基本不要です。
導入時の検討事項
データ品質:社名のブレ、製品の内製コード欠損、ヘルプデスクの説明抜けはAIの出力を弱めます。まずマスターデータを正すことが先決です。
人間によるレビュー:最初の4週間は下書きのみ運用にして、上書き率を計測した上でリスクの低いフィールドから自動適用を広げてください。
APIとコスト:スコアリングやレポートは夜間バッチに回し、リアルタイムClaude呼び出しは高付加価値トリガーのみに限ります。プロンプトが繰り返される製品カタログ等はスニペットをキャッシュしましょう。
セキュリティ:AnthropicのAPIキーはミドルウェアのシークレット管理に保存し、OdooのJavaScriptに埋め込まないでください。ワークフローごとに最小権限のOdooユーザーを割り当てます。
チェンジマネジメント:まず1つのOdoo Claude Slackボットワークフローで代表的な時間短縮を示してから、他の10件を展開する旨を伝えると現場の協力を得やすいです。
Slackの署名シークレットやOdooのAPIキーは四半期ごとにローテーションし、手順をRunbookで記録してください。
各クエリはuser_idとdomain JSONでログを残し、PIIを含む全行ペイロードの全文は記録しないようにします。
なぜDasoloが最適なAIパートナーなのか
Dasoloは、ベネルクスとEU圏の事業者向けにClaudeとOdooを日次で統合構築し、レコードルール遵守、GDPR対応ログ、フランス語やオランダ語での展開研修を提供しています。
我々はロールバック経路、プロンプトのバージョン管理、ITが監査できる可観測性を備えた形でOdoo Claude Slackボットを実装します。データサイエンスのノートブックを読む必要はありません。
Helpdesk、Sales、Purchase、Documentsモジュールを同一ミドルウェアパターンで接続するため、11個別のスクリプトを保守する必要はありません。
プロンプトのバージョン、テストフィクスチャ、ロールバック手順をリポジトリに文書化し、社内ITが属人的な知識に依存しない体制を作ります。
Odoo Claude Slackボットから始めるにせよ、別のワークフローで始めるにせよ、統合プレイブックは同じです。
DasoloによるAI診断を予約する
DasoloのAI診断を予約すれば、どのOdoo Claude Slackボットワークフローを最優先で出荷すべきか、どのデータクリーンアップが障害となっているかを順位付けします。
まとめ
Odoo Claude Slackボットがうまく機能するのは、Claudeが管理されたOdooループ内で動き、人のゲートがあるときです。単なる脇道のチャットウィンドウではありません。
このスプリントでトリガーを一つ選び、30日間の完了時間と上書き率を計測してから、次のAI ERPチャットボット(Slack)ユースケースへ模倣展開してください。
まず一つワークフローを展開して上書き率とサイクルタイムを測定し、同じOdooモデル上で隣接するトリガーへと展開していきます。
インテグレータには、プロンプトやモデルバージョンを変更した際に回帰テストが自動で動くよう、テストフィクスチャのJSONパックを納品してもらってください。