Expor external_id em embed.js

Preciso carregar posts em um site externo onde não sei o post_id, mas CONHEÇO o external_id que configurei ao criar o tópico.

Alguém pode expor a variável external_id na lógica do embed.js ou me ensinar o que estou perdendo?

Exemplo de suporte necessário:

window.DiscourseEmbed = {
discourseUrl: ‘https://forums.blah.org/’,
external_id: ‘2023-4’
};

Estou assumindo que você criou os tópicos via API e definiu o parâmetro external_id.

Não tenho certeza se isso ajuda, mas o Discourse tem uma rota t/external_id/:external_id. Parece que ela retorna apenas dados JSON:

Portanto, você pode obter o JSON do tópico em (por exemplo)

/t/external_id/2023-4.json

Isso retornaria o conteúdo e o id do tópico do Discourse. No entanto, não acho que isso resolva seu problema.

Testando isso agora, dados JSON são retornados, mas o Discourse executa um redirecionamento automático para o URL real do tópico do Discourse quando você faz a solicitação. Por exemplo, uma solicitação GET para http://localhost:4200/t/external_id/1.json me redireciona para http://localhost:4200/t/testing-the-external-id-param/206.json

Estou procurando ter algo no formato de posts incorporados. O Discourse já faz um ótimo trabalho com esse layout e não quero reinventar a roda.

Ao não permitir a busca por external_id, eu teria que armazenar o ID do tópico do fórum em meu banco de dados e buscar dessa forma. Parece redundante quando já temos uma variável única armazenada em external_id quando criei o tópico a partir da API.

1 curtida

Acho que entendi agora. Você quer usar o script mostrado aqui: https://meta.discourse.org/t/embed-discourse-comments-on-another-website-via-javascript/31963#alternate-configuration-linking-to-existing-topics-6. Mas em vez de usar o parâmetro topicId, você quer usar o parâmetro external_id.

Possivelmente isso poderia ser adicionado como um recurso.

Poderia também ser possível fazer uma requisição no cliente para (por exemplo)
http://localhost:4200/t/external_id/1.json
Em seguida, extrair a URL real do tópico da resposta e analisar essa URL para extrair o id do tópico, ou fazer uma segunda requisição para a URL do tópico para obter o id do tópico.
Isso parece propenso a erros.

Se você estiver adicionando o script de incorporação no servidor em vez do cliente, você poderia simplesmente fazer uma requisição GET para http://localhost:4200/t/external_id/1.json, executar quaisquer ações que você precise para obter o id do tópico do Discourse, e então inserir o script em sua página da web usando esse id.

Este é um bom feedback e me dá algumas coisas para refletir. A solicitação de recurso é a mais direta, mas gosto de algumas de suas ideias que eu não havia pensado!

1 curtida