671 lines
71 KiB
Go
671 lines
71 KiB
Go
package main
|
|
|
|
import (
|
|
"bufio"
|
|
"flag"
|
|
"fmt"
|
|
"os"
|
|
"regexp"
|
|
"sort"
|
|
"strings"
|
|
)
|
|
|
|
type route struct {
|
|
Method string
|
|
Path string
|
|
Controller string
|
|
Source string
|
|
}
|
|
|
|
type sourceDecl struct {
|
|
Line int
|
|
Text string
|
|
}
|
|
|
|
var criticalRoutes = []route{
|
|
{Method: "GET", Path: "/app", Controller: "dashboard#index", Source: "routes.rb:19"},
|
|
{Method: "GET", Path: "/app/*params", Controller: "dashboard#index", Source: "routes.rb:20"},
|
|
{Method: "GET", Path: "/.well-known/assetlinks.json", Controller: "android_app#assetlinks", Source: "routes.rb:657"},
|
|
{Method: "GET", Path: "/.well-known/apple-app-site-association", Controller: "apple_app#site_association", Source: "routes.rb:658"},
|
|
{Method: "GET", Path: "/.well-known/microsoft-identity-association.json", Controller: "microsoft#identity_association", Source: "routes.rb:659"},
|
|
{Method: "GET", Path: "/.well-known/cf-custom-hostname-challenge/:id", Controller: "custom_domains#verify", Source: "routes.rb:660"},
|
|
{Method: "POST", Path: "/twilio/callback", Controller: "twilio/callback#create", Source: "routes.rb:639"},
|
|
{Method: "POST", Path: "/twilio/delivery_status", Controller: "twilio/delivery_status#create", Source: "routes.rb:640"},
|
|
{Method: "POST", Path: "/twilio/voice/call/:phone", Controller: "twilio/voice#call_twiml", Source: "routes.rb:643"},
|
|
{Method: "POST", Path: "/twilio/voice/status/:phone", Controller: "twilio/voice#status", Source: "routes.rb:644"},
|
|
{Method: "POST", Path: "/twilio/voice/conference_status/:phone", Controller: "twilio/voice#conference_status", Source: "routes.rb:645"},
|
|
{Method: "POST", Path: "/twilio/voice/recording_status/:phone", Controller: "twilio/voice#recording_status", Source: "routes.rb:646"},
|
|
{Method: "GET", Path: "/linear/callback", Controller: "linear/callbacks#show", Source: "routes.rb:630"},
|
|
{Method: "GET", Path: "/shopify/callback", Controller: "shopify/callbacks#show", Source: "routes.rb:634"},
|
|
{Method: "GET", Path: "/notion/callback", Controller: "notion/callbacks#show", Source: "routes.rb:654"},
|
|
{Method: "GET", Path: "/twitter/callback", Controller: "twitter/callbacks#show", Source: "routes.rb:626"},
|
|
{Method: "GET", Path: "/microsoft/callback", Controller: "microsoft/callbacks#show", Source: "routes.rb:649"},
|
|
{Method: "GET", Path: "/google/callback", Controller: "google/callbacks#show", Source: "routes.rb:650"},
|
|
{Method: "GET", Path: "/instagram/callback", Controller: "instagram/callbacks#show", Source: "routes.rb:651"},
|
|
{Method: "GET", Path: "/tiktok/callback", Controller: "tiktok/callbacks#show", Source: "routes.rb:652"},
|
|
|
|
{Method: "POST", Path: "/api/v1/accounts/", Controller: "api/v1/accounts#create", Source: "routes.rb:47"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id", Controller: "api/v1/accounts#show", Source: "routes.rb:47"},
|
|
{Method: "PUT", Path: "/api/v1/accounts/:account_id", Controller: "api/v1/accounts#update", Source: "routes.rb:47"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/update_active_at", Controller: "api/v1/accounts#update_active_at", Source: "routes.rb:49"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/cache_keys", Controller: "api/v1/accounts#cache_keys", Source: "routes.rb:50"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/actions/contact_merge", Controller: "api/v1/accounts/actions/contact_merges#create", Source: "routes.rb:55"},
|
|
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/agents", Controller: "api/v1/accounts/agents#index", Source: "routes.rb:59"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/agents", Controller: "api/v1/accounts/agents#create", Source: "routes.rb:59"},
|
|
{Method: "PUT", Path: "/api/v1/accounts/:account_id/agents/:agent_id", Controller: "api/v1/accounts/agents#update", Source: "routes.rb:59"},
|
|
{Method: "DELETE", Path: "/api/v1/accounts/:account_id/agents/:agent_id", Controller: "api/v1/accounts/agents#destroy", Source: "routes.rb:59"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/agents/bulk_create", Controller: "api/v1/accounts/agents#bulk_create", Source: "routes.rb:60"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/assignable_agents", Controller: "api/v1/accounts/assignable_agents#index", Source: "routes.rb:104"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/audit_logs/", Controller: "api/v1/accounts/audit_logs#show", Source: "routes.rb:105"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/agent_bots", Controller: "api/v1/accounts/agent_bots#index", Source: "routes.rb:94"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/agent_bots", Controller: "api/v1/accounts/agent_bots#create", Source: "routes.rb:94"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/agent_bots/:agent_bot_id", Controller: "api/v1/accounts/agent_bots#show", Source: "routes.rb:94"},
|
|
{Method: "PUT", Path: "/api/v1/accounts/:account_id/agent_bots/:agent_bot_id", Controller: "api/v1/accounts/agent_bots#update", Source: "routes.rb:94"},
|
|
{Method: "PATCH", Path: "/api/v1/accounts/:account_id/agent_bots/:agent_bot_id", Controller: "api/v1/accounts/agent_bots#update", Source: "routes.rb:94"},
|
|
{Method: "DELETE", Path: "/api/v1/accounts/:account_id/agent_bots/:agent_bot_id", Controller: "api/v1/accounts/agent_bots#destroy", Source: "routes.rb:94"},
|
|
{Method: "DELETE", Path: "/api/v1/accounts/:account_id/agent_bots/:agent_bot_id/avatar", Controller: "api/v1/accounts/agent_bots#avatar", Source: "routes.rb:95"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/agent_bots/:agent_bot_id/reset_access_token", Controller: "api/v1/accounts/agent_bots#reset_access_token", Source: "routes.rb:96"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/agent_bots/:agent_bot_id/reset_secret", Controller: "api/v1/accounts/agent_bots#reset_secret", Source: "routes.rb:97"},
|
|
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/canned_responses/", Controller: "api/v1/accounts/canned_responses#index", Source: "routes.rb:114"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/canned_responses/", Controller: "api/v1/accounts/canned_responses#create", Source: "routes.rb:114"},
|
|
{Method: "PATCH", Path: "/api/v1/accounts/:account_id/canned_responses/:id", Controller: "api/v1/accounts/canned_responses#update", Source: "routes.rb:114"},
|
|
{Method: "PUT", Path: "/api/v1/accounts/:account_id/canned_responses/:id", Controller: "api/v1/accounts/canned_responses#update", Source: "routes.rb:114"},
|
|
{Method: "DELETE", Path: "/api/v1/accounts/:account_id/canned_responses/:id", Controller: "api/v1/accounts/canned_responses#destroy", Source: "routes.rb:114"},
|
|
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/dashboard_apps", Controller: "api/v1/accounts/dashboard_apps#index", Source: "routes.rb:130"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/dashboard_apps", Controller: "api/v1/accounts/dashboard_apps#create", Source: "routes.rb:130"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/dashboard_apps/:id", Controller: "api/v1/accounts/dashboard_apps#show", Source: "routes.rb:130"},
|
|
{Method: "PATCH", Path: "/api/v1/accounts/:account_id/dashboard_apps/:id", Controller: "api/v1/accounts/dashboard_apps#update", Source: "routes.rb:130"},
|
|
{Method: "PUT", Path: "/api/v1/accounts/:account_id/dashboard_apps/:id", Controller: "api/v1/accounts/dashboard_apps#update", Source: "routes.rb:130"},
|
|
{Method: "DELETE", Path: "/api/v1/accounts/:account_id/dashboard_apps/:id", Controller: "api/v1/accounts/dashboard_apps#destroy", Source: "routes.rb:130"},
|
|
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/conversations/", Controller: "api/v1/accounts/conversations#index", Source: "routes.rb:134"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/conversations/", Controller: "api/v1/accounts/conversations#create", Source: "routes.rb:134"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/conversations/:conversation_id", Controller: "api/v1/accounts/conversations#show", Source: "routes.rb:134"},
|
|
{Method: "PUT", Path: "/api/v1/accounts/:account_id/conversations/:conversation_id", Controller: "api/v1/accounts/conversations#update", Source: "routes.rb:134"},
|
|
{Method: "DELETE", Path: "/api/v1/accounts/:account_id/conversations/:conversation_id", Controller: "api/v1/accounts/conversations#destroy", Source: "routes.rb:134"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/conversations/meta", Controller: "api/v1/accounts/conversations#meta", Source: "routes.rb:136"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/conversations/search", Controller: "api/v1/accounts/conversations#search", Source: "routes.rb:137"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/conversations/unread_counts", Controller: "api/v1/accounts/conversations/unread_counts#index", Source: "routes.rb:138"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/conversations/filter", Controller: "api/v1/accounts/conversations#filter", Source: "routes.rb:139"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/conversations/:conversation_id/assignments", Controller: "api/v1/accounts/conversations/assignments#create", Source: "routes.rb:148"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/conversations/:conversation_id/participants", Controller: "api/v1/accounts/conversations/participants#show", Source: "routes.rb:150"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/conversations/:conversation_id/participants", Controller: "api/v1/accounts/conversations/participants#create", Source: "routes.rb:150"},
|
|
{Method: "PATCH", Path: "/api/v1/accounts/:account_id/conversations/:conversation_id/participants", Controller: "api/v1/accounts/conversations/participants#update", Source: "routes.rb:150"},
|
|
{Method: "PUT", Path: "/api/v1/accounts/:account_id/conversations/:conversation_id/participants", Controller: "api/v1/accounts/conversations/participants#update", Source: "routes.rb:150"},
|
|
{Method: "DELETE", Path: "/api/v1/accounts/:account_id/conversations/:conversation_id/participants", Controller: "api/v1/accounts/conversations/participants#destroy", Source: "routes.rb:150"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/conversations/:conversation_id/direct_uploads", Controller: "api/v1/accounts/conversations/direct_uploads#create", Source: "routes.rb:151"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/conversations/:conversation_id/draft_messages", Controller: "api/v1/accounts/conversations/draft_messages#show", Source: "routes.rb:152"},
|
|
{Method: "PATCH", Path: "/api/v1/accounts/:account_id/conversations/:conversation_id/draft_messages", Controller: "api/v1/accounts/conversations/draft_messages#update", Source: "routes.rb:152"},
|
|
{Method: "PUT", Path: "/api/v1/accounts/:account_id/conversations/:conversation_id/draft_messages", Controller: "api/v1/accounts/conversations/draft_messages#update", Source: "routes.rb:152"},
|
|
{Method: "DELETE", Path: "/api/v1/accounts/:account_id/conversations/:conversation_id/draft_messages", Controller: "api/v1/accounts/conversations/draft_messages#destroy", Source: "routes.rb:152"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/conversations/:conversation_id/labels", Controller: "api/v1/accounts/conversations/labels#create", Source: "routes.rb:149"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/conversations/:conversation_id/labels", Controller: "api/v1/accounts/conversations/labels#index", Source: "routes.rb:149"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/conversations/:conversation_id/toggle_status", Controller: "api/v1/accounts/conversations#toggle_status", Source: "routes.rb:158"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/conversations/:conversation_id/toggle_priority", Controller: "api/v1/accounts/conversations#toggle_priority", Source: "routes.rb:159"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/conversations/:conversation_id/transcript", Controller: "api/v1/accounts/conversations#transcript", Source: "routes.rb:157"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/conversations/:conversation_id/inbox_assistant", Controller: "api/v1/accounts/conversations#inbox_assistant", Source: "routes.rb:165"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/conversations/:conversation_id/reporting_events", Controller: "api/v1/accounts/conversations#reporting_events", Source: "routes.rb:166"},
|
|
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/conversations/:conversation_id/messages/", Controller: "api/v1/accounts/conversations/messages#index", Source: "routes.rb:142"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/conversations/:conversation_id/messages/", Controller: "api/v1/accounts/conversations/messages#create", Source: "routes.rb:142"},
|
|
{Method: "PUT", Path: "/api/v1/accounts/:account_id/conversations/:conversation_id/messages/:message_id", Controller: "api/v1/accounts/conversations/messages#update", Source: "routes.rb:142"},
|
|
{Method: "DELETE", Path: "/api/v1/accounts/:account_id/conversations/:conversation_id/messages/:message_id", Controller: "api/v1/accounts/conversations/messages#destroy", Source: "routes.rb:142"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/conversations/:conversation_id/messages/:message_id/translate", Controller: "api/v1/accounts/conversations/messages#translate", Source: "routes.rb:144"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/conversations/:conversation_id/messages/:message_id/retry", Controller: "api/v1/accounts/conversations/messages#retry", Source: "routes.rb:145"},
|
|
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/contacts/", Controller: "api/v1/accounts/contacts#index", Source: "routes.rb:197"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/contacts/", Controller: "api/v1/accounts/contacts#create", Source: "routes.rb:197"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/contacts/:contact_id", Controller: "api/v1/accounts/contacts#show", Source: "routes.rb:197"},
|
|
{Method: "PUT", Path: "/api/v1/accounts/:account_id/contacts/:contact_id", Controller: "api/v1/accounts/contacts#update", Source: "routes.rb:197"},
|
|
{Method: "DELETE", Path: "/api/v1/accounts/:account_id/contacts/:contact_id", Controller: "api/v1/accounts/contacts#destroy", Source: "routes.rb:197"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/contacts/search", Controller: "api/v1/accounts/contacts#search", Source: "routes.rb:201"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/contacts/active", Controller: "api/v1/accounts/contacts#active", Source: "routes.rb:200"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/contacts/filter", Controller: "api/v1/accounts/contacts#filter", Source: "routes.rb:202"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/contacts/import", Controller: "api/v1/accounts/contacts#import", Source: "routes.rb:203"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/contacts/export", Controller: "api/v1/accounts/contacts#export", Source: "routes.rb:204"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/contacts/:contact_id/contactable_inboxes", Controller: "api/v1/accounts/contacts#contactable_inboxes", Source: "routes.rb:206"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/contacts/:contact_id/destroy_custom_attributes", Controller: "api/v1/accounts/contacts#destroy_custom_attributes", Source: "routes.rb:207"},
|
|
{Method: "DELETE", Path: "/api/v1/accounts/:account_id/contacts/:contact_id/avatar", Controller: "api/v1/accounts/contacts#avatar", Source: "routes.rb:208"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/contacts/:contact_id/conversations", Controller: "api/v1/accounts/contacts/conversations#index", Source: "routes.rb:211"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/contacts/:contact_id/contact_inboxes/", Controller: "api/v1/accounts/contacts/contact_inboxes#create", Source: "routes.rb:212"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/contacts/:contact_id/labels/", Controller: "api/v1/accounts/contacts/labels#index", Source: "routes.rb:213"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/contacts/:contact_id/labels/", Controller: "api/v1/accounts/contacts/labels#create", Source: "routes.rb:213"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/contacts/:contact_id/notes", Controller: "api/v1/accounts/contacts/notes#index", Source: "routes.rb:214"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/contacts/:contact_id/notes", Controller: "api/v1/accounts/contacts/notes#create", Source: "routes.rb:214"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/contacts/:contact_id/call", Controller: "api/v1/accounts/contacts/calls#create", Source: "routes.rb:216"},
|
|
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/companies/", Controller: "api/v1/accounts/companies#index", Source: "routes.rb:179"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/companies/", Controller: "api/v1/accounts/companies#create", Source: "routes.rb:179"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/companies/:company_id", Controller: "api/v1/accounts/companies#show", Source: "routes.rb:179"},
|
|
{Method: "PUT", Path: "/api/v1/accounts/:account_id/companies/:company_id", Controller: "api/v1/accounts/companies#update", Source: "routes.rb:179"},
|
|
{Method: "DELETE", Path: "/api/v1/accounts/:account_id/companies/:company_id", Controller: "api/v1/accounts/companies#destroy", Source: "routes.rb:179"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/companies/search", Controller: "api/v1/accounts/companies#search", Source: "routes.rb:181"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/companies/:company_id/destroy_custom_attributes", Controller: "api/v1/accounts/companies#destroy_custom_attributes", Source: "routes.rb:184"},
|
|
{Method: "DELETE", Path: "/api/v1/accounts/:account_id/companies/:company_id/avatar", Controller: "api/v1/accounts/companies#avatar", Source: "routes.rb:185"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/companies/:company_id/contacts", Controller: "api/v1/accounts/companies/contacts#index", Source: "routes.rb:188"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/companies/:company_id/contacts", Controller: "api/v1/accounts/companies/contacts#create", Source: "routes.rb:188"},
|
|
{Method: "DELETE", Path: "/api/v1/accounts/:account_id/companies/:company_id/contacts/:contact_id", Controller: "api/v1/accounts/companies/contacts#destroy", Source: "routes.rb:188"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/companies/:company_id/contacts/search", Controller: "api/v1/accounts/companies/contacts#search", Source: "routes.rb:190"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/companies/:company_id/conversations", Controller: "api/v1/accounts/companies/conversations#index", Source: "routes.rb:193"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/companies/:company_id/notes", Controller: "api/v1/accounts/companies/notes#index", Source: "routes.rb:194"},
|
|
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/search", Controller: "api/v1/accounts/search#index", Source: "routes.rb:170"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/search/conversations", Controller: "api/v1/accounts/search#conversations", Source: "routes.rb:173"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/search/messages", Controller: "api/v1/accounts/search#messages", Source: "routes.rb:174"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/search/contacts", Controller: "api/v1/accounts/search#contacts", Source: "routes.rb:175"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/search/articles", Controller: "api/v1/accounts/search#articles", Source: "routes.rb:176"},
|
|
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/portals", Controller: "api/v1/accounts/portals#index", Source: "routes.rb:385"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/portals", Controller: "api/v1/accounts/portals#create", Source: "routes.rb:385"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/portals/:portal_id", Controller: "api/v1/accounts/portals#show", Source: "routes.rb:385"},
|
|
{Method: "PUT", Path: "/api/v1/accounts/:account_id/portals/:portal_id", Controller: "api/v1/accounts/portals#update", Source: "routes.rb:385"},
|
|
{Method: "PATCH", Path: "/api/v1/accounts/:account_id/portals/:portal_id", Controller: "api/v1/accounts/portals#update", Source: "routes.rb:385"},
|
|
{Method: "DELETE", Path: "/api/v1/accounts/:account_id/portals/:portal_id", Controller: "api/v1/accounts/portals#destroy", Source: "routes.rb:385"},
|
|
{Method: "PATCH", Path: "/api/v1/accounts/:account_id/portals/:portal_id/archive", Controller: "api/v1/accounts/portals#archive", Source: "routes.rb:387"},
|
|
{Method: "DELETE", Path: "/api/v1/accounts/:account_id/portals/:portal_id/logo", Controller: "api/v1/accounts/portals#logo", Source: "routes.rb:388"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/portals/:portal_id/send_instructions", Controller: "api/v1/accounts/portals#send_instructions", Source: "routes.rb:389"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/portals/:portal_id/ssl_status", Controller: "api/v1/accounts/portals#ssl_status", Source: "routes.rb:390"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/portals/:portal_id/categories", Controller: "api/v1/accounts/categories#index", Source: "routes.rb:392"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/portals/:portal_id/categories", Controller: "api/v1/accounts/categories#create", Source: "routes.rb:392"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/portals/:portal_id/categories/:category_id", Controller: "api/v1/accounts/categories#show", Source: "routes.rb:392"},
|
|
{Method: "PUT", Path: "/api/v1/accounts/:account_id/portals/:portal_id/categories/:category_id", Controller: "api/v1/accounts/categories#update", Source: "routes.rb:392"},
|
|
{Method: "PATCH", Path: "/api/v1/accounts/:account_id/portals/:portal_id/categories/:category_id", Controller: "api/v1/accounts/categories#update", Source: "routes.rb:392"},
|
|
{Method: "DELETE", Path: "/api/v1/accounts/:account_id/portals/:portal_id/categories/:category_id", Controller: "api/v1/accounts/categories#destroy", Source: "routes.rb:392"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/portals/:portal_id/categories/reorder", Controller: "api/v1/accounts/categories#reorder", Source: "routes.rb:393"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/portals/:portal_id/articles/bulk_actions/translate", Controller: "api/v1/accounts/articles/bulk_actions#translate", Source: "routes.rb:397"},
|
|
{Method: "PATCH", Path: "/api/v1/accounts/:account_id/portals/:portal_id/articles/bulk_actions/update_status", Controller: "api/v1/accounts/articles/bulk_actions#update_status", Source: "routes.rb:398"},
|
|
{Method: "PATCH", Path: "/api/v1/accounts/:account_id/portals/:portal_id/articles/bulk_actions/update_category", Controller: "api/v1/accounts/articles/bulk_actions#update_category", Source: "routes.rb:399"},
|
|
{Method: "DELETE", Path: "/api/v1/accounts/:account_id/portals/:portal_id/articles/bulk_actions/delete_articles", Controller: "api/v1/accounts/articles/bulk_actions#delete_articles", Source: "routes.rb:400"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/portals/:portal_id/articles", Controller: "api/v1/accounts/articles#index", Source: "routes.rb:403"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/portals/:portal_id/articles", Controller: "api/v1/accounts/articles#create", Source: "routes.rb:403"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/portals/:portal_id/articles/:article_id", Controller: "api/v1/accounts/articles#show", Source: "routes.rb:403"},
|
|
{Method: "PUT", Path: "/api/v1/accounts/:account_id/portals/:portal_id/articles/:article_id", Controller: "api/v1/accounts/articles#update", Source: "routes.rb:403"},
|
|
{Method: "PATCH", Path: "/api/v1/accounts/:account_id/portals/:portal_id/articles/:article_id", Controller: "api/v1/accounts/articles#update", Source: "routes.rb:403"},
|
|
{Method: "DELETE", Path: "/api/v1/accounts/:account_id/portals/:portal_id/articles/:article_id", Controller: "api/v1/accounts/articles#destroy", Source: "routes.rb:403"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/portals/:portal_id/articles/reorder", Controller: "api/v1/accounts/articles#reorder", Source: "routes.rb:404"},
|
|
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/inboxes/", Controller: "api/v1/accounts/inboxes#index", Source: "routes.rb:252"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/inboxes/", Controller: "api/v1/accounts/inboxes#create", Source: "routes.rb:252"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/inboxes/:inbox_id", Controller: "api/v1/accounts/inboxes#show", Source: "routes.rb:252"},
|
|
{Method: "PUT", Path: "/api/v1/accounts/:account_id/inboxes/:inbox_id", Controller: "api/v1/accounts/inboxes#update", Source: "routes.rb:252"},
|
|
{Method: "DELETE", Path: "/api/v1/accounts/:account_id/inboxes/:inbox_id", Controller: "api/v1/accounts/inboxes#destroy", Source: "routes.rb:252"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/inboxes/:inbox_id/assignable_agents", Controller: "api/v1/accounts/inboxes#assignable_agents", Source: "routes.rb:253"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/inboxes/:inbox_id/campaigns", Controller: "api/v1/accounts/inboxes#campaigns", Source: "routes.rb:254"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/inboxes/:inbox_id/agent_bot", Controller: "api/v1/accounts/inboxes#agent_bot", Source: "routes.rb:255"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/inboxes/:inbox_id/set_agent_bot", Controller: "api/v1/accounts/inboxes#set_agent_bot", Source: "routes.rb:256"},
|
|
{Method: "DELETE", Path: "/api/v1/accounts/:account_id/inboxes/:inbox_id/avatar", Controller: "api/v1/accounts/inboxes#avatar", Source: "routes.rb:257"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/inboxes/:inbox_id/sync_templates", Controller: "api/v1/accounts/inboxes#sync_templates", Source: "routes.rb:258"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/inboxes/:inbox_id/health", Controller: "api/v1/accounts/inboxes#health", Source: "routes.rb:259"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/inboxes/:inbox_id/register_webhook", Controller: "api/v1/accounts/inboxes#register_webhook", Source: "routes.rb:260"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/inboxes/:inbox_id/reset_secret", Controller: "api/v1/accounts/inboxes#reset_secret", Source: "routes.rb:262"},
|
|
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/inbox_members/", Controller: "api/v1/accounts/inbox_members#create", Source: "routes.rb:275"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/inbox_members/:inbox_id", Controller: "api/v1/accounts/inbox_members#show", Source: "routes.rb:275"},
|
|
{Method: "PATCH", Path: "/api/v1/accounts/:account_id/inbox_members/", Controller: "api/v1/accounts/inbox_members#update", Source: "routes.rb:278"},
|
|
{Method: "DELETE", Path: "/api/v1/accounts/:account_id/inbox_members/", Controller: "api/v1/accounts/inbox_members#destroy", Source: "routes.rb:277"},
|
|
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/labels/", Controller: "api/v1/accounts/labels#index", Source: "routes.rb:281"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/labels/", Controller: "api/v1/accounts/labels#create", Source: "routes.rb:281"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/labels/:tag_id", Controller: "api/v1/accounts/labels#show", Source: "routes.rb:281"},
|
|
{Method: "PUT", Path: "/api/v1/accounts/:account_id/labels/:tag_id", Controller: "api/v1/accounts/labels#update", Source: "routes.rb:281"},
|
|
{Method: "DELETE", Path: "/api/v1/accounts/:account_id/labels/:tag_id", Controller: "api/v1/accounts/labels#destroy", Source: "routes.rb:281"},
|
|
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/webhooks", Controller: "api/v1/accounts/webhooks#index", Source: "routes.rb:342"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/webhooks", Controller: "api/v1/accounts/webhooks#create", Source: "routes.rb:342"},
|
|
{Method: "PUT", Path: "/api/v1/accounts/:account_id/webhooks/:webhook_id", Controller: "api/v1/accounts/webhooks#update", Source: "routes.rb:342"},
|
|
{Method: "PATCH", Path: "/api/v1/accounts/:account_id/webhooks/:webhook_id", Controller: "api/v1/accounts/webhooks#update", Source: "routes.rb:342"},
|
|
{Method: "DELETE", Path: "/api/v1/accounts/:account_id/webhooks/:webhook_id", Controller: "api/v1/accounts/webhooks#destroy", Source: "routes.rb:342"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/integrations/apps", Controller: "api/v1/accounts/integrations/apps#index", Source: "routes.rb:345"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/integrations/apps/:id", Controller: "api/v1/accounts/integrations/apps#show", Source: "routes.rb:345"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/integrations/hooks/:id", Controller: "api/v1/accounts/integrations/hooks#show", Source: "routes.rb:346"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/integrations/hooks", Controller: "api/v1/accounts/integrations/hooks#create", Source: "routes.rb:346"},
|
|
{Method: "PUT", Path: "/api/v1/accounts/:account_id/integrations/hooks/:id", Controller: "api/v1/accounts/integrations/hooks#update", Source: "routes.rb:346"},
|
|
{Method: "PATCH", Path: "/api/v1/accounts/:account_id/integrations/hooks/:id", Controller: "api/v1/accounts/integrations/hooks#update", Source: "routes.rb:346"},
|
|
{Method: "DELETE", Path: "/api/v1/accounts/:account_id/integrations/hooks/:id", Controller: "api/v1/accounts/integrations/hooks#destroy", Source: "routes.rb:346"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/integrations/hooks/:id/process_event", Controller: "api/v1/accounts/integrations/hooks#process_event", Source: "routes.rb:348"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/integrations/slack", Controller: "api/v1/accounts/integrations/slack#create", Source: "routes.rb:350"},
|
|
{Method: "PUT", Path: "/api/v1/accounts/:account_id/integrations/slack", Controller: "api/v1/accounts/integrations/slack#update", Source: "routes.rb:350"},
|
|
{Method: "PATCH", Path: "/api/v1/accounts/:account_id/integrations/slack", Controller: "api/v1/accounts/integrations/slack#update", Source: "routes.rb:350"},
|
|
{Method: "DELETE", Path: "/api/v1/accounts/:account_id/integrations/slack", Controller: "api/v1/accounts/integrations/slack#destroy", Source: "routes.rb:350"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/integrations/slack/list_all_channels", Controller: "api/v1/accounts/integrations/slack#list_all_channels", Source: "routes.rb:352"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/integrations/dyte/create_a_meeting", Controller: "api/v1/accounts/integrations/dyte#create_a_meeting", Source: "routes.rb:357"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/integrations/dyte/add_participant_to_meeting", Controller: "api/v1/accounts/integrations/dyte#add_participant_to_meeting", Source: "routes.rb:358"},
|
|
{Method: "DELETE", Path: "/api/v1/accounts/:account_id/integrations/shopify", Controller: "api/v1/accounts/integrations/shopify#destroy", Source: "routes.rb:361"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/integrations/shopify/auth", Controller: "api/v1/accounts/integrations/shopify#auth", Source: "routes.rb:363"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/integrations/shopify/orders", Controller: "api/v1/accounts/integrations/shopify#orders", Source: "routes.rb:364"},
|
|
{Method: "DELETE", Path: "/api/v1/accounts/:account_id/integrations/linear", Controller: "api/v1/accounts/integrations/linear#destroy", Source: "routes.rb:366"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/integrations/linear/teams", Controller: "api/v1/accounts/integrations/linear#teams", Source: "routes.rb:367"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/integrations/linear/team_entities", Controller: "api/v1/accounts/integrations/linear#team_entities", Source: "routes.rb:368"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/integrations/linear/create_issue", Controller: "api/v1/accounts/integrations/linear#create_issue", Source: "routes.rb:369"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/integrations/linear/link_issue", Controller: "api/v1/accounts/integrations/linear#link_issue", Source: "routes.rb:370"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/integrations/linear/unlink_issue", Controller: "api/v1/accounts/integrations/linear#unlink_issue", Source: "routes.rb:371"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/integrations/linear/search_issue", Controller: "api/v1/accounts/integrations/linear#search_issue", Source: "routes.rb:372"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/integrations/linear/linked_issues", Controller: "api/v1/accounts/integrations/linear#linked_issues", Source: "routes.rb:373"},
|
|
{Method: "DELETE", Path: "/api/v1/accounts/:account_id/integrations/notion", Controller: "api/v1/accounts/integrations/notion#destroy", Source: "routes.rb:379"},
|
|
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/notifications/", Controller: "api/v1/accounts/notifications#index", Source: "routes.rb:283"},
|
|
{Method: "PUT", Path: "/api/v1/accounts/:account_id/notifications/:notification_id", Controller: "api/v1/accounts/notifications#update", Source: "routes.rb:283"},
|
|
{Method: "DELETE", Path: "/api/v1/accounts/:account_id/notifications/:notification_id", Controller: "api/v1/accounts/notifications#destroy", Source: "routes.rb:283"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/notifications/read_all", Controller: "api/v1/accounts/notifications#read_all", Source: "routes.rb:285"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/notifications/unread_count", Controller: "api/v1/accounts/notifications#unread_count", Source: "routes.rb:286"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/notifications/destroy_all", Controller: "api/v1/accounts/notifications#destroy_all", Source: "routes.rb:287"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/notifications/:notification_id/snooze", Controller: "api/v1/accounts/notifications#snooze", Source: "routes.rb:290"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/notifications/:notification_id/unread", Controller: "api/v1/accounts/notifications#unread", Source: "routes.rb:291"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/notification_settings/", Controller: "api/v1/accounts/notification_settings#show", Source: "routes.rb:293"},
|
|
{Method: "PUT", Path: "/api/v1/accounts/:account_id/notification_settings/", Controller: "api/v1/accounts/notification_settings#update", Source: "routes.rb:293"},
|
|
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/teams/", Controller: "api/v1/accounts/teams#index", Source: "routes.rb:296"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/teams/", Controller: "api/v1/accounts/teams#create", Source: "routes.rb:296"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/teams/:team_id", Controller: "api/v1/accounts/teams#show", Source: "routes.rb:296"},
|
|
{Method: "PATCH", Path: "/api/v1/accounts/:account_id/teams/:team_id", Controller: "api/v1/accounts/teams#update", Source: "routes.rb:296"},
|
|
{Method: "PUT", Path: "/api/v1/accounts/:account_id/teams/:team_id", Controller: "api/v1/accounts/teams#update", Source: "routes.rb:296"},
|
|
{Method: "DELETE", Path: "/api/v1/accounts/:account_id/teams/:team_id", Controller: "api/v1/accounts/teams#destroy", Source: "routes.rb:296"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/teams/:team_id/team_members/", Controller: "api/v1/accounts/teams/team_members#index", Source: "routes.rb:297"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/teams/:team_id/team_members/", Controller: "api/v1/accounts/teams/team_members#create", Source: "routes.rb:297"},
|
|
{Method: "PATCH", Path: "/api/v1/accounts/:account_id/teams/:team_id/team_members/", Controller: "api/v1/accounts/teams/team_members#update", Source: "routes.rb:300"},
|
|
{Method: "DELETE", Path: "/api/v1/accounts/:account_id/teams/:team_id/team_members/", Controller: "api/v1/accounts/teams/team_members#destroy", Source: "routes.rb:299"},
|
|
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/custom_attribute_definitions/", Controller: "api/v1/accounts/custom_attribute_definitions#index", Source: "routes.rb:250"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/custom_attribute_definitions/", Controller: "api/v1/accounts/custom_attribute_definitions#create", Source: "routes.rb:250"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/custom_attribute_definitions/:id", Controller: "api/v1/accounts/custom_attribute_definitions#show", Source: "routes.rb:250"},
|
|
{Method: "PUT", Path: "/api/v1/accounts/:account_id/custom_attribute_definitions/:id", Controller: "api/v1/accounts/custom_attribute_definitions#update", Source: "routes.rb:250"},
|
|
{Method: "DELETE", Path: "/api/v1/accounts/:account_id/custom_attribute_definitions/:id", Controller: "api/v1/accounts/custom_attribute_definitions#destroy", Source: "routes.rb:250"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/custom_filters/", Controller: "api/v1/accounts/custom_filters#index", Source: "routes.rb:251"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/custom_filters/", Controller: "api/v1/accounts/custom_filters#create", Source: "routes.rb:251"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/custom_filters/:id", Controller: "api/v1/accounts/custom_filters#show", Source: "routes.rb:251"},
|
|
{Method: "PUT", Path: "/api/v1/accounts/:account_id/custom_filters/:id", Controller: "api/v1/accounts/custom_filters#update", Source: "routes.rb:251"},
|
|
{Method: "DELETE", Path: "/api/v1/accounts/:account_id/custom_filters/:id", Controller: "api/v1/accounts/custom_filters#destroy", Source: "routes.rb:251"},
|
|
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/automation_rules/", Controller: "api/v1/accounts/automation_rules#index", Source: "routes.rb:115"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/automation_rules/", Controller: "api/v1/accounts/automation_rules#create", Source: "routes.rb:115"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/automation_rules/:automation_id", Controller: "api/v1/accounts/automation_rules#show", Source: "routes.rb:115"},
|
|
{Method: "PUT", Path: "/api/v1/accounts/:account_id/automation_rules/:automation_id", Controller: "api/v1/accounts/automation_rules#update", Source: "routes.rb:115"},
|
|
{Method: "DELETE", Path: "/api/v1/accounts/:account_id/automation_rules/:automation_id", Controller: "api/v1/accounts/automation_rules#destroy", Source: "routes.rb:115"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/automation_rules/:automation_id/clone", Controller: "api/v1/accounts/automation_rules#clone", Source: "routes.rb:116"},
|
|
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/macros/", Controller: "api/v1/accounts/macros#index", Source: "routes.rb:118"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/macros/", Controller: "api/v1/accounts/macros#create", Source: "routes.rb:118"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/macros/:macro_id", Controller: "api/v1/accounts/macros#show", Source: "routes.rb:118"},
|
|
{Method: "PUT", Path: "/api/v1/accounts/:account_id/macros/:macro_id", Controller: "api/v1/accounts/macros#update", Source: "routes.rb:118"},
|
|
{Method: "DELETE", Path: "/api/v1/accounts/:account_id/macros/:macro_id", Controller: "api/v1/accounts/macros#destroy", Source: "routes.rb:118"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/macros/:macro_id/execute", Controller: "api/v1/accounts/macros#execute", Source: "routes.rb:119"},
|
|
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/sla_policies", Controller: "api/v1/accounts/sla_policies#index", Source: "routes.rb:121"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/sla_policies", Controller: "api/v1/accounts/sla_policies#create", Source: "routes.rb:121"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/sla_policies/:id", Controller: "api/v1/accounts/sla_policies#show", Source: "routes.rb:121"},
|
|
{Method: "PUT", Path: "/api/v1/accounts/:account_id/sla_policies/:id", Controller: "api/v1/accounts/sla_policies#update", Source: "routes.rb:121"},
|
|
{Method: "DELETE", Path: "/api/v1/accounts/:account_id/sla_policies/:id", Controller: "api/v1/accounts/sla_policies#destroy", Source: "routes.rb:121"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/custom_roles/", Controller: "api/v1/accounts/custom_roles#index", Source: "routes.rb:122"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/agent_capacity_policies/", Controller: "api/v1/accounts/agent_capacity_policies#index", Source: "routes.rb:123"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/agent_capacity_policies/", Controller: "api/v1/accounts/agent_capacity_policies#create", Source: "routes.rb:123"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/agent_capacity_policies/:id", Controller: "api/v1/accounts/agent_capacity_policies#show", Source: "routes.rb:123"},
|
|
{Method: "PUT", Path: "/api/v1/accounts/:account_id/agent_capacity_policies/:id", Controller: "api/v1/accounts/agent_capacity_policies#update", Source: "routes.rb:123"},
|
|
{Method: "PATCH", Path: "/api/v1/accounts/:account_id/agent_capacity_policies/:id", Controller: "api/v1/accounts/agent_capacity_policies#update", Source: "routes.rb:123"},
|
|
{Method: "DELETE", Path: "/api/v1/accounts/:account_id/agent_capacity_policies/:id", Controller: "api/v1/accounts/agent_capacity_policies#destroy", Source: "routes.rb:123"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/agent_capacity_policies/:agent_capacity_policy_id/users", Controller: "api/v1/accounts/agent_capacity_policies/users#index", Source: "routes.rb:125"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/agent_capacity_policies/:agent_capacity_policy_id/users", Controller: "api/v1/accounts/agent_capacity_policies/users#create", Source: "routes.rb:125"},
|
|
{Method: "DELETE", Path: "/api/v1/accounts/:account_id/agent_capacity_policies/:agent_capacity_policy_id/users/:id", Controller: "api/v1/accounts/agent_capacity_policies/users#destroy", Source: "routes.rb:125"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/agent_capacity_policies/:agent_capacity_policy_id/inbox_limits", Controller: "api/v1/accounts/agent_capacity_policies/inbox_limits#create", Source: "routes.rb:126"},
|
|
{Method: "PUT", Path: "/api/v1/accounts/:account_id/agent_capacity_policies/:agent_capacity_policy_id/inbox_limits/:id", Controller: "api/v1/accounts/agent_capacity_policies/inbox_limits#update", Source: "routes.rb:126"},
|
|
{Method: "PATCH", Path: "/api/v1/accounts/:account_id/agent_capacity_policies/:agent_capacity_policy_id/inbox_limits/:id", Controller: "api/v1/accounts/agent_capacity_policies/inbox_limits#update", Source: "routes.rb:126"},
|
|
{Method: "DELETE", Path: "/api/v1/accounts/:account_id/agent_capacity_policies/:agent_capacity_policy_id/inbox_limits/:id", Controller: "api/v1/accounts/agent_capacity_policies/inbox_limits#destroy", Source: "routes.rb:126"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/csat_survey_responses/", Controller: "api/v1/accounts/csat_survey_responses#index", Source: "routes.rb:219"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/csat_survey_responses/metrics", Controller: "api/v1/accounts/csat_survey_responses#metrics", Source: "routes.rb:221"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/applied_slas", Controller: "api/v1/accounts/applied_slas#index", Source: "routes.rb:228"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/applied_slas/metrics", Controller: "api/v1/accounts/applied_slas#metrics", Source: "routes.rb:230"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/applied_slas/download", Controller: "api/v1/accounts/applied_slas#download", Source: "routes.rb:231"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/reporting_events", Controller: "api/v1/accounts/reporting_events#index", Source: "routes.rb:234"},
|
|
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/captain/preferences/", Controller: "api/v1/accounts/captain/preferences#show", Source: "routes.rb:63"},
|
|
{Method: "PUT", Path: "/api/v1/accounts/:account_id/captain/preferences/", Controller: "api/v1/accounts/captain/preferences#update", Source: "routes.rb:63"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/captain/assistants/", Controller: "api/v1/accounts/captain/assistants#index", Source: "routes.rb:64"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/captain/assistants/", Controller: "api/v1/accounts/captain/assistants#create", Source: "routes.rb:64"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/captain/assistants/:assistant_id", Controller: "api/v1/accounts/captain/assistants#show", Source: "routes.rb:64"},
|
|
{Method: "PUT", Path: "/api/v1/accounts/:account_id/captain/assistants/:assistant_id", Controller: "api/v1/accounts/captain/assistants#update", Source: "routes.rb:64"},
|
|
{Method: "DELETE", Path: "/api/v1/accounts/:account_id/captain/assistants/:assistant_id", Controller: "api/v1/accounts/captain/assistants#destroy", Source: "routes.rb:64"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/captain/assistants/:assistant_id/playground", Controller: "api/v1/accounts/captain/assistants#playground", Source: "routes.rb:66"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/captain/assistants/tools", Controller: "api/v1/accounts/captain/assistants#tools", Source: "routes.rb:69"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/captain/assistants/:assistant_id/inboxes", Controller: "api/v1/accounts/captain/assistants/inboxes#index", Source: "routes.rb:71"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/captain/assistants/:assistant_id/inboxes", Controller: "api/v1/accounts/captain/assistants/inboxes#create", Source: "routes.rb:71"},
|
|
{Method: "DELETE", Path: "/api/v1/accounts/:account_id/captain/assistants/:assistant_id/inboxes/:inbox_id", Controller: "api/v1/accounts/captain/assistants/inboxes#destroy", Source: "routes.rb:71"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/captain/assistants/:assistant_id/scenarios/", Controller: "api/v1/accounts/captain/assistants/scenarios#index", Source: "routes.rb:72"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/captain/assistants/:assistant_id/scenarios/", Controller: "api/v1/accounts/captain/assistants/scenarios#create", Source: "routes.rb:72"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/captain/assistants/:assistant_id/scenarios/:scenario_id", Controller: "api/v1/accounts/captain/assistants/scenarios#show", Source: "routes.rb:72"},
|
|
{Method: "PUT", Path: "/api/v1/accounts/:account_id/captain/assistants/:assistant_id/scenarios/:scenario_id", Controller: "api/v1/accounts/captain/assistants/scenarios#update", Source: "routes.rb:72"},
|
|
{Method: "DELETE", Path: "/api/v1/accounts/:account_id/captain/assistants/:assistant_id/scenarios/:scenario_id", Controller: "api/v1/accounts/captain/assistants/scenarios#destroy", Source: "routes.rb:72"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/captain/assistant_responses/", Controller: "api/v1/accounts/captain/assistant_responses#index", Source: "routes.rb:74"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/captain/assistant_responses/", Controller: "api/v1/accounts/captain/assistant_responses#create", Source: "routes.rb:74"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/captain/assistant_responses/:response_id", Controller: "api/v1/accounts/captain/assistant_responses#show", Source: "routes.rb:74"},
|
|
{Method: "PUT", Path: "/api/v1/accounts/:account_id/captain/assistant_responses/:response_id", Controller: "api/v1/accounts/captain/assistant_responses#update", Source: "routes.rb:74"},
|
|
{Method: "DELETE", Path: "/api/v1/accounts/:account_id/captain/assistant_responses/:response_id", Controller: "api/v1/accounts/captain/assistant_responses#destroy", Source: "routes.rb:74"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/captain/bulk_actions/", Controller: "api/v1/accounts/captain/bulk_actions#create", Source: "routes.rb:75"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/captain/copilot_threads/", Controller: "api/v1/accounts/captain/copilot_threads#index", Source: "routes.rb:76"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/captain/copilot_threads/", Controller: "api/v1/accounts/captain/copilot_threads#create", Source: "routes.rb:76"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/captain/copilot_threads/:thread_id/copilot_messages/", Controller: "api/v1/accounts/captain/copilot_messages#index", Source: "routes.rb:77"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/captain/copilot_threads/:thread_id/copilot_messages/", Controller: "api/v1/accounts/captain/copilot_messages#create", Source: "routes.rb:77"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/captain/custom_tools/", Controller: "api/v1/accounts/captain/custom_tools#index", Source: "routes.rb:79"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/captain/custom_tools/", Controller: "api/v1/accounts/captain/custom_tools#create", Source: "routes.rb:79"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/captain/custom_tools/:tool_id", Controller: "api/v1/accounts/captain/custom_tools#show", Source: "routes.rb:79"},
|
|
{Method: "PUT", Path: "/api/v1/accounts/:account_id/captain/custom_tools/:tool_id", Controller: "api/v1/accounts/captain/custom_tools#update", Source: "routes.rb:79"},
|
|
{Method: "DELETE", Path: "/api/v1/accounts/:account_id/captain/custom_tools/:tool_id", Controller: "api/v1/accounts/captain/custom_tools#destroy", Source: "routes.rb:79"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/captain/custom_tools/test", Controller: "api/v1/accounts/captain/custom_tools#test", Source: "routes.rb:80"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/captain/documents/", Controller: "api/v1/accounts/captain/documents#index", Source: "routes.rb:82"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/captain/documents/", Controller: "api/v1/accounts/captain/documents#create", Source: "routes.rb:82"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/captain/documents/:document_id", Controller: "api/v1/accounts/captain/documents#show", Source: "routes.rb:82"},
|
|
{Method: "DELETE", Path: "/api/v1/accounts/:account_id/captain/documents/:document_id", Controller: "api/v1/accounts/captain/documents#destroy", Source: "routes.rb:82"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/captain/documents/:document_id/sync", Controller: "api/v1/accounts/captain/documents#sync", Source: "routes.rb:83"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/captain/tasks/rewrite", Controller: "api/v1/accounts/captain/tasks#rewrite", Source: "routes.rb:86"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/captain/tasks/summarize", Controller: "api/v1/accounts/captain/tasks#summarize", Source: "routes.rb:87"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/captain/tasks/reply_suggestion", Controller: "api/v1/accounts/captain/tasks#reply_suggestion", Source: "routes.rb:88"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/captain/tasks/label_suggestion", Controller: "api/v1/accounts/captain/tasks#label_suggestion", Source: "routes.rb:89"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/captain/tasks/follow_up", Controller: "api/v1/accounts/captain/tasks#follow_up", Source: "routes.rb:90"},
|
|
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/assignment_policies/", Controller: "api/v1/accounts/assignment_policies#index", Source: "routes.rb:306"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/assignment_policies/", Controller: "api/v1/accounts/assignment_policies#create", Source: "routes.rb:306"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/assignment_policies/:policy_id", Controller: "api/v1/accounts/assignment_policies#show", Source: "routes.rb:306"},
|
|
{Method: "PUT", Path: "/api/v1/accounts/:account_id/assignment_policies/:policy_id", Controller: "api/v1/accounts/assignment_policies#update", Source: "routes.rb:306"},
|
|
{Method: "DELETE", Path: "/api/v1/accounts/:account_id/assignment_policies/:policy_id", Controller: "api/v1/accounts/assignment_policies#destroy", Source: "routes.rb:306"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/assignment_policies/:policy_id/inboxes", Controller: "api/v1/accounts/assignment_policies/inboxes#index", Source: "routes.rb:307"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/assignment_policies/:policy_id/inboxes", Controller: "api/v1/accounts/assignment_policies/inboxes#create", Source: "routes.rb:307"},
|
|
{Method: "DELETE", Path: "/api/v1/accounts/:account_id/assignment_policies/:policy_id/inboxes/:inbox_id", Controller: "api/v1/accounts/assignment_policies/inboxes#destroy", Source: "routes.rb:307"},
|
|
{Method: "GET", Path: "/api/v1/accounts/:account_id/inboxes/:inbox_id/assignment_policy/", Controller: "api/v1/accounts/inboxes/assignment_policy#show", Source: "routes.rb:311"},
|
|
{Method: "POST", Path: "/api/v1/accounts/:account_id/inboxes/:inbox_id/assignment_policy/", Controller: "api/v1/accounts/inboxes/assignment_policy#create", Source: "routes.rb:311"},
|
|
{Method: "DELETE", Path: "/api/v1/accounts/:account_id/inboxes/:inbox_id/assignment_policy/", Controller: "api/v1/accounts/inboxes/assignment_policy#destroy", Source: "routes.rb:311"},
|
|
|
|
{Method: "POST", Path: "/api/v1/notification_subscriptions", Controller: "api/v1/notification_subscriptions#create", Source: "routes.rb:440"},
|
|
{Method: "DELETE", Path: "/api/v1/notification_subscriptions", Controller: "api/v1/notification_subscriptions#destroy", Source: "routes.rb:440"},
|
|
|
|
{Method: "POST", Path: "/api/v1/widget/direct_uploads", Controller: "api/v1/widget/direct_uploads#create", Source: "routes.rb:443"},
|
|
{Method: "POST", Path: "/api/v1/widget/config", Controller: "api/v1/widget/config#create", Source: "routes.rb:444"},
|
|
{Method: "GET", Path: "/api/v1/widget/campaigns", Controller: "api/v1/widget/campaigns#index", Source: "routes.rb:445"},
|
|
{Method: "POST", Path: "/api/v1/widget/events", Controller: "api/v1/widget/events#create", Source: "routes.rb:446"},
|
|
{Method: "GET", Path: "/api/v1/widget/messages", Controller: "api/v1/widget/messages#index", Source: "routes.rb:447"},
|
|
{Method: "POST", Path: "/api/v1/widget/messages", Controller: "api/v1/widget/messages#create", Source: "routes.rb:447"},
|
|
{Method: "PUT", Path: "/api/v1/widget/messages/:message_id", Controller: "api/v1/widget/messages#update", Source: "routes.rb:447"},
|
|
{Method: "GET", Path: "/api/v1/widget/conversations", Controller: "api/v1/widget/conversations#index", Source: "routes.rb:448"},
|
|
{Method: "POST", Path: "/api/v1/widget/conversations", Controller: "api/v1/widget/conversations#create", Source: "routes.rb:448"},
|
|
{Method: "POST", Path: "/api/v1/widget/conversations/destroy_custom_attributes", Controller: "api/v1/widget/conversations#destroy_custom_attributes", Source: "routes.rb:450"},
|
|
{Method: "POST", Path: "/api/v1/widget/conversations/set_custom_attributes", Controller: "api/v1/widget/conversations#set_custom_attributes", Source: "routes.rb:451"},
|
|
{Method: "POST", Path: "/api/v1/widget/conversations/update_last_seen", Controller: "api/v1/widget/conversations#update_last_seen", Source: "routes.rb:452"},
|
|
{Method: "POST", Path: "/api/v1/widget/conversations/toggle_typing", Controller: "api/v1/widget/conversations#toggle_typing", Source: "routes.rb:453"},
|
|
{Method: "POST", Path: "/api/v1/widget/conversations/transcript", Controller: "api/v1/widget/conversations#transcript", Source: "routes.rb:454"},
|
|
{Method: "GET", Path: "/api/v1/widget/conversations/toggle_status", Controller: "api/v1/widget/conversations#toggle_status", Source: "routes.rb:455"},
|
|
{Method: "GET", Path: "/api/v1/widget/contact", Controller: "api/v1/widget/contact#show", Source: "routes.rb:458"},
|
|
{Method: "PUT", Path: "/api/v1/widget/contact", Controller: "api/v1/widget/contact#update", Source: "routes.rb:458"},
|
|
{Method: "POST", Path: "/api/v1/widget/contact/destroy_custom_attributes", Controller: "api/v1/widget/contact#destroy_custom_attributes", Source: "routes.rb:460"},
|
|
{Method: "PATCH", Path: "/api/v1/widget/contact/set_user", Controller: "api/v1/widget/contact#set_user", Source: "routes.rb:461"},
|
|
{Method: "GET", Path: "/api/v1/widget/inbox_members", Controller: "api/v1/widget/inbox_members#index", Source: "routes.rb:463"},
|
|
{Method: "POST", Path: "/api/v1/widget/labels", Controller: "api/v1/widget/labels#create", Source: "routes.rb:464"},
|
|
{Method: "DELETE", Path: "/api/v1/widget/labels/:label_id", Controller: "api/v1/widget/labels#destroy", Source: "routes.rb:464"},
|
|
{Method: "POST", Path: "/api/v1/widget/integrations/dyte/add_participant_to_meeting", Controller: "api/v1/widget/integrations/dyte#add_participant_to_meeting", Source: "routes.rb:469"},
|
|
|
|
{Method: "POST", Path: "/public/api/v1/inboxes/:inbox_id/contacts", Controller: "public/api/v1/inboxes/contacts#create", Source: "routes.rb:572"},
|
|
{Method: "GET", Path: "/public/api/v1/inboxes/:inbox_id/contacts/:contact_id", Controller: "public/api/v1/inboxes/contacts#show", Source: "routes.rb:572"},
|
|
{Method: "PUT", Path: "/public/api/v1/inboxes/:inbox_id/contacts/:contact_id", Controller: "public/api/v1/inboxes/contacts#update", Source: "routes.rb:572"},
|
|
{Method: "GET", Path: "/public/api/v1/inboxes/:inbox_id/contacts/:contact_id/conversations", Controller: "public/api/v1/inboxes/conversations#index", Source: "routes.rb:573"},
|
|
{Method: "POST", Path: "/public/api/v1/inboxes/:inbox_id/contacts/:contact_id/conversations", Controller: "public/api/v1/inboxes/conversations#create", Source: "routes.rb:573"},
|
|
{Method: "GET", Path: "/public/api/v1/inboxes/:inbox_id/contacts/:contact_id/conversations/:conversation_id", Controller: "public/api/v1/inboxes/conversations#show", Source: "routes.rb:573"},
|
|
{Method: "POST", Path: "/public/api/v1/inboxes/:inbox_id/contacts/:contact_id/conversations/:conversation_id/toggle_status", Controller: "public/api/v1/inboxes/conversations#toggle_status", Source: "routes.rb:575"},
|
|
{Method: "POST", Path: "/public/api/v1/inboxes/:inbox_id/contacts/:contact_id/conversations/:conversation_id/toggle_typing", Controller: "public/api/v1/inboxes/conversations#toggle_typing", Source: "routes.rb:576"},
|
|
{Method: "POST", Path: "/public/api/v1/inboxes/:inbox_id/contacts/:contact_id/conversations/:conversation_id/update_last_seen", Controller: "public/api/v1/inboxes/conversations#update_last_seen", Source: "routes.rb:577"},
|
|
{Method: "GET", Path: "/public/api/v1/inboxes/:inbox_id/contacts/:contact_id/conversations/:conversation_id/messages", Controller: "public/api/v1/inboxes/messages#index", Source: "routes.rb:580"},
|
|
{Method: "POST", Path: "/public/api/v1/inboxes/:inbox_id/contacts/:contact_id/conversations/:conversation_id/messages", Controller: "public/api/v1/inboxes/messages#create", Source: "routes.rb:580"},
|
|
{Method: "PUT", Path: "/public/api/v1/inboxes/:inbox_id/contacts/:contact_id/conversations/:conversation_id/messages/:message_id", Controller: "public/api/v1/inboxes/messages#update", Source: "routes.rb:580"},
|
|
{Method: "GET", Path: "/public/api/v1/csat_survey/:id", Controller: "public/api/v1/csat_survey#show", Source: "routes.rb:585"},
|
|
{Method: "PUT", Path: "/public/api/v1/csat_survey/:id", Controller: "public/api/v1/csat_survey#update", Source: "routes.rb:585"},
|
|
{Method: "GET", Path: "/hc/:slug", Controller: "public/api/v1/portals#show", Source: "routes.rb:590"},
|
|
{Method: "GET", Path: "/hc/:slug/sitemap.xml", Controller: "public/api/v1/portals#sitemap", Source: "routes.rb:591"},
|
|
{Method: "GET", Path: "/hc/:slug/:locale", Controller: "public/api/v1/portals#show", Source: "routes.rb:592"},
|
|
{Method: "GET", Path: "/hc/:slug/:locale/search", Controller: "public/api/v1/portals/search#index", Source: "routes.rb:593"},
|
|
{Method: "GET", Path: "/hc/:slug/:locale/articles", Controller: "public/api/v1/portals/articles#index", Source: "routes.rb:594"},
|
|
{Method: "GET", Path: "/hc/:slug/:locale/articles.json", Controller: "public/api/v1/portals/articles#index", Source: "routes.rb:594"},
|
|
{Method: "GET", Path: "/hc/:slug/:locale/categories", Controller: "public/api/v1/portals/categories#index", Source: "routes.rb:595"},
|
|
{Method: "GET", Path: "/hc/:slug/:locale/categories.json", Controller: "public/api/v1/portals/categories#index", Source: "routes.rb:595"},
|
|
{Method: "GET", Path: "/hc/:slug/:locale/categories/:category_slug", Controller: "public/api/v1/portals/categories#show", Source: "routes.rb:596"},
|
|
{Method: "GET", Path: "/hc/:slug/:locale/categories/:category_slug/articles", Controller: "public/api/v1/portals/articles#index", Source: "routes.rb:597"},
|
|
{Method: "GET", Path: "/hc/:slug/:locale/categories/:category_slug/articles.json", Controller: "public/api/v1/portals/articles#index", Source: "routes.rb:597"},
|
|
{Method: "GET", Path: "/hc/:slug/articles/:article_slug.png", Controller: "public/api/v1/portals/articles#tracking_pixel", Source: "routes.rb:598"},
|
|
{Method: "GET", Path: "/hc/:slug/articles/:article_slug.md", Controller: "public/api/v1/portals/articles#show_markdown", Source: "routes.rb:599"},
|
|
{Method: "GET", Path: "/hc/:slug/articles/:article_slug", Controller: "public/api/v1/portals/articles#show", Source: "routes.rb:601"},
|
|
|
|
{Method: "POST", Path: "/api/v2/accounts/", Controller: "api/v2/accounts#create", Source: "routes.rb:478"},
|
|
{Method: "GET", Path: "/api/v2/accounts/:account_id/summary_reports/agent", Controller: "api/v2/accounts/summary_reports#agent", Source: "routes.rb:481"},
|
|
{Method: "GET", Path: "/api/v2/accounts/:account_id/summary_reports/team", Controller: "api/v2/accounts/summary_reports#team", Source: "routes.rb:482"},
|
|
{Method: "GET", Path: "/api/v2/accounts/:account_id/summary_reports/inbox", Controller: "api/v2/accounts/summary_reports#inbox", Source: "routes.rb:483"},
|
|
{Method: "GET", Path: "/api/v2/accounts/:account_id/summary_reports/label", Controller: "api/v2/accounts/summary_reports#label", Source: "routes.rb:484"},
|
|
{Method: "GET", Path: "/api/v2/accounts/:account_id/summary_reports/channel", Controller: "api/v2/accounts/summary_reports#channel", Source: "routes.rb:485"},
|
|
{Method: "GET", Path: "/api/v2/accounts/:account_id/reports", Controller: "api/v2/accounts/reports#index", Source: "routes.rb:488"},
|
|
{Method: "GET", Path: "/api/v2/accounts/:account_id/reports/summary", Controller: "api/v2/accounts/reports#summary", Source: "routes.rb:491"},
|
|
{Method: "GET", Path: "/api/v2/accounts/:account_id/reports/bot_summary", Controller: "api/v2/accounts/reports#bot_summary", Source: "routes.rb:492"},
|
|
{Method: "GET", Path: "/api/v2/accounts/:account_id/reports/agents", Controller: "api/v2/accounts/reports#agents", Source: "routes.rb:493"},
|
|
{Method: "GET", Path: "/api/v2/accounts/:account_id/reports/inboxes", Controller: "api/v2/accounts/reports#inboxes", Source: "routes.rb:494"},
|
|
{Method: "GET", Path: "/api/v2/accounts/:account_id/reports/labels", Controller: "api/v2/accounts/reports#labels", Source: "routes.rb:495"},
|
|
{Method: "GET", Path: "/api/v2/accounts/:account_id/reports/teams", Controller: "api/v2/accounts/reports#teams", Source: "routes.rb:496"},
|
|
{Method: "GET", Path: "/api/v2/accounts/:account_id/reports/conversations", Controller: "api/v2/accounts/reports#conversations", Source: "routes.rb:497"},
|
|
{Method: "GET", Path: "/api/v2/accounts/:account_id/reports/conversations_summary", Controller: "api/v2/accounts/reports#conversations_summary", Source: "routes.rb:498"},
|
|
{Method: "GET", Path: "/api/v2/accounts/:account_id/reports/conversation_traffic", Controller: "api/v2/accounts/reports#conversation_traffic", Source: "routes.rb:499"},
|
|
{Method: "GET", Path: "/api/v2/accounts/:account_id/reports/bot_metrics", Controller: "api/v2/accounts/reports#bot_metrics", Source: "routes.rb:500"},
|
|
{Method: "GET", Path: "/api/v2/accounts/:account_id/reports/inbox_label_matrix", Controller: "api/v2/accounts/reports#inbox_label_matrix", Source: "routes.rb:501"},
|
|
{Method: "GET", Path: "/api/v2/accounts/:account_id/reports/first_response_time_distribution", Controller: "api/v2/accounts/reports#first_response_time_distribution", Source: "routes.rb:502"},
|
|
{Method: "GET", Path: "/api/v2/accounts/:account_id/reports/outgoing_messages_count", Controller: "api/v2/accounts/reports#outgoing_messages_count", Source: "routes.rb:503"},
|
|
{Method: "GET", Path: "/api/v2/accounts/:account_id/live_reports/conversation_metrics", Controller: "api/v2/accounts/live_reports#conversation_metrics", Source: "routes.rb:508"},
|
|
{Method: "GET", Path: "/api/v2/accounts/:account_id/live_reports/grouped_conversation_metrics", Controller: "api/v2/accounts/live_reports#grouped_conversation_metrics", Source: "routes.rb:509"},
|
|
}
|
|
|
|
func main() {
|
|
gochatPath := flag.String("gochat", "docs/parity/gochat_routes.txt", "GoChat route dump")
|
|
chatwootPath := flag.String("chatwoot", "reference/chatwoot/config/routes.rb", "Chatwoot routes.rb path")
|
|
outPath := flag.String("out", "docs/parity/route_parity.md", "route parity markdown output")
|
|
chatwootOut := flag.String("chatwoot-out", "docs/parity/chatwoot_routes_static.md", "Chatwoot static route source output")
|
|
flag.Parse()
|
|
|
|
gochatRoutes, err := readRouteDump(*gochatPath)
|
|
fatalIf(err)
|
|
decls, err := extractChatwootDecls(*chatwootPath)
|
|
fatalIf(err)
|
|
fatalIf(writeChatwootSource(*chatwootOut, *chatwootPath, decls))
|
|
fatalIf(writeParity(*outPath, *gochatPath, *chatwootPath, gochatRoutes))
|
|
}
|
|
|
|
func readRouteDump(path string) (map[string]route, error) {
|
|
f, err := os.Open(path)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer f.Close()
|
|
|
|
routes := map[string]route{}
|
|
scanner := bufio.NewScanner(f)
|
|
for scanner.Scan() {
|
|
line := strings.TrimSpace(scanner.Text())
|
|
if line == "" || strings.HasPrefix(line, "TOTAL:") {
|
|
continue
|
|
}
|
|
parts := strings.Fields(line)
|
|
if len(parts) < 2 {
|
|
continue
|
|
}
|
|
r := route{Method: parts[0], Path: parts[1]}
|
|
routes[key(r.Method, r.Path)] = r
|
|
}
|
|
return routes, scanner.Err()
|
|
}
|
|
|
|
func extractChatwootDecls(path string) ([]sourceDecl, error) {
|
|
f, err := os.Open(path)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer f.Close()
|
|
|
|
interesting := regexp.MustCompile(`^\s*(namespace|scope|resources?|get|post|put|patch|delete|mount|mount_devise_token_auth_for)\b`)
|
|
var out []sourceDecl
|
|
scanner := bufio.NewScanner(f)
|
|
lineNo := 0
|
|
for scanner.Scan() {
|
|
lineNo++
|
|
line := scanner.Text()
|
|
trimmed := strings.TrimSpace(line)
|
|
if trimmed == "" || strings.HasPrefix(trimmed, "#") {
|
|
continue
|
|
}
|
|
if interesting.MatchString(line) {
|
|
out = append(out, sourceDecl{Line: lineNo, Text: trimmed})
|
|
}
|
|
}
|
|
return out, scanner.Err()
|
|
}
|
|
|
|
func writeChatwootSource(path string, source string, decls []sourceDecl) error {
|
|
var b strings.Builder
|
|
b.WriteString("# Chatwoot Route Source Declarations\n\n")
|
|
b.WriteString("Source: `" + source + "`\n\n")
|
|
b.WriteString("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.\n\n")
|
|
b.WriteString("| Line | Declaration |\n")
|
|
b.WriteString("| --- | --- |\n")
|
|
for _, decl := range decls {
|
|
b.WriteString(fmt.Sprintf("| %d | `%s` |\n", decl.Line, escapePipes(decl.Text)))
|
|
}
|
|
return os.WriteFile(path, []byte(b.String()), 0o644)
|
|
}
|
|
|
|
func writeParity(path string, gochatPath string, chatwootPath string, gochatRoutes map[string]route) error {
|
|
var exact, methodCompatible, compatible, missing []route
|
|
for _, expected := range criticalRoutes {
|
|
if _, ok := gochatRoutes[key(expected.Method, expected.Path)]; ok {
|
|
exact = append(exact, expected)
|
|
continue
|
|
}
|
|
if hasMethodCompatible(gochatRoutes, expected) {
|
|
methodCompatible = append(methodCompatible, expected)
|
|
continue
|
|
}
|
|
if hasParamCompatible(gochatRoutes, expected) {
|
|
compatible = append(compatible, expected)
|
|
continue
|
|
}
|
|
missing = append(missing, expected)
|
|
}
|
|
|
|
sortRoutes(exact)
|
|
sortRoutes(methodCompatible)
|
|
sortRoutes(compatible)
|
|
sortRoutes(missing)
|
|
|
|
var b strings.Builder
|
|
b.WriteString("# Route Parity Report\n\n")
|
|
b.WriteString("Generated from:\n\n")
|
|
b.WriteString("- GoChat route dump: `" + gochatPath + "`\n")
|
|
b.WriteString("- Chatwoot route source: `" + chatwootPath + "`\n\n")
|
|
b.WriteString("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`.\n\n")
|
|
b.WriteString(fmt.Sprintf("Summary: %d exact, %d method-compatible, %d parameter-compatible, %d missing out of %d tracked critical routes.\n\n", len(exact), len(methodCompatible), len(compatible), len(missing), len(criticalRoutes)))
|
|
|
|
b.WriteString("## Missing Critical Routes\n\n")
|
|
writeRouteTable(&b, missing, gochatRoutes, "missing")
|
|
b.WriteString("\n## Method-Compatible Routes\n\n")
|
|
b.WriteString("These routes exist at the same path but with a compatible HTTP method. Rails resource `update` routes expose both `PATCH` and `PUT`; GoChat currently exposes only one method for some update endpoints. Keep these tracked until both methods are registered or the frontend is proven to call only the implemented method.\n\n")
|
|
writeRouteTable(&b, methodCompatible, gochatRoutes, "method-compatible")
|
|
b.WriteString("\n## Parameter-Compatible Routes\n\n")
|
|
b.WriteString("These routes exist with equivalent method and path shape but different parameter names or a Gin-compatible suffix dispatcher. They need handler/serializer parity review, and exact external path compatibility must be preserved.\n\n")
|
|
writeRouteTable(&b, compatible, gochatRoutes, "parameter-compatible")
|
|
b.WriteString("\n## Exact Critical Routes\n\n")
|
|
writeRouteTable(&b, exact, gochatRoutes, "exact")
|
|
|
|
return os.WriteFile(path, []byte(b.String()), 0o644)
|
|
}
|
|
|
|
func writeRouteTable(b *strings.Builder, routes []route, gochatRoutes map[string]route, status string) {
|
|
b.WriteString("| Method | Chatwoot Path | GoChat Match | Controller | Source | Status |\n")
|
|
b.WriteString("| --- | --- | --- | --- | --- | --- |\n")
|
|
if len(routes) == 0 {
|
|
b.WriteString("| - | - | - | - | - | none |\n")
|
|
return
|
|
}
|
|
for _, r := range routes {
|
|
match := "-"
|
|
if status == "exact" {
|
|
match = r.Path
|
|
} else if status == "method-compatible" {
|
|
match = methodCompatibleRoute(gochatRoutes, r)
|
|
} else if status == "parameter-compatible" {
|
|
match = compatiblePath(gochatRoutes, r)
|
|
}
|
|
b.WriteString(fmt.Sprintf("| %s | `%s` | `%s` | `%s` | `%s` | %s |\n", r.Method, r.Path, match, r.Controller, r.Source, status))
|
|
}
|
|
}
|
|
|
|
func hasMethodCompatible(routes map[string]route, expected route) bool {
|
|
return methodCompatibleRoute(routes, expected) != "-"
|
|
}
|
|
|
|
func methodCompatibleRoute(routes map[string]route, expected route) string {
|
|
for _, method := range compatibleMethods(expected.Method) {
|
|
if _, ok := routes[key(method, expected.Path)]; ok {
|
|
return method + " " + expected.Path
|
|
}
|
|
}
|
|
return "-"
|
|
}
|
|
|
|
func compatibleMethods(method string) []string {
|
|
switch method {
|
|
case "PUT":
|
|
return []string{"PATCH"}
|
|
case "PATCH":
|
|
return []string{"PUT"}
|
|
default:
|
|
return nil
|
|
}
|
|
}
|
|
|
|
func hasParamCompatible(routes map[string]route, expected route) bool {
|
|
return compatiblePath(routes, expected) != "-"
|
|
}
|
|
|
|
func compatiblePath(routes map[string]route, expected route) string {
|
|
normExpected := normalizeParams(expected.Path)
|
|
for _, r := range routes {
|
|
if r.Method == expected.Method && normalizeParams(r.Path) == normExpected {
|
|
return r.Path
|
|
}
|
|
}
|
|
return "-"
|
|
}
|
|
|
|
func normalizeParams(path string) string {
|
|
parts := strings.Split(path, "/")
|
|
for i, part := range parts {
|
|
if strings.HasPrefix(part, ":") {
|
|
parts[i] = ":param"
|
|
}
|
|
}
|
|
return strings.Join(parts, "/")
|
|
}
|
|
|
|
func key(method, path string) string {
|
|
return method + " " + path
|
|
}
|
|
|
|
func sortRoutes(routes []route) {
|
|
sort.Slice(routes, func(i, j int) bool {
|
|
if routes[i].Method != routes[j].Method {
|
|
return routes[i].Method < routes[j].Method
|
|
}
|
|
return routes[i].Path < routes[j].Path
|
|
})
|
|
}
|
|
|
|
func escapePipes(s string) string {
|
|
return strings.ReplaceAll(s, "|", "\\|")
|
|
}
|
|
|
|
func fatalIf(err error) {
|
|
if err != nil {
|
|
fmt.Fprintln(os.Stderr, err)
|
|
os.Exit(1)
|
|
}
|
|
}
|