If you set a state context for a day then it could become active over and over which will cause your task to run and your call to be made over and over, so set more than just a day context.
Instead set the task to set a variable containing the time to fire (like %FWDTIME etc )
Then set another profile with a time context to run
from %FWDTIME to %FWDTIME with the call task. Then clear %FWDTIMEif you want to cancel the call (like if you're currently on a call or watching porn etc)
Clear the variable on entry and it will only run once
Then multi contexts like day, and if %FWDTIME not set, and %TIMES (CURRENT TIME IN SECONDS) is lessthan 3pm then set %FWDTIME to 3PM IN SECONDS (whatever the call time)
if the %FWDTIMEis not set AND the current time is before the call time then set the variable and when 3pm hits it will only run the task if the variable %FWDTIME Is set