iT邦幫忙

2025 iThome 鐵人賽

DAY 30
0
Odoo

站在巨人的肩膀上打造企業智慧助手:Make × AI × Odoo 的實踐之路系列 第 30

🚀 Day 30:最終章!AI × Odoo 的自動化銷售閉環

  • 分享至 

  • xImage
  •  

一、前情提要:30 天的旅程走到最後一步

還記得我們這一路走過的流程嗎?

  • Day15:Make 串接 Gmail,成功收到客戶信
  • Day16:Gmail 信件標籤化,第一步掌握商機
  • Day27:AI 對照 Tag,讓分類標準化、自動同步
  • Day28:自動更新 Google Sheets Tag 資料
  • Day29:需求 → Tag → Odoo 查找到產品

不過,目前流程只停留在「找到產品」,還沒有把產品放到 CRM 商機裡。
所以今天我們要完成最後一步:
👉 讓找到的產品,直接寫進 Odoo 商機 (CRM Lead)。

這樣一來,客戶只要寄一封詢價信,系統就能:
需求 → Tag → 產品 → 商機
真正實現 端到端的自動化閉環
這就是我們 30 天旅程的「最終章」。


二、使用者情境:從詢價信到完整商機

來看一個真實案例:

客戶 Gmail:

我要找一支用來切削陶瓷的牙技用刀具,刀尖直徑 0.5mm,長度約 38mm

系統流程:
1️⃣ AI 判斷需求 → 對應 Tag(用途:用途 - 陶瓷、形式:形式 - 牙技、D:D - D0.5、L:L - 38L)
2️⃣ 系統自動查詢 Odoo → 找到產品「ZA026119021202-G」
3️⃣ 系統建立一筆 CRM 商機:

  • 名稱:「寄件人 – 主旨 – 時間」
  • 內部備註:完整記錄 Gmail 原文、AI 分析的 Tag、Odoo 查找到的產品

4️⃣ 最後回覆客戶:「✅ 已成功建立商機!」

這樣一來,業務在 Odoo 裡看到的,不再是「一個空白的商機」,而是一份整理好的完整資訊。


三、實際操作流程

前面幾天,我們已經把 Tag 對照、產品查找 都做完了。
那今天的目標就是:把這些資訊「整理乾淨」,然後一次性寫進 Odoo CRM。

整體來說,流程可以分成四個小步驟:
👉 先讓 AI 幫我們格式化 Tag → 再讓 AI 格式化產品清單 → 用 小工具(Text Parser) 把這些 HTML 字串修正乾淨 → 最後 送進 Odoo


🔧 步驟 1:AI 整理 Tag 格式

既然我們已經能讓 AI 判斷出對應的 Tag,那第一件事就是要請它「整理」成 CRM 能用的格式。

這裡的重點是:我們希望 CRM 裡的 備註 (description),不要只是一段全部擠在一起的文字,而是有條理的文字,所以我請 AI 幫我產生為 HTML 的語法

https://ithelp.ithome.com.tw/upload/images/20250830/20177665he2AM5owmD.png
所以我設計了 Prompt,要求 AI 嚴格遵守以下規則:

  • 固定開頭「符合需求標籤:」
  • 每個分類(刀徑、用途、形式…)獨立一行,以 <br> 結尾
  • 全部包在 <p> ... </p>

範例輸出:

<p>符合需求標籤:<br>用途:用途 - 陶瓷<br>形式:形式 - 牙技<br>D:D - D0.5<br>L:L - 38</p>

Prompt範例:

請根據下方內容,嚴格依照以下規範整理成指定格式,並只回傳格式化後的內容,不得有任何說明、標點、註解或程式框:
1.第一行請固定加上「符合需求標籤:<br>」。
2.之後每一個分類(如刀徑、刃數、塗層、用途等)獨立為一行,並以「<br>」結尾。
3.所有內容需包在一對<p>標籤內,且<p>與</p>之間不得有多餘換行、空格或其他符號。
4.行內不可有多餘的空格或標點(除原始內容外),不得自動增加或省略任何tag分類、值或順序。
5.請勿合併、拆分或調整順序,僅能照原內容一行一分類輸出。
6.請勿加上任何解釋、程式框、markdown格式、html以外標籤或任何非內容本身的附註。

內容:{{8.result}}

-----
範例
內容:
刀徑:D - D2、D - D4、D - D6
刃數:刃數 - 1T
塗層:塗層 - 白
用途:用途 - 鋁銅用

回覆:
<p>符合需求標籤:<br>刀徑:D - D2、D - D4、D - D6 <br>刃數:刃數 - 1T <br>塗層:塗層 - 白 <br>用途:用途 - 鋁銅用</p>
請僅依上述規則整理並回傳內容。

🔧 步驟 2:AI 整理產品格式

有了 Tag,接下來就是把 Odoo 找到的產品資料整理一下。
https://ithelp.ithome.com.tw/upload/images/20250830/20177665ws7nTiGINx.png
因為 不可能把 JSON 的格式直接放進 CRM,畫面會非常難以閱讀,所以我一樣讓 AI 幫我轉換成 條列式 HTML

規則很簡單:

  • 固定開頭「符合商品列表:」
  • 每一行 → 商品名稱 + 庫存
  • 全部包在 <p> ... </p>

範例輸出:

<p>符合商品列表:<br>商品名稱:ZA026119021202-G,庫存:10</p>

Prompt範例:

請根據下方的JSON內容,嚴格依照以下規則整理成指定格式,並只回傳格式化後的內容,不得有任何說明、標點、註解或程式框:

1.請將最上方固定加上「符合商品列表:<br>」。
2.依序讀取每一筆result資料,以「商品名稱:{name},庫存:{qty_available}」為內容,每一筆為一行,並以「<br>」結尾。
3.將所有行包在一對<p>標籤內,且<p>與</p>之間不得有多餘換行、空格或其他符號。
4.請直接以中文全形冒號(:)作為標題與數字之間的分隔,且「庫存」僅顯示整數。
5.資料順序需依原result陣列順序排列,不得增減或調整內容。
6.不得回傳任何說明、標點、程式框、markdown、註解或非內容本身的附加文字。


JSON內容:{{25.data}}

-----
範例
內容:
{"jsonrpc": "2.0", "id": 1, "result": [{"id": 3138, "name": "1AEL-D060-L075", "qty_available": 11.0}, {"id": 3130, "name": "1AES-D020-L050-A10", "qty_available": 15.0}, {"id": 3131, "name": "1AES-D020-L050d6", "qty_available": 16.0}, {"id": 3133, "name": "1AES-D040-L050", "qty_available": 17.0}, {"id": 3136, "name": "1AES-D060-L050", "qty_available": 18.0}, {"id": 3137, "name": "ZA037824022901W", "qty_available": 100.0}]}

回覆:
<p>符合商品列表:<br>商品名稱:1AEL-D060-L075,庫存:11<br>商品名稱:1AES-D020-L050-A10,庫存:15<br>商品名稱:1AES-D020-L050d6,庫存:16<br>商品名稱:1AES-D040-L050,庫存:17<br>商品名稱:1AES-D060-L050,庫存:18<br>商品名稱:ZA037824022901W,庫存:100</p>
請僅依上述規則整理並回傳內容。

🔧 步驟 3:Text Parser 修正格式

AI 在輸出 HTML 時,常會在標籤邊界或字串尾端夾雜 空白字元(空格、換行、tab)。
這些空白進到 JSON 字串裡,有時會讓 Odoo 在寫入或解析時發生錯誤

因此我用 Text parser → Replace 做兩次清理:
https://ithelp.ithome.com.tw/upload/images/20250830/20177665F8zMt9sS61.png

  • Replace #1:清掉 </p> 與下一個 <p> 之間的空白
    • Pattern:\s*</p>\s*<p>\s*
    • New value:</p><p>

https://ithelp.ithome.com.tw/upload/images/20250830/20177665rPeayqxyhm.png

  • Replace #2:清掉結尾 </p> 與右雙引號之間的空白
    • Pattern:</p>\s*"
    • New value:</p>"

🔧 步驟 4:新增到 Odoo CRM

最後,就是壓軸的一步:把整理好的資訊 寫進 Odoo CRM 商機
https://ithelp.ithome.com.tw/upload/images/20250830/20177665WoMrUnmTz5.png
這裡我用 HTTP 的 Make a Request,直接呼叫 crm.lead 的 create:

  • name → Gmail 寄件人 + 主旨 + 時間
  • description → 前三步 AI + Text Parser 整理好的完整 HTML

Request content(詳細說明請參考Day29的步驟2):

{
  "jsonrpc": "2.0",
  "method": "call",
  "params": {
    "service": "object",
    "method": "execute_kw",
    "args": [
      "資料庫名稱",
      user_id,
      "使用者密碼",
      "crm.lead",
      "create",
      [
        {
          "name": "{{10.from.name}}-{{10.subject}}-{{formatDate(10.date; " YYYY-MM-DD  HH:mm:ss"; "Asia/Taipei")}}",
          "description":{{29.text}}
        }
      ]
    ]
  },
  "id": 1
}

一旦這個步驟跑完,CRM 商機就會自動生成,而且 備註欄位會清楚記錄:

  • 📩 Gmail 原始資訊
  • 🔖 AI 判斷的 Tag
  • 🛠 Odoo 查到的產品清單與庫存量

這樣整個流程就完整了:
從客戶寄信 → 到 AI 幫忙解析 → 到產品自動帶入 → 最後寫進商機,沒有任何一步需要人工介入。


四、測試成果

實測流程:

  1. Gmail 收到信件
  2. AI 整理 Tag
  3. AI 整理產品
  4. Text Parser 合併
  5. Odoo CRM 自動新增商機

gif1


五、結語:真正完成,但還沒真正結束

我們終於完成了 🎉
把客戶寄來的 Gmail 詢價單,先透過 AI 幫我們根據 TAG 整理 → 再判斷 Odoo 是否有符合的產品 → 最後 丟進 CRM

這樣的流程,從 需求 → Tag → 產品 → 商機,完整閉環。

但是——
你以為今天就是最後一篇嗎?其實沒有 😏

今天,是整個 自動化流程主題 的最後一篇;
但既然真的寫完了 30 天,總是要留一點空間,說說 我的感想、我的反思,還有我留給大家的「課題」

所以,明天才是真正的最後一篇。
如果這 30 篇文章,曾經讓你對自動化流程產生興趣,請務必來看看明天的文章。

我會分享:
👉 這 30 天的流程,我認為還有哪些不足
👉 哪些地方還能改進
👉 我的心得與想法

這樣,才算是為這段旅程畫上真正的句號。

所以,明天見啦~


上一篇
🚀 Day 29:AI × Odoo × Tag 自動配對:從需求直達產品
系列文
站在巨人的肩膀上打造企業智慧助手:Make × AI × Odoo 的實踐之路30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言