A rough proposal for cross-app comments #505
Replies: 10 comments 5 replies
-
I think a JSON standard for comments output could potentially be valuable, since right now app developers have parse out comment data differently from every socialInteract platform...but the centralized service layers that are a part of this proposal (especially for authentication and monitoring) sound like a huge undertaking with no guarantee of adoption. This isn't something you can just create a centralized service for and let it ride. These comment platforms can change their data formats, their authentication strategies, the accessibility of their threads for monitoring...the centralized service would need constant maintenance to operate. It's an interesting and potentially valuable service if you can pull it off, but I have a hard time seeing how (beyond the JSON comments standard) a centralized service like this makes sense within the Podcasting 2.0 namespaces. |
Beta Was this translation helpful? Give feedback.
-
Why couldn't comments be as simple as chapters? Attach a link to the comments JSON file, let the podcaster host it. If they don't want comments, they don't have a link, just like chapters. Then all we have to work on is the protocol for how the comments file is structured. |
Beta Was this translation helpful? Give feedback.
-
@thebells1111, because comments are, by nature, far more complicated. They're 2-way interactive instead of 1-way. And there are much bigger needs for how comments should work (like my 15-item list). But I'm going to close this and suggest that, instead, we build on @jamescridland's suggestion in #327. |
Beta Was this translation helpful? Give feedback.
-
Here's a demonstration and Node.js code for a working cross-app comments model! https://github.com/theDanielJLewis/cross-app-comments-engine I had a lightbulb moment this week. I realized that everything that currently makes a podcast—RSS feed, media files, transcripts, episode metadata (including chapters), and images—are all usable as static files that can be hosted anywhere and migrated to anywhere. Why not make cross-app comments the same? I revisited this post and still believe in everything I said in my original post. Only this time, I wanted to build a proof of concept that would showcase how simple it would be to support and implement. You can view my source and my initial demo video on my GitHub repo, but here's a quick overview:
This approach gives the podcaster full moderation control and full data portability. The listener service can use a podcast-level JSON metadata file for pending comments, or it can store them in a database until they're published. This approach would be extremely easy for apps to implement: both reading and writing comments. It's also open and simple enough that the listener service could be a WordPress plugin, a standalone script, part of a third-party service, or included with the podcast-hosting provider. And I think this is the best approach for us, especially since it respects the nature of podcasting and doesn't depend on ActivityPub or any specific software. |
Beta Was this translation helpful? Give feedback.
-
Here's how I think this needs to work in the RSS. We use @johnspurlock's webhook proposal on the channel level to indicate the comment-listener endpoint. For example: <podcast:webhook type="comments" url="cross-app-comments-listener-URL" encrypt="true">
Since recording my demo video and making my proof of concept, I've come to understand how key pairs work. But instead of encrypting the whole payload (and thus preventing a listener from being able to process the data at all), I think it payloads should include a single authorization or token field encrypted with the private key and decrypted with the public key (hosted in a public repo) to confirm the request came from a verified app. Building on my proposal for feature exposure to be in the RSS while metadata is in each episode's JSON metadata file (where chapters already are), the items would include the following tag (with chapters thrown in for example): <podcast:comments url="https://example.com/episode1/metadata.json" type="application/json" />
<podcast:chapters url="https://example.com/episode1/metadata.json" type="application/json" /> (Is If a podcaster or publishing system wanted to overcomplicate things and cause extra HTTP requests, they could make separate files for comments and chapters, but I think it's best to consolidate them into the single episode metadata file. |
Beta Was this translation helpful? Give feedback.
-
Let's split this proposal into bits. I like the idea of the comments being hosted in a single file by the podcaster in some way - that makes the creator responsible for the comments that are published. I also like the idea of the comments for "whatever is being commented on" being in one file. That's a much better system than what appears possible with the activitypub solution. One JSON file (or whatever) containing all the comments for the object being commented on. This is good. As a separate file - completely separate, not part of a chapters file - it allows a podcast hosting company to do this work; or an enterprising self-hoster to do it; or a "podcast comments company". This is why I'd caution on incorporating this data with any other data from other sources. If we do that, this is good. Comment moderation isn't necessary to complicate this specification with: that's up to the creator. Some might want proactive moderation by approval; some might want reactive moderation. The only thing I'd suggest is to build in some form of "report this comment" url as an integral part of the comment; if it's populated, the app should surface that in some way. The complicated bit is the user authentication and user management - "who is this" and "can I ban them", to put it bluntly. There are privacy implications in this. Some app developers may not want to store anything about their users (Overcast is one example, AntennaPod another). Giving this to the app developers to handle seems a hurdle that we should try to avoid. On the reverse side, some creators might be keen to collect email addresses of the people who are taking part in the chat - and as long as this is optional, I don't see an issue with that being available to creators as a feature. One reality is that for almost all users, they'll have one of two IDs - either an Apple ID or a Google ID. App developers would need to build in both services, though, to use those: and it's unlikely that some would be keen to do that. Alternately, and this is relatively imperfect, if an app stores an email address of the user, then we can use that as a method of identifying a user and banning them if necessary. Podcast creators can make the choice as to whether they want to validate a supplied email or not - some might be happy with any comment, others might want to only publish comments from users with validated email addresses. That's all cool. An email address would, at the very least, enable a creator to have that control. "Hey, Daniel, thanks for your comment! Just before we publish comments from you, it would be great if we can just check this email address is you. Can you click this link and tell us?" - so, essentially, a response to the app that literally says "check your email to continue!" Perhaps that's a thing in the As mentioned elsewhere, though - I'd like any comments tag to be available on a In short, then: yes, a separate file; yes, all comments in one place; don't worry about moderation; and it's the user management we need to consider here. Is that helpful? |
Beta Was this translation helpful? Give feedback.
-
I'm working on the app-authentication model, now that I finally understand how key pairs work (I'd never studied that before). It has a few kinks I'm still working out, but it definitely allows for different behavior for a verified source (the app) compared to an unverified source, as long as each app can securely store a private key it will use to encrypt a value in the POST request. |
Beta Was this translation helpful? Give feedback.
-
Small but important aside from another podcaster I talked to: anytime we talk about giving podcasters moderation control, we should ensure that it has the possibility to include delegated people, too. That could be a cohost, an employee, or a volunteer. Since my approach is open and versatile, it would have no problem supporting such delegation because the core tech doesn't limit it, but it would be on the software/service for the podcaster to let them grant teammate access. |
Beta Was this translation helpful? Give feedback.
-
I've now added some validation to my sample script, and I'm added |
Beta Was this translation helpful? Give feedback.
-
Here's a sample payload for submitting a new comment via a simple POST request from an app. Headers:
Request body: {
"podcastGuid": "GUID string"
"source": "podcast app name string",
"events": [
{
"type": "comment", // This would be the type so the webhook can properly handle this event
"episodeGuid": "item GUID string",
"date": "ISO8601 date format",
"author": "commenter's name string",
"authorId": "UUID, email, or any unique identifier string that will _not_ be public",
"content": "full comment string",
"reply": "optional comment id string for which this is a reply",
"geo": "optional geolocation string",
"boost": "optional boostagram data object for cross-posting boostagrams to cross-app comments"
}
]
} The listener service will generate its own unique With this data, a single listener can route the comment to the correct podcast and the correct episode metadata, while also giving the podcaster the tools and context they need to appropriately moderate or for the system to auto-moderate. |
Beta Was this translation helpful? Give feedback.
-
For context, I'll repost a slightly edited version what I shared on PodcastIndex.social:
That said, I think what could be best is to develop an open format that can be hosted somewhere trustworthy (either by the podcaster themselves, their podcast-hosting provider, or a third-party service), posted to from anywhere, and that could maybe have watchers to include non-conforming comments (there is, however, a big problem with these, and I'll address that further down).
The easiest format for developers to support would be JSON. There would be a separate comments file for each episode, and maybe a central sitemap-like JSON file that connects the comment files of all episodes.
Here's what that could look like:
(These comments could and maybe even should live alongside the chapters in the episode metadata files!)
This allows for ownership and portability. If a podcaster wants to switch comment-hosting solutions, they could export this all as a zip and easily import it into their new solution.
With a little work, this could easily be synchronized with native WordPress comments and maybe even third-party website commenting systems (like Disqus).
Living inside the episode metadata file, the comments would be loaded as frequently as the cloud chapters.
What happens if a new comment is posted after a listener already loaded the comments? It could wait to refresh until whenever the app would normally refresh the chapters, wait for pull to refresh (PTR), and/or refresh whenever that listener posts their own comment. However, the experience of seeing comments show up immediately is not only extremely engaging, but also a huge bridge to live commenting on live streams.
I'm not sure PodPing could handle this. It's one thing for PodPing to handle thousands of episodes being posted in the same hour, but maybe (and I really don't know for sure) a completely different and impossible thing for PodPing to handle thousands of comments being posted in the same second. So real-time refresh is a definite issue, but something that could be set aside for now.
The next problem would be authentication. How do you let only approved apps publish to the comment stream in a way that's portable and doesn't require much maintenance? There could be a central repo of verified public keys, and any commenting system would need to stay up-to-date with that repo. But then that leaves things open to breaking if not updated. For example, a WordPress plugin could include the latest list of trusted public keys, but then if someone doesn't update the plugin installed on their site, comments won't work for them. So maybe the commenting system would need to reference the public repo whenever an unrecognized key is used. In other words, first check if the public key exists in the cached/local list of trusted keys, fallback to the hosted list of trusted keys, and then block if not in either list. The list could be managed similarly to how I've seen Cardano NFT policy IDs verified with exchanges like CNFT.io.
The third problem is off-system comments, and it has two sides. One side is where/how to monitor. For example, can any third-party system monitor threaded comments in a private Facebook group? Probably not. Even if it could, the system would have to monitor Facebook, Twitter, Instagram, Reddit, YouTube, Mastodon, LinkedIn, and more.
The second side of this third problem further complicates things. The conversation may happen in reply to multiple posts.
As a simple example, imagine you tweet a new episode one when it's released, and then again 2 years later because it's still relevant or it's relevant again. Both tweets receive comments, so both would need to be monitored. But this problem gets even worse when you consider a more effective social-media strategy of using different messages or highlights to promote the same episode. For example, a weekly podcast could have two posts for every day of the week, resulting in 14 unique posts promoting the same episode, and each of those posts have their own comment threads.
And then what happens if someone else shares the episode (not retweeting), and their tweet generates a whole new conversation thread.
So I think we should just exclude social comments from cross-app comments. Besides, it would be impossible for the podcast app to cross-post the comment to all the other networks.
Thus, I think the best approach should be to centralize the storage, but decentralize the interaction.
Beta Was this translation helpful? Give feedback.
All reactions