ThunderPhone 2.0 đã chính thức ra mắt.Tự thiết lập, từ 2 xu/phút.Xem thông báo ra mắt

Developer cookbook

Biến theo từng cuộc gọi

Cá nhân hóa tác nhân AI đã lưu cho từng cuộc gọi mà không thay đổi prompt, công cụ hoặc cài đặt đã triển khai của tác nhân đó.

Đặt các placeholder trong prompt của tác nhân đã lưu, rồi cung cấp một đối tượng variables khi bắt đầu cuộc gọi. Cấu hình đã lưu và lịch sử phiên bản vẫn không thay đổi. ThunderPhone kết xuất văn bản trước khi gửi cấu hình cuộc gọi đến thời gian chạy giọng nói.

Khi không cần giá trị, hãy bỏ qua variables, không gửi null (bị từ chối với 400).

Placeholder và giá trị mặc định

You are calling {{name|Friend}} about account {{account_id}}.
The available appointment is {{ appointment_slot }}.

Tên phân biệt chữ hoa chữ thường và tuân theo [A-Za-z_][A-Za-z0-9_]*. Khoảng trắng xung quanh tên được cho phép; khoảng trắng sau | là một phần của giá trị mặc định và được giữ nguyên. {{name|Friend}} sử dụng Friend khi thiếu name hoặc giá trị là null; chuỗi rỗng là giá trị được cung cấp rõ ràng. Giá trị thiếu mà không có giá trị mặc định sẽ trở thành chuỗi rỗng và tên của chúng xuất hiện trong unresolved_variables. Văn bản giữa dấu ngoặc kép không phải placeholder hợp lệ sẽ bị xóa. Văn bản trong dấu ngoặc kép bên trong từng giá trị được cung cấp sẽ bị xóa độc lập; một giá trị không thể xóa văn bản prompt xung quanh hoặc giá trị khác. Dấu phân cách ngoặc kép không khớp cũng bị xóa. Ví dụ JSON trong prompt không được dùng {{. Giá trị là văn bản thuần túy, không bao giờ được đánh giá dưới dạng mã hoặc mở rộng đệ quy dưới dạng mẫu.

Biến cũng có thể xuất hiện trong prompt xác nhận, tin nhắn thư thoại gọi đi và văn bản thông báo đồng ý khi trường đó được gửi cho một cuộc gọi điện thoại. Tác nhân AI không có trường first_message riêng: hãy đặt hướng dẫn mở đầu trong prompt. Các placeholder thư thoại hiện có {agent_name}{org_name} tiếp tục hoạt động.

Giá trị có thể là chuỗi, số, boolean hoặc null; boolean được kết xuất thành truefalse. Các ký tự điều khiển Unicode (Cc) trừ dòng mới (\n), tab (\t), và ký tự xuống dòng (\r), tất cả ký tự định dạng (Cf) và điểm mã surrogate (Cs) đều bị xóa; \r\n được chuẩn hóa thành \n. Mỗi giá trị được giới hạn 2.000 ký tự khi kết xuất. Chuỗi được cung cấp cũng được làm sạch và cắt ngắn trước khi lưu trữ. Đối tượng gốc phải nằm trong 32 KB JSON UTF-8; đối tượng lớn hơn sẽ nhận 400 trong yêu cầu cuộc gọi/phiên, trong khi nhập chiến dịch báo cáo từng hàng không hợp lệ riêng lẻ. Mảng và đối tượng lồng nhau không được chấp nhận làm giá trị. Khóa metadata không khớp (ví dụ: tiêu đề CSV có khoảng trắng) được giữ lại và phản hồi lại nhưng không thể được tham chiếu bằng placeholder.

Nguồn gốc của giá trị

API gọi đi

Gửi variables cùng với agent_id trên POST /v1/call:

{
  "from_number": "+15551234567",
  "to_number": "+14155550199",
  "agent_id": 12,
  "variables": {
    "name": "Ada",
    "account_id": "A-17",
    "appointment_slot": "Tuesday at 10 AM"
  }
}

Cách này cũng hoạt động với tác nhân AI gọi đi mặc định của số điện thoại hoặc với config.prompt nội tuyến. Không thể dùng lại khóa idempotency với các biến khác nhau.

CSV chiến dịch

Các cột CSV không phải số điện thoại đã được lưu dưới dạng biến liên hệ. Mỗi lần quay số hiện tự động sử dụng các biến này. Dùng các tiêu đề như name, account_idappointment_slot để khớp với các placeholder của bạn. Ánh xạ tên hiện có có thể kết hợp cột tên và họ thành biến name.

Webhook cấu hình động

Trên đường dẫn webhook cấu hình chặn, trả về một tác nhân AI đã lưu trong tổ chức của bạn cùng với mọi giá trị theo từng cuộc gọi:

{"agent_id": 12, "variables": {"name": "Ada", "account_id": "A-17"}}

Các khóa trong phản hồi ghi đè biến ở cấp yêu cầu, trong khi các khóa yêu cầu khác được giữ nguyên. Giá trị phản hồi là null sẽ chọn giá trị mặc định của placeholder. Đối tượng đã hợp nhất cũng phải nằm trong giới hạn 32 KB. Phản hồi tác nhân AI đã lưu chỉ chấp nhận agent_idvariables; hãy trả về cấu hình nội tuyến khi bạn cần thay thế prompt hoặc cài đặt. Phản hồi chứa prompt luôn sử dụng cấu hình nội tuyến: mọi agent_id trong phản hồi đó đều bị bỏ qua, kể cả siêu dữ liệu null hoặc không phải số nguyên. Prompt nội tuyến vẫn phải vượt qua quy trình xác thực thông thường. Phản hồi webhook nội tuyến cũng có thể bao gồm variables. Phản hồi webhook của tác nhân AI đã lưu sử dụng phân chia A/B đã triển khai của tác nhân AI cho cả cuộc gọi điện thoại và widget; các biến được hiển thị sau khi chọn biến thể. Với cuộc gọi điện thoại đến, hãy dùng một số không có tác nhân AI đến được gán và cấu hình webhook của số điện thoại hoặc tổ chức đó; khóa widget sử dụng mode="webhook". Thông báo đến của hệ thống endpoint không cung cấp phản hồi cấu hình chặn.

API phiên Widget và Realtime

POST /v1/widget/session chấp nhận một đối tượng variables cấp cao nhất. Khóa có thể xuất bản của nó chọn tác nhân AI đã lưu. Khóa ở chế độ webhook chuyển tiếp các giá trị này đến webhook cấu hình và hợp nhất phản hồi như mô tả ở trên. variables widget/realtime do trình duyệt cung cấp do phía client kiểm soát, được chuyển tiếp nguyên văn trong web.incoming sau bước xác thực và làm sạch chuỗi được mô tả ở trên, đồng thời được lặp lại vào webhook hoàn tất và lịch sử cuộc gọi. Không xem chúng là dữ liệu nhận dạng hoặc ủy quyền đáng tin cậy.

POST /v1/realtime/sessions chấp nhận variables cùng với agent_id (hoặc config nội tuyến). Đây là các trường API tạo phiên. Cầu nối Realtime WebSocket không chuyển tiếp tùy chọn variables; hãy cung cấp trực tiếp tùy chọn này cho API tạo phiên. Client widget phải bao gồm variables trong payload phiên được gửi; việc chuyển tiếp qua SDK không thuộc thay đổi API này. Các cuộc gọi kiểm thử mô phỏng và bằng mic trong Builder phân giải giá trị mặc định và placeholder bị thiếu nhưng không có đầu vào biến theo từng cuộc gọi.

Giá trị được trả về sau cuộc gọi

GET /v1/calls, GET /v1/calls/{call_id}, telephony.completeweb.complete bao gồm variablesunresolved_variables cuối cùng đã được hợp nhất. Payload hoàn tất cũ có bao gồm data.history cũng bao gồm chúng:

{
  "variables": {"name": "Ada", "account_id": "A-17"},
  "unresolved_variables": ["appointment_slot"]
}

Lưu mã định danh CRM hoặc tác vụ của bạn trong đối tượng variables để liên kết cuộc gọi đã hoàn tất trở lại bản ghi nguồn. Các trường này được lưu cùng bản ghi cuộc gọi; chỉ gửi thông tin phù hợp để lưu giữ trong lịch sử cuộc gọi và webhook.

Khả năng tương thích với prompt hiện có

Việc kết xuất cũng áp dụng cho prompt tác nhân đã lưu hiện có và biến thể A/B, cấu hình outbound và realtime nội tuyến, cũng như prompt được trả về bởi webhook cấu hình. Các placeholder {{name}} không xác định sẽ trở thành văn bản trống, ngay cả khi không cung cấp variables. Kiểm tra các prompt hiện có trước khi triển khai, bao gồm prompt nội tuyến/webhook được cung cấp từ bên ngoài mà ThunderPhone không thể kiểm kê. Cuộc gọi mic trong Builder và cuộc gọi mô phỏng áp dụng cùng hành vi mặc định/để trống.