===== XMPP Chat =====
To support scalable text/audio/video chat through XMPP. Chat will be focused towards a taks(review or feedback).
===== Design =====
1. Each and every user is registered against an xmpp server when a user is created and his account does not exist already in the server.
2. Once a user opens a page he is connected to the xmpp server and the users with whom he can chat will have the chat related icons enabled.
3. Chats are context specific.
=== Screen designs ===
1. Chat (on the same page)
Manager initiates: http://invis.io/VQ38BE8XU
Employee replies:http://invis.io/R338BFQ5V
2. Chat (on a different page)
Manager initiates: http://invis.io/DR38BGIUG
Employee replies: http://invis.io/Y238C6XWS
===== Implementation =====
Following are used for the implementation.
1. https://www.ejabberd.im/ - XMPP server with BOSH support
2. https://github.com/sstrigler/JSJaC/ - XMPP JS client.
3. https://xmpp4r.github.io/ - XMPP ruby client
4. https://github.com/valeriansaliou/giggle - XMPP jingle library which is used for audio/video chats.
=== Other libraries/alternatives explored ===
1. https://www.jsxc.org/
2. http://strophe.im/strophejs/
3. https://github.com/estos/strophe.jingle
=== To be done ===
1. Grouping chats by task and notifications.
2. Saving chat history.
===== Database Changes =====
**Table Name:** users (Following columns are added)
^Column Name ^Type ^Description ^
|xmpp_login |String |xmpp login |
|encrypted_xmpp_password |String | encrypted xmpp password |
===== Setting up chat =====
=== Setup ejabberd ===
1. Download and install ejabberd (15.04 or above)
https://www.process-one.net/en/ejabberd/downloads
2. while setting up, please give a hostname (ex - mylocal.com). This needs to be noted down.
3. Change the config settings. Config file can be found in your ejabberd directory under conf (ex - /opt/ejabberd-15.04/conf/ejabberd.yml)
Change "register:" (around line 481)
register:
all: allow
registration_timeout: infinity
Change "registration_timeout:" (around line 494)
registration_timeout: infinity //(yaml file level)
Enable "mod_ping"
mod_ping:
send_pings: true
ping_interval: 250
timeout_action: none
3. Start/Restart ejabberd
4. Create a shared roster for every one.
{{:shared_roster_all.png|Screenshot with information}}
5. Add a host entry for the IP pointing to the URL.
=== Configuring chat server ===
1. Configure the settings in config/chat.yml and enable chat. Sample settings for development environment look like below.
development:
server: http://192.168.2.118:5280
bosh: http://192.168.2.118:5280/http-bind
websocket: ws://192.168.2.118:5280/websocket
domain: mylocal.com
enabled: true
create_xmpp_user: true
2. Create xmpp_login for existing users and populate thread id for older review assignments.
rake backfill:create_xmpp_account_for_users
rake backfill:populate_chat_thread_id_in_review_assignment