Skip to content

Instantly share code, notes, and snippets.

@Swimburger
Created December 17, 2022 22:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Swimburger/49bc868161d4536450d291c83e9c1a4b to your computer and use it in GitHub Desktop.
Save Swimburger/49bc868161d4536450d291c83e9c1a4b to your computer and use it in GitHub Desktop.
Send messages but wait for delivery in Twilio Studio
// 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`);
};
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);
});
};
{
"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