add campaign observer with specs