iachat/spec/factories
Mazen Khalil ca5e112a8c
feat: TikTok channel (#12741)
fixes: #11834

This pull request introduces TikTok channel integration, enabling users
to connect and manage TikTok business accounts similarly to other
supported social channels. The changes span backend API endpoints,
authentication helpers, webhook handling, configuration, and frontend
components to support TikTok as a first-class channel.


**Key Notes**
* This integration is only compatible with TikTok Business Accounts
* Special permissions are required to access the TikTok [Business
Messaging
API](https://business-api.tiktok.com/portal/docs?id=1832183871604753).
* The Business Messaging API is region-restricted and is currently
unavailable to users in the EU.
* Only TEXT, IMAGE, and POST_SHARE messages are currently supported due
to limitations in the TikTok Business Messaging API
* A message will be successfully sent only if it contains text alone or
one image attachment. Messages with multiple attachments or those
combining text and attachments will fail and receive a descriptive error
status.
* Messages sent directly from the TikTok App will be synced into the
system
* Initiating a new conversation from the system is not permitted due to
limitations from the TikTok Business Messaging API.


**Backend: TikTok Channel Integration**

* Added `Api::V1::Accounts::Tiktok::AuthorizationsController` to handle
TikTok OAuth authorization initiation, returning the TikTok
authorization URL.
* Implemented `Tiktok::CallbacksController` to handle TikTok OAuth
callback, process authorization results, create or update channel/inbox,
and handle errors or denied scopes.
* Added `Webhooks::TiktokController` to receive and verify TikTok
webhook events, including signature verification and event dispatching.
* Created `Tiktok::IntegrationHelper` module for JWT-based token
generation and verification for secure TikTok OAuth state management.

**Configuration and Feature Flags**

* Added TikTok app credentials (`TIKTOK_APP_ID`, `TIKTOK_APP_SECRET`) to
allowed configs and app config, and registered TikTok as a feature in
the super admin features YAML.
[[1]](diffhunk://#diff-5e46e1d248631a1147521477d84a54f8ba6846ea21c61eca5f70042d960467f4R43)
[[2]](diffhunk://#diff-8bf37a019cab1dedea458c437bd93e34af1d6e22b1672b1d43ef6eaa4dcb7732R69)
[[3]](diffhunk://#diff-123164bea29f3c096b0d018702b090d5ae670760c729141bd4169a36f5f5c1caR74-R79)

**Frontend: TikTok Channel UI and Messaging Support**

* Added `TiktokChannel` API client for frontend TikTok authorization
requests.
* Updated channel icon mappings and tests to include TikTok
(`Channel::Tiktok`).
[[1]](diffhunk://#diff-b852739ed45def61218d581d0de1ba73f213f55570aa5eec52aaa08f380d0e16R16)
[[2]](diffhunk://#diff-3cd3ae32e94ef85f1f2c4435abf0775cc0614fb37ee25d97945cd51573ef199eR64-R69)
* Enabled TikTok as a supported channel in contact forms, channel
widgets, and feature toggles.
[[1]](diffhunk://#diff-ec59c85e1403aaed1a7de35971fe16b7033d5cd763be590903ebf8f1ca25a010R47)
[[2]](diffhunk://#diff-ec59c85e1403aaed1a7de35971fe16b7033d5cd763be590903ebf8f1ca25a010R69)
[[3]](diffhunk://#diff-725b90ca7e3a6837ec8291e9f57094f6a46b3ee00e598d16564f77f32cf354b0R26-R29)
[[4]](diffhunk://#diff-725b90ca7e3a6837ec8291e9f57094f6a46b3ee00e598d16564f77f32cf354b0R51-R54)
[[5]](diffhunk://#diff-725b90ca7e3a6837ec8291e9f57094f6a46b3ee00e598d16564f77f32cf354b0R68)
* Updated message meta logic to support TikTok-specific message statuses
(sent, delivered, read).
[[1]](diffhunk://#diff-e41239cf8dda36c1bd1066dbb17588ae8868e56289072c74b3a6d7ef5abdd696R23)
[[2]](diffhunk://#diff-e41239cf8dda36c1bd1066dbb17588ae8868e56289072c74b3a6d7ef5abdd696L63-R65)
[[3]](diffhunk://#diff-e41239cf8dda36c1bd1066dbb17588ae8868e56289072c74b3a6d7ef5abdd696L81-R84)
[[4]](diffhunk://#diff-e41239cf8dda36c1bd1066dbb17588ae8868e56289072c74b3a6d7ef5abdd696L103-R107)
* Added support for embedded message attachments (e.g., TikTok embeds)
with a new `EmbedBubble` component and updated message rendering logic.
[[1]](diffhunk://#diff-c3d701caf27d9c31e200c6143c11a11b9d8826f78aa2ce5aa107470e6fdb9d7fR31)
[[2]](diffhunk://#diff-047859f9368a46d6d20177df7d6d623768488ecc38a5b1e284f958fad49add68R1-R19)
[[3]](diffhunk://#diff-c3d701caf27d9c31e200c6143c11a11b9d8826f78aa2ce5aa107470e6fdb9d7fR316)
[[4]](diffhunk://#diff-cbc85e7c4c8d56f2a847d0b01cd48ef36e5f87b43023bff0520fdfc707283085R52)
* Adjusted reply policy and UI messaging for TikTok's 48-hour reply
window.
[[1]](diffhunk://#diff-0d691f6a983bd89502f91253ecf22e871314545d1e3d3b106fbfc76bf6d8e1c7R208-R210)
[[2]](diffhunk://#diff-0d691f6a983bd89502f91253ecf22e871314545d1e3d3b106fbfc76bf6d8e1c7R224-R226)

These changes collectively enable end-to-end TikTok channel support,
from configuration and OAuth flow to webhook processing and frontend
message handling.


------------

# TikTok App Setup & Configuration
1. Grant access to the Business Messaging API
([Documentation](https://business-api.tiktok.com/portal/docs?id=1832184145137922))
2. Set the app authorization redirect URL to
`https://FRONTEND_URL/tiktok/callback`
3. Update the installation config with TikTok App ID and Secret
4. Create a Business Messaging Webhook configuration and set the
callback url to `https://FRONTEND_URL/webhooks/tiktok`
([Documentation](https://business-api.tiktok.com/portal/docs?id=1832190670631937))
. You can do this by calling
`Tiktok::AuthClient.update_webhook_callback` from rails console once you
finish Tiktok channel configuration in super admin ( will be automated
in future )
5. Enable TikTok channel feature in an account

---------

Co-authored-by: Sojan Jose <sojan@pepalo.com>
Co-authored-by: iamsivin <iamsivin@gmail.com>
2025-12-17 07:54:50 -08:00
..
bot_message chore: Handle attachments in Whatsapp Channel (#3299) 2021-11-11 13:03:48 +05:30
captain feat(ee): Captain custom http tools (#12584) 2025-10-06 07:53:15 -07:00
channel feat: TikTok channel (#12741) 2025-12-17 07:54:50 -08:00
facebook_message feat: extending lock to single conversation to meta inbox (#9104) 2024-04-03 21:33:23 +05:30
instagram feat: Add support for shared post and story attachment types in Instagram messages (#12997) 2025-12-04 05:20:47 +05:30
instagram_message feat: Add Instagram Channel (#2955) 2021-10-05 14:35:32 +05:30
integrations chore: Add region option to Dialogflow integration (#11510) 2025-06-05 20:01:17 -05:00
twitter chore: upgrade ruby to 3.1.3 (#5555) 2023-01-24 23:55:07 +05:30
account_saml_settings.rb feat: add saml model & controller [CW-2958] (#12289) 2025-09-03 13:30:42 -07:00
account_users.rb Chore: Enable Users to create multiple accounts (#440) 2020-03-07 12:18:16 +05:30
accounts.rb chore: Use feature_flags attribute instead of settings_flags (#6820) 2023-04-04 09:56:58 -07:00
agent_bot_inboxes.rb Feature: Introduce bots (#545) 2020-03-06 01:43:12 +05:30
agent_bots.rb feat: Add backend APIs for the bot metrics (#9031) 2024-03-01 08:20:20 -08:00
agent_capacity_policies.rb feat: Add agent capacity controllers (#12200) 2025-08-26 19:12:58 -07:00
applied_slas.rb feat: Add sidekiq jobs to monitor applied SLAs (#8828) 2024-02-07 21:44:56 +04:00
articles.rb fix: Update specs, add background response job implementation for copilot threads (#11600) 2025-05-27 14:10:27 -06:00
assignment_policies.rb feat: Add assignment policies controllers with jbuilder views (#12199) 2025-08-18 19:15:21 -07:00
automation_rules.rb chore: Refactor Automation Specs (#6796) 2023-03-30 21:02:52 +05:30
campaigns.rb feat: WhatsApp campaigns (#11910) 2025-07-16 09:04:02 +05:30
canned_responses.rb Chore: Added tests for canned_responses (#477) 2020-02-08 11:58:40 +05:30
categories.rb fix: Update specs, add background response job implementation for copilot threads (#11600) 2025-05-27 14:10:27 -06:00
clearbit_response.rb feat: account onboarding with clearbit (#8857) 2024-02-12 23:21:42 +05:30
companies.rb feat: Add company model and API with tests (#12548) 2025-10-08 07:53:43 -07:00
contact_inbox.rb fix: "wa_source_id" function return value (#5451) 2022-09-29 10:34:55 -07:00
contacts.rb feat: Update API for contact avatar (#4719) 2022-07-12 10:03:16 +02:00
conversation_participants.rb chore: Add controllers for conversation participants (#6462) 2023-02-15 16:33:31 -08:00
conversations.rb feat: Add the ability to un-assign teams using automation (#9668) 2024-06-26 12:40:36 -07:00
csat_survey_responses.rb feat: Add CSAT response APIs (#2503) 2021-06-29 20:59:41 +05:30
custom_attribute_definitions.rb feat: Add APIs for custom attribute definitions (#2689) 2021-07-23 17:04:33 +05:30
custom_filters.rb feat: Add APIs to create custom views on the dashboard (#2498) 2021-06-29 19:29:57 +05:30
custom_roles.rb chore: Fix flaky permissions test (#10074) 2024-09-04 16:13:29 -07:00
dashboard_app.rb feat: Allow users to create dashboard apps to give agents more context (#4761) 2022-06-01 11:13:10 +05:30
data_import.rb feat: Add bulk imports API for contacts (#1724) 2021-02-03 19:24:51 +05:30
email_template.rb feat: Customisable Email Templates (#1095) 2020-08-06 15:21:06 +05:30
folders.rb feat: Portal endpoint (#4633) 2022-05-16 13:59:59 +05:30
inbox_assignment_policies.rb feat: Add assignment policies controllers with jbuilder views (#12199) 2025-08-18 19:15:21 -07:00
inbox_capacity_limits.rb feat: Add agent capacity controllers (#12200) 2025-08-26 19:12:58 -07:00
inbox_members.rb chore: Ability to Disable Gravatars (#5027) 2022-07-21 19:27:12 +02:00
inboxes.rb chore: Update the behavior of Captain resolutions (#10794) 2025-02-03 16:25:08 +05:30
installation_config.rb feat: installation config in super admin console (#1641) 2021-01-15 13:21:53 +05:30
labels.rb Feature: Improve label experience (#975) 2020-06-25 21:04:03 +05:30
macros.rb feat: Macros CRUD api (#5047) 2022-07-19 17:37:00 +05:30
mentions.rb Feat: custom sort (#4864) 2022-06-22 11:04:42 +05:30
messages.rb feat: Differentiate bot and user in the summary (#12801) 2025-11-05 11:42:21 -08:00
notes.rb chore: Add contact note model (#2462) 2021-06-21 15:16:26 +05:30
notification_subscriptions.rb fix: Add catch for additional webpush errors (#9662) 2024-06-21 14:58:36 -07:00
notifications.rb fix: Inbox view Read/Snoozed display filters (#8907) 2024-02-17 13:59:25 +05:30
platform_apps_permissibles.rb feat: Add Platform APIs (#1456) 2021-01-14 20:35:22 +05:30
platform_apps.rb feat: Add Platform APIs (#1456) 2021-01-14 20:35:22 +05:30
portals.rb feat: Portal endpoint (#4633) 2022-05-16 13:59:59 +05:30
related_categories.rb feat: Category API to handle linked categories and parent-sub categories (#4879) 2022-06-28 11:23:20 +05:30
reporting_events.rb feat: allow querying reporting events via the API (#12832) 2025-11-13 12:46:55 +05:30
sla_events.rb feat: add sla events table (#9126) 2024-03-20 11:59:37 +05:30
sla_policies.rb feat: sla 1 - refactor sla_policies model and add applied_sla model (#8602) 2024-01-23 23:48:02 +05:30
super_admins.rb feat: Unify user and super admin credentials (#3830) 2022-01-25 16:58:49 -08:00
team_members.rb feat: Team APIs (#1654) 2021-01-17 23:56:56 +05:30
teams.rb feat: Add new APIs for live reports with team filter (#10994) 2025-02-27 16:11:04 -08:00
users.rb feat: Ability to update avatars from super admin (#7264) 2023-06-09 15:32:24 +05:30
webhooks.rb feat(webhooks): add name to webhook (#12641) 2025-11-13 13:28:15 +05:30
working_hours.rb feat: Business hours 2020-11-01 00:14:33 +05:30