Reply reminder - Remind users to reply to new users topics with zero replies

One of the important things for a new user is:

  • to get a reply when they first post a topic to feel like there is a community (or at least someone out there).

If a user’s topic doesn’t get a reply they are:

  • less likely to return
  • share the new found community with others

A “Staff” member might quickly glance at the topic whilst on the go (removing it from the unread list)

  • meaning to come back to it later that day.
  • there is something more important to reply to right now.
  • “that’s going to take too long to reply to on my phone / right now”
  • but the topic gets forgotten in the sea of activity from other topics in the latest list.

Something in me wants:

  • TL3, TL4 and Staff to be reminded of posts by TL0, TL1 and TL2 users (perhaps all) that haven’t had any replies yet.
  • For something to be displayed like:
  • a “reminder”
  • new tab like “New” or “Unread”
  • or search link to a specific search
  • When the TL3, TL4 and Staff user has:
  • read all (or a high percentage of) posts from the past X days
  • That “new view” or search result would:
  • show topics that still - “might” - need a reply.
  • show topics that that user perhaps has even read before.

Yes, not every topic needs a reply, there are definitely cases where one wouldn’t be required.

Maybe there is “special sauce” detection for this list / “reminder”, maybe there isn’t.

If there was “special sauce”, perhaps that could include:

  • A percentage of the “Staff” have spent at least 4x “reading time” on the post
  • 14 days have past since initial post

… then don’t display again.

16 Likes

Why not just add a navigation page that lists all topics with zero replies? The query exists… adding it to the navigation is trivial…

Why does it have to nag me?

Adding this to the </body> in your Customize, creates an Unanswered navigation tab

<script>
  Discourse.ExternalNavItem = Discourse.NavItem.extend({
    href : function() {
      return this.get('href');
    }.property('href')
  });

  I18n.translations.en.js.filters.unanswered = { title: "Unanswered", help: "Topics that have not be answered" };

  Discourse.NavItem.reopenClass({
    buildList : function(category, args) {
      var list = this._super(category, args);
      if(!category) {
        list.push(Discourse.ExternalNavItem.create({href: '/latest?max_posts=1', name: 'unanswered'}));
      }
      return list;
    }
  });
</script>
20 Likes

Certainly you could navigate there perhaps something like this or as you put in your example code:

“Request” or “Unanswered” as you have put in your example code.
But I’m not 100% on this.

I would want the number next to the items though if it was displayed like that: i.e. “Unanswered (4)” for 4 topics.

  • Because this is more than just “zero replies”.
  • There are cases where a topic doesn’t need replies.
  • A “nag” would give you access to the items at the right time:
  • you’ve read everything else from past X days etc.
  • prompt you to participate more
  • perhaps an option to dismiss the nag.
  • I don’t want it to be in the list if it has been “handled”
  • (i.e. perhaps dismissed by “reading time” from multiple moderators).

This functionality “feels” core to me, to reply to new users topics feels like it should be part of every Discourse instance, at least default ON.

9 Likes

I would have no problem with a forum asking its paid staff to respond to new users topics in a timely manner if they felt strongly that it would be helpful.

But not all members are “askers” some like to be “answerers”.
If Staff jumps on every new question posting a definitive reply, it could deny others the opportunity to feel helpful.

I also have no problem with a forum providing an easy way to find topics that may benefit from getting acknowledged with a reply.
I’m not so sure non-paid / non-staff members would appreciate being nagged into doing “work” if they are not in the mood to do it.

Push too hard and some may go all the way - out.

That said, maybe a “Quick Responder” Badge could be a good thing.

Encouragement and enticement can be good things. Coercion, not so much.

11 Likes

Dean, what do you think is the optimal/realistic timeframe for response. Do you track this - and do you know your averages and how its changed over time?

Just reviewing one sample set of data from a month for “replies within X days”:

This is general numbers and not limited to “new users”.

You can review your own community by using the query here:

But if you have a particularly large community you may want to reduce the time-frame to 1 month from 1 year.

@cpradio Is there a simple way to tweak your code so that the “Unanswered” navigation link only appears for mods and admins?

2 Likes

Yes, you can

<script>
  Discourse.ExternalNavItem = Discourse.NavItem.extend({
    href : function() {
      return this.get('href');
    }.property('href')
  });

  I18n.translations.en.js.filters.unanswered = { title: "Unanswered", help: "Topics that have not be answered" };

  Discourse.NavItem.reopenClass({
    buildList : function(category, args) {
      var currentUser = Discourse.User.current();
      var list = this._super(category, args);
      if(!category && currentUser != null && currentUser.staff) {
        list.push(Discourse.ExternalNavItem.create({href: '/latest?max_posts=1', name: 'unanswered'}));
      }
      return list;
    }
  });
</script>
13 Likes

Thank you. For some reason I missed your reply. But I just tried it and it works perfectly.

2 Likes

two questions regarding the navigation page:

  1. is it possible to have the tag and category selection filters in this tab?

since it only works for all the category and all the tags.

  1. is it possible to have a navigation tab for topics with views less than a number, e.g. 30?

Are you referring to the show filter by tag admin setting?

There is no way to filter by number of views. You can filter by number of replies as shown above.

2 Likes

thanks for the answer.

when you go into a folder, the defined tab is disappeared and only default discourse tabs remain:

is it possible to have the no-reply in a category or a tag topic-list page as well?

I have no idea. Seems to do that here on Meta too and I’m not 100% sure why that is.

1 Like

To use on categories and subcategories I ammended the code as this:

<script>
  Discourse.ExternalNavItem = Discourse.NavItem.extend({
    href : function() {
      return this.get('href');
    }.property('href')
  });

  I18n.translations.en.js.filters.unanswered = { title: "Unanswered", help: "Topics that have not be answered" };

  Discourse.NavItem.reopenClass({
    buildList : function(category, args) {
      var list = this._super(category, args);
      if(!category) {
        list.push(Discourse.ExternalNavItem.create({href: '/latest?max_posts=1', name: 'unanswered'}));
      } else if (!category.parentCategory) {
        list.push(Discourse.ExternalNavItem.create({href: '/c/' + category.slug + '?max_posts=1', name: 'unanswered'}));
      } else {
        list.push(Discourse.ExternalNavItem.create({href: '/c/' + category.parentCategory.slug + '/' + category.slug + '?max_posts=1', name: 'unanswered'}));
      }
      return list;
    }
  });
</script>
12 Likes

Ah, that makes a lot of sense. I didn’t pay that close attention to the snippet earlier and if I had, I should have spotted that. Thanks @Falco!

1 Like

that works great, many thanks Falco :slight_smile:

1 Like

I’ve been trying to get users to “Adopt a Cat”. I think that it has merit, but there hasn’t been much interest from the mods/admins so YMMV.

Is there a way to transform that Javascript into a userscript for Tampermonkey? I tried copy/pasting the JS here, but it didn’t do anything.

@cpradio
@Falco

I found a bug with the code you supplied above.
Once we click that button in the header, it takes us to that page - which is fine.
And the URL becomes : /latest?max_posts=1
But when we jump back to latest or homepage, the URL never changes back.
Because of this, it fails after 3 steps:

  1. Starting point: homepage (URL: /)
  2. We click on the header link (URL: /latest?max_posts=1 )
  3. We jump back to homepage or latest (URL is still: /latest?max_posts=1)
  4. We click on the header link (the second time) : IT STOPS working at this step.

NOTE:
To fix this, I’m guessing we need to add a line of code to change the URL of the site back to the root of the site - at the end of the code.

Falco is dedicated to a mission critical project for us for the next 2 months. I’ll take a look at the code in the morning.

2 Likes