mirror of
https://github.com/abhinavxd/libredesk.git
synced 2025-10-23 05:11:57 +00:00
remove mkdocs docs as docs are moved to docs.libredesk.io repository
This commit is contained in:
31
.github/workflows/github-pages.yml
vendored
31
.github/workflows/github-pages.yml
vendored
@@ -1,31 +0,0 @@
|
|||||||
name: Deploy MkDocs
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
deploy:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
|
|
||||||
- uses: actions/setup-python@v4
|
|
||||||
with:
|
|
||||||
python-version: 3.x
|
|
||||||
|
|
||||||
- run: pip install mkdocs-material
|
|
||||||
|
|
||||||
- run: |
|
|
||||||
if [ -f requirements.txt ]; then
|
|
||||||
pip install -r requirements.txt;
|
|
||||||
fi
|
|
||||||
|
|
||||||
- run: cd docs && mkdocs build
|
|
||||||
|
|
||||||
- name: Deploy to GitHub Pages
|
|
||||||
uses: peaceiris/actions-gh-pages@v3
|
|
||||||
with:
|
|
||||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
publish_dir: ./docs/site
|
|
@@ -1,30 +0,0 @@
|
|||||||
# API getting started
|
|
||||||
|
|
||||||
You can access the Libredesk API to interact with your instance programmatically.
|
|
||||||
|
|
||||||
## Generating API keys
|
|
||||||
|
|
||||||
1. **Edit agent**: Go to Admin → Teammate → Agent → Edit
|
|
||||||
2. **Generate new API key**: An API Key and API Secret will be generated for the agent
|
|
||||||
3. **Save the credentials**: Keep both the API Key and API Secret secure
|
|
||||||
4. **Key management**: You can revoke / regenerate API keys at any time from the same page
|
|
||||||
|
|
||||||
## Using the API
|
|
||||||
|
|
||||||
LibreDesk supports two authentication schemes:
|
|
||||||
|
|
||||||
### Basic authentication
|
|
||||||
```bash
|
|
||||||
curl -X GET "https://your-libredesk-instance.com/api/endpoint" \
|
|
||||||
-H "Authorization: Basic <base64_encoded_key:secret>"
|
|
||||||
```
|
|
||||||
|
|
||||||
### Token authentication
|
|
||||||
```bash
|
|
||||||
curl -X GET "https://your-libredesk-instance.com/api/endpoint" \
|
|
||||||
-H "Authorization: token your_api_key:your_api_secret"
|
|
||||||
```
|
|
||||||
|
|
||||||
## API Documentation
|
|
||||||
|
|
||||||
Complete API documentation with available endpoints and examples coming soon.
|
|
@@ -1,32 +0,0 @@
|
|||||||
# Developer Setup
|
|
||||||
|
|
||||||
Libredesk is a monorepo with a Go backend and a Vue.js frontend. The frontend uses Shadcn for UI components.
|
|
||||||
|
|
||||||
### Pre-requisites
|
|
||||||
|
|
||||||
- go
|
|
||||||
- nodejs (if you are working on the frontend) and `pnpm`
|
|
||||||
- redis
|
|
||||||
- postgres database (>= 13)
|
|
||||||
|
|
||||||
### First time setup
|
|
||||||
|
|
||||||
Clone the repository:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
git clone https://github.com/abhinavxd/libredesk.git
|
|
||||||
```
|
|
||||||
|
|
||||||
1. Copy `config.toml.sample` as `config.toml` and add your config.
|
|
||||||
2. Run `make` to build the libredesk binary. Once the binary is built, run `./libredesk --install` to run the DB setup and set the System user password.
|
|
||||||
|
|
||||||
### Running the Dev Environment
|
|
||||||
|
|
||||||
1. Run `make run-backend` to start the libredesk backend dev server on `:9000`.
|
|
||||||
2. Run `make run-frontend` to start the Vue frontend in dev mode using pnpm on `:8000`. Requests are proxied to the backend running on `:9000` check `vite.config.js` for the proxy config.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# Production Build
|
|
||||||
|
|
||||||
Run `make` to build the Go binary, build the Javascript frontend, and embed the static assets producing a single self-contained binary, `libredesk`.
|
|
Binary file not shown.
Before Width: | Height: | Size: 298 KiB |
@@ -1,17 +0,0 @@
|
|||||||
# Introduction
|
|
||||||
|
|
||||||
Libredesk is an open-source, self-hosted customer support desk — single binary app.
|
|
||||||
|
|
||||||
<div style="border: 1px solid #ccc; padding: 2px; border-radius: 6px; box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1); background-color: #f9f9f9;">
|
|
||||||
<a href="https://libredesk.io">
|
|
||||||
<img src="images/hero.png" alt="libredesk UI screenshot" style="display: block; margin: 0 auto; max-width: 100%; border-radius: 4px;" />
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
## Developers
|
|
||||||
|
|
||||||
Libredesk is licensed under AGPLv3. Contributions are welcome.
|
|
||||||
|
|
||||||
- Source code: [GitHub](https://github.com/abhinavxd/libredesk)
|
|
||||||
- Setup guide: [Developer setup](developer-setup.md)
|
|
||||||
- Stack: Go backend, Vue 3 frontend (Shadcn UI)
|
|
@@ -1,65 +0,0 @@
|
|||||||
# Installation
|
|
||||||
|
|
||||||
Libredesk is a single binary application that requires postgres and redis to run. You can install it using the binary or docker.
|
|
||||||
|
|
||||||
## Binary
|
|
||||||
|
|
||||||
1. Download the [latest release](https://github.com/abhinavxd/libredesk/releases) and extract the libredesk binary.
|
|
||||||
2. `./libredesk --install` to install the tables in the Postgres DB (⩾ 13) and set the System user password.
|
|
||||||
3. Run `./libredesk` and visit `http://localhost:9000` and login with the email `System` and the password you set during installation.
|
|
||||||
|
|
||||||
!!! Tip
|
|
||||||
To set the System user password during installation, set the environment variables:
|
|
||||||
`LIBREDESK_SYSTEM_USER_PASSWORD=xxxxxxxxxxx ./libredesk --install`
|
|
||||||
|
|
||||||
|
|
||||||
## Docker
|
|
||||||
|
|
||||||
The latest image is available on DockerHub at `libredesk/libredesk:latest`
|
|
||||||
|
|
||||||
The recommended method is to download the [docker-compose.yml](https://github.com/abhinavxd/libredesk/blob/main/docker-compose.yml) file, customize it for your environment and then to simply run `docker compose up -d`.
|
|
||||||
|
|
||||||
```shell
|
|
||||||
# Download the compose file and the sample config file in the current directory.
|
|
||||||
curl -LO https://github.com/abhinavxd/libredesk/raw/main/docker-compose.yml
|
|
||||||
curl -LO https://github.com/abhinavxd/libredesk/raw/main/config.sample.toml
|
|
||||||
|
|
||||||
# Copy the config.sample.toml to config.toml and edit it as needed.
|
|
||||||
cp config.sample.toml config.toml
|
|
||||||
|
|
||||||
# Run the services in the background.
|
|
||||||
docker compose up -d
|
|
||||||
|
|
||||||
# Setting System user password.
|
|
||||||
docker exec -it libredesk_app ./libredesk --set-system-user-password
|
|
||||||
```
|
|
||||||
|
|
||||||
Go to `http://localhost:9000` and login with the email `System` and the password you set using the `--set-system-user-password` command.
|
|
||||||
|
|
||||||
|
|
||||||
## Compiling from source
|
|
||||||
|
|
||||||
To compile the latest unreleased version (`main` branch):
|
|
||||||
|
|
||||||
1. Make sure `go`, `nodejs`, and `pnpm` are installed on your system.
|
|
||||||
2. `git clone git@github.com:abhinavxd/libredesk.git`
|
|
||||||
3. `cd libredesk && make`. This will generate the `libredesk` binary.
|
|
||||||
|
|
||||||
|
|
||||||
## Nginx
|
|
||||||
|
|
||||||
Libredesk uses websockets for real-time updates. If you are using Nginx, you need to add the following (or similar) configuration to your Nginx configuration file.
|
|
||||||
|
|
||||||
```nginx
|
|
||||||
client_max_body_size 100M;
|
|
||||||
location / {
|
|
||||||
proxy_pass http://localhost:9000;
|
|
||||||
proxy_http_version 1.1;
|
|
||||||
proxy_set_header Upgrade $http_upgrade;
|
|
||||||
proxy_set_header Connection 'upgrade';
|
|
||||||
proxy_set_header Host $host;
|
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
|
||||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
||||||
proxy_cache_bypass $http_upgrade;
|
|
||||||
}
|
|
||||||
```
|
|
@@ -1,57 +0,0 @@
|
|||||||
# Setting up SSO
|
|
||||||
|
|
||||||
Libredesk supports external OpenID Connect providers (e.g., Google, Keycloak) for signing in users.
|
|
||||||
|
|
||||||
!!! note
|
|
||||||
User accounts must be created in Libredesk manually; signup is not supported.
|
|
||||||
|
|
||||||
## Generic Configuration Steps
|
|
||||||
|
|
||||||
Since each provider’s configuration might differ, consult your provider’s documentation for any additional or divergent settings.
|
|
||||||
|
|
||||||
1. Provider setup:
|
|
||||||
In your provider’s admin console, create a new OpenID Connect application/client. Retrieve:
|
|
||||||
- Client ID
|
|
||||||
- Client Secret
|
|
||||||
|
|
||||||
2. Libredesk configuration:
|
|
||||||
In Libredesk, navigate to Security > SSO and click New SSO and enter the following details:
|
|
||||||
- Provider URL (e.g., the URL of your OpenID provider)
|
|
||||||
- Client ID
|
|
||||||
- Client Secret
|
|
||||||
- A descriptive name for the connection
|
|
||||||
|
|
||||||
3. Redirect URL:
|
|
||||||
After saving, copy the generated Callback URL from Libredesk and add it as a valid redirect URI in your provider’s client settings.
|
|
||||||
|
|
||||||
## Provider Examples
|
|
||||||
|
|
||||||
#### Keycloak
|
|
||||||
|
|
||||||
1. Log in to your Keycloak Admin Console.
|
|
||||||
|
|
||||||
2. In Keycloak, navigate to Clients and click Create:
|
|
||||||
|
|
||||||
- Client ID (e.g., `libredesk-app`)
|
|
||||||
- Client Protocol: `openid-connect`
|
|
||||||
- Root URL and Web Origins: your app domain (e.g., `https://ticket.example.com`)
|
|
||||||
- Under Authentication flow, uncheck everything except the standard flow
|
|
||||||
- Click save
|
|
||||||
|
|
||||||
3. Go to the credentials tab:
|
|
||||||
- Ensure client authenticator is set to `Client Id and Secret`
|
|
||||||
- Note down the generated client secret
|
|
||||||
|
|
||||||
4. In Libredesk, go to Admin > Security > SSO and click New SSO:
|
|
||||||
- Provider URL (e.g., `https://keycloak.example.com/realms/yourrealm`)
|
|
||||||
- Name (e.g., `Keycloak`)
|
|
||||||
- Client ID
|
|
||||||
- Client secret
|
|
||||||
- Click save
|
|
||||||
|
|
||||||
5. After saving, click on the three dots and choose Edit to open the new SSO entry.
|
|
||||||
|
|
||||||
6. Copy the generated Callback URL from Libredesk.
|
|
||||||
|
|
||||||
7. Back in Keycloak, edit the client and add the Callback URL to Valid Redirect URIs:
|
|
||||||
- e.g., `https://ticket.example.com/api/v1/oidc/1/finish`
|
|
@@ -1,60 +0,0 @@
|
|||||||
# Templating
|
|
||||||
|
|
||||||
Templating in outgoing emails allows you to personalize content by embedding dynamic expressions like `{{ .Recipient.FullName }}`. These expressions reference fields from the conversation, contact, recipient, and author objects.
|
|
||||||
|
|
||||||
## Outgoing Email Template Expressions
|
|
||||||
|
|
||||||
If you want to customize the look of outgoing emails, you can do so in the Admin > Templates -> Outgoing Email Templates section. This template will be used for all outgoing emails including replies to conversations, notifications, and other system-generated emails.
|
|
||||||
|
|
||||||
### Conversation Variables
|
|
||||||
|
|
||||||
| Variable | Value |
|
|
||||||
|---------------------------------|--------------------------------------------------------|
|
|
||||||
| {{ .Conversation.ReferenceNumber }} | The unique reference number of the conversation |
|
|
||||||
| {{ .Conversation.Subject }} | The subject of the conversation |
|
|
||||||
| {{ .Conversation.Priority }} | The priority level of the conversation |
|
|
||||||
| {{ .Conversation.UUID }} | The unique identifier of the conversation |
|
|
||||||
|
|
||||||
### Contact Variables
|
|
||||||
|
|
||||||
| Variable | Value |
|
|
||||||
|------------------------------|------------------------------------|
|
|
||||||
| {{ .Contact.FirstName }} | First name of the contact/customer |
|
|
||||||
| {{ .Contact.LastName }} | Last name of the contact/customer |
|
|
||||||
| {{ .Contact.FullName }} | Full name of the contact/customer |
|
|
||||||
| {{ .Contact.Email }} | Email address of the contact/customer |
|
|
||||||
|
|
||||||
### Recipient Variables
|
|
||||||
|
|
||||||
| Variable | Value |
|
|
||||||
|--------------------------------|-----------------------------------|
|
|
||||||
| {{ .Recipient.FirstName }} | First name of the recipient |
|
|
||||||
| {{ .Recipient.LastName }} | Last name of the recipient |
|
|
||||||
| {{ .Recipient.FullName }} | Full name of the recipient |
|
|
||||||
| {{ .Recipient.Email }} | Email address of the recipient |
|
|
||||||
|
|
||||||
### Author Variables
|
|
||||||
|
|
||||||
| Variable | Value |
|
|
||||||
|------------------------------|-----------------------------------|
|
|
||||||
| {{ .Author.FirstName }} | First name of the message author |
|
|
||||||
| {{ .Author.LastName }} | Last name of the message author |
|
|
||||||
| {{ .Author.FullName }} | Full name of the message author |
|
|
||||||
| {{ .Author.Email }} | Email address of the message author |
|
|
||||||
|
|
||||||
### Example outgoing email template
|
|
||||||
|
|
||||||
```html
|
|
||||||
Dear {{ .Recipient.FirstName }},
|
|
||||||
|
|
||||||
{{ template "content" . }}
|
|
||||||
|
|
||||||
Best regards,
|
|
||||||
{{ .Author.FullName }}
|
|
||||||
---
|
|
||||||
Reference: {{ .Conversation.ReferenceNumber }}
|
|
||||||
```
|
|
||||||
|
|
||||||
Here, the `{{ template "content" . }}` serves as a placeholder for the body of the outgoing email. It will be replaced with the actual email content at the time of sending.
|
|
||||||
|
|
||||||
Similarly, the `{{ .Recipient.FirstName }}` expression will dynamically insert the recipient's first name when the email is sent.
|
|
@@ -1,3 +0,0 @@
|
|||||||
# Translations / Internationalization
|
|
||||||
|
|
||||||
You can help translate libreDesk into different languages by contributing here: [Libredesk Translation Project](https://crowdin.com/project/libredesk)
|
|
@@ -1,18 +0,0 @@
|
|||||||
# Upgrade
|
|
||||||
|
|
||||||
!!! warning "Warning"
|
|
||||||
Always take a backup of the Postgres database before upgrading Libredesk.
|
|
||||||
|
|
||||||
## Binary
|
|
||||||
- Stop running libredesk binary.
|
|
||||||
- Download the [latest release](https://github.com/abhinavxd/libredesk/releases) and extract the libredesk binary and overwrite the previous version.
|
|
||||||
- `./libredesk --upgrade` to upgrade an existing database schema. Upgrades are idempotent and running them multiple times have no side effects.
|
|
||||||
- Run `./libredesk` again.
|
|
||||||
|
|
||||||
## Docker
|
|
||||||
|
|
||||||
```shell
|
|
||||||
docker compose down app
|
|
||||||
docker compose pull
|
|
||||||
docker compose up app -d
|
|
||||||
```
|
|
@@ -1,222 +0,0 @@
|
|||||||
# Webhooks
|
|
||||||
|
|
||||||
Webhooks allow you to receive real-time HTTP notifications when specific events occur in your Libredesk instance. This enables you to integrate Libredesk with external systems and automate workflows based on conversation and message events.
|
|
||||||
|
|
||||||
## Overview
|
|
||||||
|
|
||||||
When a configured event occurs in Libredesk, a HTTP POST request is sent to the webhook URL you specify. The request contains a JSON payload with event details and relevant data.
|
|
||||||
|
|
||||||
## Webhook Configuration
|
|
||||||
|
|
||||||
1. Navigate to **Admin > Integrations > Webhooks** in your Libredesk dashboard
|
|
||||||
2. Click **Create Webhook**
|
|
||||||
3. Configure the following:
|
|
||||||
- **Name**: A descriptive name for your webhook
|
|
||||||
- **URL**: The endpoint URL where webhook payloads will be sent
|
|
||||||
- **Events**: Select which events you want to subscribe to
|
|
||||||
- **Secret**: Optional secret key for signature verification
|
|
||||||
- **Status**: Enable or disable the webhook
|
|
||||||
|
|
||||||
## Security
|
|
||||||
|
|
||||||
### Signature Verification
|
|
||||||
|
|
||||||
If you provide a secret key, webhook payloads will be signed using HMAC-SHA256. The signature is included in the `X-Signature-256` header in the format `sha256=<signature>`.
|
|
||||||
|
|
||||||
To verify the signature:
|
|
||||||
|
|
||||||
```python
|
|
||||||
import hmac
|
|
||||||
import hashlib
|
|
||||||
|
|
||||||
def verify_signature(payload, signature, secret):
|
|
||||||
expected_signature = hmac.new(
|
|
||||||
secret.encode('utf-8'),
|
|
||||||
payload,
|
|
||||||
hashlib.sha256
|
|
||||||
).hexdigest()
|
|
||||||
return hmac.compare_digest(f"sha256={expected_signature}", signature)
|
|
||||||
```
|
|
||||||
|
|
||||||
### Headers
|
|
||||||
|
|
||||||
Each webhook request includes the following headers:
|
|
||||||
|
|
||||||
- `Content-Type`: `application/json`
|
|
||||||
- `User-Agent`: `Libredesk-Webhook/<libredesk_version_here>`
|
|
||||||
- `X-Signature-256`: HMAC signature (if secret is configured)
|
|
||||||
|
|
||||||
## Available Events
|
|
||||||
|
|
||||||
### Conversation Events
|
|
||||||
|
|
||||||
#### `conversation.created`
|
|
||||||
Triggered when a new conversation is created.
|
|
||||||
|
|
||||||
**Sample Payload:**
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"event": "conversation.created",
|
|
||||||
"timestamp": "2025-06-15T10:30:00Z",
|
|
||||||
"payload": {
|
|
||||||
"id": 123,
|
|
||||||
"created_at": "2025-06-15T10:30:00Z",
|
|
||||||
"updated_at": "2025-06-15T10:30:00Z",
|
|
||||||
"uuid": "550e8400-e29b-41d4-a716-446655440000",
|
|
||||||
"contact_id": 456,
|
|
||||||
"inbox_id": 1,
|
|
||||||
"reference_number": "100",
|
|
||||||
"priority": "Medium",
|
|
||||||
"priority_id": 2,
|
|
||||||
"status": "Open",
|
|
||||||
"status_id": 1,
|
|
||||||
"subject": "Help with account setup",
|
|
||||||
"inbox_name": "Support",
|
|
||||||
"inbox_channel": "email",
|
|
||||||
"contact": {
|
|
||||||
"id": 456,
|
|
||||||
"first_name": "John",
|
|
||||||
"last_name": "Doe",
|
|
||||||
"email": "john.doe@example.com",
|
|
||||||
"type": "contact"
|
|
||||||
},
|
|
||||||
"custom_attributes": {},
|
|
||||||
"tags": []
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
#### `conversation.status_changed`
|
|
||||||
Triggered when a conversation's status is updated.
|
|
||||||
|
|
||||||
**Sample Payload:**
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"event": "conversation.status_changed",
|
|
||||||
"timestamp": "2025-06-15T10:35:00Z",
|
|
||||||
"payload": {
|
|
||||||
"conversation_uuid": "550e8400-e29b-41d4-a716-446655440000",
|
|
||||||
"previous_status": "Open",
|
|
||||||
"new_status": "Resolved",
|
|
||||||
"snooze_until": "",
|
|
||||||
"actor_id": 789
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
#### `conversation.assigned`
|
|
||||||
Triggered when a conversation is assigned to a user.
|
|
||||||
|
|
||||||
**Sample Payload:**
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"event": "conversation.assigned",
|
|
||||||
"timestamp": "2025-06-15T10:32:00Z",
|
|
||||||
"payload": {
|
|
||||||
"conversation_uuid": "550e8400-e29b-41d4-a716-446655440000",
|
|
||||||
"assigned_to": 789,
|
|
||||||
"actor_id": 789
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
#### `conversation.unassigned`
|
|
||||||
Triggered when a conversation is unassigned from a user.
|
|
||||||
|
|
||||||
**Sample Payload:**
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"event": "conversation.unassigned",
|
|
||||||
"timestamp": "2025-06-15T10:40:00Z",
|
|
||||||
"payload": {
|
|
||||||
"conversation_uuid": "550e8400-e29b-41d4-a716-446655440000",
|
|
||||||
"actor_id": 789
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
#### `conversation.tags_changed`
|
|
||||||
Triggered when tags are added or removed from a conversation.
|
|
||||||
|
|
||||||
**Sample Payload:**
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"event": "conversation.tags_changed",
|
|
||||||
"timestamp": "2025-06-15T10:45:00Z",
|
|
||||||
"payload": {
|
|
||||||
"conversation_uuid": "550e8400-e29b-41d4-a716-446655440000",
|
|
||||||
"previous_tags": ["bug", "priority"],
|
|
||||||
"new_tags": ["bug", "priority", "resolved"],
|
|
||||||
"actor_id": 789
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Message Events
|
|
||||||
|
|
||||||
#### `message.created`
|
|
||||||
Triggered when a new message is created in a conversation.
|
|
||||||
|
|
||||||
**Sample Payload:**
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"event": "message.created",
|
|
||||||
"timestamp": "2025-06-15T10:33:00Z",
|
|
||||||
"payload": {
|
|
||||||
"id": 987,
|
|
||||||
"created_at": "2025-06-15T10:33:00Z",
|
|
||||||
"updated_at": "2025-06-15T10:33:00Z",
|
|
||||||
"uuid": "123e4567-e89b-12d3-a456-426614174000",
|
|
||||||
"type": "outgoing",
|
|
||||||
"status": "sent",
|
|
||||||
"conversation_id": 123,
|
|
||||||
"content": "<p>Hello! How can I help you today?</p>",
|
|
||||||
"text_content": "Hello! How can I help you today?",
|
|
||||||
"content_type": "html",
|
|
||||||
"private": false,
|
|
||||||
"sender_id": 789,
|
|
||||||
"sender_type": "agent",
|
|
||||||
"attachments": []
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
#### `message.updated`
|
|
||||||
Triggered when an existing message is updated.
|
|
||||||
|
|
||||||
**Sample Payload:**
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"event": "message.updated",
|
|
||||||
"timestamp": "2025-06-15T10:34:00Z",
|
|
||||||
"payload": {
|
|
||||||
"id": 987,
|
|
||||||
"created_at": "2025-06-15T10:33:00Z",
|
|
||||||
"updated_at": "2025-06-15T10:34:00Z",
|
|
||||||
"uuid": "123e4567-e89b-12d3-a456-426614174000",
|
|
||||||
"type": "outgoing",
|
|
||||||
"status": "sent",
|
|
||||||
"conversation_id": 123,
|
|
||||||
"content": "<p>Hello! How can I help you today? (Updated)</p>",
|
|
||||||
"text_content": "Hello! How can I help you today? (Updated)",
|
|
||||||
"content_type": "html",
|
|
||||||
"private": false,
|
|
||||||
"sender_id": 789,
|
|
||||||
"sender_type": "agent",
|
|
||||||
"attachments": []
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## Delivery and Retries
|
|
||||||
|
|
||||||
- Webhooks requests timeout can be configured in the `config.toml` file
|
|
||||||
- Failed deliveries are not automatically retried
|
|
||||||
- Webhook delivery runs in a background worker pool for better performance
|
|
||||||
- If the webhook queue is full (configurable in config.toml file), new events may be dropped
|
|
||||||
|
|
||||||
## Testing Webhooks
|
|
||||||
|
|
||||||
You can test your webhook configuration using tools like:
|
|
||||||
|
|
||||||
- [Webhook.site](https://webhook.site) - Generate a temporary URL to inspect webhook payloads
|
|
@@ -1,38 +0,0 @@
|
|||||||
site_name: Libredesk Docs
|
|
||||||
theme:
|
|
||||||
name: material
|
|
||||||
language: en
|
|
||||||
font:
|
|
||||||
text: Source Sans Pro
|
|
||||||
code: Roboto Mono
|
|
||||||
weights: [400, 700]
|
|
||||||
direction: ltr
|
|
||||||
palette:
|
|
||||||
primary: white
|
|
||||||
accent: red
|
|
||||||
features:
|
|
||||||
- navigation.indexes
|
|
||||||
- navigation.sections
|
|
||||||
- content.code.copy
|
|
||||||
extra:
|
|
||||||
search:
|
|
||||||
language: en
|
|
||||||
|
|
||||||
markdown_extensions:
|
|
||||||
- admonition
|
|
||||||
- codehilite
|
|
||||||
- toc:
|
|
||||||
permalink: true
|
|
||||||
|
|
||||||
nav:
|
|
||||||
- Introduction: index.md
|
|
||||||
- Getting Started:
|
|
||||||
- Installation: installation.md
|
|
||||||
- Upgrade Guide: upgrade.md
|
|
||||||
- Email Templates: templating.md
|
|
||||||
- SSO Setup: sso.md
|
|
||||||
- Webhooks: webhooks.md
|
|
||||||
- API Getting Started: api-getting-started.md
|
|
||||||
- Contributions:
|
|
||||||
- Developer Setup: developer-setup.md
|
|
||||||
- Translate Libredesk: translations.md
|
|
Reference in New Issue
Block a user