Mingle - An Introductions Plugin

(James Kiesel) #1

Mingle is an icebreaker :mountain_snow: :hammer: plugin for Discourse, inspired by the Donut slackbot and originally discussed here. [Hi @debryc!]

How it works

Specify a time period (e.g. 2 weeks), a group of users, and a customizable message.

Once per time period, we’ll randomly pair up people in the group, and send them a friendly private message, inviting them to get to know each other a little better.

What to do

In order to set up a Mingle, follow these four steps:

Other things you can do

  • Note that you can specify multiple groups to mix by using the following format for mingle_group_name:

  • You can also change the size of the groups people are placed in (default is pairs), by changing the ‘Mingle group size’ option.

  • If you’d like to set a specific time for when the next match will happen, you can do so by clicking on ‘change’ next to the next scheduled run time; If you modify either the interval type or interval number (for example, changing from 3 to 4 weeks, or 3 days to 3 weeks), Mingle will automatically reschedule the existing job for the specified time interval.

If things go weird

  • You can view the next scheduled Mingle in your sidekiq queue at <yoursite.com>/sidekiq/scheduled; it’s the one called Jobs::Mingle. Adding it to the queue will perform it immediately, and schedule another one in the future.
  • If you end up without a scheduled job there somehow, simply disable and then re-enable the Mingle plugin, and it should come back
  • To stop scheduling Mingles, simply disable the mingle_enabled setting (this will kill the currently scheduled Mingle as well)
  • If you’ve mangled your template beyond repair :fonzie:, you can get the original template back by running
    /var/discourse/launcher enter app
    rails c


Bug reports

This is currently a beta plugin (I wrote it yesterday :partying_face:), so please give it a go and report any troubles by mentioning me (@gdpelican) in this topic or in the issues list.


  • Fork it (https://github.com/[my-github-username]/mingle/fork)
  • Create your feature branch (git checkout -b my-new-feature)
  • Commit your changes (git commit -am 'Add some feature')
  • Push to the branch (git push origin my-new-feature)
  • Create a new pull request
  • Be an awesome open source contributor!

Stuff that could happen next

  • Right now the matches are completely random, but maybe there’s a more better way, taking into account whether a particular pair has been matched before, whether they’re a seasoned veteran vs a newbie, etc.
  • Currently if there’s an odd number of people in the group, one person is ‘left out’ for each set of matches. :crying_cat_face: It would be nice to add that person to a three-person message, or otherwise do something other than ignore them.
  • I think we may need support for a ‘default’ thing to put in the template if, for example, a user doesn’t have a particular custom field set (right now it will just put in the empty string, which could make for weird sentences like “Did you know that Flynn ?”)

Automated, scheduled Welcome Post That Tags New Members
Making Random Connections Within a Community
Learn how to build Discourse plugins by helping me

Very cool!
I think the ability to set the day of week and time of day to do the matchups would be on my immediate wishlist, so people would get the message when they are likely to be around and ready to reply.

And I think multiple text templates would be even better, to keep the bot from repeating itself each time it sends out the scheduled messages, and allow varying the number of people in each message. So you could mingle with just one person one month, then get a group message with 3-5 people the next and so on accompanied by a message template that matches the number of participants.

(Brendan Schlagel) #3

Nice work! Very cool to see the discussion / proposal for this and then a working v1 literally within days :smiley:

(Jeff Atwood) #4

This is good but the introduction Pm needs more context. Why is this running? What is it for? Why are people being matched?

(James Kiesel) #5

Yeah, I agree, but copy isn’t my super-strong suit, and of course I would think that every community would want some level of customization there; online communities being a quite different message than in-person work communities, for example.

Maybe you or @erlend_sh or @HAWK or some of the other more wordsy-minded folks could help me get to a better default message there? PRs are, of course, welcome. (I also need to shuffle it around so that that default text there is translatable)

EDIT: if you try this out in your community, I’d love to see what you put for your templates; feel free to send em to me and I’ll cobble together a better default at some point.

(James) #6

Very unique and useful plugin! :heart:

I have an idea: to make this viable for new or inactive forums, what about being able to match users that have last signed in the last 7 days (or any set time) so that mingles can be expected to be active. Because if random users get paired, there can be a good chance of pairing with an inactive user. Just a thought :slight_smile:

(Christoph) #7

This is so awesome that it makes me want to break my rule of not installing new plugins until they’ve been tested for a while! :+1:

One quick suggestion regarding wording: I think it would sound much more inviting if the message title said “You’ve been invited to a mingle” instead of “You’ve been matched for a mingle”.

And some ideas for further development:

  1. It would be very useful to match pairs from different groups. (e.g. on one of my sites users are members of groups to reflect their background (from what perspective they are interested in the forums subject matter) and while it could be useful to match people from the same background (strengthen bonding social capital) it would also be great to match people from different backgrounds (strengthen bridging social capital).
  2. It may be useful to be able to specify the size of the mingle groups. I’m not sure about this because you may need to do it in diads in order to maximize likelihood that a conversation actually takes off (if you know, it’s only you and one other person, you may feel more inclined to respond than if you know there are others who can respond instead of you). But, given that the vast majority of any forum is passive, it may also be so that neither of the two matched users responds at all, so that nothing happens at all, wheras if you have, say, four people in a group, you have double the chance that someone makes the first step. And with three instead of one potential respondent, chances are that at least one of them responds. And once that has happened, chances are that the other two also chime in. It’s a matter of trying out, I guess, but my prediction would be that diads will only work if one or both users are rather active/committed users (which gives us yet another reason for suggestion 1 above).


Mingle is normally a verb in English so “You’ve been invited to mingle” would be even better.

(James Kiesel) #9

Okay, I’ve done a little bit of stuff here. Here is a list of stuff I did.

  • There’s now a ‘mingle group size’ option which will allow you to create group sizes of your choosing (2 or more, of course)
  • I made the default messaging translatable in client.en.yml. If you have an idea for a better default message (title or message body), please PR it.
  • I’ve added a toggle to the mingle admin panel, which will allow you to specify the exact date and time of the next event at any time.
    (NB: this is waiting on a PR to core to add the plugin outlet, so it won’t show up today.)

So you can now go “I want the events to happen every 4 weeks”, and then change the time of the next event to be, say, Tuesday at 2pm or whatever you fancy.

  • I’ve made it so that the group input can accept multiple group names delimited by |. So you can put
    And get matches from both groups (note that there will still be inter-group matches, this simply takes users from both groups and mixes them up)
  • I merged a PR to translate it into Russian, thanks @Stranik!

Some thoughts on other feedback:

  • Re having multiple templates. Yes? But I’m not totally convinced of the right method here yet. As an admin, I think I’d much rather update my single template and know what’s going out, rather than having three templates that could go out. Also, since it’s a topic with an edit history, if I want to go back to a previous version, it’s really easy to do so, meaning you don’t gain a whole ton from having multiple templates; a single topic can currently hold multiple templates through the edit history.
  • I’m not certain about a recency threshold just yet, but I’m considering it.

Also, could you make this a Wiki topic plz @codinghorror? [Side note, I wonder if there’s appetite for a setting which allows all topics in a category to be wiki topics automatically]

(Robert McIntosh) #10

That already is part of Discourse :slight_smile:

In this case, since this is your plugin, it makes sense for people to suggest content and for you to own the edit, but this is a good idea

Enjoying the development overall

(Deborah Chang) #11

I am so excited for this! I’m now wondering what’s the easiest way for people to move in and out of being paired for a mingle. For example, is there a way to pre-message people in a group and say something like:

Get ready to mingle! If you want to be paired up with another member of the community on August 27th, click here to sign up. If you want to wait until next time, no action needed.

Note: Not interested in mingling anymore? Click here to opt-out of these emails

This would also address the issue @nexo brought up re: inactive users.

Or, maybe a workaround is for the group admin to clear out the group each time and have people add themselves back in? That sounds like a lot of work, though…

(James Kiesel) #12

I think you can totally handle this manually for the time being.

  • Create a new group, minglers for example, and set it to be public and anyone can join and leave
  • Send out a message to trust_level_1 (or everyone, or people you care about), introducing the program and explaining that it’s opt-in. Include a link to yoursite.com/groups/minglers, and instruct them to click ‘Join’ if they want to be a part.

One-click opt-out seems like a thing we could consider, but for now you could customize your PM template to have something like

Not interested in mingling in the future? Click [here](yoursite.com/groups/minglers) and select ‘Leave’ to opt-out.