feat(crm): complete contact label avatar gaps

This commit is contained in:
2026-06-05 02:53:24 +08:00
parent 5cf735076d
commit 7a033e28a0
16 changed files with 512 additions and 31 deletions
+9 -1
View File
@@ -26,9 +26,11 @@ DELETE /api/v1/accounts/:account_id/captain/preferences/
DELETE /api/v1/accounts/:account_id/captain/scenarios/:scenario_id
DELETE /api/v1/accounts/:account_id/channels/facebook_channel/:fb_id
DELETE /api/v1/accounts/:account_id/companies/:company_id
DELETE /api/v1/accounts/:account_id/companies/:company_id/avatar
DELETE /api/v1/accounts/:account_id/companies/:company_id/contacts/:contact_id
DELETE /api/v1/accounts/:account_id/companies/:company_id/notes/:note_id
DELETE /api/v1/accounts/:account_id/contacts/:contact_id
DELETE /api/v1/accounts/:account_id/contacts/:contact_id/avatar
DELETE /api/v1/accounts/:account_id/contacts/:contact_id/contact_inboxes/:inbox_id
DELETE /api/v1/accounts/:account_id/contacts/:contact_id/custom_attributes
DELETE /api/v1/accounts/:account_id/contacts/:contact_id/custom_attributes/:attribute_name
@@ -183,6 +185,8 @@ GET /api/v1/accounts/:account_id/contacts/:contact_id
GET /api/v1/accounts/:account_id/contacts/:contact_id/contact_inboxes
GET /api/v1/accounts/:account_id/contacts/:contact_id/contactable_inboxes
GET /api/v1/accounts/:account_id/contacts/:contact_id/conversations
GET /api/v1/accounts/:account_id/contacts/:contact_id/labels
GET /api/v1/accounts/:account_id/contacts/:contact_id/labels/
GET /api/v1/accounts/:account_id/contacts/:contact_id/notes
GET /api/v1/accounts/:account_id/contacts/:contact_id/notes/:note_id
GET /api/v1/accounts/:account_id/contacts/active
@@ -536,12 +540,16 @@ POST /api/v1/accounts/:account_id/channels/facebook_channel/reauthorize
POST /api/v1/accounts/:account_id/companies/
POST /api/v1/accounts/:account_id/companies/:company_id/contacts
POST /api/v1/accounts/:account_id/companies/:company_id/contacts/:contact_id
POST /api/v1/accounts/:account_id/companies/:company_id/destroy_custom_attributes
POST /api/v1/accounts/:account_id/companies/:company_id/notes
POST /api/v1/accounts/:account_id/contact_merge
POST /api/v1/accounts/:account_id/contacts/
POST /api/v1/accounts/:account_id/contacts/:contact_id/contact_inboxes
POST /api/v1/accounts/:account_id/contacts/:contact_id/contact_inboxes/
POST /api/v1/accounts/:account_id/contacts/:contact_id/custom_attributes/
POST /api/v1/accounts/:account_id/contacts/:contact_id/destroy_custom_attributes
POST /api/v1/accounts/:account_id/contacts/:contact_id/labels
POST /api/v1/accounts/:account_id/contacts/:contact_id/labels/
POST /api/v1/accounts/:account_id/contacts/:contact_id/notes
POST /api/v1/accounts/:account_id/contacts/export
POST /api/v1/accounts/:account_id/contacts/filter
@@ -807,4 +815,4 @@ PUT /public/api/v1/csat_survey/:id
PUT /public/api/v1/inboxes/:inbox_id/contacts/:contact_id
PUT /public/api/v1/inboxes/:inbox_id/contacts/:contact_id/conversations/:conversation_id/messages/:message_id
PUT /widget/direct_uploads/:upload_uuid
TOTAL: 809
TOTAL: 817
+12 -2
View File
@@ -7,7 +7,7 @@ Generated from:
This report covers tracked frontend-critical Chatwoot routes from `reference/chatwoot/config/routes.rb`, including API v1 account routes, Captain/Copilot, assignment policies, widget/public APIs, and API v2 reports. Ruby is not installed in the workspace, so Chatwoot routes are sourced from static route declarations instead of `bin/rails routes`.
Summary: 251 exact, 0 method-compatible, 0 parameter-compatible, 0 missing out of 251 tracked critical routes.
Summary: 261 exact, 0 method-compatible, 0 parameter-compatible, 0 missing out of 261 tracked critical routes.
## Missing Critical Routes
@@ -47,8 +47,10 @@ These routes exist with equivalent method and path shape but different parameter
| DELETE | `/api/v1/accounts/:account_id/captain/custom_tools/:tool_id` | `/api/v1/accounts/:account_id/captain/custom_tools/:tool_id` | `api/v1/accounts/captain/custom_tools#destroy` | `routes.rb:79` | exact |
| DELETE | `/api/v1/accounts/:account_id/captain/documents/:document_id` | `/api/v1/accounts/:account_id/captain/documents/:document_id` | `api/v1/accounts/captain/documents#destroy` | `routes.rb:82` | exact |
| DELETE | `/api/v1/accounts/:account_id/companies/:company_id` | `/api/v1/accounts/:account_id/companies/:company_id` | `api/v1/accounts/companies#destroy` | `routes.rb:179` | exact |
| DELETE | `/api/v1/accounts/:account_id/companies/:company_id/avatar` | `/api/v1/accounts/:account_id/companies/:company_id/avatar` | `api/v1/accounts/companies#avatar` | `routes.rb:185` | exact |
| DELETE | `/api/v1/accounts/:account_id/companies/:company_id/contacts/:contact_id` | `/api/v1/accounts/:account_id/companies/:company_id/contacts/:contact_id` | `api/v1/accounts/companies/contacts#destroy` | `routes.rb:188` | exact |
| DELETE | `/api/v1/accounts/:account_id/contacts/:contact_id` | `/api/v1/accounts/:account_id/contacts/:contact_id` | `api/v1/accounts/contacts#destroy` | `routes.rb:197` | exact |
| DELETE | `/api/v1/accounts/:account_id/contacts/:contact_id/avatar` | `/api/v1/accounts/:account_id/contacts/:contact_id/avatar` | `api/v1/accounts/contacts#avatar` | `routes.rb:208` | exact |
| DELETE | `/api/v1/accounts/:account_id/conversations/:conversation_id` | `/api/v1/accounts/:account_id/conversations/:conversation_id` | `api/v1/accounts/conversations#destroy` | `routes.rb:134` | exact |
| DELETE | `/api/v1/accounts/:account_id/conversations/:conversation_id/messages/:message_id` | `/api/v1/accounts/:account_id/conversations/:conversation_id/messages/:message_id` | `api/v1/accounts/conversations/messages#destroy` | `routes.rb:142` | exact |
| DELETE | `/api/v1/accounts/:account_id/custom_attribute_definitions/:id` | `/api/v1/accounts/:account_id/custom_attribute_definitions/:id` | `api/v1/accounts/custom_attribute_definitions#destroy` | `routes.rb:250` | exact |
@@ -94,13 +96,17 @@ These routes exist with equivalent method and path shape but different parameter
| GET | `/api/v1/accounts/:account_id/companies/` | `/api/v1/accounts/:account_id/companies/` | `api/v1/accounts/companies#index` | `routes.rb:179` | exact |
| GET | `/api/v1/accounts/:account_id/companies/:company_id` | `/api/v1/accounts/:account_id/companies/:company_id` | `api/v1/accounts/companies#show` | `routes.rb:179` | exact |
| GET | `/api/v1/accounts/:account_id/companies/:company_id/contacts` | `/api/v1/accounts/:account_id/companies/:company_id/contacts` | `api/v1/accounts/companies/contacts#index` | `routes.rb:188` | exact |
| GET | `/api/v1/accounts/:account_id/companies/:company_id/contacts/search` | `/api/v1/accounts/:account_id/companies/:company_id/contacts/search` | `api/v1/accounts/companies/contacts#search` | `routes.rb:190` | exact |
| GET | `/api/v1/accounts/:account_id/companies/:company_id/conversations` | `/api/v1/accounts/:account_id/companies/:company_id/conversations` | `api/v1/accounts/companies/conversations#index` | `routes.rb:193` | exact |
| GET | `/api/v1/accounts/:account_id/companies/:company_id/notes` | `/api/v1/accounts/:account_id/companies/:company_id/notes` | `api/v1/accounts/companies/notes#index` | `routes.rb:194` | exact |
| GET | `/api/v1/accounts/:account_id/companies/search` | `/api/v1/accounts/:account_id/companies/search` | `api/v1/accounts/companies#search` | `routes.rb:181` | exact |
| GET | `/api/v1/accounts/:account_id/contacts/` | `/api/v1/accounts/:account_id/contacts/` | `api/v1/accounts/contacts#index` | `routes.rb:197` | exact |
| GET | `/api/v1/accounts/:account_id/contacts/:contact_id` | `/api/v1/accounts/:account_id/contacts/:contact_id` | `api/v1/accounts/contacts#show` | `routes.rb:197` | exact |
| GET | `/api/v1/accounts/:account_id/contacts/:contact_id/contactable_inboxes` | `/api/v1/accounts/:account_id/contacts/:contact_id/contactable_inboxes` | `api/v1/accounts/contacts#contactable_inboxes` | `routes.rb:206` | exact |
| GET | `/api/v1/accounts/:account_id/contacts/:contact_id/conversations` | `/api/v1/accounts/:account_id/contacts/:contact_id/conversations` | `api/v1/accounts/contacts/conversations#index` | `routes.rb:211` | exact |
| GET | `/api/v1/accounts/:account_id/contacts/:contact_id/labels/` | `/api/v1/accounts/:account_id/contacts/:contact_id/labels/` | `api/v1/accounts/contacts/labels#index` | `routes.rb:213` | exact |
| GET | `/api/v1/accounts/:account_id/contacts/:contact_id/notes` | `/api/v1/accounts/:account_id/contacts/:contact_id/notes` | `api/v1/accounts/contacts/notes#index` | `routes.rb:214` | exact |
| GET | `/api/v1/accounts/:account_id/contacts/active` | `/api/v1/accounts/:account_id/contacts/active` | `api/v1/accounts/contacts#active` | `routes.rb:200` | exact |
| GET | `/api/v1/accounts/:account_id/contacts/search` | `/api/v1/accounts/:account_id/contacts/search` | `api/v1/accounts/contacts#search` | `routes.rb:201` | exact |
| GET | `/api/v1/accounts/:account_id/conversations/` | `/api/v1/accounts/:account_id/conversations/` | `api/v1/accounts/conversations#index` | `routes.rb:134` | exact |
| GET | `/api/v1/accounts/:account_id/conversations/:conversation_id` | `/api/v1/accounts/:account_id/conversations/:conversation_id` | `api/v1/accounts/conversations#show` | `routes.rb:134` | exact |
@@ -202,8 +208,12 @@ These routes exist with equivalent method and path shape but different parameter
| POST | `/api/v1/accounts/:account_id/captain/tasks/rewrite` | `/api/v1/accounts/:account_id/captain/tasks/rewrite` | `api/v1/accounts/captain/tasks#rewrite` | `routes.rb:86` | exact |
| POST | `/api/v1/accounts/:account_id/captain/tasks/summarize` | `/api/v1/accounts/:account_id/captain/tasks/summarize` | `api/v1/accounts/captain/tasks#summarize` | `routes.rb:87` | exact |
| POST | `/api/v1/accounts/:account_id/companies/` | `/api/v1/accounts/:account_id/companies/` | `api/v1/accounts/companies#create` | `routes.rb:179` | exact |
| POST | `/api/v1/accounts/:account_id/companies/:company_id/contacts/:contact_id` | `/api/v1/accounts/:account_id/companies/:company_id/contacts/:contact_id` | `api/v1/accounts/companies/contacts#create` | `routes.rb:188` | exact |
| POST | `/api/v1/accounts/:account_id/companies/:company_id/contacts` | `/api/v1/accounts/:account_id/companies/:company_id/contacts` | `api/v1/accounts/companies/contacts#create` | `routes.rb:188` | exact |
| POST | `/api/v1/accounts/:account_id/companies/:company_id/destroy_custom_attributes` | `/api/v1/accounts/:account_id/companies/:company_id/destroy_custom_attributes` | `api/v1/accounts/companies#destroy_custom_attributes` | `routes.rb:184` | exact |
| POST | `/api/v1/accounts/:account_id/contacts/` | `/api/v1/accounts/:account_id/contacts/` | `api/v1/accounts/contacts#create` | `routes.rb:197` | exact |
| POST | `/api/v1/accounts/:account_id/contacts/:contact_id/contact_inboxes/` | `/api/v1/accounts/:account_id/contacts/:contact_id/contact_inboxes/` | `api/v1/accounts/contacts/contact_inboxes#create` | `routes.rb:212` | exact |
| POST | `/api/v1/accounts/:account_id/contacts/:contact_id/destroy_custom_attributes` | `/api/v1/accounts/:account_id/contacts/:contact_id/destroy_custom_attributes` | `api/v1/accounts/contacts#destroy_custom_attributes` | `routes.rb:207` | exact |
| POST | `/api/v1/accounts/:account_id/contacts/:contact_id/labels/` | `/api/v1/accounts/:account_id/contacts/:contact_id/labels/` | `api/v1/accounts/contacts/labels#create` | `routes.rb:213` | exact |
| POST | `/api/v1/accounts/:account_id/contacts/:contact_id/notes` | `/api/v1/accounts/:account_id/contacts/:contact_id/notes` | `api/v1/accounts/contacts/notes#create` | `routes.rb:214` | exact |
| POST | `/api/v1/accounts/:account_id/contacts/export` | `/api/v1/accounts/:account_id/contacts/export` | `api/v1/accounts/contacts#export` | `routes.rb:204` | exact |
| POST | `/api/v1/accounts/:account_id/contacts/filter` | `/api/v1/accounts/:account_id/contacts/filter` | `api/v1/accounts/contacts#filter` | `routes.rb:202` | exact |