Tài liệu này hướng dẫn quy trình tích hợp softphone WebRTC của Alohub vào một Salesforce org từ đầu đến khi gọi ra/nghe gọi được trong Lightning Experience. Trọng tâm là các bước cấu hình thực tế và những lỗi thường gặp (CSP chặn click-to-dial, micro không hoạt động, cuộc gọi bị từ chối) cùng cách xử lý.
Đối tượng: Salesforce admin/developer triển khai package vào org. Yêu cầu Salesforce CLI (
sf), quyền cấu hình Session Settings, Call Center, Utility Bar và Lightning App Builder.
Softphone chạy như một Lightning Web Component (alohubPhone) trên Utility Bar, kết nối SIP/WebRTC qua JsSIP tới SIP server của Alohub. Một lớp Open CTI bridge (Visualforce) và component Alohub Call Button đảm nhiệm click-to-dial qua Lightning Message Service (LMS).
Thành phần | Loại | Vai trò trong tích hợp |
|---|---|---|
| LWC (Utility Bar) | Giao diện softphone, đăng ký SIP, quay số, nghe/gọi |
| LWC (Record Page) | Nút gọi trên record — thay thế click-to-dial native bị CSP chặn |
| Visualforce | Adapter Open CTI: nhận click-to-dial native, screen-pop cuộc gọi đến |
| Message Channel | Kênh LMS nối bridge/Call Button ↔ softphone |
Hạng mục | Yêu cầu |
|---|---|
Tài khoản SIP | WSS URL, SIP domain, username (extension), password — do Alohub cung cấp |
Trình duyệt | Chrome/Edge mới, truy cập org qua HTTPS (My Domain), cho phép micro |
Quyền admin | Sửa Session Settings, Call Center, Utility Bar, Lightning Record Page |
Quan trọng: Thông số SIP do Alohub cấp riêng cho từng khách hàng. Liên hệ để nhận: https://alohub.vn/lien-he.
Đăng nhập org và deploy source. Ví dụ với alias myOrg:
sf org login web --alias myOrg \
--instance-url https://login.salesforce.com
sf project deploy start --source-dir force-app --target-org myOrg
Softphone dùng navigator.mediaDevices.getUserMedia để lấy micro. Dưới Locker Service (chế độ bảo mật cũ), navigator.mediaDevices không được expose cho LWC → cuộc gọi báo lỗi Cannot read properties of undefined (reading 'getUserMedia'). Lightning Web Security (LWS) expose đầy đủ API này.
Vào Setup → Session Settings → bật "Use Lightning Web Security for Lightning web components and Aura components" → Save.
Cảnh báo: LWS là thay đổi org-wide, có thể ảnh hưởng các LWC/Aura khác. Hãy bật và kiểm thử trên sandbox trước khi áp dụng production.
Cách kiểm tra nhanh trạng thái: mở DevTools Console khi softphone đang chạy, log khởi tạo media sẽ in hasMediaDevices: true nếu LWS đã expose đúng.
Kết nối SIP đi qua WebSocket Secure (WSS). Domain WSS phải nằm trong CSP Trusted Sites với connect-src được bật, nếu không trình duyệt sẽ chặn kết nối.
Trường | Giá trị |
|---|---|
Endpoint URL |
|
Active | true |
connect-src (CSP) | Bật |
Lưu ý: Nếu Alohub cấp WSS khác (vd
wss://app.alohub.vn:57443), phải thêm domain đó vào Trusted Sites — nếu không sẽ lỗi Refused to connect.
Vào Setup → App Manager → chọn Lightning App đang dùng → Edit → Utility Items → Add Utility Item → chọn alohubPhone.
Quan trọng: Bật "Start automatically" (Load in background when app opens). Component Utility Bar được load lười (lazy) — nếu không bật auto-start, softphone chưa khởi tạo thì không subscribe được kênh LMS, dẫn đến click-to-dial từ record page bấm không có phản hồi cho tới khi mở panel thủ công.
Có hai cách nạp cấu hình SIP (WSS URL, domain, username, password, display name):
Cách | Khi nào dùng |
|---|---|
Nhân viên tự nhập trên màn hình Settings của softphone | Triển khai nhỏ, mỗi người tự quản lý extension |
Admin set sẵn qua Admin Panel ( | Triển khai tập trung cho nhiều nhân viên |
Sau khi nhập, bật Auto-login để softphone tự đăng ký SIP khi mở app. Trạng thái registered nghĩa là đã sẵn sàng gọi.
Trường Phone native của Salesforce dùng link javascript: để kích hoạt click-to-dial. Org bật strict CSP (đa số org mới) sẽ chặn link này với lỗi:
Running the JavaScript URL violates the following Content Security Policy
directive 'script-src ...'. The action has been blocked.
Đây là giới hạn nền tảng — không có cấu hình nào "mở" được javascript: navigation trong Lightning Experience (CSP Trusted Sites chỉ thêm domain, không thêm 'unsafe-inline'). Giải pháp là dùng component alohubCallButton: render số điện thoại thành nút bấm thật, publish qua LMS tới softphone để quay số — không dùng javascript: nên miễn nhiễm CSP.
Cấu hình một lần cho mỗi object (áp dụng cho tất cả record của object đó):
Bước | Thao tác | Ghi chú |
|---|---|---|
1 | Mở record → ⚙️ → Edit Page | Vào Lightning App Builder |
2 | Kéo Alohub Call Button vào layout | Mục Custom components |
3 | Set Phone field API name | VD |
4 | Save → Activation | Gán Org Default hoặc theo App/Profile |
Component đã expose sẵn cho Lead, Contact, Account, Case, Opportunity. Lặp lại cho từng object cần dùng.
Lưu ý: Có thể giữ nguyên trường Phone native để xem/copy số, chỉ thêm Call Button bên cạnh để bấm gọi.
Nếu org chưa bật strict CSP (còn 'unsafe-inline' trong script-src), click-to-dial trên trường Phone native vẫn hoạt động qua adapter Open CTI. Khai báo Call Center:
Trường | Giá trị |
|---|---|
CTI Adapter URL |
|
Use CTI API | true |
Quan trọng: Dùng URL tương đối
/apex/alohubCtiBridgethay vì domain tuyệt đối. Hard-code domain Visualforce (vd...vf.force.com) của org khác sẽ khiến Lightning không frame được adapter và báo Refused to frame. Sau đó gán user vào Call Center qua Setup → Call Centers → Manage Call Center Users.
Mở DevTools Console, bấm gọi và đối chiếu log [Alohub] / [Alohub SIP]:
Log | Ý nghĩa |
|---|---|
| LMS + đăng ký SIP OK, bắt đầu gọi |
| Micro đã cấp quyền (LWS hoạt động) |
| INVITE đã tới tổng đài, đang đổ chuông |
Lưu ý về định dạng số: Click-to-dial gửi số nguyên trạng từ record (vd
0982483437). Nếu tổng đài trả603 Decline, thường do định dạng số chưa đúng (cần bỏ số 0 đầu + thêm mã quốc gia, vd84982483437, hoặc thêm prefix gọi ra ngoài). Hãy xác nhận định dạng tổng đài yêu cầu và cấu hìnhoutsidePrefixcho phù hợp.
Triệu chứng | Nguyên nhân | Cách xử lý |
|---|---|---|
Click số native báo Running the JavaScript URL ... blocked | Strict CSP chặn | Dùng Alohub Call Button (Bước 6); native không thể bypass bằng config |
| Locker Service không expose | Bật Lightning Web Security (Bước 2) |
Bấm Call Button không phản hồi, không có log | Softphone chưa khởi tạo trên Utility Bar (lazy load) | Bật Start automatically cho utility item (Bước 4) |
Refused to frame ...vf.force.com | Adapter URL hard-code domain sai | Đổi sang URL tương đối |
Refused to connect tới WSS | Domain WSS chưa có trong CSP Trusted Sites | Thêm Trusted Site, bật |
Gọi đổ chuông rồi | Tổng đài từ chối: sai định dạng số hoặc thiếu quyền route outbound | Chuẩn hóa số (mã quốc gia/prefix); kiểm tra quyền outbound, caller ID, số dư trên PBX |
Cần thông số SIP hoặc hỗ trợ triển khai, liên hệ Alohub: https://alohub.vn/lien-he.