Cách kết nối kênh văn bản bên ngoài với ElevenLabs agent thông qua webhook
Mua gói Thành viên QuanTriMang Pro để trải nghiệm website không quảng cáo và sử dụng các tiện ích AI trên QuanTriMang.
Kết nối kênh văn bản bên ngoài với ElevenLabs agent thông qua webhook
Tổng quan
Kênh tùy chỉnh (Custom Channel) cho phép kết nối một hệ thống nhắn tin bên ngoài với một ElevenLabs agent. Bạn có thể gửi tin nhắn của người dùng đến webhook của ElevenLabs, sau đó nhận phản hồi từ agent thông qua endpoint HTTPS của riêng bạn.
- Kênh tùy chỉnh đang trong giai đoạn thử nghiệm alpha.
- Kênh tùy chỉnh không khả dụng cho các agent hoặc không gian làm việc sử dụng chế độ không lưu giữ dữ liệu.
Các tính năng
| Khả năng | Hỗ trợ |
|---|---|
| Zero retention mode (ZRM) - Chế độ không lưu giữ | Không được hỗ trợ - không khả dụng đối với các ZRM workspace và ZRM agent |
| File đính kèm trong tin nhắn | Không được hỗ trợ - tin nhắn chỉ bao gồm văn bản |
Thiết lập
1. Mở kênh tùy chỉnh (Custom Channel)
Truy cập vào agent của bạn, chọn Channels, nhấn Custom Channel, rồi nhấp vào Add trigger.
2. Cấu hình trình kích hoạt
Chọn một kết nối hiện có hoặc tạo mới, sau đó nhập Reply Webhook URL.
3. Sao chép thông tin xác thực
Nhấp vào Add, sau đó sao chép Inbound Webhook URL, Inbound Secret và Outbound Signing Secret.
4. Cấu hình dịch vụ của bạn
Gửi tin nhắn của người dùng đến URL Webhook đầu vào, kèm theo mã bí mật đầu vào trong tiêu đề X-Webhook-Secret. Sử dụng outbound signing secret để xác thực từng phản hồi.
Gửi tin nhắn
Gửi yêu cầu POST tới URL Webhook đã tạo:
POST /v1/convai/api-integrations/custom_channel/triggers/{trigger_connection_id}/async_message
X-Webhook-Secret: <inbound-secret>
Content-Type: application/json
{
"data": {
"type": "user_message",
"text": "Where is my order?",
"user_identifier": "customer_8427"
},
"user_message_id": "msg_01k1e6z3f4t8n9c2",
"dynamic_variables": {
"order_id": "order_72491"
}
}
| Trường | Có bắt buộc không? | Mô tả |
|---|---|---|
data.type |
Có | Phải là user_message. |
data.text |
Có | Thông điệp người dùng không trống. |
data.user_identifier |
Không | Định danh cho người dùng bên ngoài. |
user_message_id |
Có | Idempotency key không rỗng do hệ thống của bạn cung cấp |
conversation_id |
Không | Hãy bao gồm ID được trả về để tiếp tục cuộc trò chuyện. Bỏ qua ID đó nếu muốn bắt đầu một cuộc trò chuyện mới. |
dynamic_variables |
Không | Các biến động được cung cấp cho agent trong lượt này. |
ElevenLabs trả về mã phản hồi 202 Accepted trước khi xử lý lượt tương tác:
{
"conversation_id": "conv_01k1e72d4x8p6v3m",
"status": "queued"
}
Để tiếp tục cuộc trò chuyện, hãy gửi một yêu cầu khác kèm theo conversation_id đó cùng với một user_message_id mới.
Nhận phản hồi
ElevenLabs sẽ gửi một yêu cầu POST tới URL webhook phản hồi sau mỗi lượt trao đổi:
{
"version": "1",
"conversation_id": "conv_01k1e72d4x8p6v3m",
"user_message_ids": ["msg_01k1e6z3f4t8n9c2"],
"status": "completed",
"data": [
{
"type": "agent_response",
"event": {
"agent_response": "Your order is scheduled to arrive tomorrow.",
"response_id": "9f2c1a7e-4b3d-4e8a-9c1f-2d6b8e0a5f31",
"event_id": 4
}
},
{
"type": "agent_tool_response",
"event": {
"tool_name": "end_call",
"tool_call_id": "toolu_01k1e70r4b8y",
"tool_type": "system",
"event_id": 4,
"is_called": true,
"is_error": false,
"is_blocked": false,
"status": "success"
}
}
],
"error": null
}
Nếu quá trình xử lý thất bại, status là failed, data là [], và error chứa mô tả.
data liệt kê các sự kiện theo thứ tự lượt. Mỗi mục có một type và một event:
agent_responsechứa một câu nói củaagent. response_idxác định duy nhất câu nói, trong khievent_idliên kết nó với một lượt. Kết hợp các giá trịagent_responsenếu kênh của bạn hiển thị một bong bóng văn bản cho mỗi lượt.agent_tool_responsebáo cáo kết quả của công cụ và chia sẻevent_idcủa lượt đó. Trạng thái của nó là thành công, lỗi, bị chặn hoặc bị bỏ qua. Một phản hồi vớitool_type: "system",tool_name: "end_call"vàstatus: "success"có nghĩa là agent đã kết thúc cuộc trò chuyện.
Nhiều tin nhắn đến có thể được gộp lại thành một lượt. user_message_ids liệt kê các ID tin nhắn người dùng mà phản hồi này đang trả lời.
Xác minh chữ ký phản hồi
Mỗi phản hồi bao gồm tiêu đề ElevenLabs-Signature:
t=1753876800,v0=<hex-digest>
Mã hash là chữ ký HMAC-SHA256 trên {timestamp}.{raw_request_body} sử dụng outbound signing secret. Xác minh nội dung thô trước khi phân tích cú pháp JSON và từ chối các timestamp lỗi thời.
Python
import hashlib
import hmac
import time
def verify_signature(raw_body: bytes, header: str, secret: str) -> None:
values = dict(part.split("=", 1) for part in header.split(","))
timestamp = values["t"]
if abs(time.time() - int(timestamp)) > 30 * 60:
raise ValueError("Stale webhook signature")
expected = hmac.new(
secret.encode(),
timestamp.encode() + b"." + raw_body,
hashlib.sha256,
).hexdigest()
if not hmac.compare_digest(expected, values["v0"]):
raise ValueError("Invalid webhook signature")
TypeScript
import { createHmac, timingSafeEqual } from "node:crypto";
export function verifySignature(rawBody: Buffer, header: string, secret: string): void {
const values = Object.fromEntries(header.split(",").map((part) => part.split("=", 2)));
const timestamp = values.t;
if (!timestamp || Math.abs(Date.now() / 1000 - Number(timestamp)) > 30 * 60) {
throw new Error("Stale webhook signature");
}
const expected = createHmac("sha256", secret).update(`${timestamp}.`).update(rawBody).digest();
const received = Buffer.from(values.v0 ?? "", "hex");
if (received.length !== expected.length || !timingSafeEqual(expected, received)) {
throw new Error("Invalid webhook signature");
}
}
Cơ chế gửi dữ liệu
ElevenLabs thực hiện 3 lần gửi dữ liệu trong quá trình xử lý, vào các thời điểm khoảng 0, 0,5 và 2 giây. Phản hồi thuộc nhóm 2xx được coi là gửi thành công.
Phần thân yêu cầu (request body) bị giới hạn ở mức 256 KiB.
Bạn nên đọc
-
Công cụ Agent transfer trong ElevenAgents
-
Điều chỉnh từng cuộc trò chuyện với ngữ cảnh được cá nhân hóa cho mỗi người dùng trong ElevenAgents
-
Cách kết nối ElevenLabs AI agent với Cursor
-
Âm thanh khi gọi công cụ trong ElevenAgents
-
Cách cá nhân hóa hành vi agent trong ElevenAgents
-
Công cụ Skip turn trong ElevenAgents
-
Các biến động (Dynamic variable) trong ElevenAgents
-
Công cụ Language detection trong ElevenAgents: Cho phép agent tự động chuyển đổi ngôn ngữ
-
Công cụ Transfer to number trong ElevenAgents
Theo Nghị định 147/2024/ND-CP, bạn cần xác thực tài khoản trước khi sử dụng tính năng này. Chúng tôi sẽ gửi mã xác thực qua SMS hoặc Zalo tới số điện thoại mà bạn nhập dưới đây:
Hướng dẫn AI
AI Tools
Học IT
Hàm Excel