/ 02-multichannel-api-gateway / architecture.drawio
architecture.drawio
  1  <mxfile host="app.diagrams.net" agent="Claude Code" version="24.0.0">
  2    <diagram name="Stack 02 - Multichannel API Gateway" id="stack02">
  3      <mxGraphModel dx="1800" dy="1100" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="0" pageScale="1" pageWidth="1169" pageHeight="827" math="0" shadow="0">
  4        <root>
  5          <mxCell id="0" />
  6          <mxCell id="1" parent="0" />
  7  
  8          <!-- Description text block -->
  9          <mxCell id="desc" value="&lt;h2 style=&quot;margin-top:0;&quot;&gt;Stack 02: Multichannel API Gateway (WhatsApp + Instagram)&lt;/h2&gt;&lt;p&gt;&lt;b&gt;Flow:&lt;/b&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;User sends a message via WhatsApp or Instagram DM.&lt;/li&gt;&lt;li&gt;Meta Cloud API forwards the webhook to Amazon API Gateway.&lt;/li&gt;&lt;li&gt;Receiver Lambda: detects channel, validates, reads credentials from Secrets Manager, downloads media to S3, saves to DynamoDB.&lt;/li&gt;&lt;li&gt;DynamoDB Stream with tumbling window (20s) buffers messages from the same user.&lt;/li&gt;&lt;li&gt;Processor Lambda: resolves canonical user from unified users table, aggregates messages, transcribes audio, invokes AgentCore once per user.&lt;/li&gt;&lt;li&gt;AgentCore Runtime processes with memory context and dispatches response via the correct channel API.&lt;/li&gt;&lt;/ol&gt;" style="text;html=1;whiteSpace=wrap;overflow=hidden;rounded=0;fillColor=#f5f5f5;fontColor=#333333;strokeColor=#666666;spacing=9;fontSize=11;fontStyle=0;" vertex="1" parent="1">
 10            <mxGeometry x="280" y="-120" width="1020" height="190" as="geometry" />
 11          </mxCell>
 12  
 13          <!-- External: WhatsApp User (positioned higher) -->
 14          <mxCell id="wa_user" value="WhatsApp&lt;div&gt;User&lt;/div&gt;" style="dashed=0;outlineConnect=0;html=1;align=center;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;shape=mxgraph.weblogos.whatsapp;fillColor=#00E676;strokeColor=none;fontSize=11;fontStyle=0;aspect=fixed;" vertex="1" parent="1">
 15            <mxGeometry x="30" y="130" width="60" height="60" as="geometry" />
 16          </mxCell>
 17  
 18          <!-- External: Instagram User (positioned lower, away from Meta label) -->
 19          <mxCell id="ig_user" value="Instagram&lt;div&gt;User&lt;/div&gt;" style="shape=image;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=11;fontStyle=0;aspect=fixed;imageAspect=0;image=https://cdn.simpleicons.org/instagram/E4405F;" vertex="1" parent="1">
 20            <mxGeometry x="30" y="310" width="60" height="60" as="geometry" />
 21          </mxCell>
 22  
 23          <!-- External: Meta Cloud API (centered between users, label on right to avoid arrow overlap) -->
 24          <mxCell id="meta" value="Meta&lt;div&gt;Cloud API&lt;/div&gt;" style="shape=image;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=11;fontStyle=0;aspect=fixed;imageAspect=0;image=https://cdn.simpleicons.org/meta/0081FB;" vertex="1" parent="1">
 25            <mxGeometry x="170" y="210" width="60" height="60" as="geometry" />
 26          </mxCell>
 27  
 28          <!-- Region container -->
 29          <mxCell id="region" value="AWS Region" style="points=[[0,0],[0.25,0],[0.5,0],[0.75,0],[1,0],[1,0.25],[1,0.5],[1,0.75],[1,1],[0.75,1],[0.5,1],[0.25,1],[0,1],[0,0.75],[0,0.5],[0,0.25]];outlineConnect=0;gradientColor=none;html=1;whiteSpace=wrap;fontSize=12;fontStyle=0;container=1;pointerEvents=0;collapsible=0;recursiveResize=0;shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_region;strokeColor=#00A4A6;fillColor=none;verticalAlign=top;align=left;spacingLeft=30;fontColor=#147EBA;dashed=1;" vertex="1" parent="1">
 30            <mxGeometry x="280" y="95" width="1020" height="380" as="geometry" />
 31          </mxCell>
 32  
 33          <!-- Row 1: Main flow (y=70, labels on TOP) -->
 34  
 35          <!-- Amazon API Gateway -->
 36          <mxCell id="apigw" value="Amazon&lt;div&gt;API Gateway&lt;/div&gt;" style="sketch=0;points=[[0,0,0],[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0,0],[0,1,0],[0.25,1,0],[0.5,1,0],[0.75,1,0],[1,1,0],[0,0.25,0],[0,0.5,0],[0,0.75,0],[1,0.25,0],[1,0.5,0],[1,0.75,0]];outlineConnect=0;fontColor=#232F3E;fillColor=#E7157B;strokeColor=#ffffff;dashed=0;verticalLabelPosition=top;verticalAlign=bottom;align=center;html=1;fontSize=11;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.api_gateway;" vertex="1" parent="region">
 37            <mxGeometry x="40" y="70" width="60" height="60" as="geometry" />
 38          </mxCell>
 39  
 40          <!-- Webhook Receiver Lambda -->
 41          <mxCell id="receiver" value="Webhook&lt;div&gt;Receiver&lt;/div&gt;" style="sketch=0;points=[[0,0,0],[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0,0],[0,1,0],[0.25,1,0],[0.5,1,0],[0.75,1,0],[1,1,0],[0,0.25,0],[0,0.5,0],[0,0.75,0],[1,0.25,0],[1,0.5,0],[1,0.75,0]];outlineConnect=0;fontColor=#232F3E;fillColor=#ED7100;strokeColor=#ffffff;dashed=0;verticalLabelPosition=top;verticalAlign=bottom;align=center;html=1;fontSize=11;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.lambda;" vertex="1" parent="region">
 42            <mxGeometry x="200" y="70" width="60" height="60" as="geometry" />
 43          </mxCell>
 44  
 45          <!-- Amazon DynamoDB -->
 46          <mxCell id="ddb" value="Amazon&lt;div&gt;DynamoDB&lt;/div&gt;" style="sketch=0;points=[[0,0,0],[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0,0],[0,1,0],[0.25,1,0],[0.5,1,0],[0.75,1,0],[1,1,0],[0,0.25,0],[0,0.5,0],[0,0.75,0],[1,0.25,0],[1,0.5,0],[1,0.75,0]];outlineConnect=0;fontColor=#232F3E;fillColor=#C925D1;strokeColor=#ffffff;dashed=0;verticalLabelPosition=top;verticalAlign=bottom;align=center;html=1;fontSize=11;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.dynamodb;" vertex="1" parent="region">
 47            <mxGeometry x="370" y="70" width="60" height="60" as="geometry" />
 48          </mxCell>
 49  
 50          <!-- DynamoDB Stream -->
 51          <mxCell id="stream" value="DynamoDB Stream&lt;div&gt;(tumbling window)&lt;/div&gt;" style="sketch=0;points=[[0,0,0],[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0,0],[0,1,0],[0.25,1,0],[0.5,1,0],[0.75,1,0],[1,1,0],[0,0.25,0],[0,0.5,0],[0,0.75,0],[1,0.25,0],[1,0.5,0],[1,0.75,0]];outlineConnect=0;fontColor=#232F3E;fillColor=#C925D1;strokeColor=#ffffff;dashed=0;verticalLabelPosition=top;verticalAlign=bottom;align=center;html=1;fontSize=11;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.dynamodb_stream;" vertex="1" parent="region">
 52            <mxGeometry x="540" y="70" width="60" height="60" as="geometry" />
 53          </mxCell>
 54  
 55          <!-- Message Processor Lambda -->
 56          <mxCell id="processor" value="Message&lt;div&gt;Processor&lt;/div&gt;" style="sketch=0;points=[[0,0,0],[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0,0],[0,1,0],[0.25,1,0],[0.5,1,0],[0.75,1,0],[1,1,0],[0,0.25,0],[0,0.5,0],[0,0.75,0],[1,0.25,0],[1,0.5,0],[1,0.75,0]];outlineConnect=0;fontColor=#232F3E;fillColor=#ED7100;strokeColor=#ffffff;dashed=0;verticalLabelPosition=top;verticalAlign=bottom;align=center;html=1;fontSize=11;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.lambda;" vertex="1" parent="region">
 57            <mxGeometry x="710" y="70" width="60" height="60" as="geometry" />
 58          </mxCell>
 59  
 60          <!-- Amazon Bedrock AgentCore Runtime -->
 61          <mxCell id="agentcore" value="Amazon Bedrock&lt;div&gt;AgentCore Runtime&lt;/div&gt;" style="sketch=0;points=[[0,0,0],[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0,0],[0,1,0],[0.25,1,0],[0.5,1,0],[0.75,1,0],[1,1,0],[0,0.25,0],[0,0.5,0],[0,0.75,0],[1,0.25,0],[1,0.5,0],[1,0.75,0]];outlineConnect=0;fontColor=#232F3E;fillColor=#01A88D;strokeColor=#ffffff;dashed=0;verticalLabelPosition=top;verticalAlign=bottom;align=center;html=1;fontSize=11;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.bedrock;" vertex="1" parent="region">
 62            <mxGeometry x="900" y="70" width="60" height="60" as="geometry" />
 63          </mxCell>
 64  
 65          <!-- Row 2: Supporting services (y=250, labels on BOTTOM) -->
 66  
 67          <!-- AWS Secrets Manager -->
 68          <mxCell id="secrets" value="AWS Secrets&lt;div&gt;Manager&lt;/div&gt;" style="sketch=0;points=[[0,0,0],[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0,0],[0,1,0],[0.25,1,0],[0.5,1,0],[0.75,1,0],[1,1,0],[0,0.25,0],[0,0.5,0],[0,0.75,0],[1,0.25,0],[1,0.5,0],[1,0.75,0]];outlineConnect=0;fontColor=#232F3E;fillColor=#DD344C;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=11;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.secrets_manager;" vertex="1" parent="region">
 69            <mxGeometry x="40" y="250" width="60" height="60" as="geometry" />
 70          </mxCell>
 71  
 72          <!-- Amazon S3 Media -->
 73          <mxCell id="s3" value="Amazon S3&lt;div&gt;Media&lt;/div&gt;" style="sketch=0;points=[[0,0,0],[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0,0],[0,1,0],[0.25,1,0],[0.5,1,0],[0.75,1,0],[1,1,0],[0,0.25,0],[0,0.5,0],[0,0.75,0],[1,0.25,0],[1,0.5,0],[1,0.75,0]];outlineConnect=0;fontColor=#232F3E;fillColor=#3F8624;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=11;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.s3;" vertex="1" parent="region">
 74            <mxGeometry x="290" y="250" width="60" height="60" as="geometry" />
 75          </mxCell>
 76  
 77          <!-- Unified Users DynamoDB -->
 78          <mxCell id="users_table" value="Unified Users&lt;div&gt;Amazon DynamoDB&lt;/div&gt;" style="sketch=0;points=[[0,0,0],[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0,0],[0,1,0],[0.25,1,0],[0.5,1,0],[0.75,1,0],[1,1,0],[0,0.25,0],[0,0.5,0],[0,0.75,0],[1,0.25,0],[1,0.5,0],[1,0.75,0]];outlineConnect=0;fontColor=#232F3E;fillColor=#C925D1;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=11;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.dynamodb;" vertex="1" parent="region">
 79            <mxGeometry x="540" y="250" width="60" height="60" as="geometry" />
 80          </mxCell>
 81  
 82          <!-- Amazon Transcribe -->
 83          <mxCell id="transcribe" value="Amazon&lt;div&gt;Transcribe&lt;/div&gt;" style="sketch=0;points=[[0,0,0],[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0,0],[0,1,0],[0.25,1,0],[0.5,1,0],[0.75,1,0],[1,1,0],[0,0.25,0],[0,0.5,0],[0,0.75,0],[1,0.25,0],[1,0.5,0],[1,0.75,0]];outlineConnect=0;fontColor=#232F3E;fillColor=#01A88D;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=11;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.transcribe;" vertex="1" parent="region">
 84            <mxGeometry x="790" y="250" width="60" height="60" as="geometry" />
 85          </mxCell>
 86  
 87          <!-- AWS Systems Manager (use systems_manager icon, not parameter_store) -->
 88          <mxCell id="ssm" value="AWS Systems&lt;div&gt;Manager&lt;/div&gt;" style="sketch=0;points=[[0,0,0],[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0,0],[0,1,0],[0.25,1,0],[0.5,1,0],[0.75,1,0],[1,1,0],[0,0.25,0],[0,0.5,0],[0,0.75,0],[1,0.25,0],[1,0.5,0],[1,0.75,0]];outlineConnect=0;fontColor=#232F3E;fillColor=#E7157B;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=11;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.systems_manager;" vertex="1" parent="region">
 89            <mxGeometry x="900" y="250" width="60" height="60" as="geometry" />
 90          </mxCell>
 91  
 92          <!-- ===== EDGES ===== -->
 93  
 94          <!-- WhatsApp User -> Meta (green, route right then down) -->
 95          <mxCell id="e_wa_meta" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#009900;strokeWidth=2;flowAnimation=1;" edge="1" parent="1" source="wa_user" target="meta">
 96            <mxGeometry relative="1" as="geometry">
 97              <Array as="points">
 98                <mxPoint x="130" y="160" />
 99                <mxPoint x="130" y="240" />
100              </Array>
101            </mxGeometry>
102          </mxCell>
103  
104          <!-- Instagram User -> Meta (green, route right then up, avoid Meta label) -->
105          <mxCell id="e_ig_meta" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#009900;strokeWidth=2;flowAnimation=1;" edge="1" parent="1" source="ig_user" target="meta">
106            <mxGeometry relative="1" as="geometry">
107              <Array as="points">
108                <mxPoint x="130" y="340" />
109                <mxPoint x="130" y="240" />
110              </Array>
111            </mxGeometry>
112          </mxCell>
113  
114          <!-- Meta -> API Gateway (green) -->
115          <mxCell id="e_meta_apigw" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#009900;strokeWidth=2;flowAnimation=1;" edge="1" parent="1" source="meta" target="apigw">
116            <mxGeometry relative="1" as="geometry" />
117          </mxCell>
118  
119          <!-- API GW -> Receiver (green) -->
120          <mxCell id="e_apigw_receiver" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#009900;strokeWidth=2;flowAnimation=1;" edge="1" parent="region" source="apigw" target="receiver">
121            <mxGeometry relative="1" as="geometry" />
122          </mxCell>
123  
124          <!-- Receiver -> DynamoDB (green) -->
125          <mxCell id="e_receiver_ddb" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#009900;strokeWidth=2;flowAnimation=1;" edge="1" parent="region" source="receiver" target="ddb">
126            <mxGeometry relative="1" as="geometry" />
127          </mxCell>
128  
129          <!-- DynamoDB -> DynamoDB Stream (green) -->
130          <mxCell id="e_ddb_stream" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#009900;strokeWidth=2;flowAnimation=1;" edge="1" parent="region" source="ddb" target="stream">
131            <mxGeometry relative="1" as="geometry" />
132          </mxCell>
133  
134          <!-- DynamoDB Stream -> Processor (red = buffered) -->
135          <mxCell id="e_stream_processor" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#FF0000;strokeWidth=2;flowAnimation=1;" edge="1" parent="region" source="stream" target="processor">
136            <mxGeometry relative="1" as="geometry" />
137          </mxCell>
138  
139          <!-- Processor -> AgentCore (orange, direct horizontal right side) -->
140          <mxCell id="e_processor_agentcore" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#FF8000;strokeWidth=2;flowAnimation=1;" edge="1" parent="region" source="processor" target="agentcore">
141            <mxGeometry relative="1" as="geometry" />
142          </mxCell>
143  
144          <!-- Receiver -> Secrets Manager (dashed) -->
145          <mxCell id="e_receiver_secrets" value="credentials" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=2;dashed=1;fontSize=9;fontStyle=0;fontColor=#666666;labelBackgroundColor=#ffffff;flowAnimation=1;" edge="1" parent="region" source="receiver" target="secrets">
146            <mxGeometry relative="1" as="geometry">
147              <Array as="points">
148                <mxPoint x="160" y="100" />
149                <mxPoint x="160" y="200" />
150                <mxPoint x="70" y="200" />
151              </Array>
152            </mxGeometry>
153          </mxCell>
154  
155          <!-- Receiver -> S3 (green, write media) -->
156          <mxCell id="e_receiver_s3" value="write media" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#009900;strokeWidth=2;flowAnimation=1;fontSize=9;fontStyle=0;fontColor=#666666;labelBackgroundColor=#ffffff;" edge="1" parent="region" source="receiver" target="s3">
157            <mxGeometry relative="1" as="geometry">
158              <Array as="points">
159                <mxPoint x="230" y="200" />
160                <mxPoint x="320" y="200" />
161              </Array>
162            </mxGeometry>
163          </mxCell>
164  
165          <!-- Processor -> S3 (orange, read media) -->
166          <mxCell id="e_processor_s3" value="read media" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#FF8000;strokeWidth=2;flowAnimation=1;fontSize=9;fontStyle=0;fontColor=#666666;labelBackgroundColor=#ffffff;" edge="1" parent="region" source="processor" target="s3">
167            <mxGeometry relative="1" as="geometry">
168              <Array as="points">
169                <mxPoint x="680" y="200" />
170                <mxPoint x="400" y="200" />
171              </Array>
172            </mxGeometry>
173          </mxCell>
174  
175          <!-- Processor -> Unified Users (orange, identity resolution) -->
176          <mxCell id="e_processor_users" value="identity resolution" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#FF8000;strokeWidth=2;flowAnimation=1;fontSize=9;fontStyle=0;fontColor=#666666;labelBackgroundColor=#ffffff;" edge="1" parent="region" source="processor" target="users_table">
177            <mxGeometry relative="1" as="geometry">
178              <Array as="points">
179                <mxPoint x="740" y="200" />
180                <mxPoint x="570" y="200" />
181              </Array>
182            </mxGeometry>
183          </mxCell>
184  
185          <!-- Processor -> Transcribe (orange, audio) -->
186          <mxCell id="e_processor_transcribe" value="audio" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#FF8000;strokeWidth=2;flowAnimation=1;fontSize=9;fontStyle=0;fontColor=#666666;labelBackgroundColor=#ffffff;" edge="1" parent="region" source="processor" target="transcribe">
187            <mxGeometry relative="1" as="geometry">
188              <Array as="points">
189                <mxPoint x="760" y="200" />
190                <mxPoint x="820" y="200" />
191              </Array>
192            </mxGeometry>
193          </mxCell>
194  
195          <!-- AgentCore -> SSM (teal, dashed) -->
196          <mxCell id="e_agentcore_ssm" value="table name" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=2;dashed=1;fontSize=9;fontStyle=0;fontColor=#666666;labelBackgroundColor=#ffffff;flowAnimation=1;strokeColor=#01A88D;" edge="1" parent="region" source="agentcore" target="ssm">
197            <mxGeometry relative="1" as="geometry" />
198          </mxCell>
199  
200          <!-- ===== COLOR LEGEND ===== -->
201          <mxCell id="legend_title" value="Line Colors" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;fontSize=13;fontStyle=1;" vertex="1" parent="1">
202            <mxGeometry x="280" y="518" width="100" height="30" as="geometry" />
203          </mxCell>
204  
205          <mxCell id="leg1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeColor=#009900;strokeWidth=2;flowAnimation=1;endArrow=none;endFill=0;" edge="1" parent="1">
206            <mxGeometry relative="1" as="geometry">
207              <mxPoint x="390" y="533" as="sourcePoint" />
208              <mxPoint x="450" y="533" as="targetPoint" />
209            </mxGeometry>
210          </mxCell>
211          <mxCell id="leg1t" value="Raw messages" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;rounded=0;fontStyle=0;fontSize=11;" vertex="1" parent="1">
212            <mxGeometry x="455" y="521" width="120" height="25" as="geometry" />
213          </mxCell>
214  
215          <mxCell id="leg2" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeColor=#FF0000;strokeWidth=2;flowAnimation=1;endArrow=none;endFill=0;" edge="1" parent="1">
216            <mxGeometry relative="1" as="geometry">
217              <mxPoint x="590" y="533" as="sourcePoint" />
218              <mxPoint x="650" y="533" as="targetPoint" />
219            </mxGeometry>
220          </mxCell>
221          <mxCell id="leg2t" value="Buffered (tumbling window)" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;rounded=0;fontStyle=0;fontSize=11;" vertex="1" parent="1">
222            <mxGeometry x="655" y="521" width="200" height="25" as="geometry" />
223          </mxCell>
224  
225          <mxCell id="leg3" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeColor=#FF8000;strokeWidth=2;flowAnimation=1;endArrow=none;endFill=0;" edge="1" parent="1">
226            <mxGeometry relative="1" as="geometry">
227              <mxPoint x="870" y="533" as="sourcePoint" />
228              <mxPoint x="930" y="533" as="targetPoint" />
229            </mxGeometry>
230          </mxCell>
231          <mxCell id="leg3t" value="Processed (AgentCore)" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;rounded=0;fontStyle=0;fontSize=11;" vertex="1" parent="1">
232            <mxGeometry x="935" y="521" width="180" height="25" as="geometry" />
233          </mxCell>
234  
235          <mxCell id="leg4" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeWidth=2;dashed=1;endArrow=none;endFill=0;flowAnimation=1;" edge="1" parent="1">
236            <mxGeometry relative="1" as="geometry">
237              <mxPoint x="1130" y="533" as="sourcePoint" />
238              <mxPoint x="1190" y="533" as="targetPoint" />
239            </mxGeometry>
240          </mxCell>
241          <mxCell id="leg4t" value="Config / Credentials" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;rounded=0;fontStyle=0;fontSize=11;" vertex="1" parent="1">
242            <mxGeometry x="1195" y="521" width="130" height="25" as="geometry" />
243          </mxCell>
244  
245        </root>
246      </mxGraphModel>
247    </diagram>
248  </mxfile>