What happens when you have two events scheduled to run after identical n seconds?
You could stagger survey_task yourself by calling the following functions

IS_FREE_LOCK()
GET_LOCK()
RELEASE_LOCK()

This supports the paradigm known as cooperative or advisory locking.
Use in the survey_task as follows:
DELIMITER $$
CREATE PROCEDURE survey_task()
BEGIN  

WHILE IS_FREE_LOCK('survey_task_lock') = 0 DO
    SELECT SLEEP(0.1) INTO @x;
END WHILE;
SELECT GET_LOCK('survey_task_lock',10) INTO @x;

select tel_number, text_message, id INTO @t_number, @t_message, @t_id from incoming_messages where t_status = 0 limit 1;

insert into surveyed_lot(telephone_number, survey_answer,date_of_insert )
        values(@t_number, @t_message,now());
        
UPDATE incoming_messages SET t_status = 1 WHERE id = @t_id;

SELECT RELEASE_LOCK('survey_task_lock') INTO @x;

END $$
DELIMITER ;

The idea is to have the other invocation of survey_task poll every 0.1 seconds until the lock is free. Then acquire the lock and release it when done.
GIVE IT A TRY !!!