WhatsApp/Signal/Formstack/admin updates
This commit is contained in:
parent
bcecf61a46
commit
d0cc5a21de
451 changed files with 16139 additions and 39623 deletions
|
|
@ -1,63 +1,150 @@
|
|||
# zammad-addon-bridge
|
||||
# CDR Bridge Zammad Addon
|
||||
|
||||
An addon that adds [bridge](https://gitlab.com/digiresilience/link/link-stack) channels to Zammad.
|
||||
## Overview
|
||||
|
||||
## Channels
|
||||
The CDR Bridge addon integrates external communication channels (Signal, WhatsApp, Voice) into Zammad, supporting both the classic UI and the new Vue-based desktop/mobile interfaces.
|
||||
|
||||
This channel creates a three channels: "Voice", "Signal" and "Whatsapp".
|
||||
## Features
|
||||
|
||||
To submit a ticket: make a POST to the Submission Endpoint with the header
|
||||
`Authorization: SUBMISSION_TOKEN`.
|
||||
### Signal Channel Integration
|
||||
|
||||
The payload for the Voice channel must be a json object with the keys:
|
||||
- Reply button on customer Signal messages
|
||||
- "Add Signal message" button in ticket reply area
|
||||
- 10,000 character limit with warning at 5,000
|
||||
- Plain text format with attachment support
|
||||
- Full integration with both classic and new Vue-based UI
|
||||
|
||||
- `startTime` - string containing ISO date
|
||||
- `endTime` - string containing ISO date
|
||||
- `to` - fully qualified phone number
|
||||
- `from` - fully qualified phone number
|
||||
- `duration` - string containing the recording duration
|
||||
- `callSid` - the unique identifier for the call
|
||||
- `recording` - string base64 encoded binary of the recording
|
||||
- `mimeType` - string of the binary mime-type
|
||||
### WhatsApp Channel Integration
|
||||
|
||||
The payload for the Signal channel must be a json object with the keys:
|
||||
- Reply button on customer WhatsApp messages
|
||||
- "Add WhatsApp message" button in ticket reply area
|
||||
- 4,096 character limit with warning at 3,000
|
||||
- Plain text format with attachment support
|
||||
- Full integration with both classic and new Vue-based UI
|
||||
|
||||
- TBD
|
||||
### Voice Channel Support
|
||||
|
||||
The payload for the Whatsapp channel must be a json object with the keys:
|
||||
- Classic UI implementation maintained
|
||||
- New UI support ready for future implementation
|
||||
|
||||
- TBD
|
||||
### Channel Restriction Settings (NEW)
|
||||
|
||||
- Control which reply channels appear in the UI
|
||||
- Configurable via `cdr_link_allowed_channels` setting
|
||||
- Acts as a whitelist while preserving contextual logic
|
||||
- Empty setting falls back to default Zammad behavior
|
||||
|
||||
## Installation
|
||||
|
||||
### Prerequisites
|
||||
|
||||
- Zammad 6.0+ (for new UI support)
|
||||
- CDR Bridge backend services configured
|
||||
- Signal/WhatsApp/Voice services running
|
||||
|
||||
### Installation Steps
|
||||
|
||||
1. Build the addon package:
|
||||
|
||||
```bash
|
||||
cd packages/zammad-addon-bridge
|
||||
npm run build
|
||||
```
|
||||
|
||||
2. Install in Zammad:
|
||||
|
||||
```bash
|
||||
# Copy the generated .zpm file to your Zammad installation
|
||||
cp dist/bridge-vX.X.X.zpm /opt/zammad/
|
||||
|
||||
# Install using Zammad package manager
|
||||
zammad run rails r "Package.install(file: '/opt/zammad/bridge-vX.X.X.zpm')"
|
||||
|
||||
# Restart Zammad
|
||||
systemctl restart zammad
|
||||
```
|
||||
|
||||
## Configuration
|
||||
|
||||
### Channel Restriction Settings
|
||||
|
||||
Control which reply channels are available in the ticket interface:
|
||||
|
||||
```ruby
|
||||
# Rails console
|
||||
Setting.set('cdr_link_allowed_channels', 'note,signal message') # Signal only
|
||||
Setting.set('cdr_link_allowed_channels', 'note,whatsapp message') # WhatsApp only
|
||||
Setting.set('cdr_link_allowed_channels', 'note,signal message,whatsapp message') # Both
|
||||
Setting.set('cdr_link_allowed_channels', '') # Default behavior (all channels)
|
||||
```
|
||||
|
||||
**How it works:**
|
||||
|
||||
- The setting acts as a whitelist of allowed channels
|
||||
- Channels must be both in the whitelist AND contextually appropriate
|
||||
- For example, Signal replies only appear for tickets that originated from Signal
|
||||
- Empty or unset falls back to default Zammad behavior
|
||||
- Changes take effect immediately (browser refresh required)
|
||||
|
||||
## Development
|
||||
|
||||
1. Edit the files in `src/`
|
||||
### Adding New Channels
|
||||
|
||||
Migration files should go in `src/db/addon/CHANNEL_NAME` ([see this post](https://community.zammad.org/t/automating-creation-of-custom-object-attributes/3831/2?u=abelxluck))
|
||||
1. Create TypeScript plugin in `app/frontend/shared/entities/ticket-article/action/plugins/`
|
||||
2. Add desktop UI plugin in `app/frontend/apps/desktop/pages/ticket/components/TicketDetailView/article-type/plugins/`
|
||||
3. Add corresponding backend implementation
|
||||
4. Create database migrations in `src/db/addon/bridge/`
|
||||
|
||||
2. Update version and changelog in `bridge-skeleton.szpm`
|
||||
3. Build a new package `make`
|
||||
|
||||
This outputs `dist/bridge-vXXX.szpm`
|
||||
|
||||
4. Install the szpm using the zammad package manager.
|
||||
|
||||
5. Repeat
|
||||
|
||||
### Create a new migration
|
||||
|
||||
Included is a helper script to create new migrations. You must have the python
|
||||
`inflection` library installed.
|
||||
|
||||
- debian/ubuntu: `apt install python3-inflection`
|
||||
- pip: `pip install --user inflection`
|
||||
- or create your own venv
|
||||
|
||||
To make a new migration simply run:
|
||||
### Building the Package
|
||||
|
||||
```bash
|
||||
# Update version and changelog in bridge-skeleton.szpm
|
||||
# Build the package
|
||||
make
|
||||
# Output: dist/bridge-vX.X.X.szpm
|
||||
```
|
||||
|
||||
### Create a New Migration
|
||||
|
||||
Helper script to create new migrations (requires python `inflection` library):
|
||||
|
||||
```bash
|
||||
# Install dependency
|
||||
apt install python3-inflection # Debian/Ubuntu
|
||||
# Or: pip install --user inflection
|
||||
|
||||
# Create migration
|
||||
make new-migration
|
||||
```
|
||||
|
||||
## Compatibility
|
||||
|
||||
- **Zammad 6.0+**: Both Classic and New UI
|
||||
- **Browser Support**: All modern browsers
|
||||
|
||||
## API Endpoints
|
||||
|
||||
### Voice Channel
|
||||
|
||||
POST to submission endpoint with `Authorization: SUBMISSION_TOKEN` header:
|
||||
|
||||
```json
|
||||
{
|
||||
"startTime": "ISO date string",
|
||||
"endTime": "ISO date string",
|
||||
"to": "fully qualified phone number",
|
||||
"from": "fully qualified phone number",
|
||||
"duration": "recording duration string",
|
||||
"callSid": "unique call identifier",
|
||||
"recording": "base64 encoded binary",
|
||||
"mimeType": "binary mime-type string"
|
||||
}
|
||||
```
|
||||
|
||||
### Signal/WhatsApp Channels
|
||||
|
||||
Handled via CDR Bridge backend services - see bridge documentation for API details.
|
||||
|
||||
## License
|
||||
|
||||
[](https://gitlab.com/digiresilience/link/zamamd-addon-bridge/blob/master/LICENSE.md)
|
||||
|
|
@ -66,5 +153,3 @@ This is a free software project licensed under the GNU Affero General
|
|||
Public License v3.0 (GNU AGPLv3) by [The Center for Digital
|
||||
Resilience](https://digiresilience.org) and [Guardian
|
||||
Project](https://guardianproject.info).
|
||||
|
||||
🐻
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue