{"name":"Example: Missed-Call Text-Back","note":"Example workflow on fictional data. Review and configure before running; no client data or credentials are included.","active":false,"nodes":[{"id":"missed-call-text-back-0","name":"Missed call","type":"n8n-nodes-base.webhook","typeVersion":2,"position":[0,120],"parameters":{"httpMethod":"POST","path":"example-missed-call","responseMode":"onReceived","options":{}}},{"id":"missed-call-text-back-1","name":"Dedupe call","type":"n8n-nodes-base.code","typeVersion":2,"position":[220,120],"parameters":{"jsCode":"const seen=$getWorkflowStaticData('global'); seen.calls??={}; const call=$json.body??$json; if(!call.callId||!call.phone||seen.calls[call.callId]) return []; seen.calls[call.callId]=Date.now(); return [{json:call}];"}},{"id":"missed-call-text-back-2","name":"Send text-back","type":"n8n-nodes-base.httpRequest","typeVersion":4.2,"position":[440,120],"parameters":{"method":"POST","url":"https://example.invalid/sms","sendBody":true,"specifyBody":"json","jsonBody":"={{ JSON.stringify({to:$json.phone, message:\"Thanks for calling. How can our service team help?\", idempotencyKey:$json.callId}) }}","options":{"timeout":10000}},"onError":"continueRegularOutput"},{"id":"missed-call-text-back-3","name":"Text failed?","type":"n8n-nodes-base.if","typeVersion":2,"position":[660,120],"parameters":{"conditions":{"options":{"caseSensitive":true,"leftValue":"","typeValidation":"strict","version":2},"conditions":[{"id":"condition","leftValue":"={{ Boolean($json.error) }}","rightValue":true,"operator":{"type":"boolean","operation":"true","singleValue":true}}],"combinator":"and"},"options":{}}},{"id":"missed-call-text-back-4","name":"Flag callback","type":"n8n-nodes-base.httpRequest","typeVersion":4.2,"position":[880,40],"parameters":{"method":"POST","url":"https://example.invalid/alerts","sendBody":true,"specifyBody":"json","jsonBody":"={{ JSON.stringify({subject:\"Missed-call text failed\", error:$json.error}) }}","options":{"timeout":10000}},"onError":"continueRegularOutput"},{"id":"missed-call-text-back-5","name":"Log text-back","type":"n8n-nodes-base.code","typeVersion":2,"position":[880,240],"parameters":{"jsCode":"return [{json:{status:\"text-back-sent\",response:$json}}];"}}],"connections":{"Missed call":{"main":[[{"node":"Dedupe call","type":"main","index":0}]]},"Dedupe call":{"main":[[{"node":"Send text-back","type":"main","index":0}]]},"Send text-back":{"main":[[{"node":"Text failed?","type":"main","index":0}]]},"Text failed?":{"main":[[{"node":"Flag callback","type":"main","index":0}],[{"node":"Log text-back","type":"main","index":0}]]}},"settings":{"executionOrder":"v1"},"pinData":{},"tags":[],"meta":{"trigger":"A missed-call webhook receives a call event.","systems":["n8n","GoHighLevel call webhook","SMS provider","Callback queue"],"beforeRunning":["Replace the SMS and callback endpoints and configure sending credentials.","Map callId and the caller number, then replace sample dedupe with durable storage.","Set your message and contact permissions; test duplicate calls and SMS failure routing."],"example":true,"slug":"missed-call-text-back","notes":["Dedupe key: callId makes repeated webhook deliveries a single attempt.","Send: the illustrative SMS endpoint accepts a fictional callback number.","Retry: none automatically, to avoid duplicate customer messages.","Error branch: failed sends create a callback alert instead of a success record.","Alert: a person follows up; credentials and a durable call ledger are required."],"description":"Hand-authored example on fictional data. Not an export from a client system. Replace illustrative endpoints and add credentials before use."}}