Eu nunca tinha notado isso antes. Eu estava procurando algo semelhante há alguns anos para associar IDs de posts do WordPress a tópicos do Discourse.
O external_id do tópico só será retornado como uma propriedade no cliente se o tópico tiver um external_id, então se o tópico não tiver um, você não receberá um valor null. Isso está funcionando para mim para tópicos que têm um external_id:
<script type="text/discourse-plugin" version="0.11.0">
api.onPageChange (() => {
const c = api.container.lookup("controller:topic");
if (c) {
const m = c.get("model");
if (m && m.hasOwnProperty('external_id')) {
console.log("o external_id é ", m.external_id);
}
}
});
</script>