narrow_status_id
意義
quote_bids.narrow_status_id 表示 narrow match 邀請狀態。
這個欄位主要用來判斷 consumer 是否已經邀請某個 narrow match provider 報價,以及 provider 後續是否接受 / 拒絕。
常見值:
0 = NOT_SEND,尚未送出邀請
1 = WAITING,已送出邀請,等待 provider 回覆
2 = ACCEPTED,provider 接受
3 = REJECTED,provider 拒絕什麼時候改變
由 NOT_SEND 變 WAITING
常見來源:
POST /quote_bids/consumer_want_provider_quote/{quote_bid_id}.json成功後代表 consumer 已邀請這位 narrow match provider 報價。
常見一起更新:
quote_bids.narrow_status_id = WAITING
quote_bids.is_contact_charge = 0
quote_bids.reason = <reason>
quote_bids.requestor_note = <preserve_note 或 reserve note>如果 provider 原本先選擇不感興趣,也可能一起改:
quote_bids.is_interested = 1
quote_bids.quote_status_id = Send
quote_bids.provider_status_id = Send由 WAITING 變 ACCEPTED / REJECTED
通常是 provider 後續回應 narrow match invitation 的流程。
這段要搭配 provider 端 API / 狀態流程看,不能只看 consumer 發邀請的 API。
與 is_want_to_contact_provider 的差異
narrow_status_id 和 is_want_to_contact_provider 代表不同主線。
| 欄位 | 意義 | 常見流程 |
|---|---|---|
narrow_status_id | narrow match 邀請狀態 | consumer_want_provider_quote |
is_want_to_contact_provider | consumer 是否正式聯絡 provider | want_to_contact_provider |
不要用 is_want_to_contact_provider = 1 判斷 consumer_want_provider_quote 是否成功。這支 API 成功主狀態是:
narrow_status_id = WAITING成功前 Guard
consumer_want_provider_quote 成功前會要求:
quote_bids.is_narrow_match = 1
quote_bids.narrow_status_id = NOT_SEND
quote_bids.quote_status_id IN (Send, NotInterested)如果 narrow_status_id 已不是 NOT_SEND,通常代表已送過邀請,不應重複送。
與聯繫上限的關係
同一個 request 的聯繫 / 邀請數會把 narrow match 算進去:
SELECT
COUNT(id) AS contact_or_invite_count
FROM quote_bids
WHERE quote_request_id = <quote_request_id>
AND (
(is_auto_quote = 1 AND is_want_to_contact_provider = 1)
OR narrow_status_id IN (1, 2, 3)
);也就是說:
- auto quote 正式聯絡:看
is_want_to_contact_provider = 1 - narrow match 邀請 / 回應:看
narrow_status_id IN (1, 2, 3)
兩者會一起算入上限。
Activity 規則
consumer 成功送出 narrow match 邀請時會建立:
quote_activities.quote_activity_type_id = WantProviderQuote
quote_activities.secondary_foreign_id = quote_bid_id這和 want_to_contact_provider 成功時常見的 AutoQuoteContact activity 不同。
常用 SQL
查 narrow match 狀態
SELECT
qb.id,
qb.quote_request_id,
qr.user_id AS requestor_user_id,
qb.provider_user_id,
qb.quote_service_id,
qb.is_narrow_match,
qb.narrow_status_id,
qb.quote_status_id,
qb.provider_status_id,
qb.is_interested,
qb.is_contact_charge,
qb.is_want_to_contact_provider,
qb.reason,
qb.requestor_note
FROM quote_bids qb
INNER JOIN quote_requests qr ON qr.id = qb.quote_request_id
WHERE qb.id = <quote_bid_id>;查同 request 的 narrow match bids
SELECT
id,
quote_request_id,
provider_user_id,
quote_service_id,
quote_status_id,
provider_status_id,
is_narrow_match,
narrow_status_id,
reason,
requestor_note
FROM quote_bids
WHERE quote_request_id = <quote_request_id>
AND is_narrow_match = 1
ORDER BY id DESC;查 WantProviderQuote activity
SELECT
id,
created,
quote_activity_type_id,
provider_user_id,
requestor_user_id,
receiver_user_id,
model,
foreign_id,
secondary_model,
secondary_foreign_id,
param1,
param2
FROM quote_activities
WHERE secondary_foreign_id = <quote_bid_id>
ORDER BY id DESC
LIMIT 20;排查重點
narrow_status_id = 0才能送出新的 narrow match invitation。narrow_status_id = 1代表 consumer 已邀請,正在等 provider 回覆。consumer_want_provider_quote成功不代表已正式聯絡扣款。- 若要確認 consumer 是否正式聯絡 provider,要看
is_want_to_contact_provider與contact_provider_on。 - 若要確認 provider 是否已收到 narrow invitation,要看
WantProviderQuoteactivity 與通知 queue / queue log。