Day of the week switch


You want users to have different experience during working days and days off.


Use JavaScript Date.getDay() function which returns number representing day 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: - top output - is used when today is a working day - bottom output - is used when today is a day off.

you can use OFF DAY dialog node to display a message about 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


Set your working hours

You will need to set your days off, coma separated e.g. . set-off-days.png

Conditional Markup

Within Markup and MarkupInteraction nodes we can use VTL language.
In this example we use IF CONDITION conditional-markup.png


To test the bot behaviour outside of the working hours, you don’t have to come in on the weekend xD, simply add today’s day to the DAYS_OFF in the Set OFF days node.