/ 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="<h2 style="margin-top:0;">Stack 02: Multichannel API Gateway (WhatsApp + Instagram)</h2><p><b>Flow:</b></p><ol><li>User sends a message via WhatsApp or Instagram DM.</li><li>Meta Cloud API forwards the webhook to Amazon API Gateway.</li><li>Receiver Lambda: detects channel, validates, reads credentials from Secrets Manager, downloads media to S3, saves to DynamoDB.</li><li>DynamoDB Stream with tumbling window (20s) buffers messages from the same user.</li><li>Processor Lambda: resolves canonical user from unified users table, aggregates messages, transcribes audio, invokes AgentCore once per user.</li><li>AgentCore Runtime processes with memory context and dispatches response via the correct channel API.</li></ol>" 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<div>User</div>" 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<div>User</div>" 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<div>Cloud API</div>" 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<div>API Gateway</div>" 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<div>Receiver</div>" 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<div>DynamoDB</div>" 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<div>(tumbling window)</div>" 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<div>Processor</div>" 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<div>AgentCore Runtime</div>" 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<div>Manager</div>" 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<div>Media</div>" 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<div>Amazon DynamoDB</div>" 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<div>Transcribe</div>" 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<div>Manager</div>" 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>