If you're already familiar and know how to set up a simple conversation you can jump down to Additional content and check if there's stuff you might not know.
Tools used:
- SLADE
- Doom Builder (Not required)
-Introduction-
To start off, we need a map with a simple room and some monsters. Something like this.

Since we're using Doom don't forget to tick the Stand still and Friendly flags.

Simple as that. We can now use SLADE to open up our Wad file and add a file called DIALOG01. This will tie a Dialogue file to our MAP01. Let's give our Shotgun guy some random dialogue and turn the Revenant into a shopkeeper.

If you have meddled with ACS before you can see we need to add some lines to specify namespace and included files. We also have the following:
Conversation blocks:
Conversation blocks contain one actor, either a ConversationId or a classname.
Page blocks:
Page blocks contain the meat of the dialogue. Pages are numbered in order from top to bottom, so you can have several pages to make an entire row of dialogue. Holds initial dialogue for the actor and a name for the actor inside the conversation.
Choice blocks:
Choice blocks are options for the players to pick inside the conversation. This can either advance the conversation, give the player an item or call a special (Like ACS_Execute to call a script).
You can now run it in game since dialogue in UDMF does not need to be compiled, so save and try it in game. Congratulations! Your first step into the world of RPG-themed maps have just begun!



-Additional content-
Just like in Strife you can do more than just simple conversations and shopkeepers. Following is some more things you can do to add variety and life to your map.
Random phrases
Perhaps the most interesting and complex feature of the dialogue system. Using a LANGUAGE lump you can randomize pieces of dialogue to have that extra variation and characteristic your actor/map could use.

Aside from the simple LANGUAGE setup, we have 10 lines for the Shotgun guy to utter when engaging in conversation with him. We also need to make a change in our DIALOG file.

This seems like magic, so how does all this work? Well the way LANGUAGE and presumably the Dialogue system work is that they go by semantics instead of defined syntax. This means if you know the magic words you can take advantage of the features. In our LANGUAGE lump we actually NEED to start our lines with "TXT_RANDOM_" to let the game know the line is part of a series of randomized responses. We also have precisely 10 responses, what gives? The exact number of random responses characters in Strife can give is 10, so that means we are limited to 10 random pieces of dialogue, no more and absolutely no less. If you specify less than 10 responses the game will automatically fill out the rest with responses consisting of "Go away!", if you specify more they will simply not be used.
Likewise in DIALOG we start off with the case-sensitive "RANDOM_" to tell the game we want to lookup a set of responses and pick one.
If you need more information you can click here to check out a draft of the system.
Unique conversations
In the old days of being tied to ConversationId, two actors of the same actortype/class could not have their own unique conversations, hence why Strife has like 30 types of Peasants if you take a gander at ZDoom Wiki's classes page. However, with UDMF you can! By restricting a conversation to an actortype/class instead of a number and setting a unique id number to the conversation:

Like so! We can now have two Revenants with their own pieces of dialogue, eliminating the need to create several identical classes. Don't forget to set the ConversationId to the id you specified.

Doing so we now have two Revenants with uniquely bound conversations to them. Using ACS you can also change their ConversationId on the fly! You can also do that directly using Linespecial 79.
If-Player-Carries-Item
In lack of a better name, you can also check if the player carries an item/weapon and initiate a different piece of dialogue based on that. Let's make our bragging bonebag comment our newly acquired Rocketlauncher we got from his friend.

By adding an additional page, a link to that page's index number and a "ifitem" condition, we will get a different response out of him. Talking to him without the Rocketlauncher will make him brag about his height, talking to him with the Rocketlauncher makes him brag about his shoulder launchers. Nifty!
[Updated: 2017-03-07]
Another update with more explained goodies? Yes indeed, continue reading below as we delve into:
-Bye Choices
-Costs
-Include/Exclude Choices
Bye Choices
Probably one of the most desired features, to change the elusive Bye choice into something more fitting. After all, you don't say "Thanks, bye!" when a stranger threatens to gouge your guts out.
By defining a "goodbye" string we can turn that around into something more desireful. Let's turn the goodbye for the Skeleton Shoppe into something more casual.


Alternatively, if we're feeling more adventurous, we can also randomize these responses as well!
Just follow how we previously did for randomizing the responses for our bored Shotgun guy.



Voila, random bye responses, now you can fit appropriate goodbye messages for the right context.
Costs
So you want to force the player to actually pay for the items? Well you're in luck because we can do that too. By defining a "cost" block inside our choice block we can tell the game what type of currency we desire and how much of said currency we want.
For simplicity's sake, the Rocketlauncher now costs 1 Shotgun.

"displaycost" as the comment mentions, just adds additional text in the conversation telling you how much that specific item costs.
"nomessage" is the message printed if the player selects the option but does not have the required money/items to buy it.


Sadly this means the poor Shotgun guy will have to perish if we want our shiny rocketlauncher, oh well.
Include/Exclude Choices
These extra blocks reside inside the choice blocks. They work just like costs, by specifying an item and the amount of said item the player needs. Here's how each of them works:
-"require": If the player meets said requirements, we will display a new choice for them!
-"exclude": If the player meets said requirements, we will remove this choice for them!
Let's start by going to our bragging bonebag and switching the current choice into two new ones that specify a "require" and an "exclude" block respectively.


Only one of the choices we defined is displayed, specifically the one conditiong if the player isn't carrying a shotgun. Let's pick up a shotgun and see what happens.

Now we have a new choice! This feature certainly opens up many possibility scenarios for a mod.
That is all for now. Thank you for reading this tutorial! Let's wrap it up with some imaginary Q&A that I anticipate might get asked.
-Q&A-
Q: What does include = "SCRIPT00" mean?
A: This part is not necessary if you're making dialogue for any game other than Strife. This just makes sure the random dialogue you can have with Acolytes, Peasants and Templars in Strife gets included in your map if you want to have it.
Q: What about that "bye" response? Can we change that?
A:
A: Yes! You can finally define your bye responses! Check above in the Additional Content section.
Q: Can I make the player get crushed if he picks the wrong choice?
A: Yes! As mentioned earlier, using the "special" field your sadistic outcome for the poor player is fully doable.
Let's do an example:
choice
{
text = "Don't crush me";
special = 42; // This would be Ceiling Crusher Start
arg0 = 1; // First argument of the function, the Sector Tag
arg1 = 16; // Second argument is Movement Speed, we want it nice and slow
arg2 = 4; // Third argument is Crush Damage, a slow crush to death
}
After picking this option the player will set off a crusher in the sector tagged 1, which hopefully isn't the same sector he's standing in.
Q: Is it possible to randomize the text for the "choice" options the players get?
A: No. The game will not do string lookups for choice text.
-References-
Here are some links explaining more stuff about the Conversation System that you can look at for reference.