Skip to content

Webhooks ​

Webhook cho phép hệ thống VBot gửi thông báo realtime đến server của bạn khi có sự kiện xảy ra (ví dụ: cuộc gọi mới, kết thúc cuộc gọi, v.v.).

Lưu ý

Khách hàng cần mua thêm tiện ích bổ sung trong gói VBot để sử dụng tính năng này.

Mua tiện ích bổ sung ​

Thông báo

Tính năng mua tiện ích bổ sung hiện đang bảo trì. Khách hàng vui lòng liên hệ với VBot để mua gói.

Cài đặt Webhooks ​

Sau khi mua tiện ích API dịch vụ, truy cập trang cấu hình Webhooks để thiết lập.

Các bước thực hiện:

  1. Nhập URL nhận webhook hệ thống của bạn
  2. Nhập Auth header (nếu có) để xác thực request
  3. Bật các sự kiện bạn muốn nhận thông báo

Cấu hình Webhooks


Tổng quan sự kiện ​

Mã sự kiệnNhómMô tả
MANUAL_CALL_COMPLETEManual CallGói đủ: Lịch sử + Ghi âm + AI trích xuất
MANUAL_CALL_LOGManual CallLịch sử 1 cuộc gọi thường (vừa kết thúc)
MANUAL_CALL_RECORDINGManual CallFile ghi âm cuộc gọi thường
MANUAL_CALL_AI_EXTRACTIONManual CallAI trích xuất cuộc gọi thường
AUTO_CALL_COMPLETEAuto CallGói đủ: Lịch sử + Ghi âm + AI trích xuất
AUTO_CALL_LOGAuto CallLịch sử 1 cuộc gọi tự động (vừa kết thúc)
AUTO_CALL_RECORDINGAuto CallFile ghi âm cuộc gọi tự động
AUTO_CALL_AI_EXTRACTIONAuto CallAI trích xuất cuộc gọi tự động
P2P_CALL_LOGP2PLịch sử cuộc gọi nội bộ
IN_COMINGCALLIncomingThông báo realtime có cuộc gọi đang gọi vào

Cuộc gọi thường (Manual Call) ​

MANUAL_CALL_COMPLETE ​

Gói đầy đủ khi cuộc gọi thường hoàn tất, bao gồm lịch sử + ghi âm.

Cấu trúc payload:

PhầnKiểuMô tả
manualCallLogObjectThông tin chi tiết cuộc gọi
manualCallRecordingObjectThông tin ghi âm cuộc gọi

manualCallLog ​

Tham sốKiểuMô tả
transIdStringMã giao dịch cuộc gọi (duy nhất)
projectCodeStringMã dự án
typeCallIntLoại cuộc gọi (1: Gọi vào, 2: Gọi ra)
timeCallIntThời lượng đổ chuông (giây)
durationCallIntTổng thời lượng cuộc gọi (giây)
createAtLongThời điểm tạo cuộc gọi (Unix timestamp ms)
callAtLongThời điểm bắt đầu gọi (Unix timestamp ms)
callerIdStringID người gọi
callerStringSố người gọi
callerNameStringTên người gọi
typeCallerStringLoại người gọi (Website_RTC, Phone, SIP, ...)
channelCallerStringChannel ID người gọi
callerMemberNoStringmemberNo của caller
calleeIdStringID người nhận
calleeStringSố người nhận
calleeNameStringTên người nhận
typeCalleeStringLoại người nhận (Phone, Website_RTC, SIP, ...)
channelCalleeStringChannel ID người nhận
calleeMemberNoStringmemberNo của callee
conferenceIdStringID phòng hội nghị (nếu có)
telcoCodeStringMã nhà mạng (VTL, VNP, VMS, ...)
dispositionStringTrạng thái cuộc gọi (xem Bảng tra cứu)
hangupCauseStringNguyên nhân kết thúc (xem Bảng tra cứu)
sipCodeStringMã SIP response (xem Bảng tra cứu)
endCallStringChannel ID bên kết thúc cuộc gọi
hotlineStringSố hotline sử dụng
isIvrBooleanCuộc gọi có qua IVR hay không
groupIdStringID nhóm cuộc gọi
forwardBotIdEndCallStringBot ID nếu cuộc gọi được chuyển sang bot
paymentChannelStringKênh thanh toán (MONEY, ...)
postageDoubleCước phí cuộc gọi
autoDialServiceChargeDoublePhí dịch vụ gọi tự động
campaignTransIdStringMã giao dịch chiến dịch (nếu có)
customerUidStringUID khách hàng trong hệ thống
customerNameStringTên khách hàng
firstQuestionStringCâu hỏi đầu tiên (nếu có IVR)
externalCallIdStringMã cuộc gọi từ hệ thống bên ngoài
groupMemberUidStringUID nhóm thành viên

Bảng tra cứu trạng thái cuộc gọi thường

Dưới đây là sự tương quan giữa các mã sipCode, disposition, hangupCause và ý nghĩa chi tiết của chúng trên hệ thống:

sipCodedispositionhangupCauseÝ nghĩa
200ANSWERNORMAL_CLEARINGNghe máy
400BAD_REQUESTNORMAL_TEMPORARY_FAILURESai thông tin
401UNAUTHORIZEDUNAUTHORIZEDChưa xác thực
402OUT_OF_MONEYOUT_OF_MONEYSố dư tài khoản không đủ để thực hiện cuộc gọi
403DO_NOT_CALLDO_NOT_CALLNgười nhận chặn cuộc gọi quảng cáo
404NOT_FOUNDUNALLOCATED_NUMBERSố không tồn tại
405CALL_INTERVAL_NOT_ALLOWEDCALL_INTERVAL_NOT_ALLOWEDKhung giờ gọi không được phép
406MEMBER_NOT_ACTIVATEDMEMBER_NOT_ACTIVATEDThành viên chưa được kích hoạt
407MEMBER_NOT_IN_PROJECTMEMBER_NOT_IN_PROJECTThành viên không thuộc dự án
408TIME_OUTRECOVERY_ON_TIMER_EXPIREHết thời gian chờ
409DO_NOT_DISTURBDO_NOT_DISTURBKhông làm phiền
410GONENUMBER_CHANGEDSố không còn tồn tại
411ABSENTABSENTVắng mặt
412PACKAGE_EXPIREDPACKAGE_EXPIREDGói cước đã hết hạn
413HOTLINE_NOT_SUPPORT_TELCOHOTLINE_NOT_SUPPORT_TELCOHotline không hỗ trợ nhà mạng
414TELCO_NOT_FOUNDTELCO_NOT_FOUNDKhông tìm thấy nhà mạng theo số điện thoại
415INVALID_PARAMETERINVALID_PARAMETERTham số không hợp lệ
416PROJECT_EXPIREDPROJECT_EXPIREDDự án đã hết hạn
480NOANSWERNO_USER_RESPONSENgười nhận tạm thời không liên lạc được
486BUSYUSER_BUSYNgười nhận tạm thời đang bận
487CANCELORIGINATOR_CANCELNgười gọi hủy
500SERVER_ERRORNORMAL_TEMPORARY_FAILURELỗi kết nối
502BAD_GATEWAYDESTINATION_OUT_OF_ORDERLỗi đường truyền
603DECLINECALL_REJECTEDNgười nhận từ chối cuộc gọi

manualCallRecording ​

Tham sốKiểuMô tả
transIdStringMã giao dịch cuộc gọi
externalCallIdStringMã cuộc gọi từ hệ thống bên ngoài
recordUrlStringURL tải file ghi âm (yêu cầu Bearer token)
Lưu ý về giá trị externalCallId:
Giá trị externalCallId được truyền vào cần thỏa mãn các điều kiện sau:
  • Độ dài tối đa: 32 ký tự.
  • Chỉ sử dụng các ký tự chữ thường (a–z) và chữ số (0–9).
  • Không chứa các ký tự đặc biệt, chữ in hoa hoặc khoảng trắng.

MANUAL_CALL_LOG ​

Lịch sử 1 cuộc gọi thường vừa kết thúc. Payload là object phẳng với các trường giống manualCallLog ở trên.

MANUAL_CALL_RECORDING ​

File ghi âm cuộc gọi thường. Payload giống manualCallRecording ở trên.

MANUAL_CALL_AI_EXTRACTION ​

AI trích xuất dữ liệu từ cuộc gọi thường. Payload giống AUTO_CALL_AI_EXTRACTION.


Cuộc gọi tự động (Auto Call) ​

AUTO_CALL_COMPLETE ​

Gói đầy đủ khi cuộc gọi tự động hoàn tất, bao gồm lịch sử + AI trích xuất + ghi âm.

Cấu trúc payload:

PhầnKiểuMô tả
autoCallLogObjectThông tin chi tiết cuộc gọi (giống AUTO_CALL_LOG)
autoCallAIExtractionObjectDữ liệu AI trích xuất (giống AUTO_CALL_AI_EXTRACTION)
autoCallRecordingObjectThông tin ghi âm (giống AUTO_CALL_RECORDING)

AUTO_CALL_LOG ​

Lịch sử 1 cuộc gọi tự động vừa kết thúc. Payload là object phẳng:

Tham sốKiểuMô tả
phoneStringSố điện thoại khách hàng
durationIntTổng thời lượng cuộc gọi (giây)
billsecIntThời lượng tính cước (giây)
dispositionStringTrạng thái cuộc gọi (xem Bảng tra cứu)
hotlineCodeStringMã hotline
inputLogStringLog tương tác DTMF
voiceTextStringNội dung thoại chuyển văn bản (STT)
postageDoubleCước phí cuộc gọi
serviceChargeDoublePhí dịch vụ
memberNameStringTên thành viên thực hiện
memberAccIdStringAccount ID thành viên
memberNoStringmemberNo của thành viên tạo cuộc gọi tự động
answerAtLongThời điểm nghe máy (Unix timestamp ms)
endCallAtLongThời điểm kết thúc (Unix timestamp ms)
botIdStringID của bot xử lý cuộc gọi
campaignNameStringTên chiến dịch
campaignGroupNameStringTên nhóm chiến dịch
templateScriptCodeStringMã kịch bản template
templateScriptNameStringTên kịch bản template
transIdStringMã giao dịch cuộc gọi (duy nhất)
createAtLongThời điểm tạo cuộc gọi (Unix timestamp ms)
postageServiceDoubleCước dịch vụ bổ sung
postageBotServiceDoubleCước dịch vụ bot
telcoCodeStringMã nhà mạng (VTL, VNP, VMS, ...)
projectCodeStringMã dự án
callNetStringLoại cuộc gọi (OFFNET, ONNET)
metaDataStringDữ liệu meta đầu vào kịch bản (JSON string)
metaDataDescriptionStringMô tả các trường meta (JSON string)
externalCallIdStringMã cuộc gọi từ hệ thống bên ngoài
callCollectedDataStringDữ liệu thu thập từ cuộc gọi (JSON string)

Bảng tra cứu trạng thái cuộc gọi tự động

Dưới đây là các trạng thái disposition và ý nghĩa chi tiết:

dispositionÝ nghĩa
NOT_FOUND_PRICEKhông đủ tiền
NOT_FOUND_TELCOKhông tìm thấy nhà mạng
ANSWERNghe máy
NOANSWERNgười nhận tạm thời không liên lạc được
BUSYNgười nhận tạm thời đang bận
NOT_MONEYSố dư tài khoản không đủ để thực hiện cuộc gọi
SERVER_ERRORLỗi kết nối

AUTO_CALL_AI_EXTRACTION ​

AI trích xuất dữ liệu từ cuộc gọi tự động.

Tham sốKiểuMô tả
transIdStringMã giao dịch cuộc gọi
externalCallIdStringMã cuộc gọi từ hệ thống bên ngoài
callCollectedDataStringDữ liệu AI trích xuất từ cuộc gọi (JSON string)

callCollectedData là JSON string chứa mảng các trường dữ liệu đã trích xuất:

Key trong itemKiểuMô tả
cfkeyStringMã trường
cfnameStringTên hiển thị trường
cfvalueStringGiá trị trích xuất
descriptionStringMô tả trường

AUTO_CALL_RECORDING ​

File ghi âm cuộc gọi tự động.

Tham sốKiểuMô tả
transIdStringMã giao dịch cuộc gọi
externalCallIdStringMã cuộc gọi từ hệ thống bên ngoài
recordUrlStringURL tải file ghi âm (yêu cầu Bearer token)
Lưu ý về giá trị externalCallId:
Giá trị externalCallId được truyền vào cần thỏa mãn các điều kiện sau:
  • Độ dài tối đa: 32 ký tự.
  • Chỉ sử dụng các ký tự chữ thường (a–z) và chữ số (0–9).
  • Không chứa các ký tự đặc biệt, chữ in hoa hoặc khoảng trắng.

Cuộc gọi nội bộ (P2P) ​

P2P_CALL_LOG ​

Lịch sử cuộc gọi nội bộ (peer-to-peer). Payload có cấu trúc giống manualCallLog.


Cuộc gọi đến ​

IN_COMINGCALL ​

Thông báo realtime khi có cuộc gọi đang gọi vào hệ thống. Sự kiện này được gửi ngay khi cuộc gọi reo, trước khi được trả lời.

Cấu trúc payload:

Tham sốKiểuMô tả
project_codeStringMã dự án
phoneStringSố điện thoại
hotlineStringSố hotline sử dụng
trans_idStringMã giao dịch cuộc gọi
event_dataStringMã sự kiện (IN_COMINGCALL)
memberObjectThông tin thành viên
timeLongThời gian sự kiện (Unix timestamp)
eventDataStringMã sự kiện (IN_COMINGCALL)

Cấu trúc object member (Thông tin thành viên):

Tham sốKiểuMô tả
member_noStringMã thành viên
account_sipStringTài khoản SIP
nameStringTên thành viên

Ví dụ payload:

json
{
  "project_code": "PR202211251413234534",
  "phone": "0339421067",
  "hotline": "0974454532",
  "trans_id": "080920261142317640112a72a84f3fbbea33dd1632a04f",
  "event_data": "IN_COMINGCALL",
  "member": {
    "member_no": "191215105327352",
    "account_sip": "12191501234869",
    "name": "Đoàn Thị Minh Thư"
  },
  "time": 1788842552,
  "eventData": "IN_COMINGCALL"
}

Sự kiện cũ (Deprecated) ​

Lưu ý

Các sự kiện dưới đây vẫn hoạt động nhưng sẽ ngừng hỗ trợ cập nhật. Vui lòng chuyển sang sử dụng sự kiện mới tương ứng.

Mã sự kiện cũSự kiện thay thếMô tả
CAMPAIGN_CALLAUTO_CALL_LOGLịch sử cuộc gọi tự động
HISTORY_CALLMANUAL_CALL_LOGLịch sử cuộc gọi thường
HISTORY_CALL_PEERTOPEERP2P_CALL_LOGLịch sử cuộc gọi nội bộ

CAMPAIGN_CALL ​

Payload giống AUTO_CALL_LOG.

HISTORY_CALL / HISTORY_CALL_PEERTOPEER ​

Tham sốKiểuMô tả
hotline_numberStringSố hotline
date_createStringThời điểm tạo cuộc gọi
callerArrayDanh sách thông tin người gọi
calleeArrayDanh sách thông tin người nhận
time_callStringThời lượng đàm thoại
duration_callStringTổng thời lượng cuộc gọi
type_callStringLoại cuộc gọi (OUTCALL, INCALL)
group_idStringID nhóm cuộc gọi
dispositionStringTrạng thái cuộc gọi (ANSWER, NOANSWER, BUSY, ...)
external_call_idStringMã cuộc gọi từ hệ thống bên ngoài
record_fileArrayDanh sách URL file ghi âm
Lưu ý về giá trị external_call_id:
Giá trị external_call_id được truyền vào cần thỏa mãn các điều kiện sau:
  • Độ dài tối đa: 32 ký tự.
  • Chỉ sử dụng các ký tự chữ thường (a–z) và chữ số (0–9).
  • Không chứa các ký tự đặc biệt, chữ in hoa hoặc khoảng trắng.

Mỗi item trong caller / callee:

Tham sốKiểuMô tả
phoneStringSố điện thoại
vbot_idStringVBot ID
date_createStringThời điểm
dispositionStringTrạng thái
time_callStringThời lượng đàm thoại
postageDoubleCước phí
duration_callIntThời lượng cuộc gọi (giây)
sourceStringNguồn cuộc gọi (App_SDK, Phone, SIP)
member_noStringSố nhánh thành viên