iT邦幫忙

2026 iThome 鐵人賽

DAY 23
0
AI Engineering

Macaron:30 天打造一位會占卜的 AI Agent系列 第 25 篇

Day 25|私訊送到一半斷線,到底有沒有送到?

  • 分享至 

  • xImage
  •  

馬卡龍的成長日記 Day 25

昨天,私訊的樣子定下來了。今天要面對的,是一個大家應該都遇過的狀況:訊息按了送出,畫面卻一直在轉圈圈,最後跳出一個錯誤,你完全不知道對方到底收到了沒有。

換成 Macaron 也一樣。它把私訊交給 Discord 之後,如果剛好就在這一刻程式停掉了,重新啟動的時候,它要怎麼知道這一則該重送、該等一下,還是其實已經送到了?

如果它選擇直接再送一次,使用者可能會收到兩份一模一樣的解讀;如果它選擇不送,使用者可能永遠等不到答案。兩種都不是我想要的。

每一則私訊,先放進待送清單

Macaron 的做法,是每一則要送的私訊,都先放進一份「待送清單」,每一項工作都有一個固定的身分:是哪一篇占卜、哪一位使用者、哪一張照片、哪一個內容指紋、Day 23 鎖定的是哪個選擇,以及 Day 24 準備好的是哪一則私訊。

同樣的東西再放一次,Macaron 只會把原本那一項讀出來,不會多一筆;如果換了照片、換了選擇或換了私訊內容,就是衝突,也不會覆蓋原本那一項。

每一項工作,都有清楚的狀態

放進清單之後,每一項工作都會標著自己現在的狀態:等待中、送出中、可以重試、對方沒有開放私訊、不確定有沒有送到,以及離線測試成功。

這裡刻意少了一個狀態:「已送達」。今天所有的私訊都是在模擬的環境裡處理的,所以最好的結果,也只能叫做「離線測試成功」,不能說已經送到了。

如果有好幾個程式同時想處理同一項工作,也只有一個能真的去送,其他的只能等它的結果,不能因為還沒看到結果,就自己再送一次。

不確定的時候,不能再送一次

這一天最重要的,是「不確定有沒有送到」這個狀態。

私訊已經交給 Discord 了,但結果還沒有被好好地記下來,程式就停了,這時候 Macaron 沒辦法確定到底有沒有送到。要把一項工作標成「不確定有沒有送到」,也有嚴格的條件:紀錄、狀態的轉換和收據,三樣都要完整存好、而且讀得回來,少一樣就維持在「送出中」。

一旦被標成不確定,它就永遠不會被自動重送。只有明確知道是「可以重試」的失敗,或是對方沒有開放私訊,才會在確認上一次的紀錄都沒被動過之後,重新排隊。

我寧可讓一則私訊停在不確定,交給人來查,也不要冒著讓同一個人收到兩份答案的風險,自動再送一次。

(需作者補充:如果真的發生「不確定有沒有送到」,你希望 Macaron 怎麼通知你?或者你打算怎麼處理?)

今天,還是在模擬的環境裡

今天沒有資料庫、沒有真的連上 Discord,也沒有真的收到任何一張 Discord 的回條。所有的處理都是離線的,每一項工作的結果上也都寫著:實際的傳送沒有執行。

私訊能安全地排隊了。但這裡會浮出另一個問題:第一版的 Macaron 說好什麼都不記得,那一個人選了哪一組、最後收到哪一份答案,這些紀錄還要不要留?


上一篇
確認留言,將完整的答案就送進私訊
下一篇
Day 26|說好不記得你,但這筆占卜還是要留下紀錄
系列文
Macaron:30 天打造一位會占卜的 AI Agent 共 28 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言