Odoo + Claude: ERP를 조회하는 내부 Slack 봇 구축 가이드
Odoo Claude Slack 봇은 자연어 요청을 검증된 Odoo search_read 템플릿으로 변환해 Slack에서 운영 질문에 답합니다. 레코드 규칙은 그대로 유지됩니다.
이 문서는 현행 수작업 절차, Odoo→Claude→Odoo의 안전한 데이터 흐름, 그리고 통합 담당자에게 바로 건넬 수 있는 구체적 시나리오를 설명합니다.
우리는 주로 ERP용 AI 챗봇(Slack)와 Claude 기반 Odoo API 봇을 다룹니다. 비교 차원에서 GPT-4가 언급될 수 있으나 아래 패턴은 Anthropic의 구조화된 출력 방식을 기준으로 설계되었습니다.
각 단계에서 Odoo 모델과 필드를 명시해 팀이 애매한 AI 용어 없이 작업량을 추정할 수 있도록 했습니다.
핵심 루프가 안정되면 대화형 ERP 조회 같은 2차적 활용은 자연스럽게 확대됩니다.
Dasolo는 EU 호스팅 미들웨어에서 Anthropic Claude를 배포합니다. 다만 Odoo 필드명과 트리거 설계는 호스팅 지역과 무관하게 적용 가능합니다.
SEO와 운영자 이해를 위해 매뉴얼, 데이터 흐름, 실무 섹션에서 Odoo Claude Slack 봇이라는 표현을 일관되게 사용합니다.
Claude는 각 필드 쓰기를 사람이 일일이 지켜봐야 하는 채팅창이 아니라, 미들웨어가 검증하는 JSON을 반환하는 '구조화된 작업자'로 다루어야 합니다.
목차
현재 수작업 흐름의 문제점
운영팀은 Slack으로 재무에 미수금·재고 현황을 요청합니다. 재무는 Odoo에서 내보내고, 스크린샷이나 피벗 테이블을 보내며 답변까지 20분이 걸립니다.
임시 SQL 질의나 광범위한 관리자 권한을 부여할 수 없어 단순한 질문도 티켓 큐 뒤에 머뭅니다.
ERP용 AI 챗봇(Slack) 데모가 숫자를 착각하는 이유는 실시간 search_read 결과로 근거를 삼지 않기 때문입니다.
한 DB에 여러 회사가 섞여 있으면 레코드 규칙을 우회한 잘못된 회사 데이터 전송이 큰 피해로 이어질 수 있습니다.
Odoo Claude Slack 봇은 자연어를 안전한 Odoo 쿼리로 변환해야 하며, 원시 DB 접근을 허용해서는 안 됩니다.
창고팀이 Slack으로 고객 신용 현황을 물으면 재무는 노출 위험 때문에 노후화된 PDF를 내보내는 식의 수작업이 발생합니다.
프로젝트 매니저가 작업 상태를 물으면 개발자는 Odoo Project에서 맥락을 전환해 수동으로 답해야 합니다.
캐시된 오래된 재고 수치에 의존한 잘못된 답변은 Shopify에서 과다 판매를 발생시킵니다.
IT는 조회 권한만 필요한 Slack 사용자에게 광범위한 Odoo 접근 권한을 주기를 거부합니다.
실수로 농담 채널에서 대량 쿼리가 발생하지 않도록 사용자별 속도 제한(rate limit)을 적용하세요.
투자 타당성을 묻는 이해관계자에겐 도입 전 2주간 레코드별 절약 시간을 스프레드시트로 기록해 ROI를 제시하세요.
AI가 승인 체인을 우회하지 않도록, production webhook이 동작하기 전에 드래프트 전용 필드를 데이터 맵에 문서화하세요.
도입 후에도 교육 자료가 업데이트되지 않아 여전히 구식 수작업을 설명하는 슬라이드가 남는 일이 발생합니다. 내부 위키를 운영 현황에 맞춰 갱신하세요.
IT 보안팀이 고객 이메일의 EU 이탈 여부를 묻습니다. 파일럿 승인 전에 Anthropic 리전 구성과 마스킹 규칙을 담은 아키텍처 다이어그램을 제시하세요.
데이터 흐름 개요: Odoo → Claude → Odoo
트리거: 허용된 채널 목록에 있는 Slack 멘션 또는 DM에서 봇 권한으로 호출됩니다.
Odoo 조회: slack.user를 res.users와 매핑해 company_ids와 그룹을 결정합니다. 툴 층은 재고, 매출채권, 구매, 프로젝트 작업용 search_read 템플릿을 제공합니다.
Claude 작업: 의도를 파악해 model, domain, fields, limit, 자연어 포매터 지침을 담은 툴 호출 JSON을 생성합니다.
응답 작성: 미들웨어가 사용자 자격증명으로 Odoo XML-RPC/JSON-RPC를 호출해 행을 가져오고, Claude에 포맷팅을 맡겨 Slack 블록으로 반환합니다. v1에서는 쓰기 작업을 수행하지 않습니다.
사람 검토: 민감한 문의는 파트너 수준의 AR 세부 정보를 표시하기 전에 Slack에서 확인 버튼을 눌러 승인을 받도록 하세요.
아키텍처는 Dasolo가 각 Slack 워크스페이스별로 분리된 읽기 서비스 계정으로 배포하는 방식과 일치합니다.
Slack 사용자는 이메일로 res.users에 매핑됩니다. 매핑되지 않은 사용자는 Odoo 프로필 연결을 승인하는 OAuth 온보딩 메시지를 받습니다.
툴 레지스트리는 허용된 모델(stock.quant, purchase.order.line, account.move.line open, project.task)과 필드 허용 목록을 관리합니다.
Claude는 원시 SQL을 전혀 받지 않습니다. 미들웨어가 의도 JSON으로부터 domain 배열을 구성합니다.
v1에서는 쓰기 작업을 비활성화합니다. 향후 v2는 생성/변경마다 sudo 권한의 서비스 계정으로 확인 버튼을 거친 후 실행할 계획입니다.
응답 포매터는 최대 20행까지 Slack 블록을 사용합니다. 초과 시 필터된 Odoo 리스트 뷰 링크를 제공합니다.
Slack 답변에 '도메인 설명' 버튼을 넣어 파워 유저가 어떤 Odoo 필터가 적용되었는지 학습할 수 있게 하세요.
미들웨어는 Anthropic이 529 과부하를 반환할 때 지수적 백오프로 큐 워커에서 재시도하도록 해 Odoo 웹후크가 사용자 저장을 차단하지 않습니다.
구조화된 출력은 pydantic 또는 jsonschema로 검증합니다. Claude의 JSON이 유효하지 않으면 원문은 개발자 확인을 위한 내부 토론 채널로 전송됩니다.
프롬프트 템플릿은 v1, v2 파일로 버전 관리하며, 프로덕션은 환경변수로 활성 버전을 읽어 Odoo Claude Slack 봇의 안정적 튜닝을 지원합니다.
쓰기 시 Odoo 감사 로그는 API 사용자 uid를 기록해 분기별 감사를 통해 누가 AI 변경을 승인했는지 추적 가능하게 합니다.
스테이징 환경은 익명화된 프로덕션 페이로드를 주간으로 재생해 프롬프트 수정이 판올림 전에 테스트되도록 합니다.
멀티회사 DB에서는 company_id별 기능 플래그로 한 회사만 시범 운영하고 다른 회사는 기존 절차를 유지할 수 있습니다.
실무 예시 — 실제 입력과 출력
시나리오: 창고 관리자가 특정 SKU의 오픈 PO 조회 요청
사용자 요청: 'SKU WL-4421의 발주 수량과 입고 예정일 알려줘' — 봇은 product_id를 확인해 purchase.order.line(구매 상태)에서 공급사, 수량, date_planned을 조회해 Slack 표로 반환합니다.
후속 질문으로 '공급사 Acme만 보여줘'라고 하면 Claude는 이전 컨텍스트를 참고하되, 갱신된 도메인으로 새 쿼리를 실행해 오래된 수치로 인한 착오를 피합니다.
CFO가 '잔액 기준 상위 5개 파트너의 미수합계'를 묻으면 봇은 파트너명, amount_residual, 필터된 회계 뷰 링크를 담은 표를 제공합니다.
운영이 '오늘 지연된 제조 오더(MO)가 뭐야?'라고 물으면 봇은 mrp.production에서 state != done이고 date_planned_start가 오늘 이전인 레코드를 회사 시간대에 맞춰 조회합니다.
사용자가 애매한 재고 질문을 하면 봇이 먼저 창고 위치를 확인하는 질의를 보내고, 명확해진 뒤에 두 번째 조회를 실행합니다.
트리거부터 초안 출력까지 예상 지연 시간을 문서화하세요. 이메일/전사 워크플로우는 90초 이내, PDF 추출은 5분 이내를 목표로 하는 팀이 많습니다.
2주간 병행 '섀도우 모드'를 운영하세요: Claude는 테스트 필드에 쓰고 사람은 기존 방식으로 작업한 뒤 품질을 비교합니다.
에지 케이스: 회사 경계가 걸린 쿼리 차단
사용자가 접근 권한이 없는 자회사의 AR을 요청하면 봇은 행 수와 같은 민감 정보를 누설하지 않고 권한 설명만 제공합니다.
res.users의 company_ids에 적용된 레코드 규칙이 Claude가 숫자를 포맷하기 전 경계를 강제합니다.
UAT 체크리스트: 테스트 레코드로 트리거, JSON 로그 확인, 초안 필드 검증, 쓰기 승인, 채터 감사 항목 확인, 테스트 데이터 롤백.
Odoo Claude Slack 봇의 가동 기준: 초기 10회 프로덕션 실행에서 90% 이상의 에이전트/담당자 만족도와 5% 미만의 JSON 검증 실패율.
핵심 장점
- 시간 절감: 담당자는 매시간 반복 입력 대신 AI가 만든 초안을 검토하는 방식으로 업무를 처리합니다.
- 일관성: 같은 분류와 포맷 규칙이 교대 근무와 지사 간에 동일하게 적용됩니다.
- 속도: 트리거가 생성 시점에 실행되므로 일일 배치가 아닌 즉시 첫 액션으로 전환됩니다.
- 확장성: 다음 워크플로우는 프롬프트 스키마와 웹후크를 복제하는 것으로 추가할 수 있고, 인프라를 재구성할 필요가 적습니다.
- 감사성: 모든 Claude 호출은 입력, 출력, 인간의 재작성 기록을 비즈니스 레코드에 로깅합니다.
- 거버넌스: 고객 대면·재무 쓰기 항목은 사람 승인 절차를 두어 규정 준수를 확보합니다.
- 온보딩: 신입은 AI가 만든 초안을 템플릿으로 따라 작업하면서 오래된 PDF SOP보다 빠르게 업무를 익힙니다.
- 통합: 동일 미들웨어가 향후 워크플로우도 처리하므로 Anthropic API 사용 외에 별도 벤더 계약이 늘어나지 않습니다.
구현 시 고려사항
데이터 품질: 고객명 오기, 제품 내부 코드 누락, 헬프데스크 설명 공백 등은 AI 출력 품질 저하로 이어집니다. 우선 마스터 데이터를 정비하세요.
사람 검토: 첫 4주간은 드래프트 전용 쓰기로 시작하세요. 자동 적용 확대 전 오버라이드 비율을 측정합니다.
API 및 비용: 수치 집계·리포팅은 야간 배치로 처리하고, 실시간 Claude 호출은 가치 높은 트리거에만 예약하세요. 반복되는 프롬프트는 제품 카탈로그 스니펫을 캐시합니다.
보안: Anthropic 키는 미들웨어 비밀 저장소에 보관하고 Odoo 자바스크립트에는 두지 마세요. 각 워크플로우별 최소 권한 원칙으로 Odoo 사용자를 범위화하세요.
변화 관리: 담당자들에게 한 가지 Odoo Claude Slack 봇 워크플로우가 얼마나 시간을 절약하는지 먼저 보여준 뒤 추가 확장을 발표하세요.
Slack 서명 비밀과 Odoo API 키는 분기별로 교체하고 실행 매뉴얼(runbook)을 문서화하세요.
모든 쿼리를 user_id와 domain JSON으로 기록하되 PII가 포함된 전체 행 페이로드는 로깅하지 마세요. 보안 감사를 위해 필요한 최소 정보만 보관합니다.
Dasolo가 AI 파트너인 이유
Dasolo는 Benelux 및 EU 운영자를 대상으로 Claude와 Odoo 통합을 일상적으로 구축합니다. 레코드 규칙, GDPR 준수 로깅, 프랑스어·네덜란드어 교육을 포함합니다.
우리는 롤백 경로, 프롬프트 버전 관리, IT가 감사할 수 있는 가시성을 갖춘 Odoo Claude Slack 봇을 구현합니다 — 데이터 사이언스 노트북을 들여다볼 필요 없습니다.
헬프데스크, 세일즈, 구매, 문서 모듈을 동일한 미들웨어 패턴으로 연결해 여러 개의 별도 스크립트를 유지할 필요를 없앴습니다.
프롬프트 버전, 테스트 픽스처, 롤백 절차를 리포지토리에 문서화해 내부 IT가 특정 개인의 암묵 지식에 의존하지 않게 합니다.
Odoo Claude Slack 봇으로 시작하든 유사 워크플로우로 시작하든 통합 플레이북은 동일합니다.
Dasolo와 함께하는 AI 진단 예약
Dasolo와 AI 진단 예약을 통해 어떤 Odoo Claude Slack 봇 워크플로우를 우선 배포할지와 데이터 정비가 필요한 항목을 우선순위로 제시합니다.
마무리
Odoo Claude Slack 봇은 Claude가 통제된 Odoo 루프와 사람의 검문을 거칠 때 제대로 작동합니다. 단순한 채팅 부가 기능이 아닙니다.
이번 스프린트에 한 가지 트리거를 선택하고 30일 동안 완료 시간과 오버라이드 비율을 측정하세요. 성공하면 동일 패턴으로 다른 ERP용 AI 챗봇(Slack) 케이스로 복제합니다.
한 가지 워크플로우를 배포해 오버라이드율과 사이클 타임을 측정한 뒤, 동일 Odoo 모델의 인접 트리거로 Odoo Claude Slack 봇을 확장하세요.
통합사는 프롬프트나 모델 버전 변경 시 회귀 테스트가 실행되도록 테스트 픽스처 JSON 패키지를 제공해야 합니다.