-
Notifications
You must be signed in to change notification settings - Fork 2
Time estimation
Cost evaluation for:
- Selecting an engine among XMPP, Matrix, Mattermost
- A UI integrated only in the CTI
- A phone-island style UI (chat-island) that can be integrated in third-party projects, including Nethlink
- Implementing the webservice to integrate chat with the Acrobits mobile app (CloudSoftphone)
Chat UI implementation for NethVoice CTI can be done in two ways:
- Basic UI (CTI only)
- Advanced UI (chat-island)
- Minimal features (send/receive text messages, view online/offline status, message notifications, writing notification, emojii): ~360 hours
- Chat rooms, groups, channels management: ~80 hours
- File attachment management: ~80 hours
Subtotal: 480 hours + 20% design = 576 hours (~14 weeks)
- Minimal features (send/receive text messages, view online/offline status, message notifications, emojii): ~468 hours
- Chat rooms, groups, channels management: ~104 hours
- File attachment management: ~104 hours
- Nethlink integration (show online/offline status and send messages directly from Nethlink): ~80 hours
Subtotal: 756 hours + 20% design = 907 hours (~23 weeks)
- Full XMPP client: https://conversejs.org/
- Matrix: https://github.com/matrix-org/matrix-js-sdk
- Strophe XMPP: https://github.com/strophe/strophejs
- We already have a working ejabberd module in NethServer 8
- Goal is to integrate it into NethVoice, not with external clients (e.g., Pidgin)
- Push notifications needed only for Acrobits mobile app, not for other mobile apps
- Alternative 1: Modify ejabberd module to allow multiple instances per node: ~40 hours
- Alternative 2 (Recommended): Integrate ejabberd container into NethVoice as a module: ~80 hours
- Group chat functionality with channel creation: ~40 hours
- File transfer (XEP-0363): ~10 hours
- Backend-CTI integration (room creation, message sending, message retrieval): ~160 hours
XMPP Estimated Time: 290 hours (excluding Alternative 1) (~4 weeks)
- Converse.js can be used as integrated web client on ejabberd port 5280
- For push notifications outside Acrobits app, an XEP-0357 proxy is required. Candidates: fpush or MoongousePush
- Authentik module stabilization (probable core integration): ~80 hours
- Mattermost configuration for SSO with Authentik: ~16 hours
- Backend-CTI integration (room creation, message sending, message retrieval): ~120 hours
Mattermost Estimated Time: 216 hours (~3 weeks)
- Module stabilization (backup/clone/move, documentation, repository publishing): ~80 hours
- Fix Dex template for SSO: ~60 hours
-
Element configuration (restrict login to local Matrix instance only): ~40 hours
- Most users won't use Element, so this could be skipped
- Backend-CTI integration (room creation, message sending, message retrieval): ~120 hours
Matrix Estimated Time: 300 hours (~4 weeks)
Regardless of backend choice, implement a proxy server that communicates with the app and implements these Acrobits APIs:
- Send Message: Send messages from app to chat backend
- Fetch Messages (Modern API): Retrieve messages from chat backend to app
- Push Token Reporter: Save push notification tokens sent by app for later use
- Mapping between number and chat identifier (see https://doc.acrobits.net/api/client/send_message.html#sms-to)
Configure chat backend to send push notifications to Acrobits server via Push Notifications over HTTP using previously saved tokens.
Implementation depends on chosen backend.
Problem 1:
- Implement proxy server exposing Acrobits APIs communicating with ejabberd via XMPP. Challenge: XMPP and MAM message retrieval interaction: ~160 hours
Problem 2:
- Fork and extend fpush to support Acrobits push notifications: ~160 hours
XMPP Total: 320 hours
Problem 1:
- Implement proxy server exposing Acrobits APIs communicating with Mattermost via REST APIs (https://api.mattermost.com/): ~80 hours
Problem 2:
- Option 1: Extend matterbridge to send notifications to Acrobits upon message receipt: ~80 hours
- Option 2: Change Mattermost push URL to point to Traefik instance that sends notifications through proxy (/push endpoint, reads token from reporter, sends to Acrobits) then proxies original Mattermost server: ~40 hours
Mattermost Total: 160 hours (Option 1) or 120 hours (Option 2)
Problem 1:
- Implement proxy server exposing Acrobits APIs communicating with Matrix via REST APIs (https://matrix.org/docs/api/client-server-api): ~80 hours
Problem 2:
- Option 1: Use Matrix hookshot configured to call proxy for sending Acrobits notifications: ~80 hours
- Option 2: Change Matrix push URL to point to Traefik instance that sends notifications through proxy (/push endpoint, reads token from reporter, sends to Acrobits) then proxies original Matrix server: ~40 hours
Matrix Total: 160 hours (Option 1) or 120 hours (Option 2)
| Engine | Estimated Time | Duration |
|---|---|---|
| Mattermost (Option 2 notifications) | 336 hours | ~5 weeks |
| Matrix (Option 2 notifications) | 420 hours | ~6 weeks |
| XMPP | 610 hours | ~8 weeks |
| Engine | Estimated Time | Duration |
|---|---|---|
| Mattermost Complete | 912 hours | ~23 weeks |
| Matrix Complete | 978 hours | ~24 weeks |
| XMPP Complete | 1186 hours | ~30 weeks |
| Engine | Estimated Time | Duration |
|---|---|---|
| Mattermost Complete | 1243 hours | ~31 weeks |
| Matrix Complete | 1327 hours | ~33 weeks |
| XMPP Complete | 1517 hours | ~38 weeks |