Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feature request: Allow me to globally publicize any single Zulip message #13544

Open
showell opened this issue Dec 16, 2019 · 6 comments
Open
Labels
feedback wanted new feature A proposed new feature for the product

Comments

@showell
Copy link
Contributor

showell commented Dec 16, 2019

Let's say that I'm in a Zulip conversation where I say something really brilliant, and I want to cross-post it to other social media like Twitter.

For example, let's say we're talking about insects in the fourth dimension, and I have this brilliant insight:

"Time flies like an arrow." -- Steve

Right now I can create a link to a message that is visible within the realm, and the URL looks like this:

https://chat.zulip.org/#narrow/stream/127-insects/topic/fourth-dimension/near/123456

(That feature is useful, and people use it now. Let's say I'm on another stream and want to link back to some insight on another thread without repeating myself. I can copy the link into a new message.)

I'd like an additional message menu option called "Create public link to message" that gives me a tidier url that I can publish anywhere on the web:

https://chat.zulip.org/#public/123456

Example page

When anybody in the world clicks on this link (presumably because I tweeted it out, or linked it from my blog, or put it in a GH comment, or emailed it to my friend), they will see this:

[Zulip logo] chat.zulip org

Steve Howell zulip'ed on December 16, 2019 in the insects stream:

"Time flies like an arrow."

topic: fourth dimension

Want to see the conversation?  Sign up [here].

Permissions

I don't think we have any notion of a completely private realm (i.e. not even the name is public), but if we do, then this feature will be disabled.

PMs

We won't support this for PMs in V1, since I don't think it's particularly useful.

private streams

If I am posting to a private stream, then I can only post my own message, and we won't leak any content that wasn't explicitly created by me. So we won't show the name of the stream. I think it's ok here to show the name of the topic. We'll obviously show the message, author (me), and date. If it's an invite-only realm, instead of saying "sign up [here]", we'll say something more like "click here to request invite" or whatever.

public streams

If I post a message to a public stream, then we'll show the message, date, author, stream name, and topic name. And there will be a sign-in link appropriate to the realm (which may be invite-only).

globally-public streams

future: When we have good support for globally-public streams (as part of building out public archives), then some streams will either be specifically marked as globally public or be globally public by default (if we can just say the entire realm is globally public).

In these cases I can cross-post messages from other users.

UI Mechanics

I think for V1, we'll just copy the url to the user's clipboard when you use the "Create public link to message" menu action. Or we'll possibly send you a PM with the link. If you are on a globally public stream and you make a public URL from somebody else's message, we'll possibly send a PM to the other person, but maybe not, since all content on that stream is already public via the archives.

Use cases

I think the most obvious use case is Twitter. You'll create the public link, click on it to make sure it works, then put it inside a tweet. Once you create the tweet, you'll probably tell folks on Zulip that you tweeted it out using the current Zulip mechanisms (nothing fancy here, people already do this). (Likewise, you'll probably contextualize the message somehow on Twitter, encouraging your followers to sign up on the realm, or whatever).

Hopefully we'll find other surprising use cases here. I expect most surprises here will be good surprises (with the obvious exception that we have to be respectful of privacy, even in cases where privacy isn't truly guaranteed in the first place--i.e. people assume they are only talking to a small audience on a public stream that happens to be open to the public, even though in principle anybody can read their messages by just signing up).

Implementation

I think conceptually we just need a bit field in Messages that says whether a message is public, and then if it is, we serve up the related URL to any user who asks for it (without requiring any login). Since these will be particularly sparse, another option is just a tiny table of message ids called PublicMessage that's indexed by message id (as a foreign key).

There'd be a new entry in urls.py and then the normal Django view function that just serves up a simple template wrapping the message.

Finally, we'll possibly need some one-line tweaks to configuration files like robots.txt.

We can roll this out without any UI by just having Tim do database updates for a couple hand-selected message ids.

Then the UI piece is also fairly simple--we just need an endpoint that takes a message id as a parameter and returns the URL, and the client-side code will otherwise be pretty similar to "Copy link to conversation" (except that it hits the server).

Related work

I already mentioned that this feature is a bit different from "Copy link to conversation", but we'll want to make it clear to users that the two features are different (or possibly combine them as some refinement of the UI).

This proposal is also related to the public archive feature, but it should requires a lot less work for admins to set up. We'll want to style the single-message pages somewhat similarly to how we style public archives. Also, if we know that the public archive exists, and if the message is on a stream that's archived, then we'll add an appropriate link to the archive on the single-message page.

@showell
Copy link
Contributor Author

showell commented Dec 18, 2019

A couple more comments:

Allow embedding too

Another use case, brought up by @hackerkid on Zulip, is embedding a single Zulip message into a blog post. That would require a variation on the above idea combined with how Twitter lets you embed tweets.

Url preview

We'd eventually want to support the url preview protocol here. (I don't know much about url previews, to be honest, except that they can also be obnoxious at times, so we'd want to think this though.)

@Gittenburg Gittenburg added the new feature A proposed new feature for the product label Jul 9, 2020
@akashaviator
Copy link
Collaborator

@zulipbot claim

@timabbott
Copy link
Sponsor Member

@akashaviator I don't think this issue is ready to work on -- we don't have a design for how it would work technically or agreement that we want to implement it in this form.

@akashaviator
Copy link
Collaborator

@timabbott Okay. Should I initiate a topic on czo regarding this ?

@timabbott
Copy link
Sponsor Member

I'd recommend finding something else to work on; I don't think this issue is likely to be ready for work until we've merged support for web-public streams.

@akashaviator
Copy link
Collaborator

@zulipbot abandon

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feedback wanted new feature A proposed new feature for the product
Projects
None yet
Development

No branches or pull requests

5 participants