You want users to have different experience during working days and days off.
Use JavaScript Date.getDay()
function which returns numbers representing days of the week - Sunday=0, Monday=1 etc.
Function node get today's day
checks if today’s day is a working day or a day off. You can see that it has two outputs:
you can use OFF DAY
dialog node to display a message about the day off. You can also remove this node and use function output ports as you wish. e.g. route user to a different path through your bot.
[{"id":"e73aa532.5b20b8","type":"change","z":"a635abea.f55998","name":"Set OFF days","rules":[{"t":"set","p":"payload.user.DAYS_OFF","pt":"msg","to":"saturday,sunday","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":300,"y":220,"wires":[["3cb22000.41aeb"]]},{"id":"3cb22000.41aeb","type":"function","z":"a635abea.f55998","name":"get today's day","func":"const daysOff = msg.payload.user.DAYS_OFF.split(',').map(dayName => {\n const day = dayName.toLowerCase();\n switch (day) {\n case 'sunday':\n return 0;\n case 'monday':\n return 1;\n case 'tuesday':\n return 2;\n case 'wednesday':\n return 3;\n case 'thursday':\n return 4;\n case 'friday':\n return 5;\n case 'saturday':\n return 6;\n }\n})\n\nconst day = (new Date()).getDay();\n\n// TODAY IS AN OFF DAY\nif(daysOff.includes(day)){\n msg.payload.user.workingDay = false;\n return [null, msg]\n} \n\n// WORKING DAY\nmsg.payload.user.workingDay = true;\nreturn [msg, null]\n\n\n","outputs":2,"noerr":0,"x":500,"y":220,"wires":[["11d5f011.8cc22"],["9c87384a.b560b8"]]},{"id":"9c87384a.b560b8","type":"dialogue","z":"a635abea.f55998","name":"OFF DAY","message":"Sorry, we are closed today, please come back on the next working day.","messageType":"str","displayTimer":1.5,"enableDisplay":false,"x":680,"y":260,"wires":[["11d5f011.8cc22"]]},{"id":"11d5f011.8cc22","type":"markupInteraction","z":"a635abea.f55998","name":"Dynamic menu","markup":"<TimelineMessage>\n <List selectable=\"true\" title=\"Select option.\" style=\"standard\" preventRetries=\"true\" interactionType=\"event\">\n <Item id=\"1\" title=\"Option 1\" />\n #if ( $workingDay == false )\n <Item id=\"2\" title=\"Request a call back next working day\" />\n #end\n #if ( $workingDay == true )\n <Item id=\"2\" title=\"Option only available during work days\" />\n #end\n <Item id=\"3\" title=\"Option 3\" />\n </List>\n</TimelineMessage>\n\n ","syntax":"markdown","outputs":5,"x":880,"y":220,"wires":[["f19432f9.9be3e"],["f19432f9.9be3e"],["f19432f9.9be3e"],["f19432f9.9be3e"],[]]},{"id":"f19432f9.9be3e","type":"dialogue","z":"a635abea.f55998","name":"selected","message":"payload.markupInteraction","messageType":"msg","displayTimer":1.5,"enableDisplay":false,"x":1100,"y":220,"wires":[[]]},{"id":"c4d6af42.49e93","type":"comment","z":"a635abea.f55998","name":"WORKING DAY","info":"","x":700,"y":180,"wires":[]}]
To try it out simply copy the above json and import it in the flow designer.
Key shortcut Ctrl/⌘-i, Menu option Import
You will need to set your days off, comma separated e.g. .
Within Markup and MarkupInteraction nodes we can use VTL https://velocity.apache.org/ language.
In this example we use IF CONDITION
To test the bot behaviour outside of the working hours, you don’t have to come in on the weekend, simply add today’s day to the DAYS_OFF
in the Set OFF days
node.