Created
December 17, 2022 22:15
-
-
Save Swimburger/49bc868161d4536450d291c83e9c1a4b to your computer and use it in GitHub Desktop.
Send messages but wait for delivery in Twilio Studio
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Helper function for quickly adding await-able "pauses" to JavaScript | |
const sleep = (delay) => new Promise((resolve) => setTimeout(resolve, delay)); | |
exports.handler = async (context, event, callback) => { | |
// A custom delay value could be passed to the Function, either via | |
// request parameters or by the Run Function Widget | |
// Default to a 5 second delay | |
const delay = event.delay || 5000; | |
// Pause Function for the specified number of ms | |
await sleep(delay); | |
// Once the delay has passed, return a success message, TwiML, or | |
// any other content to whatever invoked this Function. | |
return callback(null, `Timer up: ${delay}ms`); | |
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
exports.handler = function(context, event, callback) { | |
const messageSid = event.message_sid, | |
client = context.getTwilioClient(); | |
if(!event.message_sid) throw "message_sid parameter is required."; | |
client.messages(messageSid) | |
.fetch() | |
.then(message => callback(null, message)) | |
.catch((error) => { | |
console.error(error); | |
return callback(error); | |
}); | |
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"description": "Send Message and Wait until Delivered", | |
"states": [ | |
{ | |
"name": "Trigger", | |
"type": "trigger", | |
"transitions": [ | |
{ | |
"event": "incomingMessage" | |
}, | |
{ | |
"event": "incomingCall" | |
}, | |
{ | |
"event": "incomingConversationMessage" | |
}, | |
{ | |
"event": "incomingRequest" | |
}, | |
{ | |
"next": "send_message", | |
"event": "incomingParent" | |
} | |
], | |
"properties": { | |
"offset": { | |
"x": 70, | |
"y": -110 | |
} | |
} | |
}, | |
{ | |
"name": "send_message", | |
"type": "send-message", | |
"transitions": [ | |
{ | |
"next": "get_message", | |
"event": "sent" | |
}, | |
{ | |
"event": "failed" | |
} | |
], | |
"properties": { | |
"offset": { | |
"x": 90, | |
"y": 70 | |
}, | |
"service": "{{trigger.message.InstanceSid}}", | |
"channel": "{{trigger.message.ChannelSid}}", | |
"from": "{{flow.channel.address}}", | |
"to": "{{contact.channel.address}}", | |
"body": "{{trigger.parent.parameters.message_body}}" | |
} | |
}, | |
{ | |
"name": "get_message", | |
"type": "run-function", | |
"transitions": [ | |
{ | |
"next": "split_1", | |
"event": "success" | |
}, | |
{ | |
"event": "fail" | |
} | |
], | |
"properties": { | |
"service_sid": "ZS6e30828b12213bb75aba251c1340772f", | |
"environment_sid": "ZEededfc397c488f7f5adcfccb04b06ab9", | |
"offset": { | |
"x": 90, | |
"y": 320 | |
}, | |
"function_sid": "ZHbf33dd610a3d7a3e4f6bb80e9e2b41f1", | |
"parameters": [ | |
{ | |
"value": "{{widgets.send_message.outbound.Sid}}", | |
"key": "message_sid" | |
} | |
], | |
"url": "https://slfjkdls-8489.twil.io/get-message" | |
} | |
}, | |
{ | |
"name": "split_1", | |
"type": "split-based-on", | |
"transitions": [ | |
{ | |
"next": "set_status_to_error", | |
"event": "noMatch" | |
}, | |
{ | |
"next": "set_status_to_delivered", | |
"event": "match", | |
"conditions": [ | |
{ | |
"friendly_name": "If value equal_to delivered", | |
"arguments": [ | |
"{{widgets.get_message.parsed.status}}" | |
], | |
"type": "equal_to", | |
"value": "delivered" | |
} | |
] | |
}, | |
{ | |
"next": "wait_a_second", | |
"event": "match", | |
"conditions": [ | |
{ | |
"friendly_name": "If value matches_any_of accepted,queued,sending,sent", | |
"arguments": [ | |
"{{widgets.get_message.parsed.status}}" | |
], | |
"type": "matches_any_of", | |
"value": "accepted,queued,sending,sent" | |
} | |
] | |
} | |
], | |
"properties": { | |
"input": "{{widgets.get_message.parsed.status}}", | |
"offset": { | |
"x": -80, | |
"y": 550 | |
} | |
} | |
}, | |
{ | |
"name": "wait_a_second", | |
"type": "run-function", | |
"transitions": [ | |
{ | |
"next": "get_message", | |
"event": "success" | |
}, | |
{ | |
"event": "fail" | |
} | |
], | |
"properties": { | |
"service_sid": "ZS6e30828b12213bb75aba251c1340772f", | |
"environment_sid": "ZEededfc397c488f7f5adcfccb04b06ab9", | |
"offset": { | |
"x": -270, | |
"y": 320 | |
}, | |
"function_sid": "ZH87400457a91e2dbc451817d1f68fd6e8", | |
"parameters": [ | |
{ | |
"value": "1000", | |
"key": "delay" | |
} | |
], | |
"url": "https://slfjkdls-8489.twil.io/delay" | |
} | |
}, | |
{ | |
"name": "set_status_to_delivered", | |
"type": "set-variables", | |
"transitions": [ | |
{ | |
"event": "next" | |
} | |
], | |
"properties": { | |
"variables": [ | |
{ | |
"value": "delivered", | |
"key": "status" | |
} | |
], | |
"offset": { | |
"x": 320, | |
"y": 790 | |
} | |
} | |
}, | |
{ | |
"name": "set_status_to_error", | |
"type": "set-variables", | |
"transitions": [ | |
{ | |
"event": "next" | |
} | |
], | |
"properties": { | |
"variables": [ | |
{ | |
"value": "error", | |
"key": "status" | |
} | |
], | |
"offset": { | |
"x": -40, | |
"y": 800 | |
} | |
} | |
} | |
], | |
"initial_state": "Trigger", | |
"flags": { | |
"allow_concurrent_calls": true | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment