1. Юзер вводит свой телефон (и прочую информацию, типа имя, фамилия и т.п)
2. В этот момент скрипт делает запись в бд с номером телефона юзера и кодом, который он должен ввести для подтверждения своего номера телефона (то есть последние 5 цифр входящего вызова). Запись делается в таблицу A
3. Ему звонит бот
4. Юзер вводит 5 последних цифр входящего вызова
5. Скрипт сверяет введенные 5 цифр с записью, сделанной в бд в пункте 2
Случай 1:
Юзер вводит верный код. Из таблицы A удаляется запись с номером телефона и требуемым пин кодом. Эта информация нам вообще больше не нужна. Мы ведь знаем, что юзер уже подтвердил свой номер - можем регистрировать его аккаунт. Добавляем в таблицу B информацию о новом юзере.
Ура! У нас новый пользователь.
Случай 2:
Юзер изначально ввел неверный номер телефона, возможно случайно, возможно специально. Бот начал звонить какому-то другому человеку. В этот момент в таблицу A была сделана запись с этим номером телефона и требуемым пин кодом.
Итак, проблема:
В случае номер 2, запись из таблицы A никогда не удалиться, т.к юзер не ввел пин код.
Вариант решения:
Каждый раз, когда скрипт делает запись в таблицу A, проверять, есть ли записи, которым уже более 5-и часов и если такие есть - то удаляем их.
Поставьте прогорание токена на 20-30 минут. этого вполне достаточно. Достаточно записать текущее время в строке.
А затем, любым удобным способом вычищайте устаревшие данные.
Либо не удаляйте. как минимум, строка которая записана - это еще и согласие с правилами , и у вас есть дата этого соглашения.