You can set the interaction position for a character in the character properties (position for executing an action). This is the postion the main character will walk to to interact with the npc.
This works fine for static characters.
When no interaction position is set, the engine will automatically select a position, but this is usually a bit far from the npc.
I would suggest to set a new interaction position for your npcs when they reach the new location via Lua scipt.
Characters["name_character"].ActionDestPosition = {x = position_x, y = position_y}