flowchart TB
%% Classes for styling
classDef nodeDefault fill:#2F2F2F,stroke:#4F4F4F,color:#FFFFFF,font-weight:300
classDef subgraphTitle fill:#335C67,stroke:#264653,color:#FFFFFF,font-weight:400
%% Overall Flow
%% --------------------------------------
%% Subgraph A: MC Number and Carrier Verification
subgraph A[MC Number and Carrier Verification]
direction TB
A1((Greeting_RequestMCNumber)):::nodeDefault
A2((McNumberRequired)):::nodeDefault
A3((NoMcNumberTransfer)):::nodeDefault
A4((ToolCall-searchCarriers)):::nodeDefault
A5((McNumberNotFound)):::nodeDefault
A6((UpdateMcNumber)):::nodeDefault
A7((PhoneNumberCheck)):::nodeDefault
A1 -->|User provides MC Number| A4
A1 -->|User does not provide MC Number| A2
A2 -->|User provides MC Number| A4
A2 -->|User still withholds MC Number| A3
A4 -->|apiCarrierStatus != VERIFIED| A5
A4 -->|apiCarrierStatus == VERIFIED| A7
A5 -->|User confirms same MC| A4
A5 -->|User updates MC| A6
A6 -.->|skip user response| A4
end
%% Subgraph B: AI Agents Pitch & Load Reference
subgraph B[AI Pitch and Load Reference Gathering]
direction TB
B1((aiAgentsHHPitch)):::nodeDefault
B2((Activate AI Agent Nurture)):::nodeDefault
B3((log AI negativity)):::nodeDefault
B4((NoMcNumberTransfer)):::nodeDefault
A7 -->|always| B1
B1 -->|User is interested| B2
B1 -->|User is not interested| B3
B2 -->|userLoadReference not null| C1((ToolCall-searchLoads))
B2 -->|userLoadReference is null| B4
B3 -->|userLoadReference not null| C1
B3 -->|userLoadReference is null| B4
end
%% Subgraph C: Load Search & Handling
subgraph C[Load Search and Retrieval]
direction TB
C1((ToolCall-searchLoads)):::nodeDefault
C2((LoadNotFound)):::nodeDefault
C3((LoadFound)):::nodeDefault
C4((NoMcNumberTransfer)):::nodeDefault
C5((LoadDenied)):::nodeDefault
C6((PreNegotiationBackout)):::nodeDefault
C7((GetLoadDetails)):::nodeDefault
C8((LoadDetailsNotFound)):::nodeDefault
C9((LoadDetailsFound)):::nodeDefault
C1 -->|apiLoadUUID not null| C3
C1 -->|apiLoadUUID is null| C2
C2 -->|User provides revised ref| C1
C2 -->|No clarity from user| C4
C3 -->|always proceed| C7
C7 -->|apiLoadStatus == PUBLISHED| C9
C7 -->|apiLoadStatus != PUBLISHED| C8
C8 -->|User responded| C4
C9 -->|User confirms details| D1((getOfferDetails))
C9 -->|User denies details| C5
C5 -->|No longer interested| C6
end
%% Subgraph D: Offer Details & Negotiation
subgraph D[Offer, Negotiation, and Bidding]
direction TB
D1((getOfferDetails)):::nodeDefault
D2((OfferDetailsNotFound)):::nodeDefault
D3((TransferForMinBid)):::nodeDefault
D4((OfferDetailsFound)):::nodeDefault
D5((getTradeAskId)):::nodeDefault
D6((TradeAskIdNotFound)):::nodeDefault
D7((getTradeAskIdRetry)):::nodeDefault
D8((TradeAskIdFound)):::nodeDefault
D9((RateAcceptInit)):::nodeDefault
D10((Negotiation1)):::nodeDefault
D11((Negotiation2)):::nodeDefault
D12((RateAcceptInit_Neg)):::nodeDefault
D13((placeBid)):::nodeDefault
D14((201)):::nodeDefault
D15((500)):::nodeDefault
D1 -->|apiOfferOriginSingleLineAddress not null| D4
D1 -->|apiOfferStatusDoubleCheck != PUBLISHED| D2
D2 -->|User responded| D3
D4 -->|always choose| D5
D5 -->|apiTradeAskId not null| D8
D5 -->|apiTradeAskId is null| D6
D6 -->|User responded| D7
D7 -->|apiTradeAskId is not null| D10
D7 -->|apiTradeAskId is null| D2
D8 -->|User accepts rate| D9
D8 -->|User counters rate| D10
D9 -->|bidConfirmedFinal true| D13
D9 -->|bidConfirmedFinal false| D10
D10 -->|Proposed rate within valid range| D12
D10 -->|Proposed rate outside range| D11
D11 -->|Now within range| D12
D11 -->|Still invalid rate| D2
D12 -->|bidConfirmedFinal true| D13
D13 -->|apiPlaceBidTradeBidId not null| D14
D13 -->|apiPlaceBidTradeBidId is null| D15
end
%% Subgraph E: Post-Bid or Additional Assistance
subgraph E[Completion and Further Assistance]
direction TB
E1((EndCall)):::nodeDefault
E2((FurtherAssistance)):::nodeDefault
E3((New Route Node)):::nodeDefault
E4((FurtherAssistance_Transfer)):::nodeDefault
D14 -->|the conversation is ending| E1
D14 -->|User needs further help| E2
D15 -->|the conversation is ending| E1
D15 -->|User needs further help| E2
E2 -->|User responded| E3
E3 -->|userSecondIntent = bid_again| C1
E3 -->|userSecondIntent = something_else| E4
end
%% Style subgraphs
class A subgraphTitle
class B subgraphTitle
class C subgraphTitle
class D subgraphTitle
class E subgraphTitle
1)Purpose
Connectors
(1) → (3335fbdb...) "ToolCall-searchCarriers"
(1) → (a82623ce...) "McNumberRequired"
a82623ce-ade6-4295-92b6-f1df8a440cd2)Purpose
Connectors
(a82623ce...) → (3335fbdb...) "ToolCall-searchCarriers"
(a82623ce...) → (9f38b67c...) "NoMcNumberTransfer"
9f38b67c-15b8-4525-8fd3-3763a3bce8f6)Purpose
Connectors