Teleport to a random height

In my game I have some objects that I want to teleport to a fixed x position but a random y position when they hit another game object. I have tried many times to find a way to do this but none of them work the right way. With this script, the objects just spawned at one positions and with a older script, the objects did teleport to random positions, but the position that an object would teleport to would seem to loop. It was like that gameobject had a random position chosen at the start, but it wouldn’t make another random position. So my question actually is how would I generate a random position every time the objects collide? here is script:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Teleport : MonoBehaviour {
	public GameObject teleportto;
	float x;
	float y;
	float z;
	Vector2 pos;
	public bool teleport;
	// Use this for initialization
	void Start () {
		x = -5;
		y = Random.Range(0, 7);
		pos = new Vector2(x, y);
	}
	
	// Update is called once per frame
	void Update () {
		Debug.Log (this.transform.position);
		if (teleport == true) {
			y = Random.Range (0, 7);
		}
	}

	void OnTriggerEnter2D (Collider2D col) {
		if (col.gameObject.tag == "teleport") {
			this.transform.position = pos;
			teleport = true;
		}
		teleport = false;
	}
}

Move the code in start to the top of your OnTriggerEnter function:

     void OnTriggerEnter2D (Collider2D col) {
         x = -5;
         y = Random.Range(0, 7);
         pos = new Vector2(x, y);
         if (col.gameObject.tag == "teleport") {
             this.transform.position = pos;
             teleport = true;
         }
         teleport = false;
     }