One option that you might or might not have tried already is to use a tween for this.
You could add this to your player node:
var tween
func _ready():
tween = Tween.new()
add_child(tween)
and then when you want to move automatically (over a duration of, say, 1.5 seconds) you can run this on the player node
tween.interpolate_property(self, "global_position", global_position, hook_position, 1.5)
tween.start()
The syntax for the interpolate_property function is:
(Node with property you want to lerp, Name of property you want to lerp, Initial value, Final value, Duration)
Also, it's not exactly a lerp, since it eases in and eases out to make the motion not be jerky at the start and finish.