Get Started with Java


Bots can be built using Java in two ways:

Both options are described below.

The Java client is built in an event handler architecture. If you are building a bot that listens to conversations, you implement an interface of a listener with the functions to handle all events that come through the data feed.

Using a Generated Java Bot

The Symphony bot generator generates a simple test bot with the parts you need to quickly get started.

  1. Follow the instructions to install and run the Symphony bot generator.
  2. Follow the prompts to get a Java bot.
  3. Open the project in your IDE of choice by choosing the generated pom.xml file. This opens the project as a Maven project and loads the dependencies for you.
  1. Review config.json and make sure the configuration parameters are correct.
  2. Run the BotExample main class:

Main Class Example

The following shows an example of using the package:

import authentication.SymBotAuth;
import clients.SymBotClient;
import configuration.SymConfig;
import configuration.SymConfigLoader;
import listeners.IMListener;
import listeners.RoomListener;
import model.*;
import services.DatafeedEventsService;

import java.util.List;

public class BotExample {

    public static void main(String [] args) {
        BotExample app = new BotExample();
    public BotExample() {
        URL url = getClass().getResource("config.json");
        SymConfigLoader configLoader = new SymConfigLoader();
        SymConfig config = configLoader.loadFromFile(url.getPath());
        SymBotAuth botAuth = new SymBotAuth(config);
        SymBotClient botClient = SymBotClient.initBot(config, botAuth);
        DatafeedEventsService datafeedEventsService = botClient.getDatafeedEventsService();
        RoomListener roomListenerTest = new RoomListenerTestImpl(botClient);
        IMListener imListener = new IMListenerImpl(botClient);


RoomListener Example

public class RoomListenerTestImpl implements RoomListener {

    private SymBotClient botClient;

    public RoomListenerTestImpl(SymBotClient botClient) {
        this.botClient = botClient;

    private final Logger logger = LoggerFactory.getLogger(RoomListenerTestImpl.class);

    public void onRoomMessage(InboundMessage inboundMessage) {
        OutboundMessage messageOut = new OutboundMessage();
        messageOut.setMessage("Hi "+inboundMessage.getUser().getFirstName()+"!");
        try {
            this.botClient.getMessagesClient().sendMessage(inboundMessage.getStream().getStreamId(), messageOut);
        } catch (Exception e) {

    public void onRoomCreated(RoomCreated roomCreated) {


    public void onRoomDeactivated(RoomDeactivated roomDeactivated) {


    public void onRoomMemberDemotedFromOwner(RoomMemberDemotedFromOwner roomMemberDemotedFromOwner) {


    public void onRoomMemberPromotedToOwner(RoomMemberPromotedToOwner roomMemberPromotedToOwner) {


    public void onRoomReactivated(Stream stream) {


    public void onRoomUpdated(RoomUpdated roomUpdated) {


    public void onUserJoinedRoom(UserJoinedRoom userJoinedRoom) {
        OutboundMessage messageOut = new OutboundMessage();
        messageOut.setMessage("Welcome "+userJoinedRoom.getAffectedUser().getFirstName()+"!");
        try {
            this.botClient.getMessagesClient().sendMessage(userJoinedRoom.getStream().getStreamId(), messageOut);
        } catch (Exception e) {

    public void onUserLeftRoom(UserLeftRoom userLeftRoom) {


Using the Java Client

  1. Add symphony-api-client-java dependency to the pom.xml file of your Maven project:
  1. Add the configuration file as a resource of your project
  2. Create a main class that includes the initialization of the client and load the config by pointing to the path to your config.json.
  3. Implement the RoomListener, IMListener, and/or ConnectionListener and add them to the DatafeedEventsService, which reads events on the data feed and triggers your implemented functions.