I'm running Zabbix 4.0 installed on CentOS 7. There is a need to set a delay on sending recovery messages so that if a problem is resolved then Zabbix should wait for some time before sending the recovery message to avoid the situation of trigger flopping. I know that it is possible to customize trigger expression using hysteresis so that trigger won't go into OK state immediately after the problem is solved, but is there a way to set a delay via the actions tab? And what is the best way to set a delay for sending the PROBLEM messages through actions tab if there is one? By the way I'm interested in solutions working in versions through 3.0 up to 4.0.
Delaying problem messages is done via the escalation functionality. You set the operation to start not at step 1, but some later step - this way trigger would fire and generate an event, but the alert would only be sent if it stays in the PROBLEM state for some time (the time you have configured via escalation steps). This is covered in the second example in the manual.
You cannot do this in recovery operations (and things have changed between 3.0 and 4.0, but I'll ignore that to keep this sane). Even if you could, it wouldn't help you much - if a trigger+problem resolve, the next time trigger fires, it is a new problem/event. So you wouldn't get a recovery alert when it "really recovers", you'd get a delayed recovery and another problem alert - perhaps even problem first, and previous recovery later.
For recovery to be delayed, I'd suggest doing it in the trigger expression instead.