feat(parity): align Chatwoot 4.15.1 contracts
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
# Chatwoot Route Source Declarations
|
||||
|
||||
Source: `reference/chatwoot/config/routes.rb`
|
||||
Source: `docs/chatwoot/config/routes.rb`
|
||||
|
||||
Ruby is unavailable in the current workspace, so this file records static route DSL declarations with source lines. It is a repeatable fallback until `bin/rails routes` can run.
|
||||
|
||||
@@ -37,390 +37,401 @@ Ruby is unavailable in the current workspace, so this file records static route
|
||||
| 54 | `namespace :actions do` |
|
||||
| 55 | `resource :contact_merge, only: [:create]` |
|
||||
| 57 | `resource :bulk_actions, only: [:create]` |
|
||||
| 58 | `resource :onboarding, only: [:update]` |
|
||||
| 59 | `resources :agents, only: [:index, :create, :update, :destroy] do` |
|
||||
| 60 | `post :bulk_create, on: :collection` |
|
||||
| 62 | `namespace :captain do` |
|
||||
| 63 | `resource :preferences, only: [:show, :update]` |
|
||||
| 64 | `resources :assistants do` |
|
||||
| 66 | `post :playground` |
|
||||
| 69 | `get :tools` |
|
||||
| 71 | `resources :inboxes, only: [:index, :create, :destroy], param: :inbox_id` |
|
||||
| 72 | `resources :scenarios` |
|
||||
| 74 | `resources :assistant_responses` |
|
||||
| 75 | `resources :bulk_actions, only: [:create]` |
|
||||
| 76 | `resources :copilot_threads, only: [:index, :create] do` |
|
||||
| 77 | `resources :copilot_messages, only: [:index, :create]` |
|
||||
| 79 | `resources :custom_tools do` |
|
||||
| 80 | `post :test, on: :collection` |
|
||||
| 82 | `resources :documents, only: [:index, :show, :create, :destroy] do` |
|
||||
| 83 | `post :sync, on: :member` |
|
||||
| 85 | `resource :tasks, only: [], controller: 'tasks' do` |
|
||||
| 86 | `post :rewrite` |
|
||||
| 87 | `post :summarize` |
|
||||
| 88 | `post :reply_suggestion` |
|
||||
| 89 | `post :label_suggestion` |
|
||||
| 90 | `post :follow_up` |
|
||||
| 93 | `resource :saml_settings, only: [:show, :create, :update, :destroy]` |
|
||||
| 94 | `resources :agent_bots, only: [:index, :create, :show, :update, :destroy] do` |
|
||||
| 95 | `delete :avatar, on: :member` |
|
||||
| 96 | `post :reset_access_token, on: :member` |
|
||||
| 97 | `post :reset_secret, on: :member` |
|
||||
| 99 | `resources :contact_inboxes, only: [] do` |
|
||||
| 101 | `post :filter` |
|
||||
| 104 | `resources :assignable_agents, only: [:index]` |
|
||||
| 105 | `resource :audit_logs, only: [:show]` |
|
||||
| 106 | `resources :callbacks, only: [] do` |
|
||||
| 108 | `post :register_facebook_page` |
|
||||
| 109 | `get :register_facebook_page` |
|
||||
| 110 | `post :facebook_pages` |
|
||||
| 111 | `post :reauthorize_page` |
|
||||
| 114 | `resources :canned_responses, only: [:index, :create, :update, :destroy]` |
|
||||
| 115 | `resources :automation_rules, only: [:index, :create, :show, :update, :destroy] do` |
|
||||
| 116 | `post :clone` |
|
||||
| 118 | `resources :macros, only: [:index, :create, :show, :update, :destroy] do` |
|
||||
| 119 | `post :execute, on: :member` |
|
||||
| 121 | `resources :sla_policies, only: [:index, :create, :show, :update, :destroy]` |
|
||||
| 122 | `resources :custom_roles, only: [:index, :create, :show, :update, :destroy]` |
|
||||
| 123 | `resources :agent_capacity_policies, only: [:index, :create, :show, :update, :destroy] do` |
|
||||
| 124 | `scope module: :agent_capacity_policies do` |
|
||||
| 125 | `resources :users, only: [:index, :create, :destroy]` |
|
||||
| 126 | `resources :inbox_limits, only: [:create, :update, :destroy]` |
|
||||
| 129 | `resources :campaigns, only: [:index, :create, :show, :update, :destroy]` |
|
||||
| 130 | `resources :dashboard_apps, only: [:index, :show, :create, :update, :destroy]` |
|
||||
| 131 | `namespace :channels do` |
|
||||
| 132 | `resource :twilio_channel, only: [:create]` |
|
||||
| 134 | `resources :conversations, only: [:index, :create, :show, :update, :destroy] do` |
|
||||
| 136 | `get :meta` |
|
||||
| 137 | `get :search` |
|
||||
| 138 | `get :unread_counts, to: 'conversations/unread_counts#index'` |
|
||||
| 139 | `post :filter` |
|
||||
| 141 | `scope module: :conversations do` |
|
||||
| 142 | `resources :messages, only: [:index, :create, :destroy, :update] do` |
|
||||
| 144 | `post :translate` |
|
||||
| 145 | `post :retry` |
|
||||
| 148 | `resources :assignments, only: [:create]` |
|
||||
| 149 | `resources :labels, only: [:create, :index]` |
|
||||
| 150 | `resource :participants, only: [:show, :create, :update, :destroy]` |
|
||||
| 151 | `resource :direct_uploads, only: [:create]` |
|
||||
| 152 | `resource :draft_messages, only: [:show, :update, :destroy]` |
|
||||
| 155 | `post :mute` |
|
||||
| 156 | `post :unmute` |
|
||||
| 157 | `post :transcript` |
|
||||
| 158 | `post :toggle_status` |
|
||||
| 159 | `post :toggle_priority` |
|
||||
| 160 | `post :toggle_typing_status` |
|
||||
| 161 | `post :update_last_seen` |
|
||||
| 162 | `post :unread` |
|
||||
| 163 | `post :custom_attributes` |
|
||||
| 164 | `get :attachments` |
|
||||
| 165 | `get :inbox_assistant` |
|
||||
| 166 | `get :reporting_events if ChatwootApp.enterprise?` |
|
||||
| 170 | `resources :search, only: [:index] do` |
|
||||
| 172 | `get :conversations` |
|
||||
| 173 | `get :messages` |
|
||||
| 174 | `get :contacts` |
|
||||
| 175 | `get :articles` |
|
||||
| 179 | `resources :companies, only: [:index, :show, :create, :update, :destroy] do` |
|
||||
| 181 | `get :search` |
|
||||
| 184 | `post :destroy_custom_attributes` |
|
||||
| 185 | `delete :avatar` |
|
||||
| 187 | `scope module: :companies do` |
|
||||
| 188 | `resources :contacts, only: [:index, :create, :destroy] do` |
|
||||
| 190 | `get :search` |
|
||||
| 193 | `resources :conversations, only: [:index]` |
|
||||
| 194 | `resources :notes, only: [:index]` |
|
||||
| 197 | `resources :contacts, only: [:index, :show, :update, :create, :destroy] do` |
|
||||
| 199 | `get :active` |
|
||||
| 200 | `get :search` |
|
||||
| 201 | `post :filter` |
|
||||
| 202 | `post :import` |
|
||||
| 203 | `post :export` |
|
||||
| 206 | `get :contactable_inboxes` |
|
||||
| 207 | `post :destroy_custom_attributes` |
|
||||
| 208 | `delete :avatar` |
|
||||
| 210 | `scope module: :contacts do` |
|
||||
| 211 | `resources :conversations, only: [:index]` |
|
||||
| 212 | `resources :contact_inboxes, only: [:create]` |
|
||||
| 213 | `resources :labels, only: [:create, :index]` |
|
||||
| 214 | `resources :notes` |
|
||||
| 215 | `get :attachments, to: 'attachments#index'` |
|
||||
| 216 | `post :call, on: :member, to: 'calls#create' if ChatwootApp.enterprise?` |
|
||||
| 219 | `resources :csat_survey_responses, only: [:index] do` |
|
||||
| 221 | `get :metrics` |
|
||||
| 222 | `get :download` |
|
||||
| 225 | `patch :update if ChatwootApp.enterprise?` |
|
||||
| 228 | `resources :applied_slas, only: [:index] do` |
|
||||
| 230 | `get :metrics` |
|
||||
| 231 | `get :download` |
|
||||
| 234 | `resources :reporting_events, only: [:index] if ChatwootApp.enterprise?` |
|
||||
| 237 | `resources :whatsapp_calls, only: [:show] do` |
|
||||
| 239 | `post :accept` |
|
||||
| 240 | `post :reject` |
|
||||
| 241 | `post :terminate` |
|
||||
| 242 | `post :upload_recording` |
|
||||
| 245 | `post :initiate` |
|
||||
| 250 | `resources :custom_attribute_definitions, only: [:index, :show, :create, :update, :destroy]` |
|
||||
| 251 | `resources :custom_filters, only: [:index, :show, :create, :update, :destroy]` |
|
||||
| 252 | `resources :inboxes, only: [:index, :show, :create, :update, :destroy] do` |
|
||||
| 253 | `get :assignable_agents, on: :member` |
|
||||
| 254 | `get :campaigns, on: :member` |
|
||||
| 255 | `get :agent_bot, on: :member` |
|
||||
| 256 | `post :set_agent_bot, on: :member` |
|
||||
| 257 | `delete :avatar, on: :member` |
|
||||
| 258 | `post :sync_templates, on: :member` |
|
||||
| 259 | `get :health, on: :member` |
|
||||
| 260 | `post :register_webhook, on: :member` |
|
||||
| 261 | `post :reset_secret, on: :member` |
|
||||
| 263 | `resource :conference, only: %i[create destroy], controller: 'conference' do` |
|
||||
| 264 | `get :token, on: :member` |
|
||||
| 266 | `post :enable_whatsapp_calling, on: :member` |
|
||||
| 267 | `post :disable_whatsapp_calling, on: :member` |
|
||||
| 270 | `resource :csat_template, only: [:show, :create], controller: 'inbox_csat_templates' do` |
|
||||
| 271 | `post :analyze, on: :collection` |
|
||||
| 275 | `resources :inbox_members, only: [:create, :show], param: :inbox_id do` |
|
||||
| 277 | `delete :destroy` |
|
||||
| 278 | `patch :update` |
|
||||
| 281 | `resources :labels, only: [:index, :show, :create, :update, :destroy]` |
|
||||
| 283 | `resources :notifications, only: [:index, :update, :destroy] do` |
|
||||
| 285 | `post :read_all` |
|
||||
| 286 | `get :unread_count` |
|
||||
| 287 | `post :destroy_all` |
|
||||
| 290 | `post :snooze` |
|
||||
| 291 | `post :unread` |
|
||||
| 294 | `resource :notification_settings, only: [:show, :update]` |
|
||||
| 296 | `resources :teams do` |
|
||||
| 297 | `resources :team_members, only: [:index, :create] do` |
|
||||
| 299 | `delete :destroy` |
|
||||
| 300 | `patch :update` |
|
||||
| 306 | `resources :assignment_policies do` |
|
||||
| 307 | `resources :inboxes, only: [:index, :create, :destroy], module: :assignment_policies` |
|
||||
| 310 | `resources :inboxes, only: [] do` |
|
||||
| 311 | `resource :assignment_policy, only: [:show, :create, :destroy], module: :inboxes` |
|
||||
| 314 | `namespace :twitter do` |
|
||||
| 315 | `resource :authorization, only: [:create]` |
|
||||
| 318 | `namespace :microsoft do` |
|
||||
| 319 | `resource :authorization, only: [:create]` |
|
||||
| 322 | `namespace :google do` |
|
||||
| 58 | `resource :onboarding, only: [:update] do` |
|
||||
| 59 | `get :help_center_generation` |
|
||||
| 61 | `resources :agents, only: [:index, :create, :update, :destroy] do` |
|
||||
| 62 | `post :bulk_create, on: :collection` |
|
||||
| 64 | `namespace :captain do` |
|
||||
| 65 | `resource :preferences, only: [:show, :update]` |
|
||||
| 66 | `resources :assistants do` |
|
||||
| 68 | `post :playground` |
|
||||
| 69 | `get :stats` |
|
||||
| 70 | `get :summary` |
|
||||
| 71 | `get :drilldown` |
|
||||
| 74 | `get :tools` |
|
||||
| 76 | `resources :inboxes, only: [:index, :create, :destroy], param: :inbox_id` |
|
||||
| 77 | `resources :scenarios` |
|
||||
| 79 | `resources :assistant_responses` |
|
||||
| 80 | `resources :message_reports, only: [:create]` |
|
||||
| 81 | `resources :bulk_actions, only: [:create]` |
|
||||
| 82 | `resources :copilot_threads, only: [:index, :create] do` |
|
||||
| 83 | `resources :copilot_messages, only: [:index, :create]` |
|
||||
| 85 | `resources :custom_tools do` |
|
||||
| 86 | `post :test, on: :collection` |
|
||||
| 88 | `resources :documents, only: [:index, :show, :create, :destroy] do` |
|
||||
| 89 | `post :sync, on: :member` |
|
||||
| 91 | `resource :tasks, only: [], controller: 'tasks' do` |
|
||||
| 92 | `post :rewrite` |
|
||||
| 93 | `post :summarize` |
|
||||
| 94 | `post :reply_suggestion` |
|
||||
| 95 | `post :label_suggestion` |
|
||||
| 96 | `post :follow_up` |
|
||||
| 99 | `resource :saml_settings, only: [:show, :create, :update, :destroy]` |
|
||||
| 100 | `resources :agent_bots, only: [:index, :create, :show, :update, :destroy] do` |
|
||||
| 101 | `delete :avatar, on: :member` |
|
||||
| 102 | `post :reset_access_token, on: :member` |
|
||||
| 103 | `post :reset_secret, on: :member` |
|
||||
| 105 | `resources :contact_inboxes, only: [] do` |
|
||||
| 107 | `post :filter` |
|
||||
| 110 | `resources :assignable_agents, only: [:index]` |
|
||||
| 111 | `resource :audit_logs, only: [:show]` |
|
||||
| 112 | `resources :callbacks, only: [] do` |
|
||||
| 114 | `post :register_facebook_page` |
|
||||
| 115 | `get :register_facebook_page` |
|
||||
| 116 | `post :facebook_pages` |
|
||||
| 117 | `post :reauthorize_page` |
|
||||
| 120 | `resources :canned_responses, only: [:index, :create, :update, :destroy]` |
|
||||
| 121 | `resources :automation_rules, only: [:index, :create, :show, :update, :destroy] do` |
|
||||
| 122 | `post :clone` |
|
||||
| 124 | `resources :macros, only: [:index, :create, :show, :update, :destroy] do` |
|
||||
| 125 | `post :execute, on: :member` |
|
||||
| 127 | `resources :sla_policies, only: [:index, :create, :show, :update, :destroy]` |
|
||||
| 128 | `resources :custom_roles, only: [:index, :create, :show, :update, :destroy]` |
|
||||
| 129 | `resources :agent_capacity_policies, only: [:index, :create, :show, :update, :destroy] do` |
|
||||
| 130 | `scope module: :agent_capacity_policies do` |
|
||||
| 131 | `resources :users, only: [:index, :create, :destroy]` |
|
||||
| 132 | `resources :inbox_limits, only: [:create, :update, :destroy]` |
|
||||
| 135 | `resources :campaigns, only: [:index, :create, :show, :update, :destroy]` |
|
||||
| 136 | `resources :dashboard_apps, only: [:index, :show, :create, :update, :destroy]` |
|
||||
| 137 | `namespace :channels do` |
|
||||
| 138 | `resource :twilio_channel, only: [:create]` |
|
||||
| 140 | `resources :conversations, only: [:index, :create, :show, :update, :destroy] do` |
|
||||
| 142 | `get :meta` |
|
||||
| 143 | `get :search` |
|
||||
| 144 | `get :unread_counts, to: 'conversations/unread_counts#index'` |
|
||||
| 145 | `post :filter` |
|
||||
| 147 | `scope module: :conversations do` |
|
||||
| 148 | `resources :messages, only: [:index, :create, :destroy, :update] do` |
|
||||
| 150 | `post :translate` |
|
||||
| 151 | `post :retry` |
|
||||
| 154 | `resources :assignments, only: [:create]` |
|
||||
| 155 | `resources :labels, only: [:create, :index]` |
|
||||
| 156 | `resource :participants, only: [:show, :create, :update, :destroy]` |
|
||||
| 157 | `resource :direct_uploads, only: [:create]` |
|
||||
| 158 | `resource :draft_messages, only: [:show, :update, :destroy]` |
|
||||
| 161 | `post :mute` |
|
||||
| 162 | `post :unmute` |
|
||||
| 163 | `post :transcript` |
|
||||
| 164 | `post :toggle_status` |
|
||||
| 165 | `post :toggle_priority` |
|
||||
| 166 | `post :toggle_typing_status` |
|
||||
| 167 | `post :update_last_seen` |
|
||||
| 168 | `post :unread` |
|
||||
| 169 | `post :custom_attributes` |
|
||||
| 170 | `get :attachments` |
|
||||
| 171 | `get :inbox_assistant` |
|
||||
| 172 | `get :reporting_events if ChatwootApp.enterprise?` |
|
||||
| 176 | `resources :search, only: [:index] do` |
|
||||
| 178 | `get :conversations` |
|
||||
| 179 | `get :messages` |
|
||||
| 180 | `get :contacts` |
|
||||
| 181 | `get :articles` |
|
||||
| 185 | `resources :companies, only: [:index, :show, :create, :update, :destroy] do` |
|
||||
| 187 | `get :search` |
|
||||
| 190 | `post :destroy_custom_attributes` |
|
||||
| 191 | `delete :avatar` |
|
||||
| 193 | `scope module: :companies do` |
|
||||
| 194 | `resources :contacts, only: [:index, :create, :destroy] do` |
|
||||
| 196 | `get :search` |
|
||||
| 199 | `resources :conversations, only: [:index]` |
|
||||
| 200 | `resources :notes, only: [:index]` |
|
||||
| 203 | `resources :contacts, only: [:index, :show, :update, :create, :destroy] do` |
|
||||
| 205 | `get :active` |
|
||||
| 206 | `get :search` |
|
||||
| 207 | `post :filter` |
|
||||
| 208 | `post :import` |
|
||||
| 209 | `post :export` |
|
||||
| 212 | `get :contactable_inboxes` |
|
||||
| 213 | `post :destroy_custom_attributes` |
|
||||
| 214 | `delete :avatar` |
|
||||
| 216 | `scope module: :contacts do` |
|
||||
| 217 | `resources :conversations, only: [:index]` |
|
||||
| 218 | `resources :contact_inboxes, only: [:create]` |
|
||||
| 219 | `resources :labels, only: [:create, :index]` |
|
||||
| 220 | `resources :notes` |
|
||||
| 221 | `get :attachments, to: 'attachments#index'` |
|
||||
| 222 | `post :call, on: :member, to: 'calls#create' if ChatwootApp.enterprise?` |
|
||||
| 225 | `resources :csat_survey_responses, only: [:index] do` |
|
||||
| 227 | `get :metrics` |
|
||||
| 228 | `get :download` |
|
||||
| 231 | `patch :update if ChatwootApp.enterprise?` |
|
||||
| 234 | `resources :applied_slas, only: [:index] do` |
|
||||
| 236 | `get :metrics` |
|
||||
| 237 | `get :download` |
|
||||
| 240 | `resources :reporting_events, only: [:index] if ChatwootApp.enterprise?` |
|
||||
| 243 | `resources :calls, only: [:index]` |
|
||||
| 244 | `resources :whatsapp_calls, only: [:show] do` |
|
||||
| 246 | `post :accept` |
|
||||
| 247 | `post :reject` |
|
||||
| 248 | `post :terminate` |
|
||||
| 249 | `post :upload_recording` |
|
||||
| 252 | `post :initiate` |
|
||||
| 257 | `resources :custom_attribute_definitions, only: [:index, :show, :create, :update, :destroy]` |
|
||||
| 258 | `resources :custom_filters, only: [:index, :show, :create, :update, :destroy]` |
|
||||
| 259 | `resources :inboxes, only: [:index, :show, :create, :update, :destroy] do` |
|
||||
| 260 | `get :assignable_agents, on: :member` |
|
||||
| 261 | `get :campaigns, on: :member` |
|
||||
| 262 | `get :agent_bot, on: :member` |
|
||||
| 263 | `post :set_agent_bot, on: :member` |
|
||||
| 264 | `delete :avatar, on: :member` |
|
||||
| 265 | `post :sync_templates, on: :member` |
|
||||
| 266 | `get :health, on: :member` |
|
||||
| 267 | `post :register_webhook, on: :member` |
|
||||
| 268 | `post :reset_secret, on: :member` |
|
||||
| 270 | `resource :conference, only: %i[create destroy], controller: 'conference' do` |
|
||||
| 271 | `get :token, on: :member` |
|
||||
| 273 | `post :enable_whatsapp_calling, on: :member` |
|
||||
| 274 | `post :disable_whatsapp_calling, on: :member` |
|
||||
| 275 | `post :set_inbound_calls, on: :member` |
|
||||
| 278 | `resource :csat_template, only: [:show, :create], controller: 'inbox_csat_templates' do` |
|
||||
| 279 | `post :analyze, on: :collection` |
|
||||
| 283 | `resources :inbox_members, only: [:create, :show], param: :inbox_id do` |
|
||||
| 285 | `delete :destroy` |
|
||||
| 286 | `patch :update` |
|
||||
| 289 | `resources :labels, only: [:index, :show, :create, :update, :destroy]` |
|
||||
| 291 | `resources :notifications, only: [:index, :update, :destroy] do` |
|
||||
| 293 | `post :read_all` |
|
||||
| 294 | `get :unread_count` |
|
||||
| 295 | `post :destroy_all` |
|
||||
| 298 | `post :snooze` |
|
||||
| 299 | `post :unread` |
|
||||
| 302 | `resource :notification_settings, only: [:show, :update]` |
|
||||
| 304 | `resources :teams do` |
|
||||
| 305 | `resources :team_members, only: [:index, :create] do` |
|
||||
| 307 | `delete :destroy` |
|
||||
| 308 | `patch :update` |
|
||||
| 314 | `resources :assignment_policies do` |
|
||||
| 315 | `resources :inboxes, only: [:index, :create, :destroy], module: :assignment_policies` |
|
||||
| 318 | `resources :inboxes, only: [] do` |
|
||||
| 319 | `resource :assignment_policy, only: [:show, :create, :destroy], module: :inboxes` |
|
||||
| 322 | `namespace :twitter do` |
|
||||
| 323 | `resource :authorization, only: [:create]` |
|
||||
| 326 | `namespace :instagram do` |
|
||||
| 326 | `namespace :microsoft do` |
|
||||
| 327 | `resource :authorization, only: [:create]` |
|
||||
| 330 | `namespace :tiktok do` |
|
||||
| 330 | `namespace :google do` |
|
||||
| 331 | `resource :authorization, only: [:create]` |
|
||||
| 334 | `namespace :notion do` |
|
||||
| 334 | `namespace :instagram do` |
|
||||
| 335 | `resource :authorization, only: [:create]` |
|
||||
| 338 | `namespace :whatsapp do` |
|
||||
| 338 | `namespace :tiktok do` |
|
||||
| 339 | `resource :authorization, only: [:create]` |
|
||||
| 342 | `resources :webhooks, only: [:index, :create, :update, :destroy]` |
|
||||
| 343 | `namespace :integrations do` |
|
||||
| 344 | `resources :apps, only: [:index, :show]` |
|
||||
| 345 | `resources :hooks, only: [:show, :create, :update, :destroy] do` |
|
||||
| 347 | `post :process_event` |
|
||||
| 350 | `resource :slack, only: [:create, :update, :destroy], controller: 'slack' do` |
|
||||
| 352 | `get :list_all_channels` |
|
||||
| 355 | `resource :dyte, controller: 'dyte', only: [] do` |
|
||||
| 357 | `post :create_a_meeting` |
|
||||
| 358 | `post :add_participant_to_meeting` |
|
||||
| 361 | `resource :shopify, controller: 'shopify', only: [:destroy] do` |
|
||||
| 363 | `post :auth` |
|
||||
| 364 | `get :orders` |
|
||||
| 367 | `resource :linear, controller: 'linear', only: [] do` |
|
||||
| 369 | `delete :destroy` |
|
||||
| 370 | `get :teams` |
|
||||
| 371 | `get :team_entities` |
|
||||
| 372 | `post :create_issue` |
|
||||
| 373 | `post :link_issue` |
|
||||
| 374 | `post :unlink_issue` |
|
||||
| 375 | `get :search_issue` |
|
||||
| 376 | `get :linked_issues` |
|
||||
| 379 | `resource :notion, controller: 'notion', only: [] do` |
|
||||
| 381 | `delete :destroy` |
|
||||
| 385 | `resources :portals do` |
|
||||
| 387 | `patch :archive` |
|
||||
| 388 | `delete :logo` |
|
||||
| 389 | `post :send_instructions` |
|
||||
| 390 | `get :ssl_status` |
|
||||
| 392 | `resources :categories do` |
|
||||
| 393 | `post :reorder, on: :collection` |
|
||||
| 395 | `namespace :articles do` |
|
||||
| 396 | `resource :bulk_actions, only: [] do` |
|
||||
| 397 | `post :translate` |
|
||||
| 398 | `patch :update_status` |
|
||||
| 399 | `patch :update_category` |
|
||||
| 400 | `delete :delete_articles` |
|
||||
| 403 | `resources :articles do` |
|
||||
| 404 | `post :reorder, on: :collection` |
|
||||
| 408 | `resources :upload, only: [:create]` |
|
||||
| 414 | `namespace :integrations do` |
|
||||
| 415 | `resources :webhooks, only: [:create]` |
|
||||
| 419 | `post 'auth/saml_login', to: 'auth#saml_login'` |
|
||||
| 421 | `resource :profile, only: [:show, :update] do` |
|
||||
| 422 | `delete :avatar, on: :collection` |
|
||||
| 424 | `post :availability` |
|
||||
| 425 | `post :auto_offline` |
|
||||
| 426 | `put :set_active_account` |
|
||||
| 427 | `post :resend_confirmation` |
|
||||
| 428 | `post :reset_access_token` |
|
||||
| 432 | `scope module: 'profile' do` |
|
||||
| 433 | `resource :mfa, controller: 'mfa', only: [:show, :create, :destroy] do` |
|
||||
| 434 | `post :verify` |
|
||||
| 435 | `post :backup_codes` |
|
||||
| 440 | `resource :notification_subscriptions, only: [:create, :destroy]` |
|
||||
| 442 | `namespace :widget do` |
|
||||
| 443 | `resource :direct_uploads, only: [:create]` |
|
||||
| 444 | `resource :config, only: [:create]` |
|
||||
| 445 | `resources :campaigns, only: [:index]` |
|
||||
| 446 | `resources :events, only: [:create]` |
|
||||
| 447 | `resources :messages, only: [:index, :create, :update]` |
|
||||
| 448 | `resources :conversations, only: [:index, :create] do` |
|
||||
| 450 | `post :destroy_custom_attributes` |
|
||||
| 451 | `post :set_custom_attributes` |
|
||||
| 452 | `post :update_last_seen` |
|
||||
| 453 | `post :toggle_typing` |
|
||||
| 454 | `post :transcript` |
|
||||
| 455 | `get :toggle_status` |
|
||||
| 458 | `resource :contact, only: [:show, :update] do` |
|
||||
| 460 | `post :destroy_custom_attributes` |
|
||||
| 461 | `patch :set_user` |
|
||||
| 464 | `resources :inbox_members, only: [:index]` |
|
||||
| 465 | `resources :labels, only: [:create, :destroy]` |
|
||||
| 466 | `namespace :integrations do` |
|
||||
| 467 | `resource :dyte, controller: 'dyte', only: [] do` |
|
||||
| 469 | `post :add_participant_to_meeting` |
|
||||
| 476 | `namespace :v2 do` |
|
||||
| 477 | `resources :accounts, only: [:create] do` |
|
||||
| 478 | `scope module: :accounts do` |
|
||||
| 479 | `resources :summary_reports, only: [] do` |
|
||||
| 481 | `get :agent` |
|
||||
| 482 | `get :team` |
|
||||
| 483 | `get :inbox` |
|
||||
| 484 | `get :label` |
|
||||
| 485 | `get :channel` |
|
||||
| 488 | `resources :reports, only: [:index] do` |
|
||||
| 490 | `get :summary` |
|
||||
| 491 | `get :bot_summary` |
|
||||
| 492 | `get :agents` |
|
||||
| 493 | `get :inboxes` |
|
||||
| 494 | `get :labels` |
|
||||
| 495 | `get :teams` |
|
||||
| 496 | `get :conversations` |
|
||||
| 497 | `get :conversations_summary` |
|
||||
| 498 | `get :conversation_traffic` |
|
||||
| 499 | `get :bot_metrics` |
|
||||
| 500 | `get :inbox_label_matrix` |
|
||||
| 501 | `get :first_response_time_distribution` |
|
||||
| 502 | `get :outgoing_messages_count` |
|
||||
| 505 | `resource :year_in_review, only: [:show]` |
|
||||
| 506 | `resources :live_reports, only: [] do` |
|
||||
| 508 | `get :conversation_metrics` |
|
||||
| 509 | `get :grouped_conversation_metrics` |
|
||||
| 518 | `namespace :enterprise, defaults: { format: 'json' } do` |
|
||||
| 519 | `namespace :api do` |
|
||||
| 520 | `namespace :v1 do` |
|
||||
| 521 | `resources :accounts do` |
|
||||
| 523 | `post :checkout` |
|
||||
| 524 | `post :subscription` |
|
||||
| 525 | `get :limits` |
|
||||
| 526 | `post :toggle_deletion` |
|
||||
| 527 | `post :topup_checkout` |
|
||||
| 533 | `post 'webhooks/stripe', to: 'webhooks/stripe#process_payload'` |
|
||||
| 534 | `post 'webhooks/firecrawl', to: 'webhooks/firecrawl#process_payload'` |
|
||||
| 540 | `namespace :platform, defaults: { format: 'json' } do` |
|
||||
| 541 | `namespace :api do` |
|
||||
| 542 | `namespace :v1 do` |
|
||||
| 543 | `resources :users, only: [:create, :show, :update, :destroy] do` |
|
||||
| 545 | `get :login` |
|
||||
| 546 | `post :token` |
|
||||
| 549 | `resources :agent_bots, only: [:index, :create, :show, :update, :destroy] do` |
|
||||
| 550 | `delete :avatar, on: :member` |
|
||||
| 552 | `resources :accounts, only: [:index, :create, :show, :update, :destroy] do` |
|
||||
| 553 | `resources :account_users, only: [:index, :create] do` |
|
||||
| 555 | `delete :destroy` |
|
||||
| 558 | `resources :email_channel_migrations, only: [:create]` |
|
||||
| 566 | `namespace :public, defaults: { format: 'json' } do` |
|
||||
| 567 | `namespace :api do` |
|
||||
| 568 | `namespace :v1 do` |
|
||||
| 569 | `resources :inboxes do` |
|
||||
| 570 | `scope module: :inboxes do` |
|
||||
| 571 | `resources :contacts, only: [:create, :show, :update] do` |
|
||||
| 572 | `resources :conversations, only: [:index, :create, :show] do` |
|
||||
| 574 | `post :toggle_status` |
|
||||
| 575 | `post :toggle_typing` |
|
||||
| 576 | `post :update_last_seen` |
|
||||
| 579 | `resources :messages, only: [:index, :create, :update]` |
|
||||
| 585 | `resources :csat_survey, only: [:show, :update]` |
|
||||
| 590 | `get 'hc/:slug', to: 'public/api/v1/portals#show'` |
|
||||
| 591 | `get 'hc/:slug/sitemap.xml', to: 'public/api/v1/portals#sitemap'` |
|
||||
| 592 | `get 'hc/:slug/:locale', to: 'public/api/v1/portals#show', as: :public_portal_locale` |
|
||||
| 593 | `get 'hc/:slug/:locale/search', to: 'public/api/v1/portals/search#index', as: :portal_search` |
|
||||
| 594 | `get 'hc/:slug/:locale/articles', to: 'public/api/v1/portals/articles#index'` |
|
||||
| 595 | `get 'hc/:slug/:locale/categories', to: 'public/api/v1/portals/categories#index'` |
|
||||
| 596 | `get 'hc/:slug/:locale/categories/:category_slug', to: 'public/api/v1/portals/categories#show', as: :public_portal_category` |
|
||||
| 597 | `get 'hc/:slug/:locale/categories/:category_slug/articles', to: 'public/api/v1/portals/articles#index'` |
|
||||
| 598 | `get 'hc/:slug/articles/:article_slug.png', to: 'public/api/v1/portals/articles#tracking_pixel'` |
|
||||
| 599 | `get 'hc/:slug/articles/:article_slug.md', to: 'public/api/v1/portals/articles#show_markdown', as: :public_portal_article_markdown,` |
|
||||
| 601 | `get 'hc/:slug/articles/:article_slug', to: 'public/api/v1/portals/articles#show', as: :public_portal_article` |
|
||||
| 605 | `resource :app, only: [:index] do` |
|
||||
| 606 | `resources :accounts do` |
|
||||
| 607 | `resources :conversations, only: [:show]` |
|
||||
| 613 | `mount Facebook::Messenger::Server, at: 'bot'` |
|
||||
| 614 | `get 'webhooks/twitter', to: 'api/v1/webhooks#twitter_crc'` |
|
||||
| 615 | `post 'webhooks/twitter', to: 'api/v1/webhooks#twitter_events'` |
|
||||
| 616 | `post 'webhooks/line/:line_channel_id', to: 'webhooks/line#process_payload'` |
|
||||
| 617 | `post 'webhooks/telegram/:bot_token', to: 'webhooks/telegram#process_payload'` |
|
||||
| 618 | `post 'webhooks/sms/:phone_number', to: 'webhooks/sms#process_payload'` |
|
||||
| 619 | `get 'webhooks/whatsapp/:phone_number', to: 'webhooks/whatsapp#verify'` |
|
||||
| 620 | `post 'webhooks/whatsapp/:phone_number', to: 'webhooks/whatsapp#process_payload'` |
|
||||
| 621 | `get 'webhooks/instagram', to: 'webhooks/instagram#verify'` |
|
||||
| 622 | `post 'webhooks/instagram', to: 'webhooks/instagram#events'` |
|
||||
| 623 | `post 'webhooks/tiktok', to: 'webhooks/tiktok#events'` |
|
||||
| 624 | `post 'webhooks/shopify', to: 'webhooks/shopify#events'` |
|
||||
| 626 | `namespace :twitter do` |
|
||||
| 627 | `resource :callback, only: [:show]` |
|
||||
| 630 | `namespace :linear do` |
|
||||
| 631 | `resource :callback, only: [:show]` |
|
||||
| 634 | `namespace :shopify do` |
|
||||
| 635 | `resource :callback, only: [:show]` |
|
||||
| 638 | `namespace :twilio do` |
|
||||
| 639 | `resources :callback, only: [:create]` |
|
||||
| 640 | `resources :delivery_status, only: [:create]` |
|
||||
| 643 | `post 'voice/call/:phone', to: 'voice#call_twiml', as: :voice_call` |
|
||||
| 644 | `post 'voice/status/:phone', to: 'voice#status', as: :voice_status` |
|
||||
| 645 | `post 'voice/conference_status/:phone', to: 'voice#conference_status', as: :voice_conference_status` |
|
||||
| 646 | `post 'voice/recording_status/:phone', to: 'voice#recording_status', as: :voice_recording_status` |
|
||||
| 650 | `get 'microsoft/callback', to: 'microsoft/callbacks#show'` |
|
||||
| 651 | `get 'google/callback', to: 'google/callbacks#show'` |
|
||||
| 652 | `get 'instagram/callback', to: 'instagram/callbacks#show'` |
|
||||
| 653 | `get 'tiktok/callback', to: 'tiktok/callbacks#show'` |
|
||||
| 654 | `get 'notion/callback', to: 'notion/callbacks#show'` |
|
||||
| 657 | `get '.well-known/assetlinks.json' => 'android_app#assetlinks'` |
|
||||
| 658 | `get '.well-known/apple-app-site-association' => 'apple_app#site_association'` |
|
||||
| 659 | `get '.well-known/microsoft-identity-association.json' => 'microsoft#identity_association'` |
|
||||
| 660 | `get '.well-known/cf-custom-hostname-challenge/:id', to: 'custom_domains#verify'` |
|
||||
| 669 | `get 'super_admin/logout', to: 'super_admin/devise/sessions#destroy'` |
|
||||
| 670 | `namespace :super_admin do` |
|
||||
| 673 | `resource :app_config, only: [:show, :create]` |
|
||||
| 674 | `resource :push_diagnostics, only: [:show, :create] do` |
|
||||
| 675 | `post :destroy_subscriptions, on: :collection` |
|
||||
| 679 | `resources :accounts, only: [:index, :new, :create, :show, :edit, :update, :destroy] do` |
|
||||
| 680 | `post :seed, on: :member` |
|
||||
| 681 | `post :reset_cache, on: :member` |
|
||||
| 683 | `resources :users, only: [:index, :new, :create, :show, :edit, :update, :destroy] do` |
|
||||
| 684 | `delete :avatar, on: :member, action: :destroy_avatar` |
|
||||
| 687 | `resources :access_tokens, only: [:index, :show]` |
|
||||
| 688 | `resources :installation_configs, only: [:index, :new, :create, :show, :edit, :update]` |
|
||||
| 689 | `resources :agent_bots, only: [:index, :new, :create, :show, :edit, :update, :destroy] do` |
|
||||
| 690 | `delete :avatar, on: :member, action: :destroy_avatar` |
|
||||
| 692 | `resources :platform_apps, only: [:index, :new, :create, :show, :edit, :update, :destroy]` |
|
||||
| 693 | `resources :platform_banners` |
|
||||
| 694 | `resource :instance_status, only: [:show]` |
|
||||
| 696 | `resource :settings, only: [:show] do` |
|
||||
| 697 | `get :refresh, on: :collection` |
|
||||
| 701 | `resources :account_users, only: [:new, :create, :show, :destroy]` |
|
||||
| 704 | `mount Sidekiq::Web => '/monitoring/sidekiq'` |
|
||||
| 708 | `namespace :installation do` |
|
||||
| 709 | `get 'onboarding', to: 'onboarding#index'` |
|
||||
| 710 | `post 'onboarding', to: 'onboarding#create'` |
|
||||
| 715 | `get '/swagger/*path', to: 'swagger#respond'` |
|
||||
| 716 | `get '/swagger', to: 'swagger#respond'` |
|
||||
| 720 | `resources :widget_tests, only: [:index] unless Rails.env.production?` |
|
||||
| 342 | `namespace :notion do` |
|
||||
| 343 | `resource :authorization, only: [:create]` |
|
||||
| 346 | `namespace :whatsapp do` |
|
||||
| 347 | `resource :authorization, only: [:create]` |
|
||||
| 350 | `resources :webhooks, only: [:index, :create, :update, :destroy]` |
|
||||
| 351 | `namespace :integrations do` |
|
||||
| 352 | `resources :apps, only: [:index, :show]` |
|
||||
| 353 | `resources :hooks, only: [:show, :create, :update, :destroy] do` |
|
||||
| 355 | `post :process_event` |
|
||||
| 358 | `resource :slack, only: [:create, :update, :destroy], controller: 'slack' do` |
|
||||
| 360 | `get :list_all_channels` |
|
||||
| 363 | `resource :dyte, controller: 'dyte', only: [] do` |
|
||||
| 365 | `post :create_a_meeting` |
|
||||
| 366 | `post :add_participant_to_meeting` |
|
||||
| 369 | `resource :shopify, controller: 'shopify', only: [:destroy] do` |
|
||||
| 371 | `post :auth` |
|
||||
| 372 | `get :orders` |
|
||||
| 375 | `resource :linear, controller: 'linear', only: [] do` |
|
||||
| 377 | `delete :destroy` |
|
||||
| 378 | `get :teams` |
|
||||
| 379 | `get :team_entities` |
|
||||
| 380 | `post :create_issue` |
|
||||
| 381 | `post :link_issue` |
|
||||
| 382 | `post :unlink_issue` |
|
||||
| 383 | `get :search_issue` |
|
||||
| 384 | `get :linked_issues` |
|
||||
| 387 | `resource :notion, controller: 'notion', only: [] do` |
|
||||
| 389 | `delete :destroy` |
|
||||
| 393 | `resources :portals do` |
|
||||
| 395 | `patch :archive` |
|
||||
| 396 | `delete :logo` |
|
||||
| 397 | `post :send_instructions` |
|
||||
| 398 | `get :ssl_status` |
|
||||
| 400 | `resources :categories do` |
|
||||
| 401 | `post :reorder, on: :collection` |
|
||||
| 403 | `namespace :articles do` |
|
||||
| 404 | `resource :bulk_actions, only: [] do` |
|
||||
| 405 | `post :translate` |
|
||||
| 406 | `patch :update_status` |
|
||||
| 407 | `patch :update_category` |
|
||||
| 408 | `delete :delete_articles` |
|
||||
| 411 | `resources :articles do` |
|
||||
| 412 | `post :reorder, on: :collection` |
|
||||
| 416 | `resources :upload, only: [:create]` |
|
||||
| 422 | `namespace :integrations do` |
|
||||
| 423 | `resources :webhooks, only: [:create]` |
|
||||
| 427 | `post 'auth/saml_login', to: 'auth#saml_login'` |
|
||||
| 429 | `resource :profile, only: [:show, :update] do` |
|
||||
| 430 | `delete :avatar, on: :collection` |
|
||||
| 432 | `post :availability` |
|
||||
| 433 | `post :auto_offline` |
|
||||
| 434 | `put :set_active_account` |
|
||||
| 435 | `post :resend_confirmation` |
|
||||
| 436 | `post :reset_access_token` |
|
||||
| 440 | `scope module: 'profile' do` |
|
||||
| 441 | `resource :mfa, controller: 'mfa', only: [:show, :create, :destroy] do` |
|
||||
| 442 | `post :verify` |
|
||||
| 443 | `post :backup_codes` |
|
||||
| 445 | `resources :sessions, only: [:index, :destroy]` |
|
||||
| 449 | `resource :notification_subscriptions, only: [:create, :destroy]` |
|
||||
| 451 | `namespace :widget do` |
|
||||
| 452 | `resource :direct_uploads, only: [:create]` |
|
||||
| 453 | `resource :config, only: [:create]` |
|
||||
| 454 | `resources :campaigns, only: [:index]` |
|
||||
| 455 | `resources :events, only: [:create]` |
|
||||
| 456 | `resources :messages, only: [:index, :create, :update]` |
|
||||
| 457 | `resources :conversations, only: [:index, :create] do` |
|
||||
| 459 | `post :destroy_custom_attributes` |
|
||||
| 460 | `post :set_custom_attributes` |
|
||||
| 461 | `post :update_last_seen` |
|
||||
| 462 | `post :toggle_typing` |
|
||||
| 463 | `post :transcript` |
|
||||
| 464 | `get :toggle_status` |
|
||||
| 467 | `resource :contact, only: [:show, :update] do` |
|
||||
| 469 | `post :destroy_custom_attributes` |
|
||||
| 470 | `patch :set_user` |
|
||||
| 473 | `resources :inbox_members, only: [:index]` |
|
||||
| 474 | `resources :labels, only: [:create, :destroy]` |
|
||||
| 475 | `namespace :integrations do` |
|
||||
| 476 | `resource :dyte, controller: 'dyte', only: [] do` |
|
||||
| 478 | `post :add_participant_to_meeting` |
|
||||
| 485 | `namespace :v2 do` |
|
||||
| 486 | `resources :accounts, only: [:create] do` |
|
||||
| 487 | `scope module: :accounts do` |
|
||||
| 488 | `resources :summary_reports, only: [] do` |
|
||||
| 490 | `get :agent` |
|
||||
| 491 | `get :team` |
|
||||
| 492 | `get :inbox` |
|
||||
| 493 | `get :label` |
|
||||
| 494 | `get :channel` |
|
||||
| 497 | `resources :reports, only: [:index] do` |
|
||||
| 499 | `get :summary` |
|
||||
| 500 | `get :bot_summary` |
|
||||
| 501 | `get :agents` |
|
||||
| 502 | `get :inboxes` |
|
||||
| 503 | `get :labels` |
|
||||
| 504 | `get :teams` |
|
||||
| 505 | `get :conversations` |
|
||||
| 506 | `get :conversations_summary` |
|
||||
| 507 | `get :conversation_traffic` |
|
||||
| 508 | `get :drilldown` |
|
||||
| 509 | `get :bot_metrics` |
|
||||
| 510 | `get :inbox_label_matrix` |
|
||||
| 511 | `get :first_response_time_distribution` |
|
||||
| 512 | `get :outgoing_messages_count` |
|
||||
| 515 | `resource :year_in_review, only: [:show]` |
|
||||
| 516 | `resources :live_reports, only: [] do` |
|
||||
| 518 | `get :conversation_metrics` |
|
||||
| 519 | `get :grouped_conversation_metrics` |
|
||||
| 528 | `namespace :enterprise, defaults: { format: 'json' } do` |
|
||||
| 529 | `namespace :api do` |
|
||||
| 530 | `namespace :v1 do` |
|
||||
| 531 | `resources :accounts do` |
|
||||
| 533 | `post :checkout` |
|
||||
| 534 | `post :subscription` |
|
||||
| 535 | `post :select_billing_currency` |
|
||||
| 536 | `get :limits` |
|
||||
| 537 | `post :toggle_deletion` |
|
||||
| 538 | `post :topup_checkout` |
|
||||
| 539 | `get :topup_options` |
|
||||
| 545 | `post 'webhooks/stripe', to: 'webhooks/stripe#process_payload'` |
|
||||
| 546 | `post 'webhooks/firecrawl', to: 'webhooks/firecrawl#process_payload'` |
|
||||
| 552 | `namespace :platform, defaults: { format: 'json' } do` |
|
||||
| 553 | `namespace :api do` |
|
||||
| 554 | `namespace :v1 do` |
|
||||
| 555 | `resources :users, only: [:create, :show, :update, :destroy] do` |
|
||||
| 557 | `get :login` |
|
||||
| 558 | `post :token` |
|
||||
| 561 | `resources :agent_bots, only: [:index, :create, :show, :update, :destroy] do` |
|
||||
| 562 | `delete :avatar, on: :member` |
|
||||
| 564 | `resources :accounts, only: [:index, :create, :show, :update, :destroy] do` |
|
||||
| 565 | `resources :account_users, only: [:index, :create] do` |
|
||||
| 567 | `delete :destroy` |
|
||||
| 570 | `resources :email_channel_migrations, only: [:create]` |
|
||||
| 578 | `namespace :public, defaults: { format: 'json' } do` |
|
||||
| 579 | `namespace :api do` |
|
||||
| 580 | `namespace :v1 do` |
|
||||
| 581 | `resources :inboxes do` |
|
||||
| 582 | `scope module: :inboxes do` |
|
||||
| 583 | `resources :contacts, only: [:create, :show, :update] do` |
|
||||
| 584 | `resources :conversations, only: [:index, :create, :show] do` |
|
||||
| 586 | `post :toggle_status` |
|
||||
| 587 | `post :toggle_typing` |
|
||||
| 588 | `post :update_last_seen` |
|
||||
| 591 | `resources :messages, only: [:index, :create, :update]` |
|
||||
| 597 | `resources :csat_survey, only: [:show, :update]` |
|
||||
| 602 | `get 'hc/:slug', to: 'public/api/v1/portals#show'` |
|
||||
| 603 | `get 'hc/:slug/sitemap.xml', to: 'public/api/v1/portals#sitemap'` |
|
||||
| 604 | `get 'hc/:slug/:locale', to: 'public/api/v1/portals#show', as: :public_portal_locale` |
|
||||
| 605 | `get 'hc/:slug/:locale/search', to: 'public/api/v1/portals/search#index', as: :portal_search` |
|
||||
| 606 | `get 'hc/:slug/:locale/articles', to: 'public/api/v1/portals/articles#index'` |
|
||||
| 607 | `get 'hc/:slug/:locale/categories', to: 'public/api/v1/portals/categories#index'` |
|
||||
| 608 | `get 'hc/:slug/:locale/categories/:category_slug', to: 'public/api/v1/portals/categories#show', as: :public_portal_category` |
|
||||
| 609 | `get 'hc/:slug/:locale/categories/:category_slug/articles', to: 'public/api/v1/portals/articles#index'` |
|
||||
| 610 | `get 'hc/:slug/articles/:article_slug.png', to: 'public/api/v1/portals/articles#tracking_pixel'` |
|
||||
| 611 | `get 'hc/:slug/articles/:article_slug.md', to: 'public/api/v1/portals/articles#show_markdown', as: :public_portal_article_markdown,` |
|
||||
| 613 | `get 'hc/:slug/articles/:article_slug', to: 'public/api/v1/portals/articles#show', as: :public_portal_article` |
|
||||
| 617 | `resource :app, only: [:index] do` |
|
||||
| 618 | `resources :accounts do` |
|
||||
| 619 | `resources :conversations, only: [:show]` |
|
||||
| 625 | `mount Facebook::Messenger::Server, at: 'bot'` |
|
||||
| 626 | `get 'webhooks/twitter', to: 'api/v1/webhooks#twitter_crc'` |
|
||||
| 627 | `post 'webhooks/twitter', to: 'api/v1/webhooks#twitter_events'` |
|
||||
| 628 | `post 'webhooks/line/:line_channel_id', to: 'webhooks/line#process_payload'` |
|
||||
| 629 | `post 'webhooks/telegram/:bot_token', to: 'webhooks/telegram#process_payload'` |
|
||||
| 630 | `post 'webhooks/sms/:phone_number', to: 'webhooks/sms#process_payload'` |
|
||||
| 631 | `get 'webhooks/whatsapp/:phone_number', to: 'webhooks/whatsapp#verify'` |
|
||||
| 632 | `post 'webhooks/whatsapp/:phone_number', to: 'webhooks/whatsapp#process_payload'` |
|
||||
| 633 | `get 'webhooks/instagram', to: 'webhooks/instagram#verify'` |
|
||||
| 634 | `post 'webhooks/instagram', to: 'webhooks/instagram#events'` |
|
||||
| 635 | `post 'webhooks/tiktok', to: 'webhooks/tiktok#events'` |
|
||||
| 636 | `post 'webhooks/shopify', to: 'webhooks/shopify#events'` |
|
||||
| 638 | `namespace :twitter do` |
|
||||
| 639 | `resource :callback, only: [:show]` |
|
||||
| 642 | `namespace :linear do` |
|
||||
| 643 | `resource :callback, only: [:show]` |
|
||||
| 646 | `namespace :shopify do` |
|
||||
| 647 | `resource :callback, only: [:show]` |
|
||||
| 650 | `namespace :twilio do` |
|
||||
| 651 | `resources :callback, only: [:create]` |
|
||||
| 652 | `resources :delivery_status, only: [:create]` |
|
||||
| 655 | `post 'voice/call/:phone', to: 'voice#call_twiml', as: :voice_call` |
|
||||
| 656 | `post 'voice/status/:phone', to: 'voice#status', as: :voice_status` |
|
||||
| 657 | `post 'voice/conference_status/:phone', to: 'voice#conference_status', as: :voice_conference_status` |
|
||||
| 658 | `post 'voice/recording_status/:phone', to: 'voice#recording_status', as: :voice_recording_status` |
|
||||
| 662 | `get 'microsoft/callback', to: 'microsoft/callbacks#show'` |
|
||||
| 663 | `get 'google/callback', to: 'google/callbacks#show'` |
|
||||
| 664 | `get 'instagram/callback', to: 'instagram/callbacks#show'` |
|
||||
| 665 | `get 'tiktok/callback', to: 'tiktok/callbacks#show'` |
|
||||
| 666 | `get 'notion/callback', to: 'notion/callbacks#show'` |
|
||||
| 669 | `get '.well-known/assetlinks.json' => 'android_app#assetlinks'` |
|
||||
| 670 | `get '.well-known/apple-app-site-association' => 'apple_app#site_association'` |
|
||||
| 671 | `get '.well-known/microsoft-identity-association.json' => 'microsoft#identity_association'` |
|
||||
| 672 | `get '.well-known/cf-custom-hostname-challenge/:id', to: 'custom_domains#verify'` |
|
||||
| 681 | `get 'super_admin/logout', to: 'super_admin/devise/sessions#destroy'` |
|
||||
| 682 | `namespace :super_admin do` |
|
||||
| 685 | `resource :app_config, only: [:show, :create]` |
|
||||
| 686 | `resource :push_diagnostics, only: [:show, :create] do` |
|
||||
| 687 | `post :destroy_subscriptions, on: :collection` |
|
||||
| 691 | `resources :accounts, only: [:index, :new, :create, :show, :edit, :update, :destroy] do` |
|
||||
| 692 | `post :seed, on: :member` |
|
||||
| 693 | `post :reset_cache, on: :member` |
|
||||
| 695 | `resources :users, only: [:index, :new, :create, :show, :edit, :update, :destroy] do` |
|
||||
| 696 | `delete :avatar, on: :member, action: :destroy_avatar` |
|
||||
| 699 | `resources :access_tokens, only: [:index, :show]` |
|
||||
| 700 | `resources :installation_configs, only: [:index, :new, :create, :show, :edit, :update]` |
|
||||
| 701 | `resources :agent_bots, only: [:index, :new, :create, :show, :edit, :update, :destroy] do` |
|
||||
| 702 | `delete :avatar, on: :member, action: :destroy_avatar` |
|
||||
| 704 | `resources :platform_apps, only: [:index, :new, :create, :show, :edit, :update, :destroy]` |
|
||||
| 705 | `resources :platform_banners` |
|
||||
| 706 | `resource :instance_status, only: [:show]` |
|
||||
| 708 | `resource :settings, only: [:show] do` |
|
||||
| 709 | `get :refresh, on: :collection` |
|
||||
| 713 | `resources :account_users, only: [:new, :create, :show, :destroy]` |
|
||||
| 716 | `mount Sidekiq::Web => '/monitoring/sidekiq'` |
|
||||
| 720 | `namespace :installation do` |
|
||||
| 721 | `get 'onboarding', to: 'onboarding#index'` |
|
||||
| 722 | `post 'onboarding', to: 'onboarding#create'` |
|
||||
| 727 | `get '/swagger/*path', to: 'swagger#respond'` |
|
||||
| 728 | `get '/swagger', to: 'swagger#respond'` |
|
||||
| 732 | `resources :widget_tests, only: [:index] unless Rails.env.production?` |
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Frontend Smoke Report
|
||||
|
||||
Updated: 2026-06-13T12:24:46Z
|
||||
Updated: 2026-07-13T17:38:17Z
|
||||
|
||||
## Status
|
||||
|
||||
@@ -46,8 +46,8 @@ scripts/parity_frontend_smoke.sh --enterprise-browser-smoke
|
||||
## Reused Chatwoot Frontend
|
||||
|
||||
- URL: http://localhost:3036
|
||||
- Source: `/home/rogee/Projects/gochat/reference/chatwoot`
|
||||
- Command: `(cd /home/rogee/Projects/gochat/reference/chatwoot && env CHATWOOT_API_HOST=http://127.0.0.1:13000 pnpm exec vite --host localhost --port 3036)`
|
||||
- Source: `/home/rogee/Projects/gochat/docs/chatwoot`
|
||||
- Command: `(cd /home/rogee/Projects/gochat/docs/chatwoot && env CHATWOOT_API_HOST=http://127.0.0.1:13000 pnpm exec vite --host localhost --port 3036)`
|
||||
- Log: `/home/rogee/Projects/gochat/.tmp/frontend-smoke-live/chatwoot-vite.log`
|
||||
|
||||
## Seed Path
|
||||
|
||||
@@ -21,6 +21,7 @@ DELETE /api/v1/accounts/:account_id/captain/assistants/:assistant_id
|
||||
DELETE /api/v1/accounts/:account_id/captain/assistants/:assistant_id/documents/:document_id
|
||||
DELETE /api/v1/accounts/:account_id/captain/assistants/:assistant_id/inboxes/:inbox_id
|
||||
DELETE /api/v1/accounts/:account_id/captain/assistants/:assistant_id/scenarios/:scenario_id
|
||||
DELETE /api/v1/accounts/:account_id/captain/auto_reply_rules/:rule_id
|
||||
DELETE /api/v1/accounts/:account_id/captain/copilot_threads/:thread_id
|
||||
DELETE /api/v1/accounts/:account_id/captain/custom_tools/:tool_id
|
||||
DELETE /api/v1/accounts/:account_id/captain/documents/:document_id
|
||||
@@ -114,6 +115,7 @@ DELETE /api/v1/notifications/destroy_all
|
||||
DELETE /api/v1/profile/avatar
|
||||
DELETE /api/v1/profile/mfa
|
||||
DELETE /api/v1/profile/mfa/
|
||||
DELETE /api/v1/profile/sessions/:id
|
||||
DELETE /api/v1/push_subscriptions/:id
|
||||
DELETE /api/v1/widget/labels/:label_id
|
||||
DELETE /auth/sign_out
|
||||
@@ -168,6 +170,7 @@ GET /api/v1/accounts/:account_id/automation_rules/:automation_id
|
||||
GET /api/v1/accounts/:account_id/banners
|
||||
GET /api/v1/accounts/:account_id/cache_keys
|
||||
GET /api/v1/accounts/:account_id/callbacks/register_facebook_page
|
||||
GET /api/v1/accounts/:account_id/calls
|
||||
GET /api/v1/accounts/:account_id/campaigns
|
||||
GET /api/v1/accounts/:account_id/campaigns/
|
||||
GET /api/v1/accounts/:account_id/campaigns/:campaign_id
|
||||
@@ -182,10 +185,16 @@ GET /api/v1/accounts/:account_id/captain/assistants/
|
||||
GET /api/v1/accounts/:account_id/captain/assistants/:assistant_id
|
||||
GET /api/v1/accounts/:account_id/captain/assistants/:assistant_id/documents/
|
||||
GET /api/v1/accounts/:account_id/captain/assistants/:assistant_id/documents/:document_id
|
||||
GET /api/v1/accounts/:account_id/captain/assistants/:assistant_id/drilldown
|
||||
GET /api/v1/accounts/:account_id/captain/assistants/:assistant_id/inboxes
|
||||
GET /api/v1/accounts/:account_id/captain/assistants/:assistant_id/scenarios/
|
||||
GET /api/v1/accounts/:account_id/captain/assistants/:assistant_id/scenarios/:scenario_id
|
||||
GET /api/v1/accounts/:account_id/captain/assistants/:assistant_id/stats
|
||||
GET /api/v1/accounts/:account_id/captain/assistants/:assistant_id/summary
|
||||
GET /api/v1/accounts/:account_id/captain/assistants/tools
|
||||
GET /api/v1/accounts/:account_id/captain/auto_reply_rules
|
||||
GET /api/v1/accounts/:account_id/captain/auto_reply_rules/
|
||||
GET /api/v1/accounts/:account_id/captain/auto_reply_rules/:rule_id
|
||||
GET /api/v1/accounts/:account_id/captain/copilot/stream
|
||||
GET /api/v1/accounts/:account_id/captain/copilot_messages/
|
||||
GET /api/v1/accounts/:account_id/captain/copilot_threads
|
||||
@@ -250,6 +259,8 @@ GET /api/v1/accounts/:account_id/conversations/:conversation_id/whatsapp_calls/:
|
||||
GET /api/v1/accounts/:account_id/conversations/meta
|
||||
GET /api/v1/accounts/:account_id/conversations/search
|
||||
GET /api/v1/accounts/:account_id/conversations/unread_counts
|
||||
GET /api/v1/accounts/:account_id/copilot/config
|
||||
GET /api/v1/accounts/:account_id/copilot/config/
|
||||
GET /api/v1/accounts/:account_id/csat_survey_responses
|
||||
GET /api/v1/accounts/:account_id/csat_survey_responses/
|
||||
GET /api/v1/accounts/:account_id/csat_survey_responses/download
|
||||
@@ -332,9 +343,11 @@ GET /api/v1/accounts/:account_id/microsoft/webhooks
|
||||
GET /api/v1/accounts/:account_id/microsoft_channels/authorization
|
||||
GET /api/v1/accounts/:account_id/notification_settings
|
||||
GET /api/v1/accounts/:account_id/notification_settings/
|
||||
GET /api/v1/accounts/:account_id/notifications
|
||||
GET /api/v1/accounts/:account_id/notifications/
|
||||
GET /api/v1/accounts/:account_id/notifications/:notification_id
|
||||
GET /api/v1/accounts/:account_id/notifications/unread_count
|
||||
GET /api/v1/accounts/:account_id/onboarding/help_center_generation
|
||||
GET /api/v1/accounts/:account_id/platform_apps/
|
||||
GET /api/v1/accounts/:account_id/platform_apps/:platform_app_id
|
||||
GET /api/v1/accounts/:account_id/platform_apps/:platform_app_id/access_tokens
|
||||
@@ -348,6 +361,7 @@ GET /api/v1/accounts/:account_id/portals/:portal_id/articles/
|
||||
GET /api/v1/accounts/:account_id/portals/:portal_id/articles/:article_id
|
||||
GET /api/v1/accounts/:account_id/portals/:portal_id/articles/:article_id/edit
|
||||
GET /api/v1/accounts/:account_id/portals/:portal_id/articles/search
|
||||
GET /api/v1/accounts/:account_id/portals/:portal_id/articles/semantic_search
|
||||
GET /api/v1/accounts/:account_id/portals/:portal_id/articles/status_counts
|
||||
GET /api/v1/accounts/:account_id/portals/:portal_id/categories
|
||||
GET /api/v1/accounts/:account_id/portals/:portal_id/categories/
|
||||
@@ -421,6 +435,7 @@ GET /api/v1/oidc/discovery
|
||||
GET /api/v1/profile
|
||||
GET /api/v1/profile/mfa
|
||||
GET /api/v1/profile/mfa/
|
||||
GET /api/v1/profile/sessions
|
||||
GET /api/v1/push_subscriptions
|
||||
GET /api/v1/saml/login
|
||||
GET /api/v1/saml/metadata
|
||||
@@ -443,6 +458,7 @@ GET /api/v2/accounts/:account_id/reports/bot_summary
|
||||
GET /api/v2/accounts/:account_id/reports/conversation_traffic
|
||||
GET /api/v2/accounts/:account_id/reports/conversations
|
||||
GET /api/v2/accounts/:account_id/reports/conversations_summary
|
||||
GET /api/v2/accounts/:account_id/reports/drilldown
|
||||
GET /api/v2/accounts/:account_id/reports/first_response_time_distribution
|
||||
GET /api/v2/accounts/:account_id/reports/inbox_label_matrix
|
||||
GET /api/v2/accounts/:account_id/reports/inboxes
|
||||
@@ -461,7 +477,9 @@ GET /app/*params
|
||||
GET /auth/validate_token
|
||||
GET /cable
|
||||
GET /enterprise/api/v1/accounts/:account_id/limits
|
||||
GET /enterprise/api/v1/accounts/:account_id/topup_options
|
||||
GET /enterprise/api/v1/limits
|
||||
GET /enterprise/api/v1/topup_options
|
||||
GET /google/callback
|
||||
GET /hc/:slug
|
||||
GET /hc/:slug/:locale
|
||||
@@ -492,6 +510,8 @@ GET /platform/api/v1/apps/:id/permissibles
|
||||
GET /platform/api/v1/apps/search
|
||||
GET /platform/api/v1/banners
|
||||
GET /platform/api/v1/banners/:id
|
||||
GET /platform/api/v1/copilot/config
|
||||
GET /platform/api/v1/copilot/embeddings/reindex
|
||||
GET /platform/api/v1/installation_configs
|
||||
GET /platform/api/v1/installation_configs/:id
|
||||
GET /platform/api/v1/users
|
||||
@@ -509,6 +529,7 @@ GET /public/api/v1/inboxes/:inbox_id/contacts/:contact_id/conversations/:convers
|
||||
GET /shopify/callback
|
||||
GET /tiktok/callback
|
||||
GET /twitter/callback
|
||||
GET /webhooks/fake/:identifier
|
||||
GET /webhooks/instagram
|
||||
GET /webhooks/tiktok/:business_id
|
||||
GET /webhooks/twitter
|
||||
@@ -521,14 +542,18 @@ GET /widget/widget/:website_token/pre_chat_form
|
||||
GET /widget/widget/:website_token/theme_config
|
||||
GET /widget/widget/:website_token/uploads/:upload_uuid
|
||||
GET /ws
|
||||
PATCH /api/v1/accounts/:account_id
|
||||
PATCH /api/v1/accounts/:account_id/agent_bot_inboxes/:agent_bot_inbox_id/status
|
||||
PATCH /api/v1/accounts/:account_id/agent_bots/:agent_bot_id
|
||||
PATCH /api/v1/accounts/:account_id/agent_capacity_policies/:id
|
||||
PATCH /api/v1/accounts/:account_id/agent_capacity_policies/:id/inbox_limits/:limit_id
|
||||
PATCH /api/v1/accounts/:account_id/agents/:agent_id
|
||||
PATCH /api/v1/accounts/:account_id/assignment_policies/:policy_id
|
||||
PATCH /api/v1/accounts/:account_id/automation_rules/:automation_id
|
||||
PATCH /api/v1/accounts/:account_id/campaigns/:campaign_id
|
||||
PATCH /api/v1/accounts/:account_id/canned_responses/:id
|
||||
PATCH /api/v1/accounts/:account_id/captain/assistant_responses/:response_id
|
||||
PATCH /api/v1/accounts/:account_id/captain/assistants/:assistant_id
|
||||
PATCH /api/v1/accounts/:account_id/channels/facebook_channel/:fb_id
|
||||
PATCH /api/v1/accounts/:account_id/companies/:company_id
|
||||
PATCH /api/v1/accounts/:account_id/contacts/:contact_id
|
||||
@@ -560,6 +585,8 @@ PATCH /api/v1/accounts/:account_id/inboxes/:inbox_id/twilio_sms_channels/:tw_id
|
||||
PATCH /api/v1/accounts/:account_id/integrations/hooks/:id
|
||||
PATCH /api/v1/accounts/:account_id/integrations/slack
|
||||
PATCH /api/v1/accounts/:account_id/integrations/slack/
|
||||
PATCH /api/v1/accounts/:account_id/labels/:tag_id
|
||||
PATCH /api/v1/accounts/:account_id/macros/:macro_id
|
||||
PATCH /api/v1/accounts/:account_id/notification_settings
|
||||
PATCH /api/v1/accounts/:account_id/notification_settings/
|
||||
PATCH /api/v1/accounts/:account_id/notifications/:notification_id
|
||||
@@ -601,6 +628,7 @@ POST /api/v1/accounts/:account_id/agent_capacity_policies/
|
||||
POST /api/v1/accounts/:account_id/agent_capacity_policies/:id/inbox_limits
|
||||
POST /api/v1/accounts/:account_id/agent_capacity_policies/:id/users
|
||||
POST /api/v1/accounts/:account_id/agents
|
||||
POST /api/v1/accounts/:account_id/agents/:agent_id/reset_password
|
||||
POST /api/v1/accounts/:account_id/agents/bulk_assign
|
||||
POST /api/v1/accounts/:account_id/agents/bulk_create
|
||||
POST /api/v1/accounts/:account_id/agents/bulk_unassign
|
||||
@@ -633,10 +661,14 @@ POST /api/v1/accounts/:account_id/captain/assistants/:assistant_id/documents/
|
||||
POST /api/v1/accounts/:account_id/captain/assistants/:assistant_id/inboxes
|
||||
POST /api/v1/accounts/:account_id/captain/assistants/:assistant_id/playground
|
||||
POST /api/v1/accounts/:account_id/captain/assistants/:assistant_id/scenarios/
|
||||
POST /api/v1/accounts/:account_id/captain/auto_reply_rules
|
||||
POST /api/v1/accounts/:account_id/captain/auto_reply_rules/
|
||||
POST /api/v1/accounts/:account_id/captain/auto_reply_rules/evaluate
|
||||
POST /api/v1/accounts/:account_id/captain/bulk_actions/
|
||||
POST /api/v1/accounts/:account_id/captain/conversation_insights/:conversation_id/analyze_participants
|
||||
POST /api/v1/accounts/:account_id/captain/conversation_insights/:conversation_id/extract_action_items
|
||||
POST /api/v1/accounts/:account_id/captain/conversation_insights/:conversation_id/suggest_labels
|
||||
POST /api/v1/accounts/:account_id/captain/conversations/:conversation_id/respond
|
||||
POST /api/v1/accounts/:account_id/captain/copilot/suggest_replies
|
||||
POST /api/v1/accounts/:account_id/captain/copilot/summarize
|
||||
POST /api/v1/accounts/:account_id/captain/copilot/translate
|
||||
@@ -650,6 +682,9 @@ POST /api/v1/accounts/:account_id/captain/custom_tools/
|
||||
POST /api/v1/accounts/:account_id/captain/custom_tools/test
|
||||
POST /api/v1/accounts/:account_id/captain/documents/
|
||||
POST /api/v1/accounts/:account_id/captain/documents/:document_id/sync
|
||||
POST /api/v1/accounts/:account_id/captain/message_reports
|
||||
POST /api/v1/accounts/:account_id/captain/rag/index/:response_id
|
||||
POST /api/v1/accounts/:account_id/captain/rag/query
|
||||
POST /api/v1/accounts/:account_id/captain/scenarios/
|
||||
POST /api/v1/accounts/:account_id/captain/tasks/follow_up
|
||||
POST /api/v1/accounts/:account_id/captain/tasks/label_suggestion
|
||||
@@ -740,6 +775,7 @@ POST /api/v1/accounts/:account_id/inboxes/:inbox_id/members
|
||||
POST /api/v1/accounts/:account_id/inboxes/:inbox_id/register_webhook
|
||||
POST /api/v1/accounts/:account_id/inboxes/:inbox_id/reset_secret
|
||||
POST /api/v1/accounts/:account_id/inboxes/:inbox_id/set_agent_bot
|
||||
POST /api/v1/accounts/:account_id/inboxes/:inbox_id/set_inbound_calls
|
||||
POST /api/v1/accounts/:account_id/inboxes/:inbox_id/sync_templates
|
||||
POST /api/v1/accounts/:account_id/inboxes/web_widget
|
||||
POST /api/v1/accounts/:account_id/instagram/authorization
|
||||
@@ -827,7 +863,6 @@ POST /api/v1/auth/mfa/enable
|
||||
POST /api/v1/auth/mfa/verify
|
||||
POST /api/v1/auth/oauth/callback
|
||||
POST /api/v1/auth/refresh
|
||||
POST /api/v1/auth/register
|
||||
POST /api/v1/auth/reset_password
|
||||
POST /api/v1/auth/switch_account
|
||||
POST /api/v1/ldap/login
|
||||
@@ -868,10 +903,12 @@ POST /auth/confirmation
|
||||
POST /auth/password
|
||||
POST /auth/sign_in
|
||||
POST /enterprise/api/v1/accounts/:account_id/checkout
|
||||
POST /enterprise/api/v1/accounts/:account_id/select_billing_currency
|
||||
POST /enterprise/api/v1/accounts/:account_id/subscription
|
||||
POST /enterprise/api/v1/accounts/:account_id/toggle_deletion
|
||||
POST /enterprise/api/v1/accounts/:account_id/topup_checkout
|
||||
POST /enterprise/api/v1/checkout
|
||||
POST /enterprise/api/v1/select_billing_currency
|
||||
POST /enterprise/api/v1/subscription
|
||||
POST /enterprise/api/v1/toggle_deletion
|
||||
POST /enterprise/api/v1/topup_checkout
|
||||
@@ -886,6 +923,8 @@ POST /platform/api/v1/apps
|
||||
POST /platform/api/v1/apps/:id/permissibles
|
||||
POST /platform/api/v1/apps/:id/regenerate_access_token
|
||||
POST /platform/api/v1/banners
|
||||
POST /platform/api/v1/copilot/config/test
|
||||
POST /platform/api/v1/copilot/embeddings/reindex
|
||||
POST /platform/api/v1/installation_configs
|
||||
POST /platform/api/v1/users
|
||||
POST /platform/api/v1/users/:id/login
|
||||
@@ -903,6 +942,7 @@ POST /twilio/voice/call/:phone
|
||||
POST /twilio/voice/conference_status/:phone
|
||||
POST /twilio/voice/recording_status/:phone
|
||||
POST /twilio/voice/status/:phone
|
||||
POST /webhooks/fake/:identifier
|
||||
POST /webhooks/instagram
|
||||
POST /webhooks/line/:line_channel_id
|
||||
POST /webhooks/shopify
|
||||
@@ -938,6 +978,7 @@ PUT /api/v1/accounts/:account_id/canned_responses/:id
|
||||
PUT /api/v1/accounts/:account_id/captain/assistant_responses/:response_id
|
||||
PUT /api/v1/accounts/:account_id/captain/assistants/:assistant_id
|
||||
PUT /api/v1/accounts/:account_id/captain/assistants/:assistant_id/scenarios/:scenario_id
|
||||
PUT /api/v1/accounts/:account_id/captain/auto_reply_rules/:rule_id
|
||||
PUT /api/v1/accounts/:account_id/captain/custom_tools/:tool_id
|
||||
PUT /api/v1/accounts/:account_id/captain/preferences
|
||||
PUT /api/v1/accounts/:account_id/captain/preferences/
|
||||
@@ -952,6 +993,8 @@ PUT /api/v1/accounts/:account_id/conversations/:conversation_id/messages/:messag
|
||||
PUT /api/v1/accounts/:account_id/conversations/:conversation_id/participants
|
||||
PUT /api/v1/accounts/:account_id/conversations/:conversation_id/participants/
|
||||
PUT /api/v1/accounts/:account_id/conversations/:conversation_id/whatsapp_calls/:call_id
|
||||
PUT /api/v1/accounts/:account_id/copilot/config
|
||||
PUT /api/v1/accounts/:account_id/copilot/config/
|
||||
PUT /api/v1/accounts/:account_id/custom_attribute_definitions/:id
|
||||
PUT /api/v1/accounts/:account_id/custom_filters/:id
|
||||
PUT /api/v1/accounts/:account_id/custom_roles/:id
|
||||
@@ -1002,9 +1045,10 @@ PUT /platform/api/v1/agent_bots/:id
|
||||
PUT /platform/api/v1/agent_bots/:id/avatar
|
||||
PUT /platform/api/v1/apps/:id
|
||||
PUT /platform/api/v1/banners/:id
|
||||
PUT /platform/api/v1/copilot/config
|
||||
PUT /platform/api/v1/installation_configs/:id
|
||||
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: 1009
|
||||
TOTAL: 1053
|
||||
|
||||
@@ -3,11 +3,11 @@
|
||||
Generated from:
|
||||
|
||||
- GoChat route dump: `docs/parity/gochat-routes.txt`
|
||||
- Chatwoot route source: `reference/chatwoot/config/routes.rb`
|
||||
- Chatwoot route source: `docs/chatwoot/config/routes.rb`
|
||||
|
||||
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`.
|
||||
This report covers tracked frontend-critical Chatwoot 4.15.1 routes from `docs/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: 435 exact, 0 method-compatible, 9 parameter-compatible, 0 missing out of 444 tracked critical routes.
|
||||
Summary: 447 exact, 0 method-compatible, 9 parameter-compatible, 0 missing out of 456 tracked critical routes.
|
||||
|
||||
## Missing Critical Routes
|
||||
|
||||
@@ -93,6 +93,7 @@ These routes exist with equivalent method and path shape but different parameter
|
||||
| DELETE | `/api/v1/notification_subscriptions` | `/api/v1/notification_subscriptions` | `api/v1/notification_subscriptions#destroy` | `routes.rb:440` | exact |
|
||||
| DELETE | `/api/v1/profile/avatar` | `/api/v1/profile/avatar` | `api/v1/profiles#avatar` | `routes.rb:422` | exact |
|
||||
| DELETE | `/api/v1/profile/mfa` | `/api/v1/profile/mfa` | `api/v1/profile/mfa#destroy` | `routes.rb:433` | exact |
|
||||
| DELETE | `/api/v1/profile/sessions/:id` | `/api/v1/profile/sessions/:id` | `api/v1/profile/sessions#destroy` | `routes.rb:445` | exact |
|
||||
| DELETE | `/api/v1/widget/labels/:label_id` | `/api/v1/widget/labels/:label_id` | `api/v1/widget/labels#destroy` | `routes.rb:464` | exact |
|
||||
| GET | `/.well-known/apple-app-site-association` | `/.well-known/apple-app-site-association` | `apple_app#site_association` | `routes.rb:658` | exact |
|
||||
| GET | `/.well-known/assetlinks.json` | `/.well-known/assetlinks.json` | `android_app#assetlinks` | `routes.rb:657` | exact |
|
||||
@@ -116,14 +117,18 @@ These routes exist with equivalent method and path shape but different parameter
|
||||
| GET | `/api/v1/accounts/:account_id/automation_rules/:automation_id` | `/api/v1/accounts/:account_id/automation_rules/:automation_id` | `api/v1/accounts/automation_rules#show` | `routes.rb:115` | exact |
|
||||
| GET | `/api/v1/accounts/:account_id/cache_keys` | `/api/v1/accounts/:account_id/cache_keys` | `api/v1/accounts#cache_keys` | `routes.rb:50` | exact |
|
||||
| GET | `/api/v1/accounts/:account_id/callbacks/register_facebook_page` | `/api/v1/accounts/:account_id/callbacks/register_facebook_page` | `api/v1/accounts/callbacks#register_facebook_page` | `routes.rb:108-109` | exact |
|
||||
| GET | `/api/v1/accounts/:account_id/calls` | `/api/v1/accounts/:account_id/calls` | `api/v1/accounts/calls#index` | `routes.rb:243` | exact |
|
||||
| GET | `/api/v1/accounts/:account_id/canned_responses/` | `/api/v1/accounts/:account_id/canned_responses/` | `api/v1/accounts/canned_responses#index` | `routes.rb:114` | exact |
|
||||
| GET | `/api/v1/accounts/:account_id/captain/assistant_responses/` | `/api/v1/accounts/:account_id/captain/assistant_responses/` | `api/v1/accounts/captain/assistant_responses#index` | `routes.rb:74` | exact |
|
||||
| GET | `/api/v1/accounts/:account_id/captain/assistant_responses/:response_id` | `/api/v1/accounts/:account_id/captain/assistant_responses/:response_id` | `api/v1/accounts/captain/assistant_responses#show` | `routes.rb:74` | exact |
|
||||
| GET | `/api/v1/accounts/:account_id/captain/assistants/` | `/api/v1/accounts/:account_id/captain/assistants/` | `api/v1/accounts/captain/assistants#index` | `routes.rb:64` | exact |
|
||||
| GET | `/api/v1/accounts/:account_id/captain/assistants/:assistant_id` | `/api/v1/accounts/:account_id/captain/assistants/:assistant_id` | `api/v1/accounts/captain/assistants#show` | `routes.rb:64` | exact |
|
||||
| GET | `/api/v1/accounts/:account_id/captain/assistants/:assistant_id/drilldown` | `/api/v1/accounts/:account_id/captain/assistants/:assistant_id/drilldown` | `api/v1/accounts/captain/assistants#drilldown` | `routes.rb:71` | exact |
|
||||
| GET | `/api/v1/accounts/:account_id/captain/assistants/:assistant_id/inboxes` | `/api/v1/accounts/:account_id/captain/assistants/:assistant_id/inboxes` | `api/v1/accounts/captain/assistants/inboxes#index` | `routes.rb:71` | exact |
|
||||
| GET | `/api/v1/accounts/:account_id/captain/assistants/:assistant_id/scenarios/` | `/api/v1/accounts/:account_id/captain/assistants/:assistant_id/scenarios/` | `api/v1/accounts/captain/assistants/scenarios#index` | `routes.rb:72` | exact |
|
||||
| GET | `/api/v1/accounts/:account_id/captain/assistants/:assistant_id/scenarios/:scenario_id` | `/api/v1/accounts/:account_id/captain/assistants/:assistant_id/scenarios/:scenario_id` | `api/v1/accounts/captain/assistants/scenarios#show` | `routes.rb:72` | exact |
|
||||
| GET | `/api/v1/accounts/:account_id/captain/assistants/:assistant_id/stats` | `/api/v1/accounts/:account_id/captain/assistants/:assistant_id/stats` | `api/v1/accounts/captain/assistants#stats` | `routes.rb:69` | exact |
|
||||
| GET | `/api/v1/accounts/:account_id/captain/assistants/:assistant_id/summary` | `/api/v1/accounts/:account_id/captain/assistants/:assistant_id/summary` | `api/v1/accounts/captain/assistants#summary` | `routes.rb:70` | exact |
|
||||
| GET | `/api/v1/accounts/:account_id/captain/assistants/tools` | `/api/v1/accounts/:account_id/captain/assistants/tools` | `api/v1/accounts/captain/assistants#tools` | `routes.rb:69` | exact |
|
||||
| GET | `/api/v1/accounts/:account_id/captain/copilot_threads/` | `/api/v1/accounts/:account_id/captain/copilot_threads/` | `api/v1/accounts/captain/copilot_threads#index` | `routes.rb:76` | exact |
|
||||
| GET | `/api/v1/accounts/:account_id/captain/copilot_threads/:thread_id/copilot_messages/` | `/api/v1/accounts/:account_id/captain/copilot_threads/:thread_id/copilot_messages/` | `api/v1/accounts/captain/copilot_messages#index` | `routes.rb:77` | exact |
|
||||
@@ -191,6 +196,7 @@ These routes exist with equivalent method and path shape but different parameter
|
||||
| GET | `/api/v1/accounts/:account_id/notification_settings/` | `/api/v1/accounts/:account_id/notification_settings/` | `api/v1/accounts/notification_settings#show` | `routes.rb:293` | exact |
|
||||
| GET | `/api/v1/accounts/:account_id/notifications/` | `/api/v1/accounts/:account_id/notifications/` | `api/v1/accounts/notifications#index` | `routes.rb:283` | exact |
|
||||
| GET | `/api/v1/accounts/:account_id/notifications/unread_count` | `/api/v1/accounts/:account_id/notifications/unread_count` | `api/v1/accounts/notifications#unread_count` | `routes.rb:286` | exact |
|
||||
| GET | `/api/v1/accounts/:account_id/onboarding/help_center_generation` | `/api/v1/accounts/:account_id/onboarding/help_center_generation` | `api/v1/accounts/onboardings#help_center_generation` | `routes.rb:59` | exact |
|
||||
| GET | `/api/v1/accounts/:account_id/portals` | `/api/v1/accounts/:account_id/portals` | `api/v1/accounts/portals#index` | `routes.rb:385` | exact |
|
||||
| GET | `/api/v1/accounts/:account_id/portals/:portal_id` | `/api/v1/accounts/:account_id/portals/:portal_id` | `api/v1/accounts/portals#show` | `routes.rb:385` | exact |
|
||||
| GET | `/api/v1/accounts/:account_id/portals/:portal_id/articles` | `/api/v1/accounts/:account_id/portals/:portal_id/articles` | `api/v1/accounts/articles#index` | `routes.rb:403` | exact |
|
||||
@@ -213,6 +219,7 @@ These routes exist with equivalent method and path shape but different parameter
|
||||
| GET | `/api/v1/accounts/:account_id/whatsapp_calls/:id` | `/api/v1/accounts/:account_id/whatsapp_calls/:id` | `api/v1/accounts/whatsapp_calls#show` | `routes.rb:237` | exact |
|
||||
| GET | `/api/v1/profile` | `/api/v1/profile` | `api/v1/profiles#show` | `routes.rb:421` | exact |
|
||||
| GET | `/api/v1/profile/mfa` | `/api/v1/profile/mfa` | `api/v1/profile/mfa#show` | `routes.rb:433` | exact |
|
||||
| GET | `/api/v1/profile/sessions` | `/api/v1/profile/sessions` | `api/v1/profile/sessions#index` | `routes.rb:445` | exact |
|
||||
| GET | `/api/v1/widget/campaigns` | `/api/v1/widget/campaigns` | `api/v1/widget/campaigns#index` | `routes.rb:445` | exact |
|
||||
| GET | `/api/v1/widget/contact` | `/api/v1/widget/contact` | `api/v1/widget/contact#show` | `routes.rb:458` | exact |
|
||||
| GET | `/api/v1/widget/conversations` | `/api/v1/widget/conversations` | `api/v1/widget/conversations#index` | `routes.rb:448` | exact |
|
||||
@@ -228,6 +235,7 @@ These routes exist with equivalent method and path shape but different parameter
|
||||
| GET | `/api/v2/accounts/:account_id/reports/conversation_traffic` | `/api/v2/accounts/:account_id/reports/conversation_traffic` | `api/v2/accounts/reports#conversation_traffic` | `routes.rb:499` | exact |
|
||||
| GET | `/api/v2/accounts/:account_id/reports/conversations` | `/api/v2/accounts/:account_id/reports/conversations` | `api/v2/accounts/reports#conversations` | `routes.rb:497` | exact |
|
||||
| GET | `/api/v2/accounts/:account_id/reports/conversations_summary` | `/api/v2/accounts/:account_id/reports/conversations_summary` | `api/v2/accounts/reports#conversations_summary` | `routes.rb:498` | exact |
|
||||
| GET | `/api/v2/accounts/:account_id/reports/drilldown` | `/api/v2/accounts/:account_id/reports/drilldown` | `api/v2/accounts/reports#drilldown` | `routes.rb:508` | exact |
|
||||
| GET | `/api/v2/accounts/:account_id/reports/first_response_time_distribution` | `/api/v2/accounts/:account_id/reports/first_response_time_distribution` | `api/v2/accounts/reports#first_response_time_distribution` | `routes.rb:502` | exact |
|
||||
| GET | `/api/v2/accounts/:account_id/reports/inbox_label_matrix` | `/api/v2/accounts/:account_id/reports/inbox_label_matrix` | `api/v2/accounts/reports#inbox_label_matrix` | `routes.rb:501` | exact |
|
||||
| GET | `/api/v2/accounts/:account_id/reports/inboxes` | `/api/v2/accounts/:account_id/reports/inboxes` | `api/v2/accounts/reports#inboxes` | `routes.rb:494` | exact |
|
||||
@@ -244,6 +252,7 @@ These routes exist with equivalent method and path shape but different parameter
|
||||
| GET | `/app` | `/app` | `dashboard#index` | `routes.rb:19` | exact |
|
||||
| GET | `/app/*params` | `/app/*params` | `dashboard#index` | `routes.rb:20` | exact |
|
||||
| GET | `/enterprise/api/v1/accounts/:account_id/limits` | `/enterprise/api/v1/accounts/:account_id/limits` | `enterprise/api/v1/accounts#limits` | `routes.rb:525` | exact |
|
||||
| GET | `/enterprise/api/v1/accounts/:account_id/topup_options` | `/enterprise/api/v1/accounts/:account_id/topup_options` | `enterprise/api/v1/accounts#topup_options` | `routes.rb:539` | exact |
|
||||
| GET | `/google/callback` | `/google/callback` | `google/callbacks#show` | `routes.rb:650` | exact |
|
||||
| GET | `/hc/:slug` | `/hc/:slug` | `public/api/v1/portals#show` | `routes.rb:590` | exact |
|
||||
| GET | `/hc/:slug/:locale` | `/hc/:slug/:locale` | `public/api/v1/portals#show` | `routes.rb:592` | exact |
|
||||
@@ -318,6 +327,7 @@ These routes exist with equivalent method and path shape but different parameter
|
||||
| POST | `/api/v1/accounts/:account_id/captain/custom_tools/test` | `/api/v1/accounts/:account_id/captain/custom_tools/test` | `api/v1/accounts/captain/custom_tools#test` | `routes.rb:80` | exact |
|
||||
| POST | `/api/v1/accounts/:account_id/captain/documents/` | `/api/v1/accounts/:account_id/captain/documents/` | `api/v1/accounts/captain/documents#create` | `routes.rb:82` | exact |
|
||||
| POST | `/api/v1/accounts/:account_id/captain/documents/:document_id/sync` | `/api/v1/accounts/:account_id/captain/documents/:document_id/sync` | `api/v1/accounts/captain/documents#sync` | `routes.rb:83` | exact |
|
||||
| POST | `/api/v1/accounts/:account_id/captain/message_reports` | `/api/v1/accounts/:account_id/captain/message_reports` | `api/v1/accounts/captain/message_reports#create` | `routes.rb:80` | exact |
|
||||
| POST | `/api/v1/accounts/:account_id/captain/tasks/follow_up` | `/api/v1/accounts/:account_id/captain/tasks/follow_up` | `api/v1/accounts/captain/tasks#follow_up` | `routes.rb:90` | exact |
|
||||
| POST | `/api/v1/accounts/:account_id/captain/tasks/label_suggestion` | `/api/v1/accounts/:account_id/captain/tasks/label_suggestion` | `api/v1/accounts/captain/tasks#label_suggestion` | `routes.rb:89` | exact |
|
||||
| POST | `/api/v1/accounts/:account_id/captain/tasks/reply_suggestion` | `/api/v1/accounts/:account_id/captain/tasks/reply_suggestion` | `api/v1/accounts/captain/tasks#reply_suggestion` | `routes.rb:88` | exact |
|
||||
@@ -359,6 +369,7 @@ These routes exist with equivalent method and path shape but different parameter
|
||||
| POST | `/api/v1/accounts/:account_id/inboxes/:inbox_id/register_webhook` | `/api/v1/accounts/:account_id/inboxes/:inbox_id/register_webhook` | `api/v1/accounts/inboxes#register_webhook` | `routes.rb:260` | exact |
|
||||
| POST | `/api/v1/accounts/:account_id/inboxes/:inbox_id/reset_secret` | `/api/v1/accounts/:account_id/inboxes/:inbox_id/reset_secret` | `api/v1/accounts/inboxes#reset_secret` | `routes.rb:262` | exact |
|
||||
| POST | `/api/v1/accounts/:account_id/inboxes/:inbox_id/set_agent_bot` | `/api/v1/accounts/:account_id/inboxes/:inbox_id/set_agent_bot` | `api/v1/accounts/inboxes#set_agent_bot` | `routes.rb:256` | exact |
|
||||
| POST | `/api/v1/accounts/:account_id/inboxes/:inbox_id/set_inbound_calls` | `/api/v1/accounts/:account_id/inboxes/:inbox_id/set_inbound_calls` | `api/v1/accounts/inboxes#set_inbound_calls` | `routes.rb:275` | exact |
|
||||
| POST | `/api/v1/accounts/:account_id/inboxes/:inbox_id/sync_templates` | `/api/v1/accounts/:account_id/inboxes/:inbox_id/sync_templates` | `api/v1/accounts/inboxes#sync_templates` | `routes.rb:258` | exact |
|
||||
| POST | `/api/v1/accounts/:account_id/instagram/authorization` | `/api/v1/accounts/:account_id/instagram/authorization` | `api/v1/accounts/instagram/authorizations#create` | `routes.rb:327` | exact |
|
||||
| POST | `/api/v1/accounts/:account_id/integrations/dyte/add_participant_to_meeting` | `/api/v1/accounts/:account_id/integrations/dyte/add_participant_to_meeting` | `api/v1/accounts/integrations/dyte#add_participant_to_meeting` | `routes.rb:358` | exact |
|
||||
@@ -422,6 +433,7 @@ These routes exist with equivalent method and path shape but different parameter
|
||||
| POST | `/api/v1/widget/messages` | `/api/v1/widget/messages` | `api/v1/widget/messages#create` | `routes.rb:447` | exact |
|
||||
| POST | `/api/v2/accounts/` | `/api/v2/accounts/` | `api/v2/accounts#create` | `routes.rb:478` | exact |
|
||||
| POST | `/enterprise/api/v1/accounts/:account_id/checkout` | `/enterprise/api/v1/accounts/:account_id/checkout` | `enterprise/api/v1/accounts#checkout` | `routes.rb:523` | exact |
|
||||
| POST | `/enterprise/api/v1/accounts/:account_id/select_billing_currency` | `/enterprise/api/v1/accounts/:account_id/select_billing_currency` | `enterprise/api/v1/accounts#select_billing_currency` | `routes.rb:535` | exact |
|
||||
| POST | `/enterprise/api/v1/accounts/:account_id/subscription` | `/enterprise/api/v1/accounts/:account_id/subscription` | `enterprise/api/v1/accounts#subscription` | `routes.rb:524` | exact |
|
||||
| POST | `/enterprise/api/v1/accounts/:account_id/toggle_deletion` | `/enterprise/api/v1/accounts/:account_id/toggle_deletion` | `enterprise/api/v1/accounts#toggle_deletion` | `routes.rb:526` | exact |
|
||||
| POST | `/enterprise/api/v1/accounts/:account_id/topup_checkout` | `/enterprise/api/v1/accounts/:account_id/topup_checkout` | `enterprise/api/v1/accounts#topup_checkout` | `routes.rb:527` | exact |
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
# Chatwoot Parity Development Plan
|
||||
|
||||
Updated: 2026-06-07
|
||||
Updated: 2026-07-14
|
||||
|
||||
## Goal
|
||||
|
||||
Build GoChat as a Go backend that can directly reuse the frontend from `reference/chatwoot`. The backend API, data contracts, side effects, permissions, and runtime behavior must match the local `reference/chatwoot` repository first. Existing docs are secondary when they conflict with the reference implementation.
|
||||
Build GoChat as a Go backend that can directly reuse the Chatwoot frontend. The backend API, data contracts, side effects, permissions, and runtime behavior must match the current read-only upstream snapshot under `docs/chatwoot` first. Existing docs and the older `reference/chatwoot` 4.14.1 checkout are secondary when they conflict with the current 4.15.1 snapshot.
|
||||
|
||||
## Confirmed Decisions
|
||||
|
||||
- Frontend: reuse Chatwoot frontend directly. Backend compatibility is mandatory.
|
||||
- Baseline: `reference/chatwoot` is the source of truth for routes, controllers, models, serializers, jobs, and service behavior.
|
||||
- Baseline: `docs/chatwoot` 4.15.1 is the current source of truth for routes, controllers, models, serializers, jobs, and service behavior. `reference/chatwoot` 4.14.1 remains a regression fixture only.
|
||||
- Immediate order: keep `go test ./...` green first, then deepen Chatwoot behavior parity.
|
||||
- Search: final implementation must use Meilisearch. DB/LIKE search is not acceptable as the final engine.
|
||||
- Enterprise scope: exclude SSO/SAML/LDAP/OIDC. Include the remaining paid features already present in planning and code: SLA, Audit, CustomRole, AgentCapacity, Captain/Copilot, CSAT, InboxLimit, automation, macros, assignment policies, and related limits/workflows.
|
||||
@@ -20,13 +20,69 @@ This file is the only active execution tracker. The `.hermes/plans/*` files and
|
||||
|
||||
| Decision axis | Locked rule | Tracking consequence |
|
||||
| --- | --- | --- |
|
||||
| Product surface | Reuse the `reference/chatwoot` frontend without adapters. | Backend routes, payloads, status codes, pagination, errors, permissions, jobs, and realtime side effects must be Chatwoot-compatible. |
|
||||
| Reference order | Local `reference/chatwoot` beats prior docs and assumptions. | Every parity slice records inspected reference controllers, Jbuilder views, models, jobs, and frontend API clients. |
|
||||
| Product surface | Reuse the current `docs/chatwoot` frontend without adapters. | Backend routes, payloads, status codes, pagination, errors, permissions, jobs, and realtime side effects must be Chatwoot-compatible. |
|
||||
| Reference order | Local `docs/chatwoot` 4.15.1 beats the 4.14.1 regression fixture, prior docs, and assumptions. | Every parity slice records inspected upstream controllers, Jbuilder views, models, jobs, and frontend API clients. |
|
||||
| Test order | Keep the Go suite green before expanding behavior. | A checkpoint cannot close without focused tests, `go test ./...`, and `git diff --check`; docs-only checkpoints require at least `git diff --check`. |
|
||||
| Search | Meilisearch is mandatory for final behavior. | DB search can exist only as explicit local fallback and must not be the production parity path. |
|
||||
| Enterprise | SSO/SAML/LDAP/OIDC are out. All other paid features in this tracker are in. | SLA, Audit, CustomRole, AgentCapacity, Captain/Copilot, CSAT, InboxLimit, automation, macros, assignment policies, and limits stay tracked until verified or explicitly split. |
|
||||
| Commit hygiene | Code, tests, generated route artifacts, and tracker updates land together. | If a route changes, regenerate `docs/parity/gochat-routes.txt`; if the tracked set changes, regenerate `docs/parity/route-parity.md`. |
|
||||
|
||||
## 2026-07-13 Chatwoot 4.15.1 Alignment Execution Plan
|
||||
|
||||
### Completion contract
|
||||
|
||||
This alignment cycle is complete only when every row below is implemented, its focused contract tests pass, the generated route manifest is derived from the 4.15.1 source rather than the old hard-coded 4.14 list, full backend tests and the bundled frontend build pass, and an unmodified `docs/chatwoot` frontend completes the enterprise browser smoke without proxied API 4xx/5xx failures. Internal Go tables may remain idiomatic, but every frontend-visible request, response, status, permission, side effect, and realtime payload must match Chatwoot 4.15.1.
|
||||
|
||||
| ID | Missing or drifted contract | GoChat owner | Required behavior | Focused acceptance | End-to-end acceptance | Status |
|
||||
| --- | --- | --- | --- | --- | --- | --- | --- |
|
||||
| C415.1 | `GET /api/v1/accounts/:account_id/onboarding/help_center_generation` | account handler/service | Return `{ generation_id, state, articles_count, categories_count }`; derive counts from the account-scoped portal generation when present and stable nil/zero values otherwise. | Handler test freezes exact raw payload, account scope, and admin permission. | 4.15.1 onboarding status component polls successfully without 404. | Verified |
|
||||
| C415.2 | Captain assistant `stats`, `summary`, and `drilldown` | Captain handler/service | Match range/timezone parsing, metrics payload, summary `{ message }` or 422 error, supported drilldown metrics, and pagination. | Focused handler/service fixtures for all three routes, invalid metric, account scope, and empty data. | Captain overview page and drilldown drawer load without API errors. | Verified |
|
||||
| C415.3 | `POST /api/v1/accounts/:account_id/captain/message_reports` | Captain handler/service/model | Persist account/conversation/message/user/reason/description; permit only Captain messages; return the 4.15.1 Jbuilder shape. | Migration plus create, invalid sender, foreign account, and validation tests. | Report-Captain-message dialog submits successfully. | Verified |
|
||||
| C415.4 | `GET /api/v1/accounts/:account_id/calls` | call handler/service | Return the current user's active voice calls using the upstream `_call` serializer, including provider and conversation/contact data. | Empty/list/account/user scope serializer fixtures. | Dashboard call store boot path has no 404 and incoming call card remains functional. | Verified |
|
||||
| C415.5 | `POST /api/v1/accounts/:account_id/inboxes/:inbox_id/set_inbound_calls` | inbox handler/service | Validate voice-capable WhatsApp/Twilio inbox, persist `channel_config.inbound_calls_enabled`, and return empty 200 while invalid inboxes return Chatwoot-compatible 422. | Enable/disable, unsupported channel, permission, persistence, cache/event tests. | Voice configuration toggles persist after reload. | Verified |
|
||||
| C415.6 | Profile session index/destroy | profile handler/service/model + auth lifecycle | Track Devise-compatible client sessions, list exact browser/device/location/timestamps/current fields, reject current-session revocation with 422, revoke another client token/session with empty 200. | Migration, login/validate activity, list ordering/current flag, destroy/current guard tests. | Active Sessions page lists and revokes another session without 404. | Verified |
|
||||
| C415.7 | `GET /api/v2/accounts/:account_id/reports/drilldown` | analytics handler/service | Match metric/bucket/range/type/id/group/business-hours/timezone/page/per-page contract and paginated conversation payload. | Supported metrics, invalid metric, pagination, timezone, and account scope tests. | Reports drilldown drawer loads rows and paginates. | Verified |
|
||||
| C415.8 | Billing currency selection and top-up options | enterprise account handler/service | Persist valid unlocked currency, reject invalid/locked selection, expose `{ id, currency, options }`, and include `billing_currency` in account payload when set. | Literal and account-scoped route tests for success/error/no-mutation; serializer test. | Billing currency picker and purchase credits modal load without API errors. | Verified |
|
||||
| C415.9 | `assignable_agents?include_agent_bots=true` and `assignee_type` assignment | assignable/conversation handlers and services | Return User and AgentBot owners with `assignee_type`; assignment must set exactly one of user/bot assignee, validate account accessibility, and serialize the selected resource. | User/bot list and assignment fixtures, invalid/foreign bot, unassign and mutual-exclusion tests. | Conversation assignee dropdown lists bots and persists a bot assignment. | Verified |
|
||||
| C415.10 | 4.15.1 serializer additions | account, help-center, inbox, team, assignment-policy, SLA serializers/models | Add `icon_color`, `locale_translations`, `billing_currency`, `help_center_generation_id`, `inbound_calls_enabled`, `exclude_older_than_hours`, and SLA due-at fields with upstream null/conditional behavior. | Migration and owner-slice serializer/request round-trip tests for every field. | Categories/teams/help-center/billing/voice/SLA screens render and retain values. | Verified |
|
||||
| C415.11 | Route parity source drift | `cmd/route_parity`, parity artifacts | Track the current 4.15.1 additions above and fail CI when a frontend-critical route is absent; generated report must name `docs/chatwoot/config/routes.rb`. | Route-parity unit test proves each new route is tracked and a removed route is reported missing. | Fresh dump/report shows zero missing tracked 4.15.1 frontend routes. | Verified |
|
||||
| C415.12 | Clean 4.15.1 direct-connect gate | smoke harness | Default the upstream smoke source to `docs/chatwoot`, cover the new pages/API calls, WebSocket event delivery, widget boot, and assert no proxied API 4xx/5xx. | Shell syntax, prerequisite check, browser report schema, and explicit new-path assertions. | `scripts/parity_frontend_smoke.sh --enterprise-browser-smoke` passes against PostgreSQL, Redis, Meilisearch, GoChat, and unmodified 4.15.1 Vite. | Verified |
|
||||
|
||||
### 2026-07-14 verification outcome
|
||||
|
||||
All twelve tracked Chatwoot 4.15.1 alignment rows are implemented and verified. The unmodified frontend is directly connectable for the exercised core and enterprise surface; the focused tests below cover the upstream semantics that are not fully observable from the browser gate alone. This is a compatibility claim for the tracked frontend contract, not a claim that every third-party provider integration or unexercised Chatwoot server endpoint has been reproduced.
|
||||
|
||||
| ID | Evidence | Remaining compatibility boundary |
|
||||
| --- | --- | --- |
|
||||
| C415.1 | `TestHelpCenterGeneration_ExactRawPayload`; live API smoke passed. | None found in the tracked contract. |
|
||||
| C415.2 | `TestCaptainAssistantSummaryCachesOnlySuccessfulLLMResponses`, `TestCaptainAssistantStatsAndDrilldownUseExactResolvedReopenCohort`, and `TestCaptainAssistantHandler_OverviewDrilldownAndMessageReportContracts`; Captain overview browser checks passed. | None found in the tracked summary/cache/error, resolved/reopen cohort, or frontend contract. |
|
||||
| C415.3 | Same focused Captain contract test; live message-report create returned the 4.15.1 shape. | None found in the tracked request/persistence/serializer contract. |
|
||||
| C415.4 | `TestWhatsAppCallHandler_IndexMatchesChatwootCallsEnvelope`, `TestWhatsAppCallService_IndexScopesAgentsToHandledCalls`, and `TestWhatsAppCallService_IndexMatchesConversationAndReportManagerVisibility`; live calls index passed. | None found in the tracked serializer, inbox membership, accepted-agent, administrator, or `report_manage` visibility contract. |
|
||||
| C415.5 | `TestInboxService_SetInboundCalls_PersistsVoiceInboxSetting`, `TestInboxService_SetInboundCalls_RejectsUnsupportedInbox`; live disable/enable and voice-settings browser checks passed. | None found in the tracked frontend contract. |
|
||||
| C415.6 | `TestSessions_IndexAndDestroyMatchChatwootContract` and `TestRefreshTokenStoreScopesTokensByClient`; Active Sessions browser request passed. | None found in the tracked per-client row, refresh-token, current-session guard, or other-session revocation lifecycle. |
|
||||
| C415.7 | `TestDrilldown_ReturnsChatwootMessageRecordEnvelope`, `TestDrilldown_PaginatesAndScopesAccount`, `TestDrilldown_FirstResponseInfersMessageAndMetricValue`, and `TestDrilldown_DimensionsCountStrategiesAndTimezoneBucketsMatchChatwoot`; live drilldown passed. | None found in the tracked dimension scope, distinct strategy, bot handoff exclusion, invalid grouping, timezone bucket, pagination, or envelope contract. |
|
||||
| C415.8 | `TestEnterpriseAccountBillingCurrencyAndTopupOptions`, `TestEnterpriseAccountBillingCurrencyRejectsInvalidAndLockedWithoutMutation`, `TestEnterpriseAccountSubscriptionRequiresCurrencySelectionForNewBRLAccount`, `TestEnterpriseBillingWorkerCreatesBRLCustomerAndSubscription`, and `TestEnterpriseBillingWorkerAlwaysClearsCreationFlagOnFailure`; billing browser checks passed. | None found in the tracked feature gate, locale selection, price fallback, durable customer/subscription creation, persisted Stripe attributes, or ensure-style flag cleanup contract. |
|
||||
| C415.9 | `TestList_IncludeAgentBotsAddsTypedOwners`, `TestAssignAgentBot_MutuallyExclusiveAndAccountScoped`; live bot assignment and restore passed. | None found in the tracked frontend contract. |
|
||||
| C415.10 | `TestChatwoot415SerializerFields`, `TestChatwoot415AssignmentPolicyFieldRoundTrip`, `TestChatwoot415CaptainMessageSenderSerializer`; affected live pages passed. | None found in the tracked serializer fields. |
|
||||
| C415.11 | `TestChatwoot415RoutesAreTrackedAndReportedMissing`; generated report has 447 exact, 9 parameter-compatible, and 0 missing routes out of 456 tracked critical routes. | Parameter-compatible entries use equivalent Gin parameter names/path dispatch; they are not missing URLs, but should stay visible in the parity report. |
|
||||
| C415.12 | `scripts/parity_frontend_smoke.sh --enterprise-browser-smoke` passed against PostgreSQL, Redis, Meilisearch, GoChat, Chrome, and unmodified `docs/chatwoot`; browser report status is `passed` with 59 passed checks and no failed frontend API requests. | The gate proves the covered frontend surface, not every possible Chatwoot workflow or third-party provider callback. |
|
||||
|
||||
### Required final verification
|
||||
|
||||
```bash
|
||||
cd backend
|
||||
GOCACHE=/tmp/gochat-gocache GOMODCACHE=/tmp/gochat-gomodcache go test ./internal/handler/api/v1 ./internal/service ./internal/router ./cmd/route_parity -count=1
|
||||
GOCACHE=/tmp/gochat-gocache GOMODCACHE=/tmp/gochat-gomodcache go test ./...
|
||||
GOCACHE=/tmp/gochat-gocache GOMODCACHE=/tmp/gochat-gomodcache go run ./cmd/dump_routes > ../docs/parity/gochat-routes.txt
|
||||
GOCACHE=/tmp/gochat-gocache GOMODCACHE=/tmp/gochat-gomodcache go run ./cmd/route_parity -chatwoot ../docs/chatwoot/config/routes.rb
|
||||
cd ..
|
||||
pnpm -C frontend build
|
||||
CHATWOOT_DIR="$PWD/docs/chatwoot" backend/scripts/parity_frontend_smoke.sh --enterprise-browser-smoke
|
||||
git diff --check
|
||||
```
|
||||
|
||||
Every C415 row is now `Verified` with focused-test evidence. The final direct-connect claim still requires the current full suite, frontend build, route report, and unmodified 4.15.1 browser smoke to remain green together.
|
||||
|
||||
Hermes plan landing map:
|
||||
|
||||
| Hermes source | Landed tracker area | Remaining rule |
|
||||
|
||||
Reference in New Issue
Block a user