The challenge is that the value we’re using for the Topic’s external_id is difficult to change (manual operation) due to a limitation in the app we’re integrating with (CatalogIt - exposes a read only API). We often manually delete and auto-recreate Topics as we develop (this is all the integration does - creates discussion topics for items in CatalogIt when a user clicks a “discus this item” link), forcing us to change this value each time. If the value is not changed after deleting the topic and a user clicks the “discuss this item” link later, we hit the “external already taken” error.
Perhaps archiving rather than deleting is a better idea, or perhaps there is a hide/unhide mechanism we can lean on. I am unfamiliar with Discourse, some research needed, will dig in and see what I can find.