Updates the Create New Message API documentation to explain how to send file attachments with multipart form data. Closes #10472 Closes #12672 ## Why The endpoint already accepts attachment uploads, but the published API docs only described the JSON request body. That made it unclear that clients need to use multipart form data and send files through the `attachments[]` field. ## What changed - Adds `multipart/form-data` as a documented request body option for Create New Message. - Documents the `attachments` binary array and form encoding used by `attachments[]`. - Adds a multipart cURL request example for a message with an attachment. - Regenerates the Swagger JSON artifacts. ## Screenshots Create New Message API docs with the multipart cURL sample and `multipart/form-data` request sample selected: <img width="1702" height="1083" alt="create-message-attachment-docs-multipart" src="https://github.com/user-attachments/assets/5fef9082-6eb9-494d-91d1-8dc0b7880212" /> ## How to test 1. Open `/swagger`. 2. Navigate to Application -> Messages -> Create New Message. 3. Confirm the endpoint documents both `application/json` and `multipart/form-data`, including the attachment payload schema.
155 lines
4.2 KiB
YAML
155 lines
4.2 KiB
YAML
tags:
|
|
- Messages
|
|
operationId: create-a-new-message-in-a-conversation
|
|
summary: Create New Message
|
|
description: |
|
|
Create a new message in the conversation.
|
|
|
|
Use `application/json` for text messages and `multipart/form-data` when the
|
|
message includes file attachments.
|
|
|
|
### Multipart attachment request
|
|
|
|
Send files with the `attachments[]` form field. `curl -F` sets the
|
|
`multipart/form-data` content type and boundary automatically.
|
|
|
|
```bash
|
|
curl -X POST "https://app.chatwoot.com/api/v1/accounts/{account_id}/conversations/{conversation_id}/messages" \
|
|
-H "api_access_token: <your-api-token>" \
|
|
-F "content=Here is the screenshot" \
|
|
-F "message_type=outgoing" \
|
|
-F "private=false" \
|
|
-F "attachments[]=@/path/to/screenshot.png"
|
|
```
|
|
|
|
## WhatsApp Template Messages
|
|
|
|
For WhatsApp channels, you can send structured template messages using the `template_params` field.
|
|
Templates must be pre-approved in WhatsApp Business Manager.
|
|
|
|
### Example Templates
|
|
|
|
**Text with Image Header:**
|
|
```json
|
|
{
|
|
"content": "Hi your order 121212 is confirmed. Please wait for further updates",
|
|
"template_params": {
|
|
"name": "order_confirmation",
|
|
"category": "MARKETING",
|
|
"language": "en",
|
|
"processed_params": {
|
|
"body": {
|
|
"1": "121212"
|
|
},
|
|
"header": {
|
|
"media_url": "https://picsum.photos/200/300",
|
|
"media_type": "image"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
**Text with Copy Code Button:**
|
|
```json
|
|
{
|
|
"content": "Special offer! Get 30% off your next purchase. Use the code below",
|
|
"template_params": {
|
|
"name": "discount_coupon",
|
|
"category": "MARKETING",
|
|
"language": "en",
|
|
"processed_params": {
|
|
"body": {
|
|
"discount_percentage": "30"
|
|
},
|
|
"buttons": [{
|
|
"type": "copy_code",
|
|
"parameter": "SAVE20"
|
|
}]
|
|
}
|
|
}
|
|
}
|
|
```
|
|
security:
|
|
- userApiKey: []
|
|
- agentBotApiKey: []
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/conversation_message_create_payload'
|
|
multipart/form-data:
|
|
schema:
|
|
type: object
|
|
description: Form data payload for creating a message with file attachments.
|
|
example:
|
|
content: Here is the screenshot
|
|
message_type: outgoing
|
|
private: false
|
|
'attachments[]':
|
|
- screenshot.png
|
|
properties:
|
|
content:
|
|
type: string
|
|
description: The content of the message
|
|
example: Here is the screenshot
|
|
message_type:
|
|
type: string
|
|
enum: ['outgoing', 'incoming']
|
|
description: The type of the message
|
|
example: outgoing
|
|
private:
|
|
type: boolean
|
|
description: Flag to identify if it is a private note
|
|
example: false
|
|
content_type:
|
|
type: string
|
|
enum: ['text', 'input_email', 'cards', 'input_select', 'form', 'article']
|
|
description: Content type of the message
|
|
example: text
|
|
content_attributes:
|
|
type: object
|
|
description: Attributes based on the content type
|
|
example: {}
|
|
'attachments[]':
|
|
type: array
|
|
description: Files to attach to the message
|
|
items:
|
|
type: string
|
|
format: binary
|
|
encoding:
|
|
'attachments[]':
|
|
style: form
|
|
explode: true
|
|
examples:
|
|
attachment_message:
|
|
summary: Message with an attachment
|
|
value:
|
|
content: Here is the screenshot
|
|
message_type: outgoing
|
|
private: false
|
|
'attachments[]':
|
|
- screenshot.png
|
|
responses:
|
|
'200':
|
|
description: Success
|
|
content:
|
|
application/json:
|
|
schema:
|
|
allOf:
|
|
- $ref: '#/components/schemas/generic_id'
|
|
- $ref: '#/components/schemas/message'
|
|
'404':
|
|
description: Conversation not found
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/bad_request_error'
|
|
'403':
|
|
description: Access denied
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/bad_request_error'
|