diff --git a/apps/builder/messages/ar.json b/apps/builder/messages/ar.json index ecad7d4a1..afe79620a 100644 --- a/apps/builder/messages/ar.json +++ b/apps/builder/messages/ar.json @@ -2293,6 +2293,9 @@ }, "adSource": { "label": "Ad source" + }, + "userCode": { + "label": "رمز المستخدم" } }, "flows": { diff --git a/apps/builder/messages/da.json b/apps/builder/messages/da.json index 287328e9f..6f4dcdf1a 100644 --- a/apps/builder/messages/da.json +++ b/apps/builder/messages/da.json @@ -2156,6 +2156,9 @@ }, "adSource": { "label": "Ad source" + }, + "userCode": { + "label": "Brugerkode" } }, "flows": { diff --git a/apps/builder/messages/de.json b/apps/builder/messages/de.json index bddc8b98c..d48ace3f6 100644 --- a/apps/builder/messages/de.json +++ b/apps/builder/messages/de.json @@ -2156,6 +2156,9 @@ }, "adSource": { "label": "Ad source" + }, + "userCode": { + "label": "Benutzercode" } }, "flows": { diff --git a/apps/builder/messages/en.json b/apps/builder/messages/en.json index f30ce4be7..aa4181df5 100644 --- a/apps/builder/messages/en.json +++ b/apps/builder/messages/en.json @@ -2293,6 +2293,9 @@ }, "adSource": { "label": "Ad source" + }, + "userCode": { + "label": "User Code" } }, "metaConversions": { diff --git a/apps/builder/messages/es.json b/apps/builder/messages/es.json index 3e1de64d8..84448f2f3 100644 --- a/apps/builder/messages/es.json +++ b/apps/builder/messages/es.json @@ -2293,6 +2293,9 @@ }, "adSource": { "label": "Ad source" + }, + "userCode": { + "label": "Código de usuario" } }, "flows": { diff --git a/apps/builder/messages/fi.json b/apps/builder/messages/fi.json index 0543578f8..77f75517a 100644 --- a/apps/builder/messages/fi.json +++ b/apps/builder/messages/fi.json @@ -2156,6 +2156,9 @@ }, "adSource": { "label": "Ad source" + }, + "userCode": { + "label": "Käyttäjäkoodi" } }, "flows": { diff --git a/apps/builder/messages/fr.json b/apps/builder/messages/fr.json index 4b4b61146..9fd81e967 100644 --- a/apps/builder/messages/fr.json +++ b/apps/builder/messages/fr.json @@ -2156,6 +2156,9 @@ }, "adSource": { "label": "Ad source" + }, + "userCode": { + "label": "Code utilisateur" } }, "flows": { diff --git a/apps/builder/messages/he.json b/apps/builder/messages/he.json index 37a3f5380..9dca50feb 100644 --- a/apps/builder/messages/he.json +++ b/apps/builder/messages/he.json @@ -4843,6 +4843,9 @@ }, "adSource": { "label": "Ad source" + }, + "userCode": { + "label": "קוד משתמש" } }, "billing": { diff --git a/apps/builder/messages/id.json b/apps/builder/messages/id.json index c3fabd3ae..98f84a198 100644 --- a/apps/builder/messages/id.json +++ b/apps/builder/messages/id.json @@ -2156,6 +2156,9 @@ }, "adSource": { "label": "Ad source" + }, + "userCode": { + "label": "Kode pengguna" } }, "flows": { diff --git a/apps/builder/messages/it.json b/apps/builder/messages/it.json index 109d3ae25..b2abddd5f 100644 --- a/apps/builder/messages/it.json +++ b/apps/builder/messages/it.json @@ -1458,6 +1458,9 @@ }, "adSource": { "label": "Ad source" + }, + "userCode": { + "label": "Codice utente" } }, "actions": { diff --git a/apps/builder/messages/ja.json b/apps/builder/messages/ja.json index 519c273c3..b255f1268 100644 --- a/apps/builder/messages/ja.json +++ b/apps/builder/messages/ja.json @@ -2156,6 +2156,9 @@ }, "adSource": { "label": "Ad source" + }, + "userCode": { + "label": "ユーザーコード" } }, "flows": { diff --git a/apps/builder/messages/nl.json b/apps/builder/messages/nl.json index 96cc1a274..2256fafdd 100644 --- a/apps/builder/messages/nl.json +++ b/apps/builder/messages/nl.json @@ -1969,6 +1969,9 @@ }, "adSource": { "label": "Ad source" + }, + "userCode": { + "label": "Gebruikerscode" } }, "condition": { diff --git a/apps/builder/messages/pt-BR.json b/apps/builder/messages/pt-BR.json index 75f37ecee..b209312a5 100644 --- a/apps/builder/messages/pt-BR.json +++ b/apps/builder/messages/pt-BR.json @@ -2156,6 +2156,9 @@ }, "adSource": { "label": "Ad source" + }, + "userCode": { + "label": "Código do usuário" } }, "flows": { diff --git a/apps/builder/messages/pt-PT.json b/apps/builder/messages/pt-PT.json index da0ef23a2..cea167db2 100644 --- a/apps/builder/messages/pt-PT.json +++ b/apps/builder/messages/pt-PT.json @@ -2156,6 +2156,9 @@ }, "adSource": { "label": "Ad source" + }, + "userCode": { + "label": "Código do utilizador" } }, "flows": { diff --git a/apps/builder/messages/ro.json b/apps/builder/messages/ro.json index 6506f6f9c..856ba6048 100644 --- a/apps/builder/messages/ro.json +++ b/apps/builder/messages/ro.json @@ -2940,6 +2940,9 @@ }, "adSource": { "label": "Ad source" + }, + "userCode": { + "label": "Cod utilizator" } }, "channels": { diff --git a/apps/builder/messages/sv.json b/apps/builder/messages/sv.json index f09a75d30..036b4122c 100644 --- a/apps/builder/messages/sv.json +++ b/apps/builder/messages/sv.json @@ -2991,6 +2991,9 @@ }, "adSource": { "label": "Ad source" + }, + "userCode": { + "label": "Användarkod" } }, "flowAnalytics": { diff --git a/apps/builder/messages/tr.json b/apps/builder/messages/tr.json index efcbb13de..3e62e744b 100644 --- a/apps/builder/messages/tr.json +++ b/apps/builder/messages/tr.json @@ -2293,6 +2293,9 @@ }, "adSource": { "label": "Ad source" + }, + "userCode": { + "label": "Kullanıcı kodu" } }, "flows": { diff --git a/apps/builder/messages/vi.json b/apps/builder/messages/vi.json index 5e06dca0d..1ee106ead 100644 --- a/apps/builder/messages/vi.json +++ b/apps/builder/messages/vi.json @@ -2293,6 +2293,9 @@ }, "adSource": { "label": "Ad source" + }, + "userCode": { + "label": "Mã người dùng" } }, "flows": { diff --git a/apps/builder/messages/zh-CN.json b/apps/builder/messages/zh-CN.json index 012b977b9..4743a96db 100644 --- a/apps/builder/messages/zh-CN.json +++ b/apps/builder/messages/zh-CN.json @@ -2994,6 +2994,9 @@ }, "adSource": { "label": "Ad source" + }, + "userCode": { + "label": "用户代码" } }, "flowAnalytics": { diff --git a/apps/builder/messages/zh-TW.json b/apps/builder/messages/zh-TW.json index 64b600ed1..10621e069 100644 --- a/apps/builder/messages/zh-TW.json +++ b/apps/builder/messages/zh-TW.json @@ -1458,6 +1458,9 @@ }, "adSource": { "label": "Ad source" + }, + "userCode": { + "label": "使用者代碼" } }, "messages": { diff --git a/apps/builder/src/features/contacts/contact-detail.tsx b/apps/builder/src/features/contacts/contact-detail.tsx index d648505bd..279682371 100644 --- a/apps/builder/src/features/contacts/contact-detail.tsx +++ b/apps/builder/src/features/contacts/contact-detail.tsx @@ -163,6 +163,26 @@ const scopedIdentityRowsByChannel: Partial< ], } +const buildUserCodeField = ( + contactInbox: ContactInboxResource | undefined, + t: (key: string) => string, +): ContactEditableField[] => { + const value = contactInbox?.sourceId + if (!value) { + return [] + } + return [ + { + key: "sourceId", + icon: PhoneIcon, + label: t("fields.userCode.label"), + value, + type: "shortText", + readOnly: true, + }, + ] +} + const buildScopedIdentityFields = ( contactInbox: ContactInboxResource | undefined, t: (key: string) => string, @@ -174,8 +194,7 @@ const buildScopedIdentityFields = ( const rows = scopedIdentityRowsByChannel[parsedChannel.data] ?? [] return rows.flatMap((row): ContactEditableField[] => { const value = contactInbox[row.key] - // Skip absent values, and a value that IS the Contact ID shown above - // (a scoped-id-keyed contact) — no duplicate row. + // Skip absent values, and scoped ids that duplicate {{user_code}} (sourceId). if (!value || value === contactInbox.sourceId) { return [] } @@ -318,7 +337,8 @@ export const ContactDetail = ({ if (conversation?.contact) { const activeContactInbox = conversation.contactInboxes[0] - const channelContactId = activeContactInbox?.sourceId + // {{user_id}} — workspace contact record id for API calls (GET /v1/contacts/id:{id}). + const userId = conversation.contact.id // The ad the contact clicked from (any ad-attributed inbox), shown as // a link right under Contact ID. Guarded to http(s) so a non-navigable // / `javascript:` referral value never becomes an anchor href. @@ -331,13 +351,14 @@ export const ContactDetail = ({ : null const tmpContactFields: ContactEditableField[] = [ { - key: "channelContactId", + key: "userId", icon: IdCardIcon, - label: t("fields.contactId.label"), - value: channelContactId, + label: t("fields.userId.label"), + value: userId, type: "shortText", readOnly: true, }, + ...buildUserCodeField(activeContactInbox, t), ...(adSourceUrl ? [ {