iachat/app/javascript/dashboard/i18n/locale/it/inboxMgmt.json
Gabriel Jablonski b03dfdb751
Chore/merge upstream 4.8.0 (#150)
* chore: Hide "Learn More" button in feature spotlight for self-hosted (#12675)

* feat: single query for reporting event stats (#12664)

This PR collapses multiple queries fetching stats from a single table to
a single query

```sql
SELECT 
  user_id as user_id,
  COUNT(CASE WHEN name = 'conversation_resolved' THEN 1 END) as resolved_count,
  AVG(CASE WHEN name = 'conversation_resolved' THEN value END) as avg_resolution_time,
  AVG(CASE WHEN name = 'first_response' THEN value END) as avg_first_response_time,
  AVG(CASE WHEN name = 'reply_time' THEN value END) as avg_reply_time 
FROM "reporting_events"
WHERE 
  "reporting_events"."account_id" = <account_id> AND 
  "reporting_events"."created_at" >= '2025-09-14 18:30:00' AND 
  "reporting_events"."created_at" < '2025-10-14 18:29:59'
GROUP BY "reporting_events"."user_id";
```

### Why this works?

Here's why this optimization is faster based on PostgreSQL internals:

- Single Table Scan vs Multiple Scans: Earlier we did 4 sequential scans
(or 4 index scans) of the same data, with the same where clause, now in
a single scan all 4 `CASE` expressions are evaluated in a single pass.
- Shared Buffer Cache Efficiency: PostgreSQL's shared buffer cache
stores recently accessed pages, with this, pages are loaded once and
re-used for all aggregation, earlier with separate queries we were
forced to re-read all from the disk each time
- Reduced planning and network overhead (4 vs 1 query)


### How is it tested

1. The specs all pass without making any changes
2. Verified the reports side by side after generating from report seeder

#### How to test

Generate seed data using the following command

```bash
ACCOUNT_ID=1 ENABLE_ACCOUNT_SEEDING=true bundle exec rake db:seed:reports_data
```

Once done download the reports, checkout to this branch and download the
reports again and compare them

* chore: Update translations (#12625)

* chore: Migrate mailers from the worker to jobs (#12331)

Previously, email replies were handled inside workers. There was no
execution logs. This meant if emails silently failed (as reported by a
customer), we had no way to trace where the issue happened, the only
assumption was “no error = mail sent.”

By moving email handling into jobs, we now have proper execution logs
for each attempt. This makes it easier to debug delivery issues and
would have better visibility when investigating customer reports.

Fixes
https://linear.app/chatwoot/issue/CW-5538/emails-are-not-sentdelivered-to-the-contact

---------

Co-authored-by: Sojan Jose <sojan@pepalo.com>
Co-authored-by: Shivam Mishra <scm.mymail@gmail.com>

* chore(deps-dev): bump vite from 5.4.20 to 5.4.21 (#12700)

Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite)
from 5.4.20 to 5.4.21.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/vitejs/vite/releases">vite's
releases</a>.</em></p>
<blockquote>
<h2>v5.4.21</h2>
<p>Please refer to <a
href="https://github.com/vitejs/vite/blob/v5.4.21/packages/vite/CHANGELOG.md">CHANGELOG.md</a>
for details.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/vitejs/vite/blob/v5.4.21/packages/vite/CHANGELOG.md">vite's
changelog</a>.</em></p>
<blockquote>
<h2><!-- raw HTML omitted -->5.4.21 (2025-10-20)<!-- raw HTML omitted
--></h2>
<ul>
<li>fix(dev): trim trailing slash before <code>server.fs.deny</code>
check (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/20968">#20968</a>)
(<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/20970">#20970</a>)
(<a
href="cad1d31d06">cad1d31</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/20968">#20968</a>
<a
href="https://redirect.github.com/vitejs/vite/issues/20970">#20970</a></li>
<li>chore: update CHANGELOG (<a
href="ca88ed7398">ca88ed7</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="adce3c22c6"><code>adce3c2</code></a>
release: v5.4.21</li>
<li><a
href="cad1d31d06"><code>cad1d31</code></a>
fix(dev): trim trailing slash before <code>server.fs.deny</code> check
(<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/20968">#20968</a>)
(<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/20970">#20970</a>)</li>
<li><a
href="ca88ed7398"><code>ca88ed7</code></a>
chore: update CHANGELOG</li>
<li>See full diff in <a
href="https://github.com/vitejs/vite/commits/v5.4.21/packages/vite">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=vite&package-manager=npm_and_yarn&previous-version=5.4.20&new-version=5.4.21)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/chatwoot/chatwoot/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore: Update translations (#12708)

* chore(sidekiq): log ActiveJob class and job_id on dequeue (#12704)

## Context

Sidekiq logs only showed the Sidekiq wrapper class and JID, which wasn’t
helpful when debugging ActiveJobs.

## Changes

- Updated `ChatwootDequeuedLogger` to log the actual `ActiveJob class`
and `job_id` instead of the generic Sidekiq wrapper and JID.

> Example
> ```
> Dequeued ActionMailer::MailDeliveryJob
123e4567-e89b-12d3-a456-426614174000 from default
> ```

- Remove sidekiq worker and unify everything to `ActiveJob`

* chore: Enforce custom role permissions on conversation access (#12583)

## Summary
- ensure conversation lookup uses the permission filter before fetching
records
- add request specs covering custom role access to unassigned
conversations

## Testing
- bundle exec rspec
spec/enterprise/controllers/api/v1/accounts/conversations_controller_spec.rb

------
https://chatgpt.com/codex/tasks/task_e_68de1f62b9b883268a54882e608a8bb8

* fix: parameterize agent name (#12709)

* chore: Remove channel icons from the create inbox page (#12727)

# Pull Request Template

## Description
This PR removes the frame containing all channel icons from the “Create
Inbox” page.

## Type of change

- [x] Bug fix (non-breaking change which fixes an issue)

## How Has This Been Tested?

### Screenshots

**Before**
<img width="1314" height="1016" alt="image"
src="https://github.com/user-attachments/assets/2b773495-9ddb-48b4-b15d-9aef18259ce1"
/>


**After**
<img width="1314" height="979" alt="image"
src="https://github.com/user-attachments/assets/f4dc64cf-516c-4faf-a45c-2f7de05cc29b"
/>



## Checklist:

- [x] My code follows the style guidelines of this project
- [x] I have performed a self-review of my code
- [ ] I have commented on my code, particularly in hard-to-understand
areas
- [ ] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [x] New and existing unit tests pass locally with my changes
- [ ] Any dependent changes have been merged and published in downstream
modules

* fix: Use gap-4 instead of margins to define space between elements (#12728)

We should avoid using margins to define space between elements, instead
use the gap utility.

The problem with this particular instance was that if Google auth was
turned off and SSO is available, there is a weird spacing at the top
caused by the margin from the SSO element.

This PR will fix that. It also introduces a gap between the divider and
the button, but that should be okay.

* feat(ee): Add a service to fetch website content and prepare a persona of Captain Assistant (#12732)

This PR is the first of many to simplify the process of building an
assistant. The new flow will only require the user’s website. We’ll
automatically crawl it, identify the business name and what the business
does, and then generate a suggested assistant persona, complete with a
proposed name and description.

This service returns the following.
Example: tooljet.com
<img width="795" height="217" alt="Screenshot 2025-10-25 at 2 55 04 PM"
src="https://github.com/user-attachments/assets/9cb3594a-9c9c-4970-a0a1-4c9c8869c193"
/>

Example: replit.com
<img width="797" height="176" alt="Screenshot 2025-10-25 at 2 56 42 PM"
src="https://github.com/user-attachments/assets/6a1b4266-aab6-455f-a5e3-696d3a8243c9"
/>

* chore: Adds URL-based search and tab selection (#12663)

# Pull Request Template

## Description

This PR enables URL-based search and tab selection, allowing search
queries and active tabs to persist in the URL for easy sharing.

Fixes
[CW-5766](https://linear.app/chatwoot/issue/CW-5766/cannot-impersonate-an-account),
https://github.com/chatwoot/chatwoot/issues/12623

## Type of change

- [x] New feature (non-breaking change which adds functionality)

## How Has This Been Tested?

### Loom video

https://www.loom.com/share/422a1d61f3fe4278a88e352ef98d2b78?sid=35fabee7-652f-4e17-83bd-e066a3bb804c

## Checklist:

- [x] My code follows the style guidelines of this project
- [x] I have performed a self-review of my code
- [x] I have commented on my code, particularly in hard-to-understand
areas
- [ ] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [x] New and existing unit tests pass locally with my changes
- [ ] Any dependent changes have been merged and published in downstream
modules

* chore: Add tab params for inbox configuration (#12665)

# Pull Request Template

## Description

This PR enables active tabs in inbox settings to persist in the URL for
easy sharing.

## Type of change

- [x] New feature (non-breaking change which adds functionality)

## How Has This Been Tested?

### Loom video

https://www.loom.com/share/63820ecb17ea491a9082339f8bb457b6?sid=4fef1acd-b4fd-431f-855c-7647015a330f


## Checklist:

- [x] My code follows the style guidelines of this project
- [x] I have performed a self-review of my code
- [x] I have commented on my code, particularly in hard-to-understand
areas
- [ ] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [x] New and existing unit tests pass locally with my changes
- [ ] Any dependent changes have been merged and published in downstream
modules

---------

Co-authored-by: Muhsin <muhsinkeramam@gmail.com>

* feat: Changelog card components (#12673)

# Pull Request Template

## Description

This PR introduces a new changelog component that can be used in the
sidebar.

Fixes
https://linear.app/chatwoot/issue/CW-5776/changelog-card-ui-component

## Type of change

- [x] New feature (non-breaking change which adds functionality)

## How Has This Been Tested?

### Screencast



https://github.com/user-attachments/assets/42e77e82-388a-4fc9-9b37-f3d0ea1a9d7f







## Checklist:

- [x] My code follows the style guidelines of this project
- [x] I have performed a self-review of my code
- [x] I have commented on my code, particularly in hard-to-understand
areas
- [ ] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [x] New and existing unit tests pass locally with my changes
- [ ] Any dependent changes have been merged and published in downstream
modules

---------

Co-authored-by: Muhsin <muhsinkeramam@gmail.com>

* chore: Remove linear integration feature flag (#12716)

This PR removes the linear integration feature flag since the
integration is pretty much stable and we do display the Linear CTA for
users who aren't connected.
Fixes
https://linear.app/chatwoot/issue/CW-5819/remove-linear-feature-flag-from-front-end

* chore: Update translations (#12722)

Co-authored-by: Sivin Varghese <64252451+iamsivin@users.noreply.github.com>

* perf: Add database index on conversations identifier (#12715)

**Problem**
Slack webhook processing was failing with 500 errors due to database
timeouts. The query `Conversation.where(identifier:
params[:event][:thread_ts]).first` was performing full table scans and
hitting PostgreSQL statement timeout.

**Solution**
Added database index on conversations.identifier and account_id.

* fix: Extend phone number normalization to Twilio WhatsApp (#12655)

### Problem
WhatsApp Cloud channels already handle Brazil/Argentina phone number
format mismatches (PRs #12492, #11173), but Twilio WhatsApp channels
were creating duplicate contacts
  when:
  - Template sent to new format: `whatsapp:+5541988887777` (13 digits)
  - User responds from old format: `whatsapp:+554188887777` (12 digits)

### Solution

The solution extends the existing phone number normalization
infrastructure to support both WhatsApp providers while handling their
different payload formats:

  ### Provider Format Differences
  - **WhatsApp Cloud**: `wa_id: "919745786257"` (clean number)
- **Twilio WhatsApp**: `From: "whatsapp:+919745786257"` (prefixed
format)
  
  
 ### Test Coverage

#### Brazil Phone Number Tests
  **Case 1: New Format (13 digits with "9")**
- **Test 1**: No existing contact → Creates new contact with original
format
- **Test 2**: Contact exists in same format → Appends to existing
conversation

  **Case 2: Old Format (12 digits without "9")**
- **Test 3**: Contact exists in old format → Appends to existing
conversation
- **Test 4** *(Critical)*: Contact exists in new format, message in old
format → Finds existing contact, prevents duplicate
- **Test 5**: No contact exists → Creates new contact with incoming
format

#### Argentina Phone Number Tests
  **Case 3: With "9" after country code**
  - **Test 6**: No existing contact → Creates new contact
- **Test 7**: Contact exists in normalized format → Uses existing
contact

  **Case 4: Without "9" after country code**
  - **Test 8**: Contact exists in same format → Appends to existing
  - **Test 9**: No contact exists → Creates new contact

Fixes
https://linear.app/chatwoot/issue/CW-5565/inconsistencies-for-mobile-numbersargentina-brazil-and-mexico-numbers

* fix: Timezone offset reports broken by DST transition (#12747)

## Description

Fixes timezone offset parameter in V2 reports API that was broken by DST
transitions. The issue occurred when UK DST ended on October 26, 2025,
causing the test to fail starting October 27th.

~~**Initial diagnosis:** The root cause was that
`timezone_name_from_offset` used `zone.now.utc_offset` to match
timezones, which changes based on the current date's DST status rather
than the data being queried.~~

**Actual root cause:** The test was accidentally passing before DST
transition. During BST, `timezone_name_from_offset(0)` matched "Azores"
(UTC-1) instead of "Edinburgh" (UTC+0), and the -1 hour offset
coincidentally split midnight data into [1,5]. After DST ended, it
correctly matched "Edinburgh" (UTC+0), but this grouped all
conversations into one day [6], exposing that the test data was flawed.

The real issue: Test data created all 6 conversations starting at
midnight on a single day, which cannot produce a [1,5] split in true
UTC.

Fixes CW-5846

## Type of change

- [x] Bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing
functionality not to work as expected)
- [ ] This change requires a documentation update

## How Has This Been Tested?

**Test that was failing:**
```bash
bundle exec rspec spec/controllers/api/v2/accounts/reports_controller_spec.rb:25
```

**Changes:**
~~1. Fixed `timezone_name_from_offset` to use January 1st as reference
date instead of current date~~
~~2. Converted timezone string to `ActiveSupport::TimeZone` object for
`group_by_period` compatibility~~

**Revised approach:**
1. Freeze test time to January 2024 using `travel_to`, making timezone
matching deterministic and aligned with test data period
2. Start test conversations at 23:00 instead of midnight to properly
span two days and test timezone boundary grouping
3. Keep `zone.now.utc_offset` (correct behavior for real users during
DST)

**Why this works:**
- Test runs "in January 2024" → `zone.now.utc_offset` returns January
offsets consistently
- Offset `-8` correctly matches Pacific Standard Time (UTC-8 in January)
- Real users in PDT (summer) with offset `-7` → correctly match Pacific
Daylight Time
- No production impact, test is deterministic year-round

**Verification:**
- Test now passes consistently regardless of current DST status
- Timezone matching works correctly for real users during DST periods
- Reports correctly group data by timezone offset across all seasons

## Checklist:

- [x] My code follows the style guidelines of this project
- [x] I have performed a self-review of my code
- [x] I have commented on my code, particularly in hard-to-understand
areas
- [ ] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [x] I have added tests that prove my fix is effective or that my
feature works
- [x] New and existing unit tests pass locally with my changes
- [x] Any dependent changes have been merged and published in downstream
modules

---------

Co-authored-by: Shivam Mishra <scm.mymail@gmail.com>
Co-authored-by: Muhsin Keloth <muhsinkeramam@gmail.com>

* fix: Captain response builder not getting triggered (#12729)

## Summary
- Fix captain response builder not getting triggered for cases where
responses are created as completed.

## Testing Instructions 
- Test articles with firecrawl
- Test articles without firecrawl
- Test PDF documents

---------

Co-authored-by: Pranav <pranav@chatwoot.com>

* chore: Update captain pending FAQ interface (#12752)

# Pull Request Template

## Description

**This PR includes,**
- Added new pending FAQs view with approve/edit/delete actions for each
response.
- Implemented banner notification showing pending FAQ count on main
approved responses page.
- Created dedicated route for pending FAQs review at
/captain/responses/pending.
- Added automatic pending count updates when switching assistants or
routes.
- Modified ResponseCard component to show action buttons instead of
dropdown in pending view.

Fixes
https://linear.app/chatwoot/issue/CW-5833/pending-faqs-in-a-different-ux

## Type of change

- [x] New feature (non-breaking change which adds functionality)

## How Has This Been Tested?

### Loom video
https://www.loom.com/share/5fe8f79b04cd4681b9360c48710b9373


## Checklist:

- [x] My code follows the style guidelines of this project
- [x] I have performed a self-review of my code
- [x] I have commented on my code, particularly in hard-to-understand
areas
- [ ] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [x] New and existing unit tests pass locally with my changes
- [ ] Any dependent changes have been merged and published in downstream
modules

---------

Co-authored-by: Pranav <pranav@chatwoot.com>

* fix: Exclude authentication templates from WhatsApp template selection (#12753)

This PR add the changes for excluding the authentication templates from
the WhatsApp template selection in the frontend, as these templates are
not supported at the moment. Reference:
https://www.chatwoot.com/hc/user-guide/articles/1754940076-whatsapp-templates#what-is-not-supported

* feat: Template types components (#12714)

# Pull Request Template

## Description

Fixes
https://linear.app/chatwoot/issue/CW-5806/create-the-story-book-components-for-template-typestext-media-list

**Pending**
Need to standardize the structure to match the template/campaigns.


## Type of change

- [x] New feature (non-breaking change which adds functionality)

## How Has This Been Tested?

### Screenshots

<img width="669" height="179" alt="image"
src="https://github.com/user-attachments/assets/42efd292-8520-4b05-81ec-8bc526fc12db"
/>
<img width="646" height="304" alt="image"
src="https://github.com/user-attachments/assets/431dd964-006c-4877-a693-dae39b90df4c"
/>
<img width="646" height="380" alt="image"
src="https://github.com/user-attachments/assets/9052e31f-9292-4afb-8897-13931655fa00"
/>
<img width="646" height="272" alt="image"
src="https://github.com/user-attachments/assets/873d2488-e856-4a0d-8579-cc1bcc61cc8e"
/>
<img width="646" height="490" alt="image"
src="https://github.com/user-attachments/assets/14c2aa42-bf27-475f-aa70-fe59c1d00e9b"
/>
<img width="646" height="281" alt="image"
src="https://github.com/user-attachments/assets/1f42408e-03e8-4863-b4c7-715d13d67686"
/>



## Checklist:

- [x] My code follows the style guidelines of this project
- [x] I have performed a self-review of my code
- [ ] I have commented on my code, particularly in hard-to-understand
areas
- [ ] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [x] New and existing unit tests pass locally with my changes
- [ ] Any dependent changes have been merged and published in downstream
modules

Co-authored-by: Muhsin Keloth <muhsinkeramam@gmail.com>

* fix: update omniauth to latest to resolve heroku deployment issues (#12749)

# Pull Request Template

## Description

Fixes https://github.com/chatwoot/chatwoot/issues/12553

Heroku build was failing due to `omniauth` version mismatch. Also, added
`NODE_OPTIONS=--max-old-space-size=4096` to handle OOM during Vite
build.

## Type of change

Please delete options that are not relevant.

- [x] Bug fix (non-breaking change which fixes an issue)

## How Has This Been Tested?

- Tested on heroku

## Checklist:

- [x] My code follows the style guidelines of this project
- [x] I have performed a self-review of my code
- [x] I have commented on my code, particularly in hard-to-understand
areas
- [x] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [x] I have added tests that prove my fix is effective or that my
feature works
- [x] New and existing unit tests pass locally with my changes
- [x] Any dependent changes have been merged and published in downstream
modules

* chore: Improvements in pending FAQs (#12755)

# Pull Request Template

## Description

**This PR includes:**

1. Added URL-based filter persistence for the responses pages, including
page and search parameters.
2. Introduced a new empty state variant for pending FAQs — without a
backdrop and with a “Clear Filters” option.
3. Made the actions, filter, and search row remain fixed at the top
while scrolling.

Fixes
https://linear.app/chatwoot/issue/CW-5852/improvements-in-pending-faqs

## Type of change

- [x] New feature (non-breaking change which adds functionality)

## How Has This Been Tested?

### Loom video
https://www.loom.com/share/1d9eee68c0684f0ab05e08b4ca1e0ce9


## Checklist:

- [x] My code follows the style guidelines of this project
- [x] I have performed a self-review of my code
- [ ] I have commented on my code, particularly in hard-to-understand
areas
- [ ] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [x] New and existing unit tests pass locally with my changes
- [ ] Any dependent changes have been merged and published in downstream
modules

* fix: run captain v2 outside the transaction (#12756)

* feat: Always process email content (#12734)

Co-authored-by: Muhsin Keloth <muhsinkeramam@gmail.com>

* feat: Bulk actions for contacts (#12763)

Introduces APIs and UI for bulk actions in contacts table. The initial
action available will be assign labels

Fixes: #8536 #12253 

## Screens

<img width="1350" height="747" alt="Screenshot 2025-10-29 at 4 05 08 PM"
src="https://github.com/user-attachments/assets/0792dff5-0371-4b2e-bdfb-cd32db773402"
/>
<img width="1345" height="717" alt="Screenshot 2025-10-29 at 4 05 19 PM"
src="https://github.com/user-attachments/assets/ae510404-c6de-4c15-a720-f6d10cdac25b"
/>

---------

Co-authored-by: Muhsin <muhsinkeramam@gmail.com>
Co-authored-by: iamsivin <iamsivin@gmail.com>
Co-authored-by: Sivin Varghese <64252451+iamsivin@users.noreply.github.com>

* feat: Enable opensearch on paid plans automatically (#12770)

- enable `advanced_search feature` on all paid plans automatically

ref: https://github.com/chatwoot/chatwoot/pull/12503

* chore: Make contacts bulk action bar sticky (#12773)

# Pull Request Template

## Description

This PR makes the contacts bulk action bar sticky while scrolling.

## Type of change

- [x] Bug fix (non-breaking change which fixes an issue)

## How Has This Been Tested?

### Screenshots
<img width="1080" height="300" alt="image"
src="https://github.com/user-attachments/assets/21f8f3c6-813e-4ef6-b40a-8dd14e6ffb26"
/>
<img width="1080" height="300" alt="image"
src="https://github.com/user-attachments/assets/bb939f1d-9a13-4f9f-953d-b9872c984b74"
/>



## Checklist:

- [x] My code follows the style guidelines of this project
- [x] I have performed a self-review of my code
- [ ] I have commented on my code, particularly in hard-to-understand
areas
- [ ] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [x] New and existing unit tests pass locally with my changes
- [ ] Any dependent changes have been merged and published in downstream
modules

* chore: Add dependant destroy_async for sla events (#12774)

Added the destroy_async to prevent timeout during SLA policy deletion by
processing SLA events asynchronously.

* chore: Update translations (#12748)

* feat: Add company backfill migration for existing contacts (Part 1) (#12657)

## Description

Implements company backfill migration infrastructure for existing
contacts. This is **Part 1 of 2** for the company model production
rollout as described in
[CW-5726](https://linear.app/chatwoot/issue/CW-5726/company-model-setting-it-up-on-production).

Creates jobs and services to associate existing contacts with companies
based on their email domains, filtering out free email providers (gmail,
yahoo, etc.) and disposable addresses.
 

**What's included:**
- Business email detector service with ValidEmail2 (uses
`disposable_domain?` to avoid DNS lookups)
- Per-account batch job to process contacts for one account
- Orchestrator job to iterate all accounts
- Rake task: `bundle exec rake companies:backfill`

~~*NOTE*: I'm using a hard-coded approach to determine if something is a
"business" email by filtering out emails that are usually personal. I've
also added domains that are common to some of our customers' regions.
This should be simpler. I looked into `Valid_Email2` and I couldn't find
anything to dictate whether an email is a personal email or a business
one. I don't think the approach used in the frontend is valid here.~~
UPDATE: Using `email_provider_info` gem instead.


**Pending - Part 2 (separate PR):** Real-time company creation for new
contacts

## Type of change

- [x] New feature (non-breaking change which adds functionality)

## How Has This Been Tested?

```bash
# Run all new tests
bundle exec rspec spec/enterprise/services/companies/business_email_detector_service_spec.rb \\
                   spec/enterprise/jobs/migration/company_account_batch_job_spec.rb \\
                   spec/enterprise/jobs/migration/company_backfill_job_spec.rb

# Run RuboCop
bundle exec rubocop enterprise/app/services/companies/business_email_detector_service.rb \\
                     enterprise/app/jobs/migration/company_account_batch_job.rb \\
                     enterprise/app/jobs/migration/company_backfill_job.rb \\
                     lib/tasks/companies.rake
```

**Performance optimization:**
- Uses `disposable_domain?` instead of `disposable?` to avoid DNS MX
lookups (discovered via tcpdump analysis - `disposable?` was making
network calls for every email, causing 100x slowdown)

## Checklist:

- [x] My code follows the style guidelines of this project
- [x] I have performed a self-review of my code
- [x] I have commented on my code, particularly in hard-to-understand
areas
- [ ] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [x] I have added tests that prove my fix is effective or that my
feature works
- [x] New and existing unit tests pass locally with my changes
- [ ] Any dependent changes have been merged and published in downstream
modules

---------

Co-authored-by: Sojan Jose <sojan@pepalo.com>

* feat: Add company auto-association for contacts (CW-5726 Part 2) (#12711)

## Description

Implements real-time company auto-association for contacts based on
email domains. This is **Part 2** of the company model production
rollout (CW-5726).

**Task:**
- When a contact is created with a business email, automatically create
and associate a company from the email domain
- When a contact is updated with an email for the first time (email was
previously nil), associate with a company
- Preserve existing company associations when email changes to avoid
user confusion
- Skip free email providers and disposable domains

**Dependencies:**
⚠️ Requires PR #12657 (Part 1: Backfill migration) to be merged first

**Linear ticket:**
[CW-5726](https://linear.app/chatwoot/issue/CW-5726/company-model-setting-it-up-on-production)

## Type of change

- [x] New feature (non-breaking change which adds functionality)

## How Has This Been Tested?

- Service specs: Tests business email detection, company creation,
association logic, edge cases (existing companies, free emails, nil
emails)
- Integration specs: Tests full callback flow for contact create/update
scenarios
- All tests passing: 10 examples, 0 failures
- RuboCop: 0 offenses

## Checklist:

- [x] My code follows the style guidelines of this project
- [x] I have performed a self-review of my code
- [x] I have commented on my code, particularly in hard-to-understand
areas
- [x] My changes generate no new warnings
- [x] I have added tests that prove my fix is effective or that my
feature works
- [x] New and existing unit tests pass locally with my changes
- [ ] Any dependent changes have been merged and published in downstream
modules (PR #12657 pending)

---------

Co-authored-by: Sojan Jose <sojan@pepalo.com>

* fix: Optimize Message search_data to prevent OpenSearch field explosion (#12786)

## Description

Refactored the `Message#search_data` method to prevent exceeding
OpenSearch's 1000 field limit during reindex operations.

**Problem:** The previous implementation serialized entire ActiveRecord
objects (Inbox, Sender, Conversation) with all their JSONB fields,
causing dynamic field explosion in OpenSearch. This resulted in
`Searchkick::ImportError` with "Limit of total fields [1000] has been
exceeded".

**Solution:** Whitelisted only necessary fields for search and
filtering, and flattened JSONB `custom_attributes` into key-value pair
arrays to prevent unbounded field creation.

Linked to: CW-5861

## Type of change

- [x] Bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing
functionality not to work as expected)
- [x] This change requires a documentation update

## How Has This Been Tested?

- Verified rubocop passes with no offenses
- Code review of search field usage from
`enterprise/app/services/enterprise/search_service.rb`
- Analyzed actual search queries to determine required indexed fields

**Still needed:**
- Full reindex test on staging/production environment
- Verify search functionality still works after reindex
- Confirm field count is under 1000 limit

## Changes Made

### Before
- Indexed 1000+ fields (entire AR objects with JSONB)
- `inbox` = full Inbox object (23+ fields + JSONB)
- `sender` = full Contact/User/AgentBot object (10+ fields + JSONB)
- `conversation` = full push_event_data
- Dynamic JSONB keys creating unlimited fields

### After
- ~35-40 controlled fields
- Whitelisted search fields: `content`, `attachment_transcribed_text`,
`email_subject`
- Filter fields: `account_id`, `inbox_id`, `conversation_id`,
`sender_id`, `sender_type`, etc.
- Flattened `custom_attributes`: `[{key, value, value_type}]` format
- Helper methods: `search_conversation_data`, `search_inbox_data`,
`search_sender_data`, `search_additional_data`

## Checklist:

- [x] My code follows the style guidelines of this project
- [x] I have performed a self-review of my code
- [x] I have commented on my code, particularly in hard-to-understand
areas
- [ ] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] New and existing unit tests pass locally with my changes
- [ ] Any dependent changes have been merged and published in downstream
modules

## Post-merge Steps

After merging, the following steps are required:

1. **Reindex all messages:**
   ```bash
   bundle exec rails runner "Message.reindex"
   ```

2. **Verify field count:**
   ```bash
   bundle exec rails runner "
     client = Searchkick.client
     index_name = Message.searchkick_index.name
     mapping = client.indices.get_mapping(index: index_name)
     fields = mapping.dig(index_name, 'mappings', 'properties')
     puts 'Total fields: ' + fields.keys.count.to_s
   "
   ```

3. **Test search functionality** to ensure queries still work as
expected

---------

Co-authored-by: Vishnu Narayanan <iamwishnu@gmail.com>
Co-authored-by: Pranav <pranav@chatwoot.com>

* fix: Avoid introducing new attributes in search (#12791)

Fix `Limit of total fields [1000] has been exceeded`


https://linear.app/chatwoot/issue/CW-5861/searchkickimporterror-type-=-illegal-argument-exception-reason-=-limit#comment-6b6e41bd

* fix: Gate Sidekiq dequeue logger behind env (#12790)

## Summary
- wrap the dequeue middleware registration in a boolean env flag
- document the ENABLE_SIDEKIQ_DEQUEUE_LOGGER option in .env.example

* feat: Bulk delete for contacts (#12778)

Introduces a new bulk action `delete` for contacts

ref: https://github.com/chatwoot/chatwoot/pull/12763

## Screens

<img width="1492" height="973" alt="Screenshot 2025-10-31 at 6 27 21 PM"
src="https://github.com/user-attachments/assets/30dab1bb-2c2c-4168-9800-44e0eb5f8e3a"
/>
<img width="1492" height="985" alt="Screenshot 2025-10-31 at 6 27 32 PM"
src="https://github.com/user-attachments/assets/5be610c4-b19e-4614-a164-103b22337382"
/>

* fix: Video bubble click and play issue (#12764)

Co-authored-by: Muhsin Keloth <muhsinkeramam@gmail.com>

* feat: Differentiate bot and user in the summary (#12801)

While generating the summary, use the appropriate sender type for the
message.

* fix: Invalid image URL issue in Help Center articles (#12806)

* feat: allow bots to handle campaigns when sender_id is nil (#12805)

* fix: Add empty line before signature in compose conversation editor (#12702)

Co-authored-by: Shivam Mishra <scm.mymail@gmail.com>

* feat: Enhance button interactions (#12738)

* fix: Remove the same account validation for whatsapp channels (#12811)

## Description

Modified the phone number validation in Whatsapp::ChannelCreationService
to check for duplicate phone numbers across ALL accounts, not just
within the current account.

## Type of change

- [ ] Bug fix (non-breaking change which fixes an issue)

## How Has This Been Tested?

- Added test coverage for cross-account phone number validation
- Using actual UI flow 
<img width="1493" height="532" alt="image"
src="https://github.com/user-attachments/assets/67d2bb99-2eb9-4115-8d56-449e4785e0d8"
/>


## Checklist:

- [ ] My code follows the style guidelines of this project
- [ ] I have performed a self-review of my code
- [ ] I have commented on my code, particularly in hard-to-understand
areas
- [ ] I have made corresponding changes to the documentation
- [ ] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] New and existing unit tests pass locally with my changes
- [ ] Any dependent changes have been merged and published in downstream
modules

* feat: Update Captain navigation structure (#12761)

# Pull Request Template

## Description

This PR includes an update to the Captain navigation structure.

## Route Structure

```javascript
1. captain_assistants_responses_index    → /captain/:assistantId/faqs
2. captain_assistants_documents_index    → /captain/:assistantId/documents
3. captain_assistants_scenarios_index    → /captain/:assistantId/scenarios
4. captain_assistants_playground_index   → /captain/:assistantId/playground
5. captain_assistants_inboxes_index      → /captain/:assistantId/inboxes
6. captain_tools_index                   → /captain/tools
7. captain_assistants_settings_index     → /captain/:assistantId/settings
8. captain_assistants_guardrails_index   → /captain/:assistantId/settings/guardrails
9. captain_assistants_guidelines_index   → /captain/:assistantId/settings/guidelines
10. captain_assistants_index             → /captain/:navigationPath
```

**How it works:**

1. User clicks sidebar item → Routes to `captain_assistants_index` with
`navigationPath`
2. `AssistantsIndexPage` validates route and gets last active assistant,
if not redirects to assistant create page.
3. Routes to actual page: `/captain/:assistantId/:page`
4. Page loads with correct assistant context

Fixes
https://linear.app/chatwoot/issue/CW-5832/updating-captain-navigation

## Type of change

- [x] New feature (non-breaking change which adds functionality)

## How Has This Been Tested?




## Checklist:

- [x] My code follows the style guidelines of this project
- [x] I have performed a self-review of my code
- [ ] I have commented on my code, particularly in hard-to-understand
areas
- [ ] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [x] New and existing unit tests pass locally with my changes
- [ ] Any dependent changes have been merged and published in downstream
modules

---------

Co-authored-by: Pranav <pranav@chatwoot.com>
Co-authored-by: Sojan Jose <sojan@pepalo.com>

* fix: Handle login when there are no accounts (#12816)

* chore: Update translations (#12794)

* chore(docs): Fix typos in some files (#12817)

This PR fixes typos in the file file using codespell.

* refactor: strategy pattern for mailbox conversation finding (#12766)

Co-authored-by: Pranav <pranav@chatwoot.com>
Co-authored-by: Muhsin Keloth <muhsinkeramam@gmail.com>

* fix: Issue with processing variables in outgoing email content (#12799)

Co-authored-by: Shivam Mishra <scm.mymail@gmail.com>
Co-authored-by: Vinay Keerthi <11478411+stonecharioteer@users.noreply.github.com>
Co-authored-by: Sojan Jose <sojan@pepalo.com>

* fix: hide pdf citations in captain faq responses (#12839)

* fix: Use contact_id instead of sender_id for Instagram message locks (#12841)

Previously, the lock key for Instagram used sender_id, which for echo
messages (outgoing) would be the account's own ID. This caused all
outgoing messages to compete for the same lock, creating a bottleneck
during bulk messaging.

The fix introduces contact_instagram_id method that correctly identifies
the contact's ID regardless of message direction:
- For echo messages (outgoing): uses recipient.id (the contact)
- For incoming messages: uses sender.id (the contact)

This ensures each conversation has a unique lock, allowing parallel
processing of webhooks while maintaining race condition protection
within individual conversations.

Fixes lock acquisition errors in Sidekiq when processing bulk Instagram
messages.

Fixes
https://linear.app/chatwoot/issue/CW-5931/p0-mutexapplicationjoblockacquisitionerror-failed-to-acquire-lock-for

## Type of change

- [x] Bug fix (non-breaking change which fixes an issue)

* fix: label tags for contactable inboxes (#12838)

* chore: Improve captain layout (#12820)

* feat: allow selecting month range in overview reports (#12701)

Co-authored-by: Sivin Varghese <64252451+iamsivin@users.noreply.github.com>
Co-authored-by: iamsivin <iamsivin@gmail.com>

* fix: respect status parameter when creating articles via API (#12846)

## Description

The Articles API was ignoring the `status` parameter when creating new
articles. All articles were forced to be drafts due to a hardcoded
`@article.draft!` call in the controller, even when users explicitly
sent `status: 1` (published) in their API request.

This PR removes the hardcoded draft enforcement and allows the status
parameter to be respected while maintaining backward compatibility.

Fixes #12063

## Type of change

- [x] Bug fix (non-breaking change which fixes an issue)

## How Has This Been Tested?

**Before:**
- API POST with `status: 1` → Created as draft (ignored parameter)
- API POST without status → Created as draft

**After:**
- API POST with `status: 1` → Created as published 
- API POST without status → Created as draft (backward compatible) 
- UI creates articles → Still creates as draft (UI doesn't send status)


**Tests run:**
```bash
bundle exec rspec spec/controllers/api/v1/accounts/articles_controller_spec.rb
# 17 examples, 0 failures
```

Updated tests:
1. Changed 2 existing tests that were verifying the broken behavior
(expecting draft when published was sent)
2. Added new test to verify articles default to draft when status is not
provided
3. All existing tests pass, confirming backward compatibility

## Checklist:

- [x] My code follows the style guidelines of this project
- [x] I have performed a self-review of my code
- [x] My changes generate no new warnings
- [x] I have added tests that prove my fix is effective or that my
feature works
- [x] New and existing unit tests pass locally with my changes

Co-authored-by: Sojan Jose <sojan@pepalo.com>

* feat: allow querying reporting events via the API (#12832)

* feat(webhooks): add name to webhook (#12641)

## Description

When working with webhooks, it's easy to lose track of which URL is
which. Adding a `name` (optional) column to the webhook model is a
straight-forward solution to make it significantly easier to identify
webhooks.

## Type of change

- [x] New feature (non-breaking change which adds functionality)

## How Has This Been Tested?

Model and controller specs, and also running in production over several
months without any issues.

| Before | After |
| --- | --- |
| <img width="949" height="990" alt="image copy 3"
src="https://github.com/user-attachments/assets/6b33c072-7d16-4a9c-a129-f9c0751299f5"
/> | <img width="806" height="941" alt="image"
src="https://github.com/user-attachments/assets/77f3cb3a-2eb0-41ac-95bf-d02915589690"
/> |
| <img width="1231" height="650" alt="image copy 2"
src="https://github.com/user-attachments/assets/583374af-96e0-4436-b026-4ce79b7f9321"
/> | <img width="1252" height="650" alt="image copy"
src="https://github.com/user-attachments/assets/aa81fb31-fd18-4e21-a40e-d8ab0dc76b4e"
/> |


## Checklist:

- [x] My code follows the style guidelines of this project
- [x] I have performed a self-review of my code
- [x] I have commented on my code, particularly in hard-to-understand
areas
- [x] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [x] I have added tests that prove my fix is effective or that my
feature works
- [x] New and existing unit tests pass locally with my changes
- [x] Any dependent changes have been merged and published in downstream
modules

* perf: speed up docker builds (#12859)

- Use separate keys to avoid cache overwrites across different
architecture builds


https://linear.app/chatwoot/issue/CW-5945/perf-speed-up-docker-builds

### 25 mins  ---> 5mins


## before

<img width="971" height="452" alt="image"
src="https://github.com/user-attachments/assets/535cebd6-6c16-48d1-a62d-ffb6f2fc9b08"
/>


## after
<img width="940" height="428" alt="image"
src="https://github.com/user-attachments/assets/359eb313-4bb5-4e0e-9492-a8ad48645159"
/>

* chore: Update missing places with new colors (#12862)

# Pull Request Template

## Description

This PR updates the colors in places that were missed during the color
update migration.

## Type of change

- [x] Bug fix (non-breaking change which fixes an issue)


## Checklist:

- [x] My code follows the style guidelines of this project
- [x] I have performed a self-review of my code
- [ ] I have commented on my code, particularly in hard-to-understand
areas
- [ ] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [x] New and existing unit tests pass locally with my changes
- [ ] Any dependent changes have been merged and published in downstream
modules

* fix: Brand installation name not showing (#12861)

# Pull Request Template

## Description

Fixes
https://linear.app/chatwoot/issue/CW-5946/fix-brand-installation-name-issue-in-dyte

## Type of change

- [x] Bug fix (non-breaking change which fixes an issue)


## Checklist:

- [x] My code follows the style guidelines of this project
- [x] I have performed a self-review of my code
- [ ] I have commented on my code, particularly in hard-to-understand
areas
- [ ] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [x] New and existing unit tests pass locally with my changes
- [ ] Any dependent changes have been merged and published in downstream
modules

* fix: migrate from deprecated annotate gem to annotaterb (#12845)

## Description

The `annotate` gem has been deprecated and users are experiencing
annotation errors with the new Rails 7 `serialize` syntax. This PR
migrates to `annotaterb`, the actively maintained fork.

Users reported errors when running `make db`:
```
Unable to annotate app/models/installation_config.rb: no implicit conversion of Hash into String  
Unable to annotate app/models/installation_config.rb: no implicit conversion of nil into Array
```

This PR updates the Gemfile and rake configuration to use `annotaterb`
instead.

Fixes #11673

## Type of change

- [x] Bug fix (non-breaking change which fixes an issue)

## How Has This Been Tested?

Tested locally with the following steps:
1. Run `bundle install` - successfully installed annotaterb 4.20.0
2. Run `RAILS_ENV=development bundle exec rails db:chatwoot_prepare` -
completed without annotation errors
3. Run `RAILS_ENV=development bundle exec rails annotate_rb:models` -
successfully annotated all models including InstallationConfig
4. Verified InstallationConfig model annotations are present and correct

## Checklist:

- [x] My code follows the style guidelines of this project
- [x] I have performed a self-review of my code
- [x] My changes generate no new warnings
- [x] New and existing unit tests pass locally with my changes

* chore: disable worker MemoryHigh throttling in systemd unit (#12871)

- set MemoryHigh to infinity in deployment/chatwoot-worker.1.service so
the worker is throttled only by the existing
    MemoryMax hard limit
- prevents cgroup reclaim from slowing Sidekiq under transient spikes
while still keeping the hard stop at 1.5 GB

* chore: Update translations (#12818)

* fix: revert annotaterb migration due to persistent annotation errors (#12881)

## Description

This PR reverts the migration from the `annotate` gem to `annotaterb`
introduced in PR #12845. The annotation errors reported in #11673
persist with both gems, and the old `annotate` gem handles the errors
more gracefully by continuing to process other models instead of
crashing.

**Testing reveals both gems fail with the same underlying issue:**

**Old annotate gem (3.2.0):**
```
Unable to annotate app/models/installation_config.rb: no implicit conversion of Hash into String
Unable to annotate app/models/installation_config.rb: no implicit conversion of nil into Array
Model files unchanged.
```
(Logs error but continues processing)

**New annotaterb gem (4.20.0):**
```
❯ bundle exec annotaterb models
ruby/3.4.4/lib/ruby/gems/3.4.0/gems/reline-0.3.6/lib/reline/terminfo.rb:2: warning: ruby/3.4.4/lib/ruby/3.4.0/fiddle.rb was loaded from the standard library, but will no longer be part of the default gems starting from Ruby 3.5.0.
You can add fiddle to your Gemfile or gemspec to silence this warning.
Also please contact the author of reline-0.3.6 to request adding fiddle into its gemspec.
Annotating models
bundler: failed to load command: annotaterb (ruby/3.4.4/bin/annotaterb)
ruby/3.4.4/lib/ruby/3.4.0/psych/parser.rb:62:in 'Psych::Parser#_native_parse': no implicit conversion of Hash into String (TypeError)

      _native_parse @handler, yaml, path
                    ^^^^^^^^^^^^^^^^^^^^
        from ruby/3.4.4/lib/ruby/3.4.0/psych/parser.rb:62:in 'Psych::Parser#parse'
        from ruby/3.4.4/lib/ruby/3.4.0/psych.rb:457:in 'Psych.parse_stream'
        from ruby/3.4.4/lib/ruby/3.4.0/psych.rb:401:in 'Psych.parse'
        from ruby/3.4.4/lib/ruby/3.4.0/psych.rb:325:in 'Psych.safe_load'
        from ruby/3.4.4/lib/ruby/gems/3.4.0/gems/activerecord-7.1.5.2/lib/active_record/coders/yaml_column.rb:37:in 'ActiveRecord::Coders::YAMLColumn::SafeCoder#load'
        from ruby/3.4.4/lib/ruby/gems/3.4.0/gems/activerecord-7.1.5.2/lib/active_record/coders/column_serializer.rb:37:in 'ActiveRecord::Coders::ColumnSerializer#load'
        from ruby/3.4.4/lib/ruby/gems/3.4.0/gems/activerecord-7.1.5.2/lib/active_record/type/serialized.rb:22:in 'ActiveRecord::Type::Serialized#deserialize'
        from ruby/3.4.4/lib/ruby/gems/3.4.0/gems/activemodel-7.1.5.2/lib/active_model/attribute.rb:175:in 'ActiveModel::Attribute::FromDatabase#type_cast'
        from ruby/3.4.4/lib/ruby/gems/3.4.0/gems/activemodel-7.1.5.2/lib/active_model/attribute.rb:43:in 'ActiveModel::Attribute#value'
        from ruby/3.4.4/lib/ruby/gems/3.4.0/gems/activemodel-7.1.5.2/lib/active_model/attribute_set.rb:37:in 'block in ActiveModel::AttributeSet#to_hash'
        from ruby/3.4.4/lib/ruby/gems/3.4.0/gems/activesupport-7.1.5.2/lib/active_support/core_ext/enumerable.rb:78:in 'block in Enumerable#index_with'
        from ruby/3.4.4/lib/ruby/gems/3.4.0/gems/activesupport-7.1.5.2/lib/active_support/core_ext/enumerable.rb:78:in 'Array#each'
        from ruby/3.4.4/lib/ruby/gems/3.4.0/gems/activesupport-7.1.5.2/lib/active_support/core_ext/enumerable.rb:78:in 'Enumerable#index_with'
        from ruby/3.4.4/lib/ruby/gems/3.4.0/gems/activemodel-7.1.5.2/lib/active_model/attribute_set.rb:37:in 'ActiveModel::AttributeSet#to_hash'
        from ruby/3.4.4/lib/ruby/gems/3.4.0/gems/activerecord-7.1.5.2/lib/active_record/model_schema.rb:499:in 'ActiveRecord::ModelSchema::ClassMethods#column_defaults'
        from ruby/3.4.4/lib/ruby/gems/3.4.0/gems/annotaterb-4.20.0/lib/annotate_rb/model_annotator/model_wrapper.rb:68:in 'AnnotateRb::ModelAnnotator::ModelWrapper#column_defaults'
        from ruby/3.4.4/lib/ruby/gems/3.4.0/gems/annotaterb-4.20.0/lib/annotate_rb/model_annotator/model_wrapper.rb:139:in 'block in AnnotateRb::ModelAnnotator::ModelWrapper#built_attributes'
        from ruby/3.4.4/lib/ruby/gems/3.4.0/gems/annotaterb-4.20.0/lib/annotate_rb/model_annotator/model_wrapper.rb:136:in 'Array#map'
        from ruby/3.4.4/lib/ruby/gems/3.4.0/gems/annotaterb-4.20.0/lib/annotate_rb/model_annotator/model_wrapper.rb:136:in 'AnnotateRb::ModelAnnotator::ModelWrapper#built_attributes'
        from ruby/3.4.4/lib/ruby/gems/3.4.0/gems/annotaterb-4.20.0/lib/annotate_rb/model_annotator/column_annotation/annotation_builder.rb:15:in 'AnnotateRb::ModelAnnotator::ColumnAnnotation::AnnotationBuilder#build'
        from ruby/3.4.4/lib/ruby/gems/3.4.0/gems/annotaterb-4.20.0/lib/annotate_rb/model_annotator/annotation/annotation_builder.rb:52:in 'block in AnnotateRb::ModelAnnotator::Annotation::AnnotationBuilder::Annotation#columns'
        from ruby/3.4.4/lib/ruby/gems/3.4.0/gems/annotaterb-4.20.0/lib/annotate_rb/model_annotator/annotation/annotation_builder.rb:51:in 'Array#map'
        from ruby/3.4.4/lib/ruby/gems/3.4.0/gems/annotaterb-4.20.0/lib/annotate_rb/model_annotator/annotation/annotation_builder.rb:51:in 'AnnotateRb::ModelAnnotator::Annotation::AnnotationBuilder::Annotation#columns'
        from ruby/3.4.4/lib/ruby/gems/3.4.0/gems/annotaterb-4.20.0/lib/annotate_rb/model_annotator/annotation/annotation_builder.rb:26:in 'AnnotateRb::ModelAnnotator::Annotation::AnnotationBuilder::Annotation#body'
        from ruby/3.4.4/lib/ruby/gems/3.4.0/gems/annotaterb-4.20.0/lib/annotate_rb/model_annotator/annotation/annotation_builder.rb:35:in 'AnnotateRb::ModelAnnotator::Annotation::AnnotationBuilder::Annotation#build'
        from ruby/3.4.4/lib/ruby/gems/3.4.0/gems/annotaterb-4.20.0/lib/annotate_rb/model_annotator/annotation/annotation_builder.rb:71:in 'AnnotateRb::ModelAnnotator::Annotation::AnnotationBuilder#build'
        from ruby/3.4.4/lib/ruby/gems/3.4.0/gems/annotaterb-4.20.0/lib/annotate_rb/model_annotator/project_annotator.rb:43:in 'AnnotateRb::ModelAnnotator::ProjectAnnotator#build_instructions_for_file'
        from ruby/3.4.4/lib/ruby/gems/3.4.0/gems/annotaterb-4.20.0/lib/annotate_rb/model_annotator/project_annotator.rb:17:in 'block in AnnotateRb::ModelAnnotator::ProjectAnnotator#annotate'
        from ruby/3.4.4/lib/ruby/gems/3.4.0/gems/annotaterb-4.20.0/lib/annotate_rb/model_annotator/project_annotator.rb:13:in 'Array#map'
        from ruby/3.4.4/lib/ruby/gems/3.4.0/gems/annotaterb-4.20.0/lib/annotate_rb/model_annotator/project_annotator.rb:13:in 'AnnotateRb::ModelAnnotator::ProjectAnnotator#annotate'
        from ruby/3.4.4/lib/ruby/gems/3.4.0/gems/annotaterb-4.20.0/lib/annotate_rb/model_annotator/annotator.rb:21:in 'AnnotateRb::ModelAnnotator::Annotator#do_annotations'
        from ruby/3.4.4/lib/ruby/gems/3.4.0/gems/annotaterb-4.20.0/lib/annotate_rb/model_annotator/annotator.rb:8:in 'AnnotateRb::ModelAnnotator::Annotator.do_annotations'
        from ruby/3.4.4/lib/ruby/gems/3.4.0/gems/annotaterb-4.20.0/lib/annotate_rb/commands/annotate_models.rb:17:in 'AnnotateRb::Commands::AnnotateModels#call'
        from ruby/3.4.4/lib/ruby/gems/3.4.0/gems/annotaterb-4.20.0/lib/annotate_rb/runner.rb:38:in 'AnnotateRb::Runner#run'
        from ruby/3.4.4/lib/ruby/gems/3.4.0/gems/annotaterb-4.20.0/lib/annotate_rb/runner.rb:11:in 'AnnotateRb::Runner.run'
        from ruby/3.4.4/lib/ruby/gems/3.4.0/gems/annotaterb-4.20.0/exe/annotaterb:18:in '<top (required)>'
        from ruby/3.4.4/bin/annotaterb:25:in 'Kernel#load'
        from ruby/3.4.4/bin/annotaterb:25:in '<top (required)>'
        from ruby/3.4.4/lib/ruby/gems/3.4.0/gems/bundler-2.5.16/lib/bundler/cli/exec.rb:58:in 'Kernel.load'
        from ruby/3.4.4/lib/ruby/gems/3.4.0/gems/bundler-2.5.16/lib/bundler/cli/exec.rb:58:in 'Bundler::CLI::Exec#kernel_load'
        from ruby/3.4.4/lib/ruby/gems/3.4.0/gems/bundler-2.5.16/lib/bundler/cli/exec.rb:23:in 'Bundler::CLI::Exec#run'
        from ruby/3.4.4/lib/ruby/gems/3.4.0/gems/bundler-2.5.16/lib/bundler/cli.rb:455:in 'Bundler::CLI#exec'
        from ruby/3.4.4/lib/ruby/gems/3.4.0/gems/bundler-2.5.16/lib/bundler/vendor/thor/lib/thor/command.rb:28:in 'Bundler::Thor::Command#run'
        from ruby/3.4.4/lib/ruby/gems/3.4.0/gems/bundler-2.5.16/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in 'Bundler::Thor::Invocation#invoke_command'
        from ruby/3.4.4/lib/ruby/gems/3.4.0/gems/bundler-2.5.16/lib/bundler/vendor/thor/lib/thor.rb:527:in 'Bundler::Thor.dispatch'
        from ruby/3.4.4/lib/ruby/gems/3.4.0/gems/bundler-2.5.16/lib/bundler/cli.rb:35:in 'Bundler::CLI.dispatch'
        from ruby/3.4.4/lib/ruby/gems/3.4.0/gems/bundler-2.5.16/lib/bundler/vendor/thor/lib/thor/base.rb:584:in 'Bundler::Thor::Base::ClassMethods#start'
        from ruby/3.4.4/lib/ruby/gems/3.4.0/gems/bundler-2.5.16/lib/bundler/cli.rb:29:in 'Bundler::CLI.start'
        from ruby/3.4.4/lib/ruby/gems/3.4.0/gems/bundler-2.5.16/exe/bundle:28:in 'block in <top (required)>'
        from ruby/3.4.4/lib/ruby/gems/3.4.0/gems/bundler-2.5.16/lib/bundler/friendly_errors.rb:117:in 'Bundler.with_friendly_errors'
        from ruby/3.4.4/lib/ruby/gems/3.4.0/gems/bundler-2.5.16/exe/bundle:20:in '<top (required)>'
        from ruby/3.4.4/bin/bundle:25:in 'Kernel#load'
        from ruby/3.4.4/bin/bundle:25:in '<main>'


```
(Crashes immediately, stops all processing)

**Root cause:** The `InstallationConfig` model uses YAML serialization
(`serialize :serialized_value, coder: YAML`) on a JSONB database column.
When annotation tools read column defaults, PostgreSQL returns JSONB as
a Hash, but YAML expects a String, causing the type error.

The migration to annotaterb doesn't solve the problem - both gems
encounter the same error. The old gem is preferable as it continues
working despite the error.

Reverts #12845
Related to #11673

## Type of change

- [x] Bug fix (non-breaking change which fixes an issue)

## How Has This Been Tested?

1. Reverted commit 559d1b657
2. Ran `bundle install` to reinstall annotate gem v3.2.0
3. Ran `RAILS_ENV=development bundle exec annotate` 
- Result: Logs errors for InstallationConfig but completes successfully
4. Re-applied the annotaterb changes and tested `bundle exec annotaterb
models`
   - Result: Crashes with full stack trace and stops processing

## Checklist:

- [x] My code follows the style guidelines of this project
- [x] I have performed a self-review of my code
- [x] My changes generate no new warnings
- [x] New and existing unit tests pass locally with my changes


---
*Edited to truncate environment-specific info from error dump*

* chore: Hide assistant switcher on paywall screen (#12875)

* feat: Assignment service (v2) (#12320)

## Linear Link

 
## Description

This PR introduces a new robust auto-assignment system for conversations
in Chatwoot. The system replaces the existing round-robin assignment
with a more sophisticated service-based architecture that supports
multiple assignment strategies, rate limiting, and Enterprise features
like capacity-based assignment and balanced distribution.

## Type of change

- [ ] New feature (non-breaking change which adds functionality)

## How Has This Been Tested?

- Unit test cases
- Test conversations getting assigned on status change to open
- Test the job directly via rails console

## Checklist:

- [ ] My code follows the style guidelines of this project
- [ ] I have performed a self-review of my code
- [ ] I have commented on my code, particularly in hard-to-understand
areas
- [ ] I have made corresponding changes to the documentation
- [ ] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] New and existing unit tests pass locally with my changes
- [ ] Any dependent changes have been merged and published in downstream
modules

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> Adds a new service-based auto-assignment system with scheduled jobs,
rate limiting, enterprise capacity/balanced selection, and wiring via
inbox/handler; includes Redis helpers and comprehensive tests.
> 
> - **Auto-assignment v2 (core services)**:
> - Add `AutoAssignment::AssignmentService` with bulk assignment,
configurable conversation priority, RR selection, and per-agent rate
limiting via `AutoAssignment::RateLimiter`.
>   - Add `AutoAssignment::RoundRobinSelector` for agent selection.
> - **Jobs & scheduling**:
> - Add `AutoAssignment::AssignmentJob` (per-inbox bulk assign;
env-based limit) and `AutoAssignment::PeriodicAssignmentJob` (batch over
accounts/inboxes).
> - Schedule periodic run in `config/schedule.yml`
(`periodic_assignment_job`).
> - **Model/concerns wiring**:
> - Include `InboxAgentAvailability` in `Inbox`; add
`Inbox#auto_assignment_v2_enabled?`.
> - Update `AutoAssignmentHandler` to trigger v2 job when
`auto_assignment_v2_enabled?`, else fallback to legacy.
> - **Enterprise extensions**:
> - Add `Enterprise::InboxAgentAvailability` (capacity-aware filtering)
and `Enterprise::Concerns::Inbox` association `inbox_capacity_limits`.
> - Extend service via `Enterprise::AutoAssignment::AssignmentService`
(policy-driven config, capacity filtering, exclusion rules) and add
selectors/services: `BalancedSelector`, `CapacityService`.
> - **Infrastructure**:
> - Enhance `Redis::Alfred` with `expire`, key scan/count, and extended
ZSET helpers (`zadd`, `zcount`, `zcard`, `zrangebyscore`).
> - **Tests**:
> - Add specs for jobs, core service, rate limiter, RR selector, and
enterprise features (capacity, balanced selection, exclusions).
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
0ebe187c8aea73765b0122a44b18d6f465c2477f. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

---------

Co-authored-by: Muhsin Keloth <muhsinkeramam@gmail.com>
Co-authored-by: Shivam Mishra <scm.mymail@gmail.com>

* fix: Change contact_inboxes.source_id to text column (#12882)

## Description

Fixes CW-5961 where IMAP email processing failed with
`ActiveRecord::RecordInvalid: Validation failed: Source is too long
(maximum is 255 characters)` error.

This changes the `contact_inboxes.source_id` column from `string` (255
character limit) to `text` (unlimited) to accommodate long email message
IDs that were causing validation failures.

Fixes CW-5961

## Type of change

- [x] Bug fix (non-breaking change which fixes an issue)

## How Has This Been Tested?

- Added spec test validating `source_id` values longer than 255
characters (300 chars)
- All existing `contact_inbox_spec.rb` tests pass (7 examples, 0
failures)
- Migration applied successfully with reversible up/down methods
- Verified `source_id` column type changed to `text` with `null: false`
constraint preserved

## Checklist:

- [x] My code follows the style guidelines of this project
- [x] I have performed a self-review of my code
- [x] My changes generate no new warnings
- [x] I have added tests that prove my fix is effective or that my
feature works
- [x] New and existing unit tests pass locally with my changes

* feat: allow configuring attachment upload limit (#12835)

## Summary
- add a configurable MAXIMUM_FILE_UPLOAD_SIZE installation setting and
surface it through super admin and global config payloads
- apply the configurable limit to attachment validations and shared
upload helpers on dashboard and widget
- introduce a reusable helper with unit tests for parsing the limit and
extend attachment specs for configurability


------
[Codex
Task](https://chatgpt.com/codex/tasks/task_e_6912644786b08326bc8dee9401af6d0a)

---------

Co-authored-by: Sivin Varghese <64252451+iamsivin@users.noreply.github.com>
Co-authored-by: iamsivin <iamsivin@gmail.com>

* feat: Customizable webhook timeout configuration (#12777)

## Summary
- Ability to configure the webhook timeout for Chatwoot self hosted
installations

fixes: https://github.com/chatwoot/chatwoot/issues/12754

* feat: Control the allowed login methods via Super Admin (#12892)

- Control the allowed authentication methods for a chatwoot installation
via super admin configs. [SAML, Google Auth etc]
------
[Codex
Task](https://chatgpt.com/codex/tasks/task_e_6917d503b6e48326a261672c1de91462)

---------

Co-authored-by: Pranav <pranav@chatwoot.com>
Co-authored-by: Sivin Varghese <64252451+iamsivin@users.noreply.github.com>

* chore: Update translations (#12876)

* feat: Backend - Companies API endpoint with pagination and search (#12840)

## Description

Adds API endpoint to list companies with pagination, search, and
sorting.

Fixes
https://linear.app/chatwoot/issue/CW-5930/add-backend-routes-to-get-companies-result
Parent issue:
https://linear.app/chatwoot/issue/CW-5928/add-companies-tab-to-dashboard

## Type of change

- [x] New feature (non-breaking change which adds functionality)

## How Has This Been Tested?

Added comprehensive specs to
`spec/enterprise/controllers/api/v1/accounts/companies_controller_spec.rb`:
- Pagination (25 per page, multiple pages)
- Search by name and domain (case-insensitive)
- Counter cache for contacts_count
- Account scoping
- Authorization

To reproduce:
```bash
bundle exec rspec spec/enterprise/controllers/api/v1/accounts/companies_controller_spec.rb
bundle exec rubocop enterprise/app/controllers/api/v1/accounts/companies_controller.rb
```

## Checklist:

- [x] My code follows the style guidelines of this project
- [x] I have performed a self-review of my code
- [ ] I have commented on my code, particularly in hard-to-understand
areas
- [ ] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [x] I have added tests that prove my fix is effective or that my
feature works
- [x] New and existing unit tests pass locally with my changes
- [ ] Any dependent changes have been merged and published in downstream
modules

---------

Co-authored-by: Sivin Varghese <64252451+iamsivin@users.noreply.github.com>
Co-authored-by: iamsivin <iamsivin@gmail.com>
Co-authored-by: Shivam Mishra <scm.mymail@gmail.com>
Co-authored-by: Sojan Jose <sojan@pepalo.com>

* feat: Companies page (#12842)

# Pull Request Template

## Description

This PR introduces a new Companies section in the Chatwoot dashboard. It
lists all companies associated with the account and includes features
such as **search**, **sorting**, and **pagination** to enable easier
navigation and efficient management.

Fixes
https://linear.app/chatwoot/issue/CW-5928/add-companies-tab-to-dashboard

## Type of change

- [x] New feature (non-breaking change which adds functionality)

## How Has This Been Tested?

### Screenshot
<img width="1619" height="1200" alt="image"
src="https://github.com/user-attachments/assets/21f0a666-c3d6-4dec-bd02-1e38e0cd9542"
/>



## Checklist:

- [x] My code follows the style guidelines of this project
- [x] I have performed a self-review of my code
- [x] I have commented on my code, particularly in hard-to-understand
areas
- [ ] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [x] New and existing unit tests pass locally with my changes
- [ ] Any dependent changes have been merged and published in downstream
modules

---------

Co-authored-by: Vinay Keerthi <11478411+stonecharioteer@users.noreply.github.com>
Co-authored-by: Shivam Mishra <scm.mymail@gmail.com>

* feat: Add Amazon SES inbound email support (#12893)

## Summary
- add AWS ActionMailbox SES gems
- document SES as incoming email provider
- note SES option in configuration

## Testing
- `bundle exec rubocop config/initializers/mailer.rb
config/environments/production.rb Gemfile`


------
[Codex
Task](https://chatgpt.com/codex/tasks/task_e_68bbb7d482288326b8f04bb795af0322)

---------

Co-authored-by: Pranav <pranav@chatwoot.com>
Co-authored-by: Vinay Keerthi <11478411+stonecharioteer@users.noreply.github.com>

* feat: hide email forwarding address if INBOUND_EMAIL_DOMAIN is not configured (#12768)

#### Summary

- Improved email inbox setup flow to handle cases where inbound email
forwarding is not configured on the installation
- Added conditional display of email forwarding address based on
MAILER_INBOUND_EMAIL_DOMAIN environment variable availability
- Enhanced user messaging to guide users toward configuring SMTP/IMAP
settings when forwarding is unavailable

#### Changes

**Backend (app/views/api/v1/models/_inbox.json.jbuilder)**
- Added forwarding_enabled boolean flag to inbox API response based on
MAILER_INBOUND_EMAIL_DOMAIN presence
- Made forward_to_email conditional - only included when forwarding is
enabled

  **Frontend - Inbox Creation Flow**
- Created new EmailInboxFinish.vue component to handle email inbox setup
completion
  - Shows different messages based on whether forwarding is enabled:
- With forwarding: displays forwarding address and encourages SMTP/IMAP
configuration
- Without forwarding: warns that SMTP/IMAP configuration is required for
emails to be processed
- Added link to configuration page for easy access to SMTP/IMAP settings

<img width="988" height="312" alt="Screenshot 2025-11-18 at 3 27 27 PM"
src="https://github.com/user-attachments/assets/928aff78-df73-49fa-9a26-dbbd1297b26a"
/>

<img width="765" height="489" alt="Screenshot 2025-11-18 at 3 24 46 PM"
src="https://github.com/user-attachments/assets/6a182c7d-087f-4e88-92a5-30f147a567a7"
/>


Fixes
https://linear.app/chatwoot/issue/CW-5881/hide-forwaring-email-section-if-inbound-email-domain-is-not-configured


## Type of change

- [x] New feature (non-breaking change which adds functionality)

## How Has This Been Tested?

- Tested locally

## Checklist:

- [ ] My code follows the style guidelines of this project
- [ ] I have performed a self-review of my code
- [ ] I have commented on my code, particularly in hard-to-understand
areas
- [ ] I have made corresponding changes to the documentation
- [ ] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] New and existing unit tests pass locally with my changes
- [ ] Any dependent changes have been merged and published in downstream
modules

---------

Co-authored-by: Pranav <pranav@chatwoot.com>

* feat: APIs to assign agents_bots as assignee in conversations (#12836)

## Summary
- add an assignee_agent_bot_id column as an initital step to prototype
this before fully switching to polymorphic assignee
- update assignment APIs and conversation list / show endpoints to
reflect assignee as agent bot
- ensure webhook payloads contains agent bot assignee


[Codex
Task](https://chatgpt.com/codex/tasks/task_e_6912833377e48326b6641b9eee32d50f)

---------

Co-authored-by: Pranav <pranav@chatwoot.com>

* Bump version to 4.8.0

* chore: remove migration

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Sivin Varghese <64252451+iamsivin@users.noreply.github.com>
Co-authored-by: Shivam Mishra <scm.mymail@gmail.com>
Co-authored-by: Chatwoot Bot <92152627+chatwoot-bot@users.noreply.github.com>
Co-authored-by: Pranav <pranav@chatwoot.com>
Co-authored-by: Sojan Jose <sojan@pepalo.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Muhsin <muhsinkeramam@gmail.com>
Co-authored-by: Vinay Keerthi <11478411+stonecharioteer@users.noreply.github.com>
Co-authored-by: Vishnu Narayanan <iamwishnu@gmail.com>
Co-authored-by: iamsivin <iamsivin@gmail.com>
Co-authored-by: Tanmay Deep Sharma <32020192+tds-1@users.noreply.github.com>
Co-authored-by: Lê Nam Khánh <55955273+khanhkhanhlele@users.noreply.github.com>
2025-11-19 16:25:58 -03:00

1011 lines
45 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"INBOX_MGMT": {
"HEADER": "Inbox",
"DESCRIPTION": "Un canale è il mezzo di comunicazione che il cliente usa per interagire con te. Una Inbox è lo spazio in cui gestisci le interazioni di uno specifico canale. Può includere comunicazioni provenienti da diverse fonti, come email, live chat e social media.",
"LEARN_MORE": "Scopri di più sulle Inbox",
"RECONNECTION_REQUIRED": "La tua Inbox è disconnessa. Non riceverai nuovi messaggi finché non la autorizzerai nuovamente.",
"CLICK_TO_RECONNECT": "Clicca qui per riconnetterti.",
"WHATSAPP_REGISTRATION_INCOMPLETE": "La registrazione di WhatsApp Business non è completa. Si prega di controllare lo stato del nome visualizzato in Meta Business Manager prima di riconnettersi.",
"COMPLETE_REGISTRATION": "Completa Registrazione",
"LIST": {
"404": "Non ci sono inbox allegate a questo account."
},
"CREATE_FLOW": {
"CHANNEL": {
"TITLE": "Scegli il canale",
"BODY": "Scegli il provider che vuoi integrare con Chatwoot."
},
"INBOX": {
"TITLE": "Crea Inbox",
"BODY": "Autentica il tuo account e crea una inbox."
},
"AGENT": {
"TITLE": "Aggiungi Operatori",
"BODY": "Aggiungi operatori alla inbox creata."
},
"FINISH": {
"TITLE": "Voilà!",
"BODY": "Sei pronto per iniziare!"
}
},
"ADD": {
"CHANNEL_NAME": {
"LABEL": "Nome Inbox",
"PLACEHOLDER": "Inserisci il nome della tua Inbox (ad esempio: Acme Srl)",
"ERROR": "Inserisci un nome Inbox valido"
},
"WEBSITE_NAME": {
"LABEL": "Nome Sito Web",
"PLACEHOLDER": "Inserisci il nome del tuo sito web (ad esempio: Acme Srl)"
},
"FB": {
"HELP": "PS: Accedendo, abbiamo accesso solo ai messaggi della tua pagina. Chatwoot non potrà accedere ai tuoi messaggi privati.",
"CHOOSE_PAGE": "Scegli una Pagina",
"CHOOSE_PLACEHOLDER": "Seleziona una pagina dalla lista",
"INBOX_NAME": "Nome Inbox",
"ADD_NAME": "Aggiungi un nome per la tua inbox",
"PICK_NAME": "Scegli un nome per la tua Inbox",
"PICK_A_VALUE": "Scegli un valore",
"CREATE_INBOX": "Crea Inbox"
},
"INSTAGRAM": {
"CONTINUE_WITH_INSTAGRAM": "Continua con Instagram",
"CONNECT_YOUR_INSTAGRAM_PROFILE": "Collega il tuo profilo Instagram",
"HELP": "Per aggiungere il tuo profilo Instagram come canale, devi autenticare il tuo profilo Instagram cliccando su 'Continua con Instagram' ",
"ERROR_MESSAGE": "Si è verificato un errore nella connessione a Instagram, riprova",
"ERROR_AUTH": "Si è verificato un errore nella connessione a Instagram, riprova",
"NEW_INBOX_SUGGESTION": "Questo account Instagram era precedentemente collegato a una Inbox diversa ed è stato ora migrato qui. Tutti i nuovi messaggi appariranno qui. La vecchia Inbox non sarà più in grado di inviare o ricevere messaggi per questo account.",
"DUPLICATE_INBOX_BANNER": "Questo account Instagram è stato migrato alla nuova Inbox del canale Instagram. Non sarai più in grado di inviare/ricevere messaggi Instagram da questa Inbox."
},
"TWITTER": {
"HELP": "Per aggiungere il tuo profilo Twitter come canale, devi autenticare il tuo profilo Twitter cliccando su 'Accedi con Twitter' ",
"ERROR_MESSAGE": "Si è verificato un errore nella connessione a Twitter, riprova",
"TWEETS": {
"ENABLE": "Crea conversazioni dai Tweet menzionati"
}
},
"WEBSITE_CHANNEL": {
"TITLE": "Canale sito web",
"DESC": "Crea un canale per il tuo sito web ed inizia a dare supporto ai tuoi clienti tramite il nostro widget per siti web.",
"LOADING_MESSAGE": "Creazione del Canale di Supporto Sito Web",
"CHANNEL_AVATAR": {
"LABEL": "Avatar del canale"
},
"CHANNEL_WEBHOOK_URL": {
"LABEL": "URL del webhook",
"PLACEHOLDER": "Inserisci il tuo URL Webhook",
"ERROR": "Inserisci un URL valido"
},
"CHANNEL_DOMAIN": {
"LABEL": "Dominio del Sito",
"PLACEHOLDER": "Inserisci il dominio del tuo sito web (es: acme.com)"
},
"CHANNEL_WELCOME_TITLE": {
"LABEL": "Intestazione di benvenuto",
"PLACEHOLDER": "Ciao!"
},
"CHANNEL_WELCOME_TAGLINE": {
"LABEL": "Titolo di benvenuto",
"PLACEHOLDER": "Siamo qui per aiutarti. Facci una domanda o condividi il tuo feedback."
},
"CHANNEL_GREETING_MESSAGE": {
"LABEL": "Messaggio di saluto del canale",
"PLACEHOLDER": "Acme Srl generalmente risponde in poche ore."
},
"CHANNEL_GREETING_TOGGLE": {
"LABEL": "Abilita messaggio di benvenuto sul canale",
"HELP_TEXT": "Invia automaticamente un messaggio di benvenuto quando un cliente avvia una nuova conversazione.",
"ENABLED": "Abilitato",
"DISABLED": "Disabilitato"
},
"REPLY_TIME": {
"TITLE": "Imposta tempo di risposta",
"IN_A_FEW_MINUTES": "In pochi minuti",
"IN_A_FEW_HOURS": "In poche ore",
"IN_A_DAY": "In un giorno",
"HELP_TEXT": "Questo tempo di risposta verrà mostrato sul widget della live chat"
},
"WIDGET_COLOR": {
"LABEL": "Colore del widget",
"PLACEHOLDER": "Aggiorna il colore del widget utilizzato nel widget"
},
"SUBMIT_BUTTON": "Crea Inbox",
"API": {
"ERROR_MESSAGE": "Impossibile creare il canale sito web, riprova"
}
},
"TWILIO": {
"TITLE": "Canale Twilio SMS/WhatsApp",
"DESC": "Integra Twilio e inizia a supportare i tuoi clienti tramite SMS o WhatsApp.",
"ACCOUNT_SID": {
"LABEL": "SID dell'account",
"PLACEHOLDER": "Inserisci il tuo SID Account Twilio",
"ERROR": "Questo campo è obbligatorio"
},
"API_KEY": {
"USE_API_KEY": "Usa lautenticazione con chiave API",
"LABEL": "API Key SID",
"PLACEHOLDER": "Inserisci la tua API Key SID",
"ERROR": "Questo campo è obbligatorio"
},
"API_KEY_SECRET": {
"LABEL": "API Key Secret",
"PLACEHOLDER": "Inserisci la tua API Key Secret",
"ERROR": "Questo campo è obbligatorio"
},
"MESSAGING_SERVICE_SID": {
"LABEL": "SID Servizio Messaggi",
"PLACEHOLDER": "Inserisci il SID Servizio Messaggi di Twilio",
"ERROR": "Questo campo è obbligatorio",
"USE_MESSAGING_SERVICE": "Usa un servizio di messaggistica Twilio"
},
"CHANNEL_TYPE": {
"LABEL": "Tipo di canale",
"ERROR": "Seleziona il tipo di canale"
},
"AUTH_TOKEN": {
"LABEL": "Token di autenticazione",
"PLACEHOLDER": "Inserisci il tuo Token Autenticazione Twilio",
"ERROR": "Questo campo è obbligatorio"
},
"CHANNEL_NAME": {
"LABEL": "Nome Inbox",
"PLACEHOLDER": "Inserisci un nome della Inbox",
"ERROR": "Questo campo è obbligatorio"
},
"PHONE_NUMBER": {
"LABEL": "Numero di Telefono",
"PLACEHOLDER": "Inserisci il numero di telefono dal quale verrà inviato il messaggio.",
"ERROR": "Inserisci un numero di telefono valido che inizi con un `+` e non contenga spazi."
},
"API_CALLBACK": {
"TITLE": "URL di callback",
"SUBTITLE": "È necessario configurare l'URL di callback del messaggio in Twilio con l'URL menzionato qui."
},
"SUBMIT_BUTTON": "Crea un canale Twilio",
"API": {
"ERROR_MESSAGE": "Non siamo stati in grado di autenticare le credenziali di Twilio, riprova"
}
},
"SMS": {
"TITLE": "Canale SMS",
"DESC": "Inizia a supportare i tuoi clienti tramite SMS.",
"PROVIDERS": {
"LABEL": "Provider API",
"TWILIO": "Twilio",
"BANDWIDTH": "Bandwidth"
},
"API": {
"ERROR_MESSAGE": "Impossibile salvare il canale SMS"
},
"BANDWIDTH": {
"ACCOUNT_ID": {
"LABEL": "ID Account",
"PLACEHOLDER": "Inserisci il tuo Account ID Bandwidth",
"ERROR": "Questo campo è obbligatorio"
},
"API_KEY": {
"LABEL": "Chiave API",
"PLACEHOLDER": "Inserisci la tua chiave API di Bandwidth",
"ERROR": "Questo campo è obbligatorio"
},
"API_SECRET": {
"LABEL": "Chiave API segreta",
"PLACEHOLDER": "Inserisci la tua API Secret di Bandwidth",
"ERROR": "Questo campo è obbligatorio"
},
"APPLICATION_ID": {
"LABEL": "ID Applicazione",
"PLACEHOLDER": "Inserisci il tuo ID Applicazione di Bandwidth",
"ERROR": "Questo campo è obbligatorio"
},
"INBOX_NAME": {
"LABEL": "Nome Inbox",
"PLACEHOLDER": "Inserisci un nome della Inbox",
"ERROR": "Questo campo è obbligatorio"
},
"PHONE_NUMBER": {
"LABEL": "Numero di telefono",
"PLACEHOLDER": "Inserisci il numero di telefono dal quale verrà inviato il messaggio.",
"ERROR": "Inserisci un numero di telefono valido che inizi con un `+` e non contenga spazi."
},
"SUBMIT_BUTTON": "Crea un Canale Bandwidth",
"API": {
"ERROR_MESSAGE": "Impossibile autenticare le credenziali di Bandwidth, riprova"
},
"API_CALLBACK": {
"TITLE": "URL di callback",
"SUBTITLE": "È necessario configurare l'URL di callback del messaggio in Bandwidth con l'URL menzionato qui."
}
}
},
"WHATSAPP": {
"TITLE": "Canale WhatsApp",
"DESC": "Inizia a supportare i tuoi clienti tramite WhatsApp.",
"PROVIDERS": {
"LABEL": "Provider API",
"WHATSAPP_EMBEDDED": "WhatsApp Business",
"TWILIO": "Twilio",
"WHATSAPP_CLOUD": "WhatsApp Cloud",
"WHATSAPP_CLOUD_DESC": "Configurazione rapida tramite Meta",
"TWILIO_DESC": "Connetti tramite credenziali Twilio",
"360_DIALOG": "360Dialog"
},
"SELECT_PROVIDER": {
"TITLE": "Seleziona il tuo API provider",
"DESCRIPTION": "Scegli il tuo provider WhatsApp. Puoi connetterti direttamente tramite Meta che non richiede alcuna configurazione o connetterti tramite Twilio utilizzando le credenziali del tuo account."
},
"INBOX_NAME": {
"LABEL": "Nome Inbox",
"PLACEHOLDER": "Inserisci un nome della Inbox",
"ERROR": "Questo campo è obbligatorio"
},
"PHONE_NUMBER": {
"LABEL": "Numero di telefono",
"PLACEHOLDER": "Inserisci il numero di telefono dal quale verrà inviato il messaggio.",
"ERROR": "Inserisci un numero di telefono valido che inizi con un `+` e non contenga spazi."
},
"PHONE_NUMBER_ID": {
"LABEL": "ID numero di telefono",
"PLACEHOLDER": "Inserisci l'ID del numero di telefono ottenuto dalla dashboard sviluppatore di Facebook.",
"ERROR": "Inserisci un valore valido."
},
"BUSINESS_ACCOUNT_ID": {
"LABEL": "ID Account Business",
"PLACEHOLDER": "Inserisci l'ID dell'Account Business ottenuto dalla dashboard sviluppatore di Facebook.",
"ERROR": "Inserisci un valore valido."
},
"WEBHOOK_VERIFY_TOKEN": {
"LABEL": "Webhook verifica token",
"PLACEHOLDER": "Inserisci un token di verifica che vuoi configurare per i webhook Facebook.",
"ERROR": "Inserisci un valore valido."
},
"API_KEY": {
"LABEL": "Chiave API",
"SUBTITLE": "Configura la chiave API di WhatsApp.",
"PLACEHOLDER": "Chiave API",
"ERROR": "Inserisci un valore valido."
},
"API_CALLBACK": {
"TITLE": "URL di callback",
"SUBTITLE": "È necessario configurare l'URL del webhook e il token di verifica nel portale Facebook Developer con i valori mostrati di seguito.",
"WEBHOOK_URL": "URL del webhook",
"WEBHOOK_VERIFICATION_TOKEN": "Token Di Verifica Webhook"
},
"SUBMIT_BUTTON": "Crea Canale WhatsApp",
"EMBEDDED_SIGNUP": {
"TITLE": "Configurazione rapida tramite Meta",
"DESC": "Utilizza il WhatsApp Embedded Signup per collegare rapidamente nuovi numeri. Sarai reindirizzato a Meta per accedere al tuo account WhatsApp Business. Avere accesso amministratore aiuterà a rendere la configurazione semplice e facile.",
"BENEFITS": {
"TITLE": "Vantaggi della registrazione integrata:",
"EASY_SETUP": "Nessuna configurazione manuale richiesta",
"SECURE_AUTH": "Autenticazione sicura basata su OAuth",
"AUTO_CONFIG": "Configurazione automatica del webhook e del numero di telefono"
},
"LEARN_MORE": {
"TEXT": "Per saperne di più su embedded signup, prezzi e limitazioni, visita {link}.",
"LINK_TEXT": "questo link"
},
"SUBMIT_BUTTON": "Connetti con WhatsApp Business",
"AUTH_PROCESSING": "Autenticazione con Meta",
"WAITING_FOR_BUSINESS_INFO": "Completa la configurazione aziendale nella finestra Meta...",
"PROCESSING": "Configurazione del tuo account WhatsApp Business",
"LOADING_SDK": "Caricamento del Facebook SDK...",
"CANCELLED": "Registrazione WhatsApp annullata",
"SUCCESS_TITLE": "Account WhatsApp Business connesso!",
"WAITING_FOR_AUTH": "In attesa dell'autenticazione...",
"INVALID_BUSINESS_DATA": "Dati aziendali non validi ricevuti da Facebook. Riprova.",
"SIGNUP_ERROR": "Errore di registrazione",
"AUTH_NOT_COMPLETED": "Autenticazione non completata. Riavvia il processo.",
"SUCCESS_FALLBACK": "Account WhatsApp Business è stato configurato con successo",
"MANUAL_FALLBACK": "Se il tuo numero è già connesso alla WhatsApp Business Platform (API), o se sei un provider tecnologico, si prega di utilizzare il {link}",
"MANUAL_LINK_TEXT": "flow di registrazione manuale"
},
"API": {
"ERROR_MESSAGE": "Impossibile salvare il canale WhatsApp"
}
},
"VOICE": {
"TITLE": "Canale Vocale",
"DESC": "Integra Twilio Voice e inizia a supportare i tuoi clienti tramite telefonate.",
"PHONE_NUMBER": {
"LABEL": "Numero di Telefono",
"PLACEHOLDER": "Inserisci il tuo numero di telefono (es. +1234567890)",
"ERROR": "Fornisci un numero di telefono valido in formato E.164 (ad es. +1234567890)"
},
"TWILIO": {
"ACCOUNT_SID": {
"LABEL": "SID dell'account",
"PLACEHOLDER": "Inserisci il tuo Account SID Twilio",
"REQUIRED": "Account SID richiesto"
},
"AUTH_TOKEN": {
"LABEL": "Token di autenticazione",
"PLACEHOLDER": "Inserisci il tuo Auth Token Twilio",
"REQUIRED": "Auth Token richiesto"
},
"API_KEY_SID": {
"LABEL": "API Key SID",
"PLACEHOLDER": "Inserisci il tuo SID API Twilio",
"REQUIRED": "API Key SID richiesto"
},
"API_KEY_SECRET": {
"LABEL": "API Key Secret",
"PLACEHOLDER": "Inserisci il tuo API Key Secret Twilio",
"REQUIRED": "API Key Secret richiesto"
}
},
"CONFIGURATION": {
"TWILIO_VOICE_URL_TITLE": "Twilio Voice URL",
"TWILIO_VOICE_URL_SUBTITLE": "Configura questo URL come Voice URL sul tuo numero di telefono Twilio e TwiML App.",
"TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL",
"TWILIO_STATUS_URL_SUBTITLE": "Configurare questo URL come URL di Callback di Stato sul tuo numero di telefono Twilio."
},
"SUBMIT_BUTTON": "Crea Canale Vocale",
"API": {
"ERROR_MESSAGE": "Non siamo stati in grado di creare il canale vocale"
}
},
"API_CHANNEL": {
"TITLE": "Canale API",
"DESC": "Integra con il canale API e inizia a supportare i tuoi clienti.",
"CHANNEL_NAME": {
"LABEL": "Nome Canale",
"PLACEHOLDER": "Inserisci un nome del canale",
"ERROR": "Questo campo è obbligatorio"
},
"WEBHOOK_URL": {
"LABEL": "URL del webhook",
"SUBTITLE": "Configura l'URL in cui ricevere i callback sugli eventi.",
"PLACEHOLDER": "URL del webhook"
},
"SUBMIT_BUTTON": "Crea Canale API",
"API": {
"ERROR_MESSAGE": "Impossibile salvare il Canale API"
}
},
"EMAIL_CHANNEL": {
"TITLE": "Canale Email",
"DESC": "Integra la tua casella di posta elettronica.",
"CHANNEL_NAME": {
"LABEL": "Nome Canale",
"PLACEHOLDER": "Inserisci un nome del canale",
"ERROR": "Questo campo è obbligatorio"
},
"EMAIL": {
"LABEL": "Email",
"SUBTITLE": "Email dove i tuoi clienti inviano i ticket di supporto.",
"PLACEHOLDER": "Email"
},
"SUBMIT_BUTTON": "Crea Canale Email",
"API": {
"ERROR_MESSAGE": "Impossibile salvare il canale email"
},
"FINISH_MESSAGE": "Inizia a inoltrare le tue email al seguente indirizzo email."
},
"LINE_CHANNEL": {
"TITLE": "Canale LINE",
"DESC": "Integra con il canale LINE e inizia a supportare i tuoi clienti.",
"CHANNEL_NAME": {
"LABEL": "Nome Canale",
"PLACEHOLDER": "Inserisci un nome del canale",
"ERROR": "Questo campo è obbligatorio"
},
"LINE_CHANNEL_ID": {
"LABEL": "ID canale LINE",
"PLACEHOLDER": "ID canale LINE"
},
"LINE_CHANNEL_SECRET": {
"LABEL": "Chiave segreta canale LINE",
"PLACEHOLDER": "Chiave segreta canale LINE"
},
"LINE_CHANNEL_TOKEN": {
"LABEL": "Token canale LINE",
"PLACEHOLDER": "Token canale LINE"
},
"SUBMIT_BUTTON": "Crea un canale LINE",
"API": {
"ERROR_MESSAGE": "Non siamo stati in grado di salvare il canale LINE"
},
"API_CALLBACK": {
"TITLE": "URL di callback",
"SUBTITLE": "È necessario configurare l'URL del webhook nell'applicazione LINE con l'URL menzionato qui."
}
},
"TELEGRAM_CHANNEL": {
"TITLE": "Canale Telegram",
"DESC": "Integra con il canale Telegram e inizia a supportare i tuoi clienti.",
"BOT_TOKEN": {
"LABEL": "Token Bot",
"SUBTITLE": "Configura il token del bot che hai ottenuto da Telegram BotFather.",
"PLACEHOLDER": "Token Bot"
},
"SUBMIT_BUTTON": "Crea Canale Telegram",
"API": {
"ERROR_MESSAGE": "Non siamo stati in grado di salvare il canale Telegram"
}
},
"AUTH": {
"TITLE": "Scegli un canale",
"DESC": "Chatwoot supporta widget di live chat, Facebook Messenger, WhatsApp, Email e altro, come canali di comunicazione. Se vuoi creare un canale personalizzato, puoi farlo tramite il canale API. Per iniziare, scegli uno dei canali qui sotto.",
"TITLE_NEXT": "Completa la configurazione",
"TITLE_FINISH": "Voilà!",
"CHANNEL": {
"WEBSITE": {
"TITLE": "Sito Web",
"DESCRIPTION": "Crea un widget live-chat"
},
"FACEBOOK": {
"TITLE": "Facebook",
"DESCRIPTION": "Connetti la tua pagina Facebook"
},
"WHATSAPP": {
"TITLE": "WhatsApp",
"DESCRIPTION": "Supporta i tuoi clienti su WhatsApp"
},
"EMAIL": {
"TITLE": "Email",
"DESCRIPTION": "Connettiti con Gmail, Outlook, o altri provider"
},
"SMS": {
"TITLE": "SMS",
"DESCRIPTION": "Integra il canale SMS con Twilio o Bandwidth"
},
"API": {
"TITLE": "API",
"DESCRIPTION": "Crea un canale personalizzato utilizzando le nostre API"
},
"TELEGRAM": {
"TITLE": "Telegram",
"DESCRIPTION": "Configura canale Telegram utilizzando il token Bot"
},
"LINE": {
"TITLE": "Line",
"DESCRIPTION": "Integra il tuo canale Line"
},
"INSTAGRAM": {
"TITLE": "Instagram",
"DESCRIPTION": "Connetti il tuo account Instagram"
},
"VOICE": {
"TITLE": "Voce",
"DESCRIPTION": "Integra con Twilio Voice"
}
}
},
"AGENTS": {
"TITLE": "Operatori",
"DESC": "Qui puoi aggiungere operatori per gestire la tua inbox appena creata. Solo questi operatori selezionati avranno accesso alla tua inbox. Gli operatori che non fanno parte di questa inbox non saranno in grado di vedere o rispondere ai messaggi in questa inbox quando effettuano il login. <br> <b>PS:</b> come amministratore, se hai bisogno di accedere a tutte le inbox, devi aggiungerti come operatore a tutte le inbox che crei.",
"VALIDATION_ERROR": "Aggiungi almeno un operatore alla tua nuova Inbox",
"PICK_AGENTS": "Scegli gli operatori per la Inbox"
},
"DETAILS": {
"TITLE": "Dettagli Inbox",
"DESC": "Dal menu a tendina qui sotto, seleziona la pagina Facebook che vuoi collegare a Chatwoot. Puoi anche assegnare un nome personalizzato alla tua inbox per una migliore identificazione."
},
"FINISH": {
"TITLE": "Azzeccato!",
"DESC": "Hai completato con successo l'integrazione della tua pagina Facebook con Chatwoot. La prossima volta che un cliente invia un messaggio alla tua pagina, la conversazione apparirà automaticamente nella tua inbox.<br>Ti forniamo anche uno script per widget che puoi facilmente aggiungere al tuo sito web. Una volta dal vivo sul tuo sito web, i clienti possono inviarti messaggi direttamente dal tuo sito web senza l'aiuto di alcuno strumento esterno e la conversazione apparirà proprio qui, su Chatwoot.<br>Bello, eh? Beh, ce la mettiamo tutta :)"
},
"EMAIL_PROVIDER": {
"TITLE": "Seleziona il tuo provider email",
"DESCRIPTION": "Seleziona un provider email dalla lista qui sotto. Se non vedi il tuo provider di posta elettronica nella lista, puoi selezionare l'opzione altro provider e fornire le credenziali IMAP e SMTP."
},
"MICROSOFT": {
"TITLE": "Microsoft Email",
"DESCRIPTION": "Clicca sul pulsante Accedi con Microsoft per iniziare. Sarai reindirizzato alla pagina di accesso. Una volta accettati i permessi richiesti, verrai reindirizzato alla creazione della Inbox.",
"EMAIL_PLACEHOLDER": "Inserisci indirizzo email",
"SIGN_IN": "Accedi con Microsoft",
"ERROR_MESSAGE": "Si è verificato un errore nella connessione a Microsoft, riprova"
},
"GOOGLE": {
"TITLE": "Google Email",
"DESCRIPTION": "Clicca sul pulsante Accedi con Google per iniziare. Sarai reindirizzato alla pagina di accesso. Una volta accettati i permessi richiesti, verrai reindirizzato alla creazione della Inbox.",
"SIGN_IN": "Accedi con Google",
"EMAIL_PLACEHOLDER": "Inserisci indirizzo email",
"ERROR_MESSAGE": "Si è verificato un errore nella connessione a Google, riprova"
}
},
"DETAILS": {
"LOADING_FB": "Autenticazione con Facebook...",
"ERROR_FB_LOADING": "Errore nel caricamento di Facebook SDK. Disabilita eventuali ad-blocker e riprova da un browser diverso.",
"ERROR_FB_AUTH": "Qualcosa è andato storto, per favore aggiorna la pagina...",
"ERROR_FB_UNAUTHORIZED": "Non sei autorizzato ad eseguire questa azione. ",
"ERROR_FB_UNAUTHORIZED_HELP": "Assicurati di avere accesso alla pagina Facebook con pieno controllo. Puoi leggere di più sui ruoli di Facebook <a href=\" https://www.facebook.com/help/187316341316631\">qui</a>.",
"CREATING_CHANNEL": "Creazione Inbox...",
"TITLE": "Configura Dettagli Inbox",
"DESC": ""
},
"AGENTS": {
"BUTTON_TEXT": "Aggiungi operatori",
"ADD_AGENTS": "Aggiungendo Operatori alla Inbox..."
},
"FINISH": {
"TITLE": "L'Inbox è pronta!",
"MESSAGE": "Ora puoi interagire con i tuoi clienti attraverso il nuovo canale. Buona assistenza",
"BUTTON_TEXT": "Fatto",
"MORE_SETTINGS": "Impostazioni Aggiuntive",
"WEBSITE_SUCCESS": "Hai completato la creazione di un canale sito web. Copia il codice mostrato qui sotto e incollalo sul tuo sito. La prossima volta che un cliente usa la live chat, la conversazione apparirà automaticamente nella tua inbox.",
"WHATSAPP_QR_INSTRUCTION": "Scansiona il QR Code qui sopra per testare rapidamente la tua Inbox WhatsApp",
"MESSENGER_QR_INSTRUCTION": "Scansiona il QR Code qui sopra per testare rapidamente la tua Inbox Facebook Messenger",
"TELEGRAM_QR_INSTRUCTION": "Scansiona il QR Code qui sopra per testare rapidamente la tua Inbox Telegram"
},
"REAUTH": "Riautorizza",
"VIEW": "Visualizza",
"EDIT": {
"API": {
"SUCCESS_MESSAGE": "Impostazioni della Inbox aggiornate con successo",
"AUTO_ASSIGNMENT_SUCCESS_MESSAGE": "Assegnazione automatica aggiornata correttamente",
"ERROR_MESSAGE": "Impossibile aggiornare le impostazioni della Inbox. Riprova più tardi."
},
"EMAIL_COLLECT_BOX": {
"ENABLED": "Abilitato",
"DISABLED": "Disabilitato"
},
"ENABLE_CSAT": {
"ENABLED": "Abilitato",
"DISABLED": "Disabilitato"
},
"SENDER_NAME_SECTION": {
"TITLE": "Nome mittente",
"SUB_TEXT": "Seleziona il nome mostrato ai tuoi clienti quando ricevono email dai tuoi operatori.",
"FOR_EG": "Per es.:",
"FRIENDLY": {
"TITLE": "Amichevole",
"FROM": "da",
"SUBTITLE": "Aggiungi il nome dell'operatore che ha inviato la risposta nel nome mittente, per renderla amichevole."
},
"PROFESSIONAL": {
"TITLE": "Professionale",
"SUBTITLE": "Utilizza solo il nome dell'azienda come nome mittente nell'intestazione dell'email."
},
"BUSINESS_NAME": {
"BUTTON_TEXT": "+ Configura il tuo nome azienda",
"PLACEHOLDER": "Inserisci il nome della tua azienda",
"SAVE_BUTTON_TEXT": "Salva"
}
},
"ALLOW_MESSAGES_AFTER_RESOLVED": {
"ENABLED": "Abilitato",
"DISABLED": "Disabilitato"
},
"ENABLE_CONTINUITY_VIA_EMAIL": {
"ENABLED": "Abilitato",
"DISABLED": "Disabilitato"
},
"LOCK_TO_SINGLE_CONVERSATION": {
"ENABLED": "Abilitato",
"DISABLED": "Disabilitato"
},
"ENABLE_HMAC": {
"LABEL": "Abilita"
}
},
"DELETE": {
"BUTTON_TEXT": "Elimina",
"AVATAR_DELETE_BUTTON_TEXT": "Elimina Avatar",
"CONFIRM": {
"TITLE": "Conferma eliminazione",
"MESSAGE": "Sei sicuro di voler eliminare ",
"PLACE_HOLDER": "Digita {inboxName} per confermare",
"YES": "Sì, elimina ",
"NO": "No, conserva "
},
"API": {
"SUCCESS_MESSAGE": "Inbox eliminata con successo",
"ERROR_MESSAGE": "Impossibile eliminare l'inbox. Riprova più tardi.",
"AVATAR_SUCCESS_MESSAGE": "Avatar Inbox eliminata con successo",
"AVATAR_ERROR_MESSAGE": "Impossibile eliminare l'avatar della Inbox. Riprova più tardi."
}
},
"TABS": {
"SETTINGS": "Impostazioni",
"COLLABORATORS": "Collaboratori",
"CONFIGURATION": "Configurazione",
"CAMPAIGN": "Campagne",
"PRE_CHAT_FORM": "Modulo pre-chat",
"BUSINESS_HOURS": "Orario Di Lavoro",
"WIDGET_BUILDER": "Costruttore Widget",
"BOT_CONFIGURATION": "Configurazione Bot",
"ACCOUNT_HEALTH": "Account Health",
"CSAT": "CSAT"
},
"ACCOUNT_HEALTH": {
"TITLE": "Gestisci il tuo account WhatsApp",
"DESCRIPTION": "Controlla lo stato del tuo account WhatsApp, i limiti di messaggi e la qualità. Aggiorna le impostazioni o risolvi i problemi se necessario",
"GO_TO_SETTINGS": "Vai a Meta Business Manager",
"NO_DATA": "Health Data non disponibile",
"FIELDS": {
"DISPLAY_PHONE_NUMBER": {
"LABEL": "Numero di telefono visualizzato",
"TOOLTIP": "Numero di telefono mostrato ai clienti"
},
"VERIFIED_NAME": {
"LABEL": "Nome Business",
"TOOLTIP": "Nome Business verificato da WhatsApp"
},
"DISPLAY_NAME_STATUS": {
"LABEL": "Stato nome visualizzato",
"TOOLTIP": "Stato della verifica del nome business"
},
"QUALITY_RATING": {
"LABEL": "Quality rating",
"TOOLTIP": "Valutazione qualità di WhatsApp per il tuo account"
},
"MESSAGING_LIMIT_TIER": {
"LABEL": "Livello limite messaggi",
"TOOLTIP": "Limite giornaliero di messaggi per il tuo account"
},
"ACCOUNT_MODE": {
"LABEL": "Modalità account",
"TOOLTIP": "Modalità operativa attuale del tuo account WhatsApp"
}
},
"VALUES": {
"TIERS": {
"TIER_250": "250 clienti ogni 24h",
"TIER_1000": "1K clienti ogni 24h",
"TIER_1K": "1K clienti ogni 24h",
"TIER_10K": "10K clienti ogni 24h",
"TIER_100K": "100K clienti ogni 24h",
"TIER_UNLIMITED": "Clienti illimitati ogni 24h",
"UNKNOWN": "Valutazione non disponibile"
},
"STATUSES": {
"APPROVED": "Approvato",
"PENDING_REVIEW": "In Attesa di Revisione",
"AVAILABLE_WITHOUT_REVIEW": "Disponibile Senza Revisione",
"REJECTED": "Rifiutato",
"DECLINED": "Declinato",
"NON_EXISTS": "Non esiste"
},
"MODES": {
"SANDBOX": "Sandbox",
"LIVE": "Live"
}
}
},
"SETTINGS": "Impostazioni",
"FEATURES": {
"LABEL": "Funzionalità",
"DISPLAY_FILE_PICKER": "Mostra il selettore file sul widget",
"DISPLAY_EMOJI_PICKER": "Mostra il selettore emoji sul widget",
"ALLOW_END_CONVERSATION": "Consenti agli utenti di terminare la conversazione dal widget",
"USE_INBOX_AVATAR_FOR_BOT": "Usa il nome e l'avatar della Inbox per il bot"
},
"SETTINGS_POPUP": {
"MESSENGER_HEADING": "Script Messenger",
"MESSENGER_SUB_HEAD": "Posiziona questo pulsante all'interno del tuo tag body",
"ALLOWED_DOMAINS": {
"TITLE": "Domini Consentiti",
"SUBTITLE": "Aggiungi caratteri jolly o domini regolari separati da virgole (lasciare vuoto per consentire tutti), ad esempio *.chatwoot.dev, chatwoot.com.",
"PLACEHOLDER": "Inserisci i domini separati da virgole (ad esempio: *.chatwoot.dev, chatwoot.com)"
},
"INBOX_AGENTS": "Operatori",
"INBOX_AGENTS_SUB_TEXT": "Aggiungi o rimuovi operatori da questa inbox",
"AGENT_ASSIGNMENT": "Assegnazione Conversazione",
"AGENT_ASSIGNMENT_SUB_TEXT": "Aggiorna le impostazioni di assegnazione della conversazione",
"UPDATE": "Aggiorna",
"ENABLE_EMAIL_COLLECT_BOX": "Abilita raccolta indirizzi email",
"ENABLE_EMAIL_COLLECT_BOX_SUB_TEXT": "Abilita o disabilita una casella/modulo di raccolta indirizzi email nelle nuove conversazioni",
"AUTO_ASSIGNMENT": "Abilita assegnazione automatica",
"SENDER_NAME_SECTION": "Abilita il Nome Operatore nelle Email",
"SENDER_NAME_SECTION_TEXT": "Abilita/Disabilita la visualizzazione del nome dell'Operatore nelle email. Se disabilitato, verrà mostrato il nome dell'azienda",
"ENABLE_CONTINUITY_VIA_EMAIL": "Abilita la continuità della conversazione via email",
"ENABLE_CONTINUITY_VIA_EMAIL_SUB_TEXT": "Le conversazioni continueranno via email se l'indirizzo email del contatto è disponibile.",
"LOCK_TO_SINGLE_CONVERSATION": "Limita ad una conversazione unica",
"LOCK_TO_SINGLE_CONVERSATION_SUB_TEXT": "Abilita o disabilita conversazioni multiple per lo stesso contatto in questa Inbox",
"INBOX_UPDATE_TITLE": "Impostazioni Inbox",
"INBOX_UPDATE_SUB_TEXT": "Aggiorna le impostazioni inbox",
"AUTO_ASSIGNMENT_SUB_TEXT": "Abilita o disabilita l'assegnazione automatica di nuove conversazioni agli agenti aggiunti a questa casella.",
"HMAC_VERIFICATION": "Convalida Identità Utente",
"HMAC_DESCRIPTION": "Con questa chiave è possibile generare un token segreto che può essere utilizzato per verificare l'identità degli utenti.",
"HMAC_LINK_TO_DOCS": "Leggi di più qui.",
"HMAC_MANDATORY_VERIFICATION": "Forza Convalida Identità Utente",
"HMAC_MANDATORY_DESCRIPTION": "Se abilitata, le richieste che non possono essere verificate saranno respinte.",
"INBOX_IDENTIFIER": "Identificatore Inbox",
"INBOX_IDENTIFIER_SUB_TEXT": "Usa il token `inbox_identifier` mostrato qui per l'autenticazione dei tuoi client API.",
"FORWARD_EMAIL_TITLE": "Inoltra a Email",
"FORWARD_EMAIL_SUB_TEXT": "Inizia a inoltrare le tue email al seguente indirizzo email.",
"ALLOW_MESSAGES_AFTER_RESOLVED": "Consenti messaggi dopo la risoluzione della conversazione",
"ALLOW_MESSAGES_AFTER_RESOLVED_SUB_TEXT": "Consenti agli utenti finali di inviare messaggi anche dopo che la conversazione è stata risolta.",
"WHATSAPP_SECTION_SUBHEADER": "Questa chiave API viene utilizzata per l'integrazione con le API WhatsApp.",
"WHATSAPP_SECTION_UPDATE_SUBHEADER": "Inserisci la nuova chiave API da utilizzare per l'integrazione con le API WhatsApp.",
"WHATSAPP_SECTION_TITLE": "Chiave API",
"WHATSAPP_SECTION_UPDATE_TITLE": "Aggiorna Chiave API",
"WHATSAPP_SECTION_UPDATE_PLACEHOLDER": "Inserisci qui la nuova chiave API",
"WHATSAPP_SECTION_UPDATE_BUTTON": "Aggiorna",
"WHATSAPP_EMBEDDED_SIGNUP_TITLE": "WhatsApp Embedded Signup",
"WHATSAPP_EMBEDDED_SIGNUP_SUBHEADER": "Questa Inbox è connessa tramite WhatsApp Embedded Signup.",
"WHATSAPP_EMBEDDED_SIGNUP_DESCRIPTION": "Puoi riconfigurare questa Inbox per aggiornare le impostazioni WhatsApp Business.",
"WHATSAPP_RECONFIGURE_BUTTON": "Riconfigura",
"WHATSAPP_CONNECT_TITLE": "Connetti a WhatsApp Business",
"WHATSAPP_CONNECT_SUBHEADER": "Passa alla WhatsApp Embedded Signup per una gestione più semplice.",
"WHATSAPP_CONNECT_DESCRIPTION": "Collega questa Inbox a WhatsApp Business per avere funzionalità avanzate e una gestione più semplice.",
"WHATSAPP_CONNECT_BUTTON": "Connetti",
"WHATSAPP_CONNECT_SUCCESS": "Connesso correttamente a WhatsApp Business!",
"WHATSAPP_CONNECT_ERROR": "Impossibile connettersi a WhatsApp Business. Riprova.",
"WHATSAPP_RECONFIGURE_SUCCESS": "WhatsApp Business riconfigurata con successo!",
"WHATSAPP_RECONFIGURE_ERROR": "Impossibile riconfigurare WhatsApp Business. Riprova.",
"WHATSAPP_APP_ID_MISSING": "WhatsApp App ID non è configurato. Si prega di contattare l'amministratore.",
"WHATSAPP_CONFIG_ID_MISSING": "WhatsApp Configuration ID non è configurato. Si prega di contattare l'amministratore.",
"WHATSAPP_LOGIN_CANCELLED": "Il login WhatsApp è stato annullato. Riprova.",
"WHATSAPP_WEBHOOK_TITLE": "Token Di Verifica Webhook",
"WHATSAPP_WEBHOOK_SUBHEADER": "Questo token viene utilizzato per verificare l'autenticità dell'endpoint webhook.",
"WHATSAPP_TEMPLATES_SYNC_TITLE": "Sincronizza Modelli",
"WHATSAPP_TEMPLATES_SYNC_SUBHEADER": "Sincronizza manualmente i modelli di messaggi da WhatsApp per aggiornare i modelli disponibili.",
"WHATSAPP_TEMPLATES_SYNC_BUTTON": "Sincronizza Modelli",
"WHATSAPP_TEMPLATES_SYNC_SUCCESS": "Sincronizzazione modelli iniziata. Potrebbe volerci qualche minuto per aggiornare.",
"UPDATE_PRE_CHAT_FORM_SETTINGS": "Aggiorna le Impostazioni del Modulo Pre Chat"
},
"HELP_CENTER": {
"LABEL": "Help Center",
"PLACEHOLDER": "Seleziona Help Center",
"SELECT_PLACEHOLDER": "Seleziona Help Center",
"REMOVE": "Rimuovi Help Center",
"SUB_TEXT": "Allega un Help Center con la Inbox"
},
"AUTO_ASSIGNMENT": {
"MAX_ASSIGNMENT_LIMIT": "Limite assegnazione automatica",
"MAX_ASSIGNMENT_LIMIT_RANGE_ERROR": "Inserisci un valore maggiore di 0",
"MAX_ASSIGNMENT_LIMIT_SUB_TEXT": "Limita il numero massimo di conversazioni da questa casella di posta che possono essere assegnate automaticamente ad un agente"
},
"FACEBOOK_REAUTHORIZE": {
"TITLE": "Riautorizza",
"SUBTITLE": "La tua connessione a Facebook è scaduta, ricollegati alla tua pagina Facebook per continuare i servizi",
"MESSAGE_SUCCESS": "Riconnessione riuscita",
"MESSAGE_ERROR": "Si è verificato un errore, riprova"
},
"PRE_CHAT_FORM": {
"DESCRIPTION": "I moduli pre-chat consentono di acquisire le informazioni degli utenti prima che inizino la conversazione.",
"SET_FIELDS": "Campi del modulo pre-chat",
"SET_FIELDS_HEADER": {
"FIELDS": "Campi",
"LABEL": "Etichetta",
"PLACE_HOLDER": "Placeholder",
"KEY": "Chiave",
"TYPE": "Tipo",
"REQUIRED": "Richiesto"
},
"ENABLE": {
"LABEL": "Abilita il modulo pre-chat",
"OPTIONS": {
"ENABLED": "Sì",
"DISABLED": "No"
}
},
"PRE_CHAT_MESSAGE": {
"LABEL": "Messaggio pre-chat",
"PLACEHOLDER": "Questo messaggio sarà mostrato agli utenti insieme al modulo"
},
"REQUIRE_EMAIL": {
"LABEL": "Gli utenti dovranno fornire il proprio nome e indirizzo email prima di iniziare la chat"
}
},
"CSAT": {
"TITLE": "Abilita CSAT",
"SUBTITLE": "Invia automaticamente i sondaggi CSAT alla fine delle conversazioni per capire cosa pensano i clienti della loro esperienza di supporto. Segui le tendenze e individua le aree di miglioramento nel tempo.",
"DISPLAY_TYPE": {
"LABEL": "Tipo di visualizzazione"
},
"MESSAGE": {
"LABEL": "Messaggio",
"PLACEHOLDER": "Inserisci un messaggio per mostrare gli utenti con il modulo"
},
"SURVEY_RULE": {
"LABEL": "Regola sondaggio",
"DESCRIPTION_PREFIX": "Invia il sondaggio se la conversazione",
"DESCRIPTION_SUFFIX": "una qualsiasi delle etichette",
"OPERATOR": {
"CONTAINS": "contiene",
"DOES_NOT_CONTAINS": "non contiene"
},
"SELECT_PLACEHOLDER": "seleziona etichette"
},
"NOTE": "Nota: I sondaggi CSAT vengono inviati solo una volta per conversazione",
"API": {
"SUCCESS_MESSAGE": "Impostazioni CSAT aggiornate correttamente",
"ERROR_MESSAGE": "Impossibile aggiornare le impostazioni CSAT. Riprova più tardi."
}
},
"BUSINESS_HOURS": {
"TITLE": "Imposta la tua disponibilità",
"SUBTITLE": "Imposta la tua disponibilità sul tuo widget live chat",
"WEEKLY_TITLE": "Imposta le ore settimanali",
"TIMEZONE_LABEL": "Seleziona fuso orario",
"UPDATE": "Aggiorna le impostazioni dell'orario di lavoro",
"TOGGLE_AVAILABILITY": "Abilita la disponibilità aziendale per questa Inbox",
"UNAVAILABLE_MESSAGE_LABEL": "Messaggio non disponibile per i visitatori",
"TOGGLE_HELP": "Abilitare la disponibilità aziendale mostrerà le ore disponibili sul widget live chat anche se tutti gli operatori sono offline. Al di fuori delle ore di disponibilità gli utenti possono essere avvisati con un messaggio ed un modulo pre-chat.",
"DAY": {
"ENABLE": "Abilita disponibilità per questo giorno",
"UNAVAILABLE": "Non disponibile",
"HOURS": "ore",
"VALIDATION_ERROR": "L'orario di inizio deve essere prima dell'orario di chiusura.",
"CHOOSE": "Scegli"
},
"ALL_DAY": "Tutto il giorno"
},
"IMAP": {
"TITLE": "IMAP",
"SUBTITLE": "Imposta i dettagli IMAP",
"NOTE_TEXT": "Per abilitare SMTP, configurare IMAP.",
"UPDATE": "Aggiorna impostazioni IMAP",
"TOGGLE_AVAILABILITY": "Abilita la configurazione IMAP per questa Inbox",
"TOGGLE_HELP": "Abilitare IMAP aiuterà l'utente a ricevere email",
"EDIT": {
"SUCCESS_MESSAGE": "Impostazioni IMAP aggiornate con successo",
"ERROR_MESSAGE": "Impossibile aggiornare le impostazioni IMAP"
},
"ADDRESS": {
"LABEL": "Indirizzo",
"PLACE_HOLDER": "Indirizzo (ad esempio: imap.gmail.com)"
},
"PORT": {
"LABEL": "Porta",
"PLACE_HOLDER": "Porta"
},
"LOGIN": {
"LABEL": "Accedi",
"PLACE_HOLDER": "Accedi"
},
"PASSWORD": {
"LABEL": "Password",
"PLACE_HOLDER": "Password"
},
"ENABLE_SSL": "Abilita SSL"
},
"MICROSOFT": {
"TITLE": "Microsoft",
"SUBTITLE": "Riautorizza il tuo account MICROSOFT"
},
"SMTP": {
"TITLE": "SMTP",
"SUBTITLE": "Imposta i dettagli SMTP",
"UPDATE": "Aggiorna impostazioni SMTP",
"TOGGLE_AVAILABILITY": "Abilita la configurazione SMTP per questa Inbox",
"TOGGLE_HELP": "Abilitare SMTP aiuterà l'utente a inviare email",
"EDIT": {
"SUCCESS_MESSAGE": "Impostazioni SMTP aggiornate con successo",
"ERROR_MESSAGE": "Impossibile aggiornare le impostazioni SMTP"
},
"ADDRESS": {
"LABEL": "Indirizzo",
"PLACE_HOLDER": "Indirizzo (ad esempio: smtp.gmail.com)"
},
"PORT": {
"LABEL": "Porta",
"PLACE_HOLDER": "Porta"
},
"LOGIN": {
"LABEL": "Accedi",
"PLACE_HOLDER": "Accedi"
},
"PASSWORD": {
"LABEL": "Password",
"PLACE_HOLDER": "Password"
},
"DOMAIN": {
"LABEL": "Dominio",
"PLACE_HOLDER": "Dominio"
},
"ENCRYPTION": "Cifratura",
"SSL_TLS": "SSL/TLS",
"START_TLS": "STARTTLS",
"OPEN_SSL_VERIFY_MODE": "Apri modalità di verifica SSL",
"AUTH_MECHANISM": "Autenticazione"
},
"NOTE": "Nota: ",
"WIDGET_BUILDER": {
"WIDGET_OPTIONS": {
"AVATAR": {
"LABEL": "Avatar Sito Web",
"DELETE": {
"API": {
"SUCCESS_MESSAGE": "Avatar eliminato con successo",
"ERROR_MESSAGE": "Si è verificato un errore, riprova"
}
}
},
"WEBSITE_NAME": {
"LABEL": "Nome Sito Web",
"PLACE_HOLDER": "Inserisci il nome del tuo sito web (ad esempio: Acme Srl)",
"ERROR": "Inserisci un nome sito web valido"
},
"WELCOME_HEADING": {
"LABEL": "Intestazione di benvenuto",
"PLACE_HOLDER": "Ciao!"
},
"WELCOME_TAGLINE": {
"LABEL": "Titolo di benvenuto",
"PLACE_HOLDER": "Siamo qui per aiutarti. Facci una domanda o condividi il tuo feedback."
},
"REPLY_TIME": {
"LABEL": "Tempo di risposta",
"IN_A_FEW_MINUTES": "In pochi minuti",
"IN_A_FEW_HOURS": "In poche ore",
"IN_A_DAY": "In un giorno"
},
"WIDGET_COLOR_LABEL": "Colore del widget",
"WIDGET_BUBBLE_POSITION_LABEL": "Posizione della bubble del widget",
"WIDGET_BUBBLE_TYPE_LABEL": "Tipo di bubble del widget",
"WIDGET_BUBBLE_LAUNCHER_TITLE": {
"DEFAULT": "Chatta con noi",
"LABEL": "Titolo del launcher della bubble del widget",
"PLACE_HOLDER": "Chatta con noi"
},
"UPDATE": {
"BUTTON_TEXT": "Aggiorna Impostazioni Widget",
"API": {
"SUCCESS_MESSAGE": "Impostazioni widget aggiornate con successo",
"ERROR_MESSAGE": "Impossibile aggiornare le impostazioni del widget"
}
},
"WIDGET_VIEW_OPTION": {
"PREVIEW": "Anteprima",
"SCRIPT": "Script"
},
"WIDGET_BUBBLE_POSITION": {
"LEFT": "Sinistra",
"RIGHT": "Destra"
},
"WIDGET_BUBBLE_TYPE": {
"STANDARD": "Standard",
"EXPANDED_BUBBLE": "Bubble espansa"
}
},
"WIDGET_SCREEN": {
"DEFAULT": "Predefinito",
"CHAT": "Chat"
},
"REPLY_TIME": {
"IN_A_FEW_MINUTES": "In genere risponde in pochi minuti",
"IN_A_FEW_HOURS": "In genere risponde in poche ore",
"IN_A_DAY": "In genere risponde in un giorno"
},
"FOOTER": {
"START_CONVERSATION_BUTTON_TEXT": "Avvia Conversazione",
"CHAT_INPUT_PLACEHOLDER": "Scrivi il tuo messaggio"
},
"BODY": {
"TEAM_AVAILABILITY": {
"ONLINE": "Siamo online",
"OFFLINE": "Siamo offline in questo momento"
},
"USER_MESSAGE": "Salve",
"AGENT_MESSAGE": "Ciao"
},
"BRANDING_TEXT": "Offerto da Chatwoot",
"SCRIPT_SETTINGS": "\n window.chatwootSettings = {options};"
},
"EMAIL_PROVIDERS": {
"MICROSOFT": {
"TITLE": "Microsoft",
"DESCRIPTION": "Connetti con Microsoft"
},
"GOOGLE": {
"TITLE": "Google",
"DESCRIPTION": "Connetti con Google"
},
"OTHER_PROVIDERS": {
"TITLE": "Altri Provider",
"DESCRIPTION": "Connetti con Altri Provider"
}
},
"CHANNELS": {
"MESSENGER": "Messenger",
"WEB_WIDGET": "Sito Web",
"TWITTER_PROFILE": "Twitter",
"TWILIO_SMS": "Twilio SMS",
"WHATSAPP": "WhatsApp",
"SMS": "SMS",
"EMAIL": "Email",
"TELEGRAM": "Telegram",
"LINE": "Line",
"API": "Canale API",
"INSTAGRAM": "Instagram",
"VOICE": "Voce"
}
}
}