I use this: (only thing you need to do is set same flag in dialog)
IF
ObjectFlagSet("QuestUpdate_HF_Swamp_dream",(CHARACTERGUID)_Player,_Instance)
THEN
CharacterAddToParty(CHARACTERGUID_Animals_Rat_A_000_637cd430-5760-455e-a6c0-c6e58c2c851c,_Player);
CharacterMakePlayer(CHARACTERGUID_Animals_Rat_A_000_637cd430-5760-455e-a6c0-c6e58c2c851c);
If you want to play as player with npc add "CharacterMakePlayer" otherwise only "CharacterAddToParty" and he will follow butdo his own stuff.
works for me
Edit; to remove i use
IF
CharacterEnteredTrigger(_Player,TRIGGERGUID_EventTrigger_cheese_82fea7f4-fbeb-4d85-8448-74dd4bc6299b)
THEN
ObjectSetFlag(CHARACTERGUID_S_GLO_CharacterCreationDummy_001_da072fe7-fdd5-42ae-9139-8bd4b9fca406, "HasCheese");
CharacterRemoveFromParty(CHARACTERGUID_Animals_Rat_A_000_637cd430-5760-455e-a6c0-c6e58c2c851c);