First of all, you need to be sure that you have an authentication mechanism for internal company users. My suggestion is that you can use identity server which is open source.
On the other hand, you should have an authorize system which controls the user permissions if you need to limit user permissions (Policy server).
For communication system, you should code a simple program using RabbitMq queue mechanism on mqtt. Mqtt is useful protocols for messaging. There are really good examples for that you can use for communication system developing.
Also I found two example codes which is on github for communication system. But I think you should use RabbitMq or other mqtt brokers. For all users you should open a connection on mqtt broker when users are online. To start a conversation, whenever a user try to send a message to a different user, you should create a specific topic. And then, users should subscribe to the topic belongs to conversation. When a new message sent (published), subscribed clients can get messages. This is called as pub-sub pattern.
You should think if there is no client which is subscribed to the topic. If your system should work between only online users, you dont have to do anything. If the system should work also for offline users means that user should get the messages which are sent to the user on offline status. In this case, user should get messages whenever the user is online. So, you need to use a queue mechanism like RabbitMq. After RabbitMq mqtt plugin is activated, a queue binds to mqtt exchange and the messages will be sent to the queue. After that, you need to consume the queue and if users are online, you would notify the users using events.
If you need to save messages you should use a log queue and consume it and save messages.
https://github.com/gediminasgu/RabbitMqChat - Warning! This code provided for messaging Demo purposes and shouldn't be used in Production like environments.