保那回抛的信鸽只只必达不迷路

对每一次派发出去的 Webhook 敲门包严加死盯大查,把脉拆解送挂了的死因,再靠一手回魂大招(重试功能)力保你们家接活大厅不漏掉任何一笔 AI 吐出的回信。

概览(Overview)

打长线干异步活以及挂事件大钩子(event-driven workflows)时,这个往外喷水交件的 Webhook 就是 ModelRiver 跟你们自家大后院之间那座独木要命大桥。送单员(webhook)扑空送挂了,你们家的应用大台就成了个瞎子,根本不知道 AI 那口大锅早把饭煮熟了。所幸,请求日志(Request Logs)死死盯死了每一次的投送起落,让您能把准脉跳、火线清障。


投递走包裹的长线大生死轮(Webhook delivery lifecycle)

每一次去你们家门口塞 Webhook 包全得熬过这么一长串过鬼门关:

Planned Delivering Success
Error Retry: / /Success/Error

挂脸上的气色牌大解(Status meanings)

牌面气色(Status)长在哪张脸(Visual)啥底子意思(Meaning)
排上号要送(Planned)挂着灰不溜秋的牌子(Gray badge)打包好在排队等车发件了
在道上跑(Delivering)挂着海水蓝的大牌(Blue badge)正在敲你家 HTTP 门、发着力呢
交差大吉(Success)亮出大绿通过牌(Green badge)你们家接收口痛快地退回了个 2xx 大绿标底回音
砸门外挂死(Error)爆出滴血大红牌(Red badge)送货碰壁折单了:叫你赶紧过去干预捞人

步步查道大探检的排查术(Step-by-step webhook monitoring)

1. 眼观一路送货大盘面(Review delivery status)

  1. 跨入 Request Logs(求字大总库日志),把漏斗指死在 Live mode(活跑主线) 上。
  2. 专门挑那些长线等差(async)单子(就是时间线里挂了 webhook delivery 下发放件这一段的单)。
  3. 紧盯那些在它脑门上挂着派送大果子的颜色:
    • 一水绿 ✓ (Green): 顺利抵达后院交活。
    • 大挂红 ✗ (Red): 扑空死了落单了:赶紧过去打捞。

2. 扒皮解剖那死单底账(Inspect failed deliveries)

戳开那个跌死没送进你们后院口的那一长拉挂单送货牌:

Webhook Delivery Details
Status: Error
URL: https://api.yourapp.com/webhooks/mr
Duration: 30,012ms
HTTP: timeout
Error: Request timeout after 30s
Sent at: 2
Can retry: Yes

3. 解尸看你原包腹内囊(Analyze the payload)

切去那个叫 Request Data(发去塞的原包裹) 的切签牌,看看你家当初到底被塞送了多胖个包:

JSON
1{
2 "type": "task.completed",
3 "data": {
4 "channel_id": "ch_abc123",
5 "request_id": "req_xyz789",
6 "model": "gpt-4o",
7 "provider": "openai",
8 "response": {
9 "choices": [
10 {
11 "message": {
12 "role": "assistant",
13 "content": "给接活大爷:这兜里装的是 AI 苦思冥想吐的大活..."
14 }
15 }
16 ],
17 "usage": {
18 "prompt_tokens": 250,
19 "completion_tokens": 180
20 }
21 }
22 }
23}

遇着走等长线叫回音的钩子任务(event-driven workflows),这肉包里还给你明缝了一条往回喊我魂的暗线管叫 callback_url 的:

JSON
1{
2 "type": "task.ai_generated",
3 "data": {
4 "channel_id": "ch_abc123",
5 "callback_url": "https://api.modelriver.com/callbacks/cb_def456",
6 "response": { ... }
7 }
8}

4. 看你自家看门人怎么答的茬(Check your endpoint's response)

转切到 Response(回吐回的茬条) 那个签,看看你们家大门收到货后是怎么放的屁:

这叫收得顺心大圆满(Successful response):

JSON
1{
2 "status": "ok",
3 "processed": true
4}

被你家门丁推打倒地闭门恶作剧的红错(Error response - 你们家那头炸了):

JSON
1{
2 "error": "database_connection_failed",
3 "message": "没大号门牌,没法敲进你们的死库 PostgreSQL 里连上道"
4}

5. 起搏器拉活这些落单挂(Retry failed deliveries)

但凡投递死了并且下脚注着 can_retry(允你拉大起搏救命)标着是对的(true):

  1. 在你们家后院先通开修好那个堵住不吸活的接口阀门(如果有病得先治)。
  2. 在刚那个坠挂包裹明细面板里,死命点下那个 Retry(起搏拉生打活 / 重新大抛试发) 按钮。
  3. 一道重抛的加塞急件单立马上了膛等发。
  4. 挂在时间走线上盯着这单重抛的新大发命。

吃死这复苏拉活抢救的红线铁规矩(Retry rules):

  • 往头死里顶天也只给 3 次搏命期(算上一开始那挂的 1 命,你还能再额外拉生 2 次重抛机会)。
  • 离头一次挂盘打出必须得在 5 分内的大黄泉保命期限。
  • 两次电击拉活搏命中间必须冷熬冷却过足足 30 大秒长线。
  • 每电充击拉抛重救的一回都记做另起炉灶新记大盘。

常在投送抛接局大遇摔挂的死症及收解大法(Common webhook issues and solutions)

硬吃闭门大羹的门神不纳(Connection refused)

Error: connect ECONNREFUSED 10.0.0.1:443

惹了大锅病的罪原(Causes):

  • 你们家大门面服务器崩坍卧底死了,或者干脆摸不着地。
  • 你们家护院放的防火墙硬生生把 ModelRiver 家的投递 IP 面门给挡杀拦墙外。
  • 你们填的接收大门牌(URL)把死口端大口端口径数字敲胡弄错了。

摸出的方(Fix): 去扒窗看看你家那破机子醒了没,验验大防火墙放行大行名单,验清楚你写进设置的大接门 URL 没有带歪音。

活活熬死的大死等拖病(Timeout)

Error: Request timeout after 30000ms(死了你还拉我等三十大秒)

这病的根处(Causes):

  • 你们家的接待口接包太慢性子,办活比老太爷还钝。
  • 沉甸甸的死拽大活连带着回信一道全卡着便秘拉口。
  • 写大库的数据库这头写得实在拖长拉底不见回头底耗盘空时。

大解挂之方(Fix): 去,收到信立马抛个定心丸回敲过给 200 笑脸,接着自己猫腰后台再吃重消化:

JAVASCRIPT
1// 大赞高光活法(Good): 只接不迟留,打个长条留步自个走在后台暗跑
2app.post('/webhooks/modelriver', async (req, res) => {
3 res.status(200).json({ status: 'accepted' });
4 
5 // 放背后自个暗自慢慢拉耗
6 processWebhook(req.body).catch(console.error);
7});
8 
9// 老套拉垮法(Bad): 干全活累死不抬头才丢声长响
10app.post('/webhooks/modelriver', async (req, res) => {
11 await heavyProcessing(req.body); // 大哥你这么干非熬出个死期(timeout)不可!
12 res.status(200).json({ status: 'done' });
13});

绿标假网黑证惹出的鬼差假印大病(SSL certificate errors)

Error: UNABLE_TO_VERIFY_LEAF_SIGNATURE

大解挂之方(Fix): 赶紧滚去让你家安保盖公章的大证拉起活保你挂的面大金牌绿 SSL 锁是真货,别自己在家乱拿萝卜扣章挂假。

摔出来的臭嘴回票骂脏字大黑号(Non-2xx response)

HTTP Status: 500 Internal Server Error(大厂门丁给你骂了句脏的带回传丢单门退)

大解挂之方(Fix): 赶紧回转你们家自个的大后院翻账本找你家日志看你们吐回了啥。最常见的死病:

  • 压根没这条路:你们根本没开 webhook 这个接收大路由。
  • 吃不下吐出了:扒那 JSON 的长皮包解析半拉报错挂。
  • 硬吃吞出脑死亡:你们家办业务的大应用半中央挂挂全死机跌了。

防脱钩走死拉底看长抛全大叫那回响音(Monitoring callback status)

当你在接连事件全大流水线上的,还得挂好回回叫(callback)全音防回掉:

Timeline for event-driven request:
AI success 1,200ms
Webhook 线 success 45ms
? Backend progress (...)

如果你们家老龟拉时超纲大期拉死底界限(整挂 5 大漫长分界):

AI success 1,200ms
Webhook 线 success 45ms
Backend 退 timeout 300,000ms

老这回叫断气掉线几大死案真由(Common callback issues):

  • 你们家后院接头人根本没扒那包看,或看了也没去扯那牵命暗线头 callback_url 的管。
  • 你们家消化大系统拉时超大纲脱底破 5 分挂限全拉死了时规。
  • 后台把这信封往回全走扔格式错打差包格式大瞎对不拉位。
  • 在你们家私院老跟 ModelRiver 这大公家扯上打拉断开没等长网路的死。

整装这沿打大线连向这跟接长行(Next steps)