[{"data":1,"prerenderedAt":64},["ShallowReactive",2],{"pattern-sam-dotnet-durablefunction-expenseapproval":3},{"id":4,"title":5,"architectureURL":6,"cleanup":7,"contributors":10,"deploy":12,"description":16,"extension":17,"framework":18,"gitHub":19,"highlight":6,"introBox":25,"language":31,"level":32,"meta":33,"patternArch":34,"resources":48,"s3URL":6,"services":6,"stem":59,"testing":60,"videoId":6,"__hash__":63},"patterns\u002Fpatterns\u002Fsam-dotnet-durablefunction-expenseapproval.json","AWS Lambda durable functions - Human in the loop",null,{"text":8},[9],"Delete the stack: \u003Ccode>sam delete\u003C\u002Fcode>.",[11],"content\u002Fcontributors\u002Fdoug-perkes.json",{"text":13},[14,15],"sam build","sam deploy --guided","A durable function expense approval workflow that pauses execution to wait for a manager's approval callback, with a 72-hour durable timer fallback.","json","AWS SAM",{"template":20},{"repoURL":21,"templateURL":22,"projectFolder":23,"templateFile":24},"https:\u002F\u002Fgithub.com\u002Faws-samples\u002Fserverless-patterns\u002Ftree\u002Fmain\u002Fsam-dotnet-durablefunction-expenseapproval","serverless-patterns\u002Fsam-dotnet-durablefunction-expenseapproval","sam-dotnet-durablefunction-expenseapproval","template.yaml",{"headline":26,"text":27},"How it works",[28,29,30],"This pattern deploys a Lambda durable function that implements an expense approval workflow. After an expense is submitted, the function creates a callback token and suspends execution — incurring zero compute cost while waiting for a manager's decision.","A manager can approve or reject the expense via a separate API endpoint that sends the callback. If no response arrives within 72 hours, a durable timer automatically rejects the expense.","This demonstrates the human-in-the-loop pattern with Lambda durable functions: WaitForCallback for external events, durable timers for deadlines, and DynamoDB for persisting expense state.",".NET","300",{},{"icon1":35,"icon2":40,"line1":44},{"x":36,"y":37,"service":38,"label":39},25,50,"lambda-durable-functions","AWS Lambda durable functions",{"x":41,"y":37,"service":42,"label":43},75,"dynamodb","Amazon DynamoDB",{"from":45,"to":46,"label":47},"icon1","icon2","",{"bullets":49},[50,53,56],{"text":51,"link":52},"AWS Lambda durable functions documentation","https:\u002F\u002Fdocs.aws.amazon.com\u002Flambda\u002Flatest\u002Fdg\u002Fdurable-functions.html",{"text":54,"link":55},"Build multi-step applications and AI workflows with Lambda durable functions","https:\u002F\u002Faws.amazon.com\u002Fblogs\u002Faws\u002Fbuild-multi-step-applications-and-ai-workflows-with-aws-lambda-durable-functions\u002F",{"text":57,"link":58},"Lambda durable functions .NET SDK","https:\u002F\u002Fgithub.com\u002Faws\u002Faws-lambda-dotnet","patterns\u002Fsam-dotnet-durablefunction-expenseapproval",{"text":61},[62],"See the GitHub repo for detailed testing instructions.","rQn1rAPmGhKHSqK8Xh10TgkKBdK00ruk41mi5t9Cmdw",1785321314383]