API Kết nối Kênh
Hướng dẫn này chỉ cho bạn cách kết nối các kênh nhắn tin với một tài khoản bằng cách sử dụng API. Tài liệu này được viết cho các nhà phát triển đang xây dựng một tích hợp hoặc wrapper, vì vậy nó tập trung vào các yêu cầu chính xác, thứ tự thực hiện và các phản hồi mà bạn nhận được.
Có một mô hình bạn cần hiểu ngay từ đầu, vì nó áp dụng cho hầu hết mọi kênh ở đây.
Mô hình kết nối rồi thăm dò (connect-then-poll)
Hầu hết các kênh không thể được kết nối chỉ bằng một lệnh gọi API duy nhất. Việc kết nối WhatsApp, Instagram hoặc Messenger đồng nghĩa với việc chủ tài khoản phải đăng nhập vào tài khoản nhà cung cấp của họ và phê duyệt quyền truy cập. Không có con đường headless (tự động hoàn toàn) nào cho việc phê duyệt đó - một người thật phải mở URL trong trình duyệt hoặc quét mã QR bằng điện thoại của họ.
Vì vậy, quy trình luôn là:
- Bắt đầu kết nối với
POST. Phản hồi sẽ cung cấp cho bạn một URL để mở hoặc một mã QR để hiển thị. - Chuyển giao cho người dùng cuối - mở URL trong trình duyệt của họ hoặc hiển thị mã QR trên màn hình để họ quét.
- Thăm dò điểm cuối trạng thái với
GETtrong một khoảng thời gian ngắn (vài giây một lần) cho đến khi trạng thái đạt đến trạng thái đã kết nối.
Công việc của tích hợp của bạn là điều khiển vòng lặp đó: hiển thị URL hoặc mã QR, sau đó thăm dò cho đến khi hoàn tất. Hãy lên kế hoạch cho giao diện người dùng của bạn xung quanh việc thăm dò - một vòng xoay tải với thông báo “đang chờ bạn hoàn tất trong trình duyệt” sẽ hoạt động hiệu quả.
Lưu ý: Trước khi bắt đầu, hãy đảm bảo quyền truy cập API đã được bật trên gói của bạn và bạn đã có khóa API. Xem Truy cập API để biết cách tạo khóa. Tất cả các yêu cầu bên dưới đều sử dụng URL cơ sở https://api.youraiconnector.com/v1 và bạn phải xác thực mọi yêu cầu. Xem Xác thực để biết bốn hình thức được chấp nhận - các ví dụ ở đây sử dụng tiêu đề X-API-Key, với một ví dụ cURL trên mỗi trang hiển thị biểu mẫu truy vấn ?apiKey= đơn giản hơn.
Instagram + Messenger (Meta)
Instagram và Messenger được kết nối cùng nhau trong một quy trình, vì cả hai đều chạy trên một Trang Facebook. Chủ tài khoản ủy quyền thông qua Facebook, bạn tìm nạp danh sách các Trang mà họ quản lý và bạn chọn Trang nào để kết nối.
Bước 1 - Bắt đầu kết nối Instagram + Messenger
POST /channels/meta/connect
Thao tác này trả về một URL đồng ý. Không có thông tin xác thực nào được gửi trong yêu cầu này - kết nối được ủy quyền hoàn toàn trong trình duyệt.
cURL
curl -X POST "https://api.youraiconnector.com/v1/channels/meta/connect?apiKey=YOUR_API_KEY"
JavaScript
const res = await fetch("https://api.youraiconnector.com/v1/channels/meta/connect", {
method: "POST",
headers: { "X-API-Key": "YOUR_API_KEY" },
});
const data = await res.json();
// Open data.oauth_url in the end user's browser.
Python
import requests
res = requests.post(
"https://api.youraiconnector.com/v1/channels/meta/connect",
headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()
# Open data["oauth_url"] in the end user's browser.
Phản hồi
{
"success": true,
"oauth_url": "https://www.facebook.com/v21.0/dialog/oauth?client_id=...&state=...",
"state_token": "opaque-one-time-token",
"connect_url": "https://api.youraiconnector.com/v1/channels/meta/connect/page?token=eyJhbGciOi...",
"connect_url_expires_at": 1717000000000,
"expires_at": "2026-06-10T12:30:00.000Z"
}
Mở oauth_url trong trình duyệt của người dùng cuối để họ có thể đăng nhập vào Facebook và phê duyệt quyền truy cập. Nỗ lực kết nối sẽ hết hạn tại expires_at (khoảng 30 phút) - nếu hết hạn, hãy bắt đầu lại. Hãy coi state_token là một bí mật tồn tại trong thời gian ngắn và không ghi nhật ký nó.
Tùy chọn dễ dàng nhất cho Instagram + Messenger: bàn giao connect_url
Phản hồi cũng bao gồm một connect_url có sẵn: một trang được lưu trữ chạy toàn bộ quy trình cho chủ tài khoản. Họ mở trang đó, đăng nhập vào Facebook và khi họ có nhiều hơn một Trang, nó sẽ hiển thị danh sách và cho phép họ chọn Trang muốn kết nối - sau đó nó sẽ tự báo cáo thành công. Hãy cung cấp liên kết này cho chủ tài khoản thay vì tự mình mở oauth_url, xây dựng trình chọn Trang và thực hiện thăm dò. Liên kết có hiệu lực trong khoảng 30 phút (connect_url_expires_at); nếu hết hạn, hãy bắt đầu một kết nối mới. Các bước thủ công dưới đây dành cho các tích hợp muốn tự điều khiển quy trình và hiển thị trình chọn Trang.
Bước 2 - Thăm dò trạng thái cho đến khi các trang tải xong
GET /channels/meta/status
Sau khi người dùng hoàn tất đăng nhập Facebook, hãy thăm dò điểm cuối này vài giây một lần. Trường status sẽ trải qua các bước sau:
status |
Ý nghĩa |
|---|---|
pending |
Chưa hoàn tất sự đồng ý. Hãy tiếp tục chờ. |
token_received |
Đã ủy quyền, nhưng danh sách Trang vẫn đang tải. |
pages_loaded |
Các Trang đã khả dụng - chuyển sang bước 3. |
connected |
Một Trang đã được chọn và kênh đã hoạt động. |
cURL
curl "https://api.youraiconnector.com/v1/channels/meta/status" \
-H "X-API-Key: YOUR_API_KEY"
JavaScript
const res = await fetch("https://api.youraiconnector.com/v1/channels/meta/status", {
headers: { "X-API-Key": "YOUR_API_KEY" },
});
const data = await res.json();
// Poll until data.status === "pages_loaded".
Python
res = requests.get(
"https://api.youraiconnector.com/v1/channels/meta/status",
headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()
# Poll until data["status"] == "pages_loaded".
Phản hồi (sau khi các trang đã tải xong)
{
"success": true,
"status": "pages_loaded",
"pages": [
{
"id": "1234567890",
"name": "My Business Page",
"category": "Local business",
"instagram_business_account": {
"id": "17890000000000000",
"username": "mybusiness"
}
}
],
"selected_page": null
}
Bước 3 - Liệt kê các trang (tùy chọn)
Nếu bạn muốn tự lấy danh sách Trang (ví dụ: để hiển thị bộ chọn), hãy sử dụng:
GET /channels/meta/pages
curl "https://api.youraiconnector.com/v1/channels/meta/pages" \
-H "X-API-Key: YOUR_API_KEY"
Nó trả về cùng một mảng pages như điểm cuối trạng thái. (Điểm cuối status đã bao gồm các trang, vì vậy lệnh gọi này chỉ mang tính tiện lợi.)
Bước 4 - Chọn trang để kết nối
POST /channels/meta/select-page
Gửi page_id của Trang mà người dùng đã chọn. Tài khoản Instagram được liên kết với Trang đó sẽ tự động được kết nối; bạn chỉ cần đối tượng instagram nếu muốn ghi đè tài khoản Instagram nào sẽ được sử dụng.
cURL
curl -X POST "https://api.youraiconnector.com/v1/channels/meta/select-page" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "page_id": "1234567890" }'
JavaScript
const res = await fetch("https://api.youraiconnector.com/v1/channels/meta/select-page", {
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({ page_id: "1234567890" }),
});
const data = await res.json();
Python
res = requests.post(
"https://api.youraiconnector.com/v1/channels/meta/select-page",
headers={"X-API-Key": "YOUR_API_KEY"},
json={"page_id": "1234567890"},
)
data = res.json()
Phản hồi
{
"success": true,
"page_id": "1234567890",
"instagram_business_account_id": "17890000000000000"
}
Kênh hiện đã được kết nối. Một GET /channels/meta/status tiếp theo sẽ báo cáo status: "connected".
Liệt kê các bài đăng của trang đã kết nối
GET /channels/meta/posts?platform=instagram
Trả về các bài đăng gần đây của trang bạn đã kết nối - phương tiện Instagram hoặc bài đăng trên Facebook. Đây là nội dung bạn dùng để hiển thị trình chọn khi thiết lập Điểm truy cập (Entry Point) phản hồi các bình luận trên một bài đăng cụ thể.
| Tham số truy vấn | Bắt buộc | Mô tả |
|---|---|---|
platform |
Có | instagram hoặc facebook. Bất kỳ giá trị nào khác sẽ trả về 400. |
limit |
Không | Số lượng bài đăng cần trả về, 1-50. Mặc định là 25. |
after |
Không | Con trỏ cho trang tiếp theo - truyền giá trị nextCursor từ phản hồi trước đó. |
cURL
curl "https://api.youraiconnector.com/v1/channels/meta/posts?platform=instagram&limit=25" \
-H "X-API-Key: YOUR_API_KEY"
Phản hồi
{
"success": true,
"connected": true,
"platform": "instagram",
"posts": [
{
"id": "17900000000000000",
"caption": "New spring menu is live",
"thumbnailUrl": "https://scontent.cdninstagram.com/...",
"permalink": "https://www.instagram.com/p/Cxxxxxxxxxx/",
"createdAt": "2026-05-02T09:12:00.000Z",
"mediaType": "REELS"
}
],
"nextCursor": "QVFIUkxxxxxxxx"
}
mediaType là nhãn riêng của Instagram (REELS, FEED, STORY, hoặc định dạng - IMAGE, VIDEO, CAROUSEL_ALBUM); đối với Facebook, nó luôn là POST. nextCursor là null trên trang cuối cùng.
Nếu không có gì để liệt kê, lệnh gọi vẫn trả về 200 với connected: false và một mảng posts trống, cùng với reason cho biết lý do:
reason |
Việc cần làm |
|---|---|
| (absent) | Chưa có trang nào được kết nối - hãy chạy quy trình kết nối trước. |
no_instagram_account |
Một Trang Facebook đã được kết nối nhưng không có tài khoản doanh nghiệp Instagram nào được liên kết với nó. Các bài đăng trên Facebook vẫn liệt kê bình thường. |
token_expired |
Thông tin xác thực trang đã lưu không còn hoạt động - hãy kết nối lại kênh. |
Ngắt kết nối Instagram + Messenger
DELETE /channels/meta
curl -X DELETE "https://api.youraiconnector.com/v1/channels/meta" \
-H "X-API-Key: YOUR_API_KEY"
Phản hồi
{ "success": true, "disconnected": true }
Thao tác này dừng định tuyến đến cho cả Instagram và Messenger. Nó có tính lũy đẳng - việc gọi lệnh này khi chưa có kết nối nào vẫn sẽ thành công.
WhatsApp Business
Thao tác này kết nối một số điện thoại WhatsApp Business chính thức. Số điện thoại phải tồn tại trên tài khoản trước khi bạn gọi lệnh kết nối. Giống như Meta, chủ tài khoản thực hiện ủy quyền trong trình duyệt của họ, sau đó bạn thực hiện thăm dò cho đến khi số điện thoại báo ONLINE.
Bước 1 - Bắt đầu kết nối WhatsApp Business
POST /channels/whatsapp/connect
cURL
curl -X POST "https://api.youraiconnector.com/v1/channels/whatsapp/connect?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "phone_number": "+14155551234" }'
JavaScript
const res = await fetch("https://api.youraiconnector.com/v1/channels/whatsapp/connect", {
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({ phone_number: "+14155551234" }),
});
const data = await res.json();
// Open data.oauth_url in the account holder's browser.
Python
res = requests.post(
"https://api.youraiconnector.com/v1/channels/whatsapp/connect",
headers={"X-API-Key": "YOUR_API_KEY"},
json={"phone_number": "+14155551234"},
)
data = res.json()
# Open data["oauth_url"] in the account holder's browser.
| Trường | Bắt buộc | Mô tả |
|---|---|---|
phone_number |
Có | Số điện thoại cần kết nối, theo định dạng E.164 (ví dụ: +14155551234). |
only_waba_sharing |
Không | Giới hạn ủy quyền chỉ chia sẻ Tài khoản WhatsApp Business hiện có, bỏ qua thiết lập người gửi mới. Mặc định là false. |
retry |
Không | Chạy lại ủy quyền cho một số điện thoại mà lần thử trước đó chưa hoàn tất. Mặc định là false. |
business_name |
Không | Ghi đè thẩm mỹ cho tên doanh nghiệp chỉ hiển thị trên màn hình đồng ý (tối đa 256 ký tự). Không được lưu trữ. |
description |
Không | Ghi đè thẩm mỹ cho mô tả doanh nghiệp chỉ hiển thị trên màn hình đồng ý (tối đa 256 ký tự). Không được lưu trữ. |
Phản hồi
{
"success": true,
"status": "pending",
"oauth_url": "https://www.facebook.com/v21.0/dialog/oauth?client_id=...&state=...",
"state_token": "opaque-one-time-token",
"expires_at": "2026-06-10T12:30:00.000Z"
}
Mở oauth_url trong trình duyệt của chủ tài khoản để ủy quyền. Sau khi họ phê duyệt, quá trình đăng ký sẽ hoàn tất ở chế độ nền.
Bước 2 - Thăm dò trạng thái cho đến khi ONLINE
GET /channels/whatsapp/connect/{phoneNumber}/status
Thăm dò trạng thái này cho đến khi status là ONLINE.
cURL
curl "https://api.youraiconnector.com/v1/channels/whatsapp/connect/+14155551234/status" \
-H "X-API-Key: YOUR_API_KEY"
JavaScript
const phone = encodeURIComponent("+14155551234");
const res = await fetch(
`https://api.youraiconnector.com/v1/channels/whatsapp/connect/${phone}/status`,
{ headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const data = await res.json();
// Poll until data.status === "ONLINE".
Python
import urllib.parse
phone = urllib.parse.quote("+14155551234")
res = requests.get(
f"https://api.youraiconnector.com/v1/channels/whatsapp/connect/{phone}/status",
headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()
# Poll until data["status"] == "ONLINE".
Phản hồi
{
"success": true,
"phone_number": "+14155551234",
"channel": "whatsapp",
"status": "ONLINE",
"status_reason": null,
"live": true
}
Trường status có thể là:
status |
Ý nghĩa |
|---|---|
PENDING |
Đã ủy quyền, quá trình phê duyệt vẫn đang diễn ra. Tiếp tục thăm dò. |
ONLINE |
Đã kết nối và sẵn sàng gửi. |
RATE_LIMITED |
Quá nhiều lần thử - hãy đợi trước khi thử lại. |
REGISTRATION_FAILED |
Không thể hoàn tất thiết lập. |
DELETED |
Đăng ký không còn tồn tại. |
live: true nghĩa là trạng thái đã được kiểm tra với nhà cung cấp trong thời gian thực; false nghĩa là trạng thái lấy từ lần lưu bộ nhớ đệm gần nhất.
Ngắt kết nối số điện thoại WhatsApp Business
DELETE /channels/whatsapp/{phoneNumber}
curl -X DELETE "https://api.youraiconnector.com/v1/channels/whatsapp/+14155551234" \
-H "X-API-Key: YOUR_API_KEY"
Phản hồi
{ "success": true, "phone_number": "+14155551234", "disconnected": true }
Bản thân số điện thoại vẫn nằm trên tài khoản, vì vậy bạn có thể kết nối lại sau.
WhatsApp Web
WhatsApp Web liên kết một số điện thoại WhatsApp thông thường bằng cách quét mã QR, giống như việc liên kết thiết bị trong ứng dụng WhatsApp. Quy trình bao gồm: bắt đầu phiên, lấy mã QR và hiển thị mã đó, sau đó thăm dò cho đến khi trạng thái là connected.
Bước 1 - Bắt đầu phiên ghép nối WhatsApp Web
POST /channels/whatsapp-web/connections
cURL
curl -X POST "https://api.youraiconnector.com/v1/channels/whatsapp-web/connections?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "phone_number": "+15551230000" }'
JavaScript
const res = await fetch("https://api.youraiconnector.com/v1/channels/whatsapp-web/connections", {
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({ phone_number: "+15551230000" }),
});
const data = await res.json();
Python
res = requests.post(
"https://api.youraiconnector.com/v1/channels/whatsapp-web/connections",
headers={"X-API-Key": "YOUR_API_KEY"},
json={"phone_number": "+15551230000"},
)
data = res.json()
| Trường | Bắt buộc | Mô tả |
|---|---|---|
phone_number |
Có | Số WhatsApp cần kết nối, theo định dạng E.164. |
proxy_country |
Không | Mã quốc gia ISO 3166-1 alpha-2 cho khu vực định tuyến. Tự động phát hiện từ số điện thoại nếu bỏ qua. |
force_new |
Không | Hủy mọi phiên hiện có và bắt đầu ghép nối mới. Mặc định là false. |
import_contacts |
Không | Nhập danh bạ hiện có của thiết bị trong lần kết nối đầu tiên. Mặc định là false. |
pause_ai_for_imported_contacts |
Không | Khi nhập danh bạ, giữ cho các phản hồi tự động tạm dừng đối với họ. Mặc định là true. |
import_existing_chats |
Không | Nhập lịch sử trò chuyện hiện có (yêu cầu import_contacts: true). Mặc định là false. |
Phản hồi
{
"success": true,
"phone_number": "+15551230000",
"session_id": "session-id",
"status": "qr_pending",
"connect_url": "https://api.youraiconnector.com/v1/channels/whatsapp-web/connect?token=eyJhbGciOi...",
"connect_url_expires_at": 1717000000000,
"poll_qr_path": "/v1/channels/whatsapp-web/connections/%2B15551230000/qr",
"poll_status_path": "/v1/channels/whatsapp-web/connections/%2B15551230000/status"
}
Tùy chọn dễ dàng nhất cho WhatsApp Web: bàn giao connect_url
Phản hồi bao gồm một connect_url có sẵn: một trang được lưu trữ hiển thị mã QR, tự động làm mới khi mã xoay vòng và chuyển sang thông báo thành công ngay khi số điện thoại được liên kết. Chỉ cần gửi liên kết này cho chủ tài khoản (mở trong trình duyệt, gửi cho họ hoặc hiển thị dưới dạng mã QR/nút bấm) và yêu cầu họ quét bằng WhatsApp - bạn không cần phải tự lấy mã QR hay thực hiện thăm dò trạng thái. Liên kết có hiệu lực trong khoảng 30 phút (connect_url_expires_at); nếu liên kết hết hạn trước khi họ hoàn tất, hãy bắt đầu một kết nối mới để nhận liên kết mới.
Đây là cách được khuyến nghị khi người dùng có thể mở liên kết. Các bước thủ công bên dưới (tự lấy mã QR, thăm dò trạng thái) dành cho các tích hợp muốn hiển thị mã QR ngay trong giao diện của riêng họ.
Phản hồi cũng cung cấp cho bạn chính xác poll_qr_path và poll_status_path để sử dụng, vì vậy bạn không cần phải tự xây dựng chúng.
Bước 2 - Lấy mã QR và hiển thị mã đó
GET /channels/whatsapp-web/connections/{phoneNumber}/qr
cURL
curl "https://api.youraiconnector.com/v1/channels/whatsapp-web/connections/+15551230000/qr" \
-H "X-API-Key: YOUR_API_KEY"
JavaScript
const phone = encodeURIComponent("+15551230000");
const res = await fetch(
`https://api.youraiconnector.com/v1/channels/whatsapp-web/connections/${phone}/qr`,
{ headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const data = await res.json();
// Render data.qr_data_url as an <img src> for the user to scan.
Python
import urllib.parse
phone = urllib.parse.quote("+15551230000")
res = requests.get(
f"https://api.youraiconnector.com/v1/channels/whatsapp-web/connections/{phone}/qr",
headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()
# Render data["qr_data_url"] for the user to scan.
Phản hồi
{
"success": true,
"phone_number": "+15551230000",
"status": "qr_pending",
"qr_code": "2@raw-qr-payload-string...",
"qr_data_url": "data:image/png;base64,iVBORw0KGgo...",
"expires_at": "2026-06-10T12:05:00.000Z"
}
Hiển thị mã QR để người dùng quét bằng điện thoại của họ (WhatsApp > Thiết bị đã liên kết > Liên kết thiết bị):
qr_data_urllà hình ảnh sẵn sàng sử dụng - hãy chèn trực tiếp vào thẻ<img src>.qr_codelà dữ liệu thô nếu bạn muốn tự tạo hình ảnh.
Mã QR có thời hạn sử dụng ngắn. Nếu bạn gọi lệnh này ngay sau khi bắt đầu phiên, bạn có thể nhận được 404 với thông báo “QR code not available yet” (Mã QR chưa khả dụng) - chỉ cần đợi một chút và thử lại. Nếu bạn nhận được 410 (“QR code expired” - Mã QR đã hết hạn), hãy bắt đầu lại kết nối để nhận mã mới.
Bước 3 - Thăm dò trạng thái cho đến khi kết nối
GET /channels/whatsapp-web/connections/{phoneNumber}/status
cURL
curl "https://api.youraiconnector.com/v1/channels/whatsapp-web/connections/+15551230000/status" \
-H "X-API-Key: YOUR_API_KEY"
JavaScript
const phone = encodeURIComponent("+15551230000");
const res = await fetch(
`https://api.youraiconnector.com/v1/channels/whatsapp-web/connections/${phone}/status`,
{ headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const data = await res.json();
// Poll until data.status === "connected" (or "open").
Python
import urllib.parse
phone = urllib.parse.quote("+15551230000")
res = requests.get(
f"https://api.youraiconnector.com/v1/channels/whatsapp-web/connections/{phone}/status",
headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()
# Poll until data["status"] == "connected" (or "open").
Phản hồi
{
"success": true,
"phone_number": "+15551230000",
"status": "connected",
"has_qr": false,
"qr_expires_at": null,
"last_activity": null,
"message_count": null,
"proxy": null,
"live": true
}
status |
Ý nghĩa |
|---|---|
not_initialized |
Chưa có phiên (lỗi kết thúc). |
qr_pending |
Đang chờ quét mã QR. |
connecting |
Đã quét, đang hoàn tất thiết lập. |
connected / open |
Đã liên kết và hoạt động - đây là trạng thái thành công. |
disconnected |
Phiên đã kết thúc (lỗi kết thúc). |
Ngắt kết nối phiên WhatsApp Web
DELETE /channels/whatsapp-web/connections/{phoneNumber}
curl -X DELETE "https://api.youraiconnector.com/v1/channels/whatsapp-web/connections/+15551230000" \
-H "X-API-Key: YOUR_API_KEY"
Phản hồi
{ "success": true, "phone_number": "+15551230000", "status": "removed" }
Thao tác này sẽ hủy liên kết thiết bị và xóa kết nối. Nó luôn dọn dẹp trạng thái cục bộ, vì vậy nó có tính lũy đẳng ngay cả khi phiên làm việc cơ sở đã bị xóa.
Telegram
Tính khả dụng: Telegram kết nối giống như bất kỳ kênh nào khác và mở cho mọi tài khoản — bạn không cần phải bật tính năng này cho mình. Các điểm cuối Telegram bên dưới vẫn có thể trả về
403nếu Telegram không được bao gồm trong gói của tài khoản, trong trường hợp đó lỗi sẽ hiển thị là"This channel is not included in your current plan. Upgrade to unlock it.".
Telegram kết nối tài khoản cá nhân bằng số điện thoại cộng với mã đăng nhập một lần (và mật khẩu hai yếu tố, nếu tài khoản đã thiết lập). Quy trình là: bắt đầu phiên, gửi mã, tùy chọn gửi mật khẩu, sau đó xác nhận qua trạng thái.
Bước 1 - Bắt đầu phiên kết nối Telegram
POST /channels/telegram/connect
cURL
curl -X POST "https://api.youraiconnector.com/v1/channels/telegram/connect?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "phone_number": "+14155550100" }'
JavaScript
const res = await fetch("https://api.youraiconnector.com/v1/channels/telegram/connect", {
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({ phone_number: "+14155550100" }),
});
const data = await res.json();
Python
res = requests.post(
"https://api.youraiconnector.com/v1/channels/telegram/connect",
headers={"X-API-Key": "YOUR_API_KEY"},
json={"phone_number": "+14155550100"},
)
data = res.json()
| Trường | Bắt buộc | Mô tả |
|---|---|---|
phone_number |
Có | Số điện thoại tài khoản cần kết nối, theo định dạng E.164. |
mode |
Không | code (mặc định) gửi mã đăng nhập một lần đến tài khoản; qr trả về mã thông báo đăng nhập và URL mã QR để hiển thị. |
proxy_country |
Không | Mã quốc gia ISO 3166-1 alpha-2 cho tuyến mạng gửi đi. |
force_new |
Không | Khi true, hủy bỏ mọi phiên hiện có và bắt đầu mới. |
Phản hồi
{
"success": true,
"phone_number": "+14155550100",
"status": "code_required",
"session_id": "session-id",
"connect_url": "https://api.youraiconnector.com/v1/channels/telegram/connect/page?token=eyJhbGciOi...",
"connect_url_expires_at": 1717000000000
}
Ở chế độ code, tài khoản sẽ nhận được mã đăng nhập trong Telegram và status là code_required. (Ở chế độ qr, phản hồi cũng bao gồm login_token và qr_url để hiển thị cho việc quét, và status là qr_required.)
Tùy chọn dễ dàng nhất cho Telegram: bàn giao connect_url
Phản hồi bao gồm một connect_url có sẵn: một trang được lưu trữ tự hoàn tất quá trình kết nối. Ở chế độ code, chủ tài khoản nhập mã đăng nhập - và mật khẩu xác minh hai bước nếu tài khoản của họ có cài đặt. Ở chế độ qr, trang hiển thị mã QR tự làm mới để họ quét từ ứng dụng Telegram. Dù bằng cách nào, trang này sẽ tự báo cáo thành công, vì vậy bạn chỉ cần gửi liên kết này cho chủ tài khoản thay vì tự xây dựng giao diện người dùng và thực hiện polling. Liên kết có hiệu lực trong khoảng 30 phút (connect_url_expires_at); nếu hết hạn, hãy bắt đầu một kết nối mới để nhận liên kết mới.
Các bước thủ công bên dưới (tự thu thập mã, gửi mã, polling trạng thái; hoặc hiển thị qr_url và polling) dành cho các tích hợp muốn tự hiển thị giao diện người dùng.
Bước 2 - Gửi mã đăng nhập
POST /channels/telegram/connect/{phoneNumber}/verify-code
cURL
curl -X POST "https://api.youraiconnector.com/v1/channels/telegram/connect/+14155550100/verify-code" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "code": "12345" }'
JavaScript
const phone = encodeURIComponent("+14155550100");
const res = await fetch(
`https://api.youraiconnector.com/v1/channels/telegram/connect/${phone}/verify-code`,
{
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({ code: "12345" }),
}
);
const data = await res.json();
Python
import urllib.parse
phone = urllib.parse.quote("+14155550100")
res = requests.post(
f"https://api.youraiconnector.com/v1/channels/telegram/connect/{phone}/verify-code",
headers={"X-API-Key": "YOUR_API_KEY"},
json={"code": "12345"},
)
data = res.json()
Phản hồi
{
"success": true,
"phone_number": "+14155550100",
"status": "connected",
"telegram_user_id": "100000001",
"username": "myhandle"
}
Nếu status là connected, bạn đã hoàn tất. Nếu tài khoản đã bật xác thực hai yếu tố, status sẽ là password_required thay vào đó - hãy chuyển sang bước 3.
Bước 3 - Gửi mật khẩu hai yếu tố (chỉ khi cần)
POST /channels/telegram/connect/{phoneNumber}/verify-password
Chỉ gọi bước này khi bước 2 trả về password_required.
cURL
curl -X POST "https://api.youraiconnector.com/v1/channels/telegram/connect/+14155550100/verify-password" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "password": "the-2fa-password" }'
JavaScript
const phone = encodeURIComponent("+14155550100");
const res = await fetch(
`https://api.youraiconnector.com/v1/channels/telegram/connect/${phone}/verify-password`,
{
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({ password: "the-2fa-password" }),
}
);
const data = await res.json();
Python
import urllib.parse
phone = urllib.parse.quote("+14155550100")
res = requests.post(
f"https://api.youraiconnector.com/v1/channels/telegram/connect/{phone}/verify-password",
headers={"X-API-Key": "YOUR_API_KEY"},
json={"password": "the-2fa-password"},
)
data = res.json()
Phản hồi
{
"success": true,
"phone_number": "+14155550100",
"status": "connected",
"telegram_user_id": "100000001",
"username": "myhandle"
}
Kiểm tra trạng thái Telegram
GET /channels/telegram/connect/{phoneNumber}/status
curl "https://api.youraiconnector.com/v1/channels/telegram/connect/+14155550100/status" \
-H "X-API-Key: YOUR_API_KEY"
Phản hồi
{
"success": true,
"phone_number": "+14155550100",
"status": "connected",
"telegram_user_id": "100000001",
"live": true
}
status có thể là connected, code_required, password_required, initializing, disconnected, not_initialized, hoặc error.
Ngắt kết nối Telegram
DELETE /channels/telegram/{phoneNumber}
curl -X DELETE "https://api.youraiconnector.com/v1/channels/telegram/+14155550100" \
-H "X-API-Key: YOUR_API_KEY"
Phản hồi
{ "success": true, "phone_number": "+14155550100", "status": "removed" }
Idempotent - các lệnh gọi lặp lại đều thành công.
Instagram (tài khoản cá nhân)
Bản beta có giới hạn, được bật theo từng tài khoản. Tính năng này kết nối tài khoản Instagram cá nhân bằng cách đăng nhập bằng tên người dùng và mật khẩu (không phải API Doanh nghiệp chính thức). Nếu tài khoản chưa được bật cho bản beta, lệnh gọi kết nối sẽ trả về lỗi quyền.
Vì việc này cần thông tin đăng nhập Instagram của chính chủ tài khoản, cách đơn giản nhất là cung cấp cho họ connect_url được lưu trữ và để họ tự nhập thông tin xác thực của mình ở đó - tích hợp của bạn không bao giờ xử lý mật khẩu.
Bước 1 - Bắt đầu kết nối Instagram (cá nhân)
POST /channels/instagram-private/connect
Gửi username và password của Instagram.
Phản hồi
{
"success": true,
"status": "connected",
"connect_url": "https://api.youraiconnector.com/v1/channels/instagram-private/connect/page?token=eyJhbGciOi...",
"connect_url_expires_at": 1717000000000
}
Nếu tài khoản có xác thực hai yếu tố hoặc Instagram yêu cầu kiểm tra (checkpoint), status sẽ trả về two_factor_required hoặc challenge_required - hãy gửi mã đến /connect/{id}/verify-2fa hoặc /connect/{id}/verify-challenge bên dưới, sau đó thăm dò /connect/{id}/status cho đến khi connected. {id} là tên người dùng Instagram đã chuẩn hóa được trả về dưới dạng account_id/username trong phản hồi ở trên - hãy sử dụng nó trong mọi bước bên dưới.
Bước 2 - Gửi mã xác thực hai yếu tố (nếu được yêu cầu)
POST /channels/instagram-private/connect/{id}/verify-2fa
Chỉ gọi lệnh này khi bước 1 (hoặc bước 3) trả về two_factor_required.
curl -X POST "https://api.youraiconnector.com/v1/channels/instagram-private/connect/yourbrand/verify-2fa" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "code": "123456" }'
Phản hồi
{
"success": true,
"account_id": "yourbrand",
"status": "connected",
"ig_user_id": "17890000000000000",
"username": "yourbrand"
}
status có thể trả về connected (hoàn tất), two_factor_required (sai mã, thử lại), hoặc challenge_required (Instagram cũng yêu cầu mã kiểm tra checkpoint - hãy chuyển sang bước 3).
Bước 3 - Gửi mã xác nhận kiểm tra (checkpoint) (nếu được yêu cầu)
POST /channels/instagram-private/connect/{id}/verify-challenge
Chỉ gọi lệnh này khi bước trước đó trả về challenge_required. Cấu trúc yêu cầu và phản hồi giống như bước 2 ở trên.
curl -X POST "https://api.youraiconnector.com/v1/channels/instagram-private/connect/yourbrand/verify-challenge" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "code": "123456" }'
Kiểm tra trạng thái Instagram (cá nhân)
GET /channels/instagram-private/connect/{id}/status
Thăm dò lệnh này cho đến khi status là connected, hoặc cho đến khi nó báo cáo lỗi nghiêm trọng.
curl "https://api.youraiconnector.com/v1/channels/instagram-private/connect/yourbrand/status" \
-H "X-API-Key: YOUR_API_KEY"
Phản hồi
{
"success": true,
"account_id": "yourbrand",
"status": "connected",
"ig_user_id": "17890000000000000",
"username": "yourbrand",
"live": true
}
status có thể là connected, two_factor_required, challenge_required, initializing, disconnected, not_initialized, hoặc error. live: true có nghĩa là giá trị này được đọc trực tiếp từ trình xử lý kết nối thay vì giá trị đã lưu trong bộ nhớ đệm.
Tùy chọn dễ dàng nhất cho Instagram (cá nhân): bàn giao connect_url
Phản hồi bao gồm một connect_url: một trang được lưu trữ nơi chủ tài khoản nhập tên người dùng và mật khẩu Instagram của họ (và mã 2FA hoặc mã kiểm tra nếu Instagram yêu cầu), và trang này sẽ tự báo cáo thành công. Thông tin xác thực được gửi thẳng đến Instagram và không được lưu trữ. Hãy cung cấp liên kết này cho chủ tài khoản thay vì thu thập mật khẩu của họ trong giao diện người dùng của bạn. Liên kết có hiệu lực trong khoảng 30 phút (connect_url_expires_at).
Ngắt kết nối Instagram (cá nhân)
DELETE /channels/instagram-private/{id}
Idempotent - các lệnh gọi lặp lại đều thành công.
Đồng bộ người theo dõi
POST /channels/instagram-private/{id}/sync-followers
Kích hoạt thủ công quá trình đồng bộ người theo dõi cho một tài khoản đã kết nối - đây chính là tác vụ chạy tự động trong nền, được hiển thị tại đây như một hành động “Làm mới người theo dõi” theo yêu cầu. Nó sẽ tìm nạp danh sách người theo dõi hiện tại của tài khoản, ghi lại bất kỳ người mới nào và (khi chiến dịch Trực tiếp có bật tính năng tiếp cận người theo dõi) sẽ gửi tin nhắn trực tiếp (DM) mở đầu cho những người theo dõi mới, tối đa theo hạn mức hàng ngày.
curl -X POST "https://api.youraiconnector.com/v1/channels/instagram-private/yourbrand/sync-followers" \
-H "X-API-Key: YOUR_API_KEY"
Phản hồi
{
"success": true,
"accountId": "yourbrand",
"totalFollowers": 1204,
"newFollowers": 6,
"dmsSent": 6,
"isBaselineSeed": false
}
Năm trường này là nơi duy nhất trên trang này trả về
camelCasethay vìsnake_case- đó là cách điểm cuối này được thiết lập hiện tại, không phải lỗi đánh máy.isBaselineSeed: truecó nghĩa đây là lần đồng bộ đầu tiên sau khi kết nối, chỉ ghi lại danh sách người theo dõi ban đầu và không bao giờ gửi DM tiếp cận (vì vậydmsSentluôn là0trong lần chạy đó).
Lần gọi đầu tiên cho một tài khoản có thể mất một chút thời gian (duyệt toàn bộ danh sách người theo dõi); các lần gọi sau sẽ nhanh hơn vì chỉ những người theo dõi mới được so sánh. 404 có nghĩa là tài khoản chưa được kết nối; 412 có nghĩa là kết nối chưa hoàn tất khởi tạo - hãy đợi và thử lại.
LINE
LINE là kênh kết nối đơn giản nhất vì không cần chuyển hướng trình duyệt hay thăm dò (polling). Khách hàng tạo một kênh Messaging API trong bảng điều khiển LINE Developers, sao chép hai giá trị và bạn gửi chúng trong một lệnh gọi duy nhất. Sau đó, bạn cung cấp lại cho họ một URL webhook để dán vào bảng điều khiển.
Bước 1 - Kết nối bằng thông tin xác thực kênh
POST /channels/line
cURL
curl -X POST "https://api.youraiconnector.com/v1/channels/line?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"channel_access_token": "LONG_LIVED_CHANNEL_ACCESS_TOKEN",
"channel_secret": "CHANNEL_SECRET"
}'
JavaScript
const res = await fetch("https://api.youraiconnector.com/v1/channels/line", {
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
channel_access_token: "LONG_LIVED_CHANNEL_ACCESS_TOKEN",
channel_secret: "CHANNEL_SECRET",
}),
});
const data = await res.json();
Python
res = requests.post(
"https://api.youraiconnector.com/v1/channels/line",
headers={"X-API-Key": "YOUR_API_KEY"},
json={
"channel_access_token": "LONG_LIVED_CHANNEL_ACCESS_TOKEN",
"channel_secret": "CHANNEL_SECRET",
},
)
data = res.json()
| Trường | Bắt buộc | Mô tả |
|---|---|---|
channel_access_token |
Có | Mã truy cập kênh Messaging API dài hạn của Tài khoản Chính thức. Được sử dụng để gửi và nhận tin nhắn. |
channel_secret |
Có | Mã bí mật kênh Messaging API, được sử dụng để xác minh chữ ký sự kiện gửi đến. |
channel_id |
Không | ID kênh dạng số. Chỉ mang tính chất thông tin. |
Phản hồi
{
"success": true,
"status": "connected",
"bot_user_id": "Uxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"basic_id": "@mybusiness",
"display_name": "My Business",
"picture_url": "https://...",
"chat_mode": "bot",
"chat_mode_ok": true,
"webhook_url": "https://api.youraiconnector.com/line/webhook/..."
}
Hai trường quan trọng cho những gì bạn làm tiếp theo:
webhook_url- khách hàng phải dán giá trị này vào trường Webhook URL của kênh LINE của họ trong bảng điều khiển LINE Developers (và bật “Use webhook”). Cho đến khi họ thực hiện việc này, sẽ không có tin nhắn gửi đến nào được nhận. Hãy hiển thị thông tin này cho họ một cách rõ ràng.chat_mode_ok- khifalse, Tài khoản Chính thức đang ở chế độ “trò chuyện” (chat) và sẽ không nhận hoặc gửi tin nhắn cho đến khi được chuyển sang chế độ “bot” trong LINE Official Account Manager. Hãy kiểm soát quá trình onboarding của bạn dựa trên cờ này và yêu cầu khách hàng chuyển đổi chế độ.
channel_access_tokenvàchannel_secretkhông bao giờ được trả về bởi bất kỳ endpoint nào. Hãy lưu trữ chúng ở phía bạn nếu bạn cần sử dụng lại; nếu không, hãy dán lại từ bảng điều khiển LINE.
bot_user_id được trả về ở đây là định danh kết nối mà bạn sử dụng trong các lệnh gọi trạng thái, xác minh và ngắt kết nối bên dưới.
Bước 2 - Xác minh lại sau khi thiết lập webhook
POST /channels/line/{botUserId}/verify-webhook
Sau khi khách hàng hoàn tất cấu hình URL webhook và chuyển sang chế độ bot, hãy gọi lệnh này để xác thực lại token đã lưu và làm mới chế độ trò chuyện được lưu trong bộ nhớ đệm.
curl -X POST "https://api.youraiconnector.com/v1/channels/line/Uxxxxxxxx.../verify-webhook" \
-H "X-API-Key: YOUR_API_KEY"
Phản hồi
{
"success": true,
"token_valid": true,
"chat_mode": "bot",
"chat_mode_ok": true,
"webhook_url": "https://api.youraiconnector.com/line/webhook/..."
}
Nếu token_valid là false, token truy cập đã lưu không còn xác thực được nữa - hãy yêu cầu khách hàng cấp lại token trong bảng điều khiển và gọi POST /channels/line lần nữa với token mới.
Kiểm tra trạng thái LINE
GET /channels/line/{botUserId}/status
curl "https://api.youraiconnector.com/v1/channels/line/Uxxxxxxxx.../status" \
-H "X-API-Key: YOUR_API_KEY"
Phản hồi
{
"success": true,
"bot_user_id": "Uxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"channel": "line",
"status": "connected",
"basic_id": "@mybusiness",
"display_name": "My Business",
"picture_url": "https://...",
"chat_mode": "bot",
"is_active": true,
"live": false
}
LINE không có nguồn cấp dữ liệu trạng thái trực tiếp, vì vậy live ở đây luôn là false - các giá trị phản ánh trạng thái được ghi lại tại thời điểm kết nối (hoặc lần xác minh cuối cùng).
Ngắt kết nối LINE
DELETE /channels/line/{botUserId}
curl -X DELETE "https://api.youraiconnector.com/v1/channels/line/Uxxxxxxxx..." \
-H "X-API-Key: YOUR_API_KEY"
Phản hồi
{ "success": true, "status": "removed", "bot_user_id": "Uxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }
Viber
Viber kết nối theo cách tương tự như LINE - dán mã thông báo xác thực (auth token) của bot từ Bảng quản trị Viber vào một lệnh gọi - với một điểm khác biệt cần lưu ý: việc kết nối cũng ĐĂNG KÝ webhook của chúng tôi trên bot của bạn ngay lúc đó, vì vậy không cần bước thực hiện riêng biệt trên bảng điều khiển sau đó. Điều đó cũng có nghĩa là một nỗ lực kết nối có thể thất bại nếu cổng vào của chúng tôi không thể phản hồi kiểm tra webhook đồng bộ của Viber, không chỉ khi bản thân mã thông báo bị sai.
Bước 1 - Kết nối bằng mã thông báo xác thực của bot
POST /channels/viber
| Trường | Bắt buộc | Mô tả |
|---|---|---|
auth_token |
Có | Mã thông báo xác thực của bot, lấy từ Bảng quản trị Viber (Cài đặt Bot của tôi). |
curl -X POST "https://api.youraiconnector.com/v1/channels/viber?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "auth_token": "444d5555e6666f7777a8888b9999c000" }'
Phản hồi
{
"success": true,
"status": "connected",
"bot_id": "botIdFromViber",
"bot_name": "My Business Bot",
"bot_avatar": "https://...",
"bot_uri": "mybusinessbot",
"subscribers_count": 0,
"webhook_url": "https://api.youraiconnector.com/v1/incoming-viber-message/...",
"event_types": ["delivered", "seen", "failed", "subscribed", "unsubscribed", "conversation_started"]
}
Mã thông báo xác thực không bao giờ được trả về bởi bất kỳ điểm cuối nào - hãy lưu trữ nó ở phía bạn nếu bạn cần dán lại. bot_id là định danh kết nối được sử dụng bởi các lệnh gọi trạng thái, xác minh và ngắt kết nối bên dưới.
Kiểm tra trạng thái Viber
GET /channels/viber/{botId}/status
Báo cáo trạng thái kết nối đã lưu. Thêm ?live=true để kiểm tra lại bot với Viber và làm mới đăng ký webhook đã lưu trong bộ nhớ đệm - hữu ích trước khi cho rằng một bot im lặng thực sự đã bị hỏng.
curl "https://api.youraiconnector.com/v1/channels/viber/botIdFromViber/status?live=true" \
-H "X-API-Key: YOUR_API_KEY"
Phản hồi
{
"success": true,
"bot_id": "botIdFromViber",
"channel": "viber",
"status": "connected",
"bot_name": "My Business Bot",
"bot_avatar": "https://...",
"bot_uri": "mybusinessbot",
"webhook_url": "https://api.youraiconnector.com/v1/incoming-viber-message/...",
"registered_webhook": "https://api.youraiconnector.com/v1/incoming-viber-message/...",
"webhook_ok": true,
"subscribers_count": 128,
"is_active": true,
"live": true
}
webhook_ok: false có nghĩa là webhook của bot không còn trỏ đến chúng tôi - các tin nhắn gửi đến sẽ bị mất. Điều này thường có nghĩa là một công cụ khác đã kết nối cùng một bot sau đó (đăng ký webhook của Viber ưu tiên lần ghi cuối cùng). Hãy khắc phục bằng lệnh gọi xác minh lại bên dưới, không cần yêu cầu khách hàng dán lại mã thông báo của họ. live là false khi phản hồi là trạng thái được lưu trong bộ nhớ đệm cuối cùng thay vì kiểm tra mới với Viber.
Đăng ký lại webhook
POST /channels/viber/{botId}/verify-webhook
Hành động sửa lỗi cho webhook_ok: false - đăng ký lại webhook của chúng tôi trên bot bằng mã thông báo xác thực đã được lưu trữ.
curl -X POST "https://api.youraiconnector.com/v1/channels/viber/botIdFromViber/verify-webhook" \
-H "X-API-Key: YOUR_API_KEY"
Phản hồi
{ "success": true, "token_valid": true, "webhook_ok": true, "webhook_url": "https://api.youraiconnector.com/v1/incoming-viber-message/...", "event_types": ["delivered", "seen", "failed", "subscribed", "unsubscribed", "conversation_started"] }
token_valid: false có nghĩa là mã thông báo đã lưu không còn hoạt động - hãy kết nối lại bằng POST /channels/viber và một mã thông báo mới.
Ngắt kết nối Viber
DELETE /channels/viber/{botId}
Hủy đăng ký webhook của chúng tôi trên phía Viber (nỗ lực tốt nhất) và xóa kết nối.
curl -X DELETE "https://api.youraiconnector.com/v1/channels/viber/botIdFromViber" \
-H "X-API-Key: YOUR_API_KEY"
Phản hồi
{ "success": true, "status": "removed", "bot_id": "botIdFromViber", "webhook_removed": true }
TikTok
Tính khả dụng: Bản beta giới hạn, được kích hoạt theo từng tài khoản. Việc kết nối TikTok sẽ trả về lỗi quyền truy cập cho đến khi tài khoản được kích hoạt cho tính năng này.
TikTok Business Messaging là một kênh OAuth đầy đủ giống như Meta, nhưng đơn giản hơn ở phía polling: không có bước polling trạng thái chuyên dụng nào để xây dựng, vì tài khoản được kết nối sẽ tự xuất hiện sau khi TikTok chuyển hướng trở lại và kết nối được ghi lại. Endpoint trạng thái bên dưới tồn tại để xác nhận trạng thái theo yêu cầu (công cụ hỗ trợ, kiểm tra tình trạng), không phải là thứ bạn cần lặp lại trong quá trình kết nối.
Bước 1 - Bắt đầu kết nối TikTok
POST /channels/tiktok/connect
Không yêu cầu thông tin xác thực - chủ tài khoản ủy quyền hoàn toàn trong trình duyệt của họ.
curl -X POST "https://api.youraiconnector.com/v1/channels/tiktok/connect?apiKey=YOUR_API_KEY"
Phản hồi
{
"success": true,
"status": "pending_authorization",
"oauth_url": "https://www.tiktok.com/v2/auth/authorize?client_key=...&state=...",
"state_token": "opaque-one-time-token",
"expires_at": "2026-06-10T12:30:00.000Z"
}
Mở oauth_url trong trình duyệt của chủ tài khoản để họ có thể đăng nhập vào TikTok và phê duyệt quyền truy cập. Trạng thái sẽ hết hạn sau expires_at (khoảng 30 phút) - nếu quá thời gian này, hãy bắt đầu lại. Không có lối tắt trang được lưu trữ connect_url cho TikTok; tự mở oauth_url là cách duy nhất.
Kiểm tra trạng thái TikTok
GET /channels/tiktok/{openId}/status
openId là open_id của Tài khoản Doanh nghiệp TikTok, được biết sau khi callback OAuth đã chạy.
curl "https://api.youraiconnector.com/v1/channels/tiktok/openIdFromTikTok/status" \
-H "X-API-Key: YOUR_API_KEY"
Phản hồi
{
"success": true,
"open_id": "openIdFromTikTok",
"channel": "tiktok",
"status": "connected",
"business_id": "openIdFromTikTok",
"username": "mybusiness",
"display_name": "My Business",
"avatar_url": "https://...",
"status_reason": null,
"is_active": true,
"live": false
}
TikTok không có kiểm tra tình trạng trực tiếp giá rẻ, vì vậy live luôn là false ở đây - các trường phản ánh những gì kết nối (hoặc lần làm mới token cuối cùng) đã ghi lại. status: "reauth_required" với status_reason được đặt có nghĩa là tài khoản cần phải thực hiện lại kết nối; token TikTok được làm mới tự động theo chu kỳ hàng năm, và đây là những gì xuất hiện nếu quá trình xoay vòng đó thất bại.
Ngắt kết nối TikTok
DELETE /channels/tiktok/{openId}
curl -X DELETE "https://api.youraiconnector.com/v1/channels/tiktok/openIdFromTikTok" \
-H "X-API-Key: YOUR_API_KEY"
Phản hồi
{ "success": true, "status": "removed", "open_id": "openIdFromTikTok" }
GoHighLevel
GoHighLevel (GHL) là một tích hợp CRM, không phải là kênh nhắn tin - việc kết nối nó không chiếm dụng vị trí kênh trong gói dịch vụ, vì nó sử dụng các kênh hiện có của tài khoản thay vì thêm kênh mới. Đây cũng là tích hợp duy nhất trên trang này có thể giữ nhiều hơn một kết nối cùng lúc: mỗi tài khoản phụ GHL (“vị trí”) mà khách hàng cài đặt ứng dụng sẽ có mục nhập riêng.
Bước 1 - Bắt đầu kết nối GHL
POST /channels/ghl/connect
| Trường | Bắt buộc | Mô tả |
|---|---|---|
brand |
Không | Danh sách marketplace GHL nào để cấp quyền thông qua đó. Mặc định là danh sách tiêu chuẩn - chỉ liên quan nếu quá trình triển khai của bạn được cấu hình nhiều hơn một ứng dụng marketplace. |
curl -X POST "https://api.youraiconnector.com/v1/channels/ghl/connect?apiKey=YOUR_API_KEY"
Phản hồi
{
"success": true,
"status": "pending_authorization",
"oauth_url": "https://marketplace.gohighlevel.com/oauth/chooselocation?client_id=...&state=...",
"state_token": "opaque-one-time-token",
"brand": "dmchamp",
"expires_at": "2026-06-10T12:30:00.000Z"
}
Mở oauth_url trong trình duyệt của chủ tài khoản để họ có thể chọn một vị trí GHL và phê duyệt quyền truy cập. Trạng thái sẽ hết hạn sau expires_at (khoảng 30 phút).
Liệt kê các kết nối GHL
GET /channels/ghl/status
Không giống như các kênh khác, đây không phải là trạng thái của một kết nối đơn lẻ - nó liệt kê mọi vị trí mà tài khoản đã kết nối.
curl "https://api.youraiconnector.com/v1/channels/ghl/status" \
-H "X-API-Key: YOUR_API_KEY"
Phản hồi
{
"success": true,
"connections": [
{
"location_id": "abc123location",
"company_id": "xyz789company",
"brand": "dmchamp",
"status": "connected",
"status_reason": null,
"scopes": ["conversations.readonly", "conversations.write", "conversations/message.write"],
"connected_at": "2026-06-01T10:00:00.000Z",
"conversation_provider_id": "provider-id-in-ghl",
"trigger_subscriptions": [
{ "id": "sub_1", "key": "InboundMessage", "workflow_id": "wf_123" }
]
}
]
}
Ngắt kết nối vị trí GHL
DELETE /channels/ghl/{locationId}
Xóa kết nối tại đây, điều này sẽ dừng mọi quá trình đồng bộ và kích hoạt cho vị trí đó. Thao tác này không gỡ cài đặt ứng dụng ở phía GHL - khách hàng sẽ tự gỡ nó khỏi các cài đặt marketplace GHL của họ nếu họ muốn làm điều đó.
curl -X DELETE "https://api.youraiconnector.com/v1/channels/ghl/abc123location" \
-H "X-API-Key: YOUR_API_KEY"
Phản hồi
{ "success": true, "status": "disconnected", "location_id": "abc123location" }
Số điện thoại (mua và giải phóng)
Thay vì kết nối một số điện thoại hiện có, bạn có thể mua trực tiếp một số mới có khả năng sử dụng WhatsApp. Tìm kiếm các số khả dụng, mua một số, sau đó thăm dò cho đến khi quá trình cấp phát hoàn tất.
Lưu ý: Các số được mua tại đây có khả năng sử dụng WhatsApp. Việc đăng ký người gửi WhatsApp chạy trong nền sau khi mua, vì vậy bạn hãy thăm dò trạng thái cho đến khi đạt ONLINE trước khi gửi. Tín dụng sẽ bị trừ khi mua và không được hoàn lại khi bạn giải phóng số đó.
Bước 1 - Tìm kiếm các số khả dụng
GET /phone-numbers/available?country_code=ISO2
cURL
curl "https://api.youraiconnector.com/v1/phone-numbers/available?country_code=US&apiKey=YOUR_API_KEY"
JavaScript
const res = await fetch(
"https://api.youraiconnector.com/v1/phone-numbers/available?country_code=US",
{ headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const data = await res.json();
Python
res = requests.get(
"https://api.youraiconnector.com/v1/phone-numbers/available",
params={"country_code": "US"},
headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()
| Tham số truy vấn | Bắt buộc | Mô tả |
|---|---|---|
country_code |
Có | Mã quốc gia ISO 3166-1 alpha-2 để tìm kiếm (ví dụ: US, GB, NL). |
type |
Không | Loại số ưu tiên, local hoặc mobile. Cả hai loại vẫn có thể được trả về. |
Phản hồi
{
"success": true,
"phone_numbers": [
{
"phone_number": "+14155551234",
"purchase_credits": 50,
"monthly_credits": 50,
"cost_usd": 1.15
}
]
}
Mỗi kết quả hiển thị purchase_credits một lần và monthly_credits định kỳ. Một số điện thoại do nền tảng cung cấp có giá ít nhất 50 tín dụng mỗi tháng, tăng dần theo giá hàng tháng của nhà mạng, được tính phí khi mua và mỗi lần gia hạn. Hãy trích dẫn purchase_credits / monthly_credits mà kết quả tìm kiếm trả về; đừng bao giờ tự tính giá. Lần tìm kiếm đầu tiên trên một tài khoản mới sẽ cung cấp một số tài nguyên cơ bản, vì vậy nó có thể chậm hơn một chút so với các lần tìm kiếm sau này.
Bước 2 - Mua số điện thoại
POST /phone-numbers
Sử dụng phone_number từ kết quả tìm kiếm.
cURL
curl -X POST "https://api.youraiconnector.com/v1/phone-numbers" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"phone_number": "+14155551234",
"country_code": "US",
"display_name": "Support line"
}'
JavaScript
const res = await fetch("https://api.youraiconnector.com/v1/phone-numbers", {
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
phone_number: "+14155551234",
country_code: "US",
display_name: "Support line",
}),
});
const data = await res.json();
Python
res = requests.post(
"https://api.youraiconnector.com/v1/phone-numbers",
headers={"X-API-Key": "YOUR_API_KEY"},
json={
"phone_number": "+14155551234",
"country_code": "US",
"display_name": "Support line",
},
)
data = res.json()
| Trường | Bắt buộc | Mô tả |
|---|---|---|
phone_number |
Có | Một số điện thoại được trả về từ kết quả tìm kiếm số khả dụng, ở định dạng E.164. |
country_code |
Có | Mã quốc gia ISO 3166-1 alpha-2 (ví dụ: US). |
display_name |
Không | Một nhãn thân thiện. Mặc định là số điện thoại. |
category |
Không | Nhãn danh mục tùy chọn. |
Phản hồi
{
"success": true,
"phone_number": "+14155551234",
"channel": "whatsapp",
"whatsapp_status": "PURCHASED",
"outgoing_status": "PURCHASED",
"status": "PURCHASED",
"purchase_credits": 50,
"monthly_credits": 50
}
Số điện thoại bắt đầu ở trạng thái PURCHASED. Sau đó, quá trình đăng ký WhatsApp sẽ diễn ra trong nền: PURCHASED -> PENDING -> ONLINE.
Nếu việc mua hàng thất bại do thiếu địa chỉ doanh nghiệp hoặc chưa thiết lập chi tiết bắt buộc khác, bạn sẽ nhận được
400kèm theoerrormô tả. Hãy thiết lập chi tiết còn thiếu và thử lại.
Bước 3 - Thăm dò cho đến khi ONLINE
GET /phone-numbers/{phoneNumber}/status
Đây là điểm cuối trạng thái số điện thoại dùng chung - nó hoạt động cho cả số WhatsApp đã mua cũng như các số được kết nối khác của bạn.
cURL
curl "https://api.youraiconnector.com/v1/phone-numbers/+14155551234/status" \
-H "X-API-Key: YOUR_API_KEY"
JavaScript
const phone = encodeURIComponent("+14155551234");
const res = await fetch(
`https://api.youraiconnector.com/v1/phone-numbers/${phone}/status`,
{ headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const data = await res.json();
// Poll until data.status === "ONLINE".
Python
import urllib.parse
phone = urllib.parse.quote("+14155551234")
res = requests.get(
f"https://api.youraiconnector.com/v1/phone-numbers/{phone}/status",
headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()
# Poll until data["status"] == "ONLINE".
Phản hồi
{
"success": true,
"phone_number": "+14155551234",
"channel": "whatsapp",
"status": "ONLINE",
"status_reason": null,
"live": true
}
Bước 4 - Giải phóng số điện thoại
DELETE /phone-numbers/{phoneNumber}
curl -X DELETE "https://api.youraiconnector.com/v1/phone-numbers/+14155551234" \
-H "X-API-Key: YOUR_API_KEY"
Phản hồi
{ "success": true, "phone_number": "+14155551234", "released": true }
Việc này thực hiện điều gì phụ thuộc vào việc đó là số của ai.
Đối với một số điện thoại được thuê thông qua nền tảng, đây là một quá trình giải phóng thực sự: người gửi WhatsApp bị hủy đăng ký, số điện thoại được trả lại cho nhà mạng và xóa khỏi tài khoản, thời gian chờ 7 ngày được áp dụng trong đó số điện thoại không thể được mua lại bởi bất kỳ ai và không có khoản tín dụng nào được hoàn lại.
Đối với một số điện thoại mà tài khoản tự mang đến (tài khoản Twilio riêng, ứng dụng Meta hoặc Tài khoản WhatsApp Business riêng, hoặc cổng SMS Android), lệnh gọi tương tự chỉ xóa số đó khỏi tài khoản. Không có gì bị hủy tại nhà cung cấp thượng nguồn và không có thời gian chờ (cooldown) nào được ghi lại, vì vậy số điện thoại có thể được kết nối lại ngay lập tức. Việc đăng ký người gửi WhatsApp của nó, nếu có, có thể còn hoặc mất: quá trình gỡ bỏ sẽ cố gắng xóa người gửi bằng cách sử dụng thông tin xác thực Twilio do nền tảng quản lý của tài khoản. Trên một tài khoản vẫn đang sử dụng thiết lập được quản lý, các thông tin xác thực đó là hợp lệ và người gửi sẽ bị xóa, vì vậy việc kết nối lại đồng nghĩa với việc phải đăng ký lại. Trên một tài khoản đã chuyển sang sử dụng Twilio riêng, việc xóa không thể xác thực và người gửi vẫn được giữ nguyên trạng thái đăng ký trong tài khoản đó — khi đó, việc kết nối lại chỉ đơn giản là gắn lại người gửi hiện có.
Thêm số điện thoại bạn đã sở hữu (BYO)
POST /phone-numbers/byo
Bỏ qua hoàn toàn quy trình tìm kiếm và mua ở trên. Sử dụng tùy chọn này khi tài khoản mang theo số điện thoại riêng của họ (Twilio riêng, Tài khoản WhatsApp Business Meta riêng hoặc cổng SMS Android) thay vì thuê số thông qua nền tảng. Tùy chọn này chỉ ghi lại số điện thoại - không có tín dụng nào bị trừ và không có gì được cung cấp với nhà cung cấp tại đây. Số điện thoại vẫn ở trạng thái không hoạt động cho đến khi chủ tài khoản hoàn tất OAuth WhatsApp để đăng ký Người gửi trên đó (quy trình tương tự như nút “Mang theo số điện thoại của riêng bạn” trên bảng điều khiển).
| Trường | Bắt buộc | Mô tả |
|---|---|---|
phone_number |
Có | Số điện thoại cần thêm, theo định dạng E.164 (ví dụ: +14155551234). |
country_code |
Có | Mã quốc gia ISO 3166-1 alpha-2 (ví dụ: US). |
display_name |
Không | Nhãn thân thiện. Mặc định là số điện thoại. |
category |
Không | Nhãn danh mục tùy chọn. |
curl -X POST "https://api.youraiconnector.com/v1/phone-numbers/byo?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"phone_number": "+14155551234",
"country_code": "US",
"display_name": "Support line"
}'
Phản hồi (201 Created):
{
"success": true,
"phone_number": "+14155551234",
"channel": "whatsapp",
"type": "BYO",
"whatsapp_status": "ADDED",
"outgoing_status": "ADDED",
"is_active": false
}
Một phone_number không phải là số E.164 thực (hoặc trông giống như số thử nghiệm WhatsApp của Meta, vốn không bao giờ có thể nhắn tin cho khách hàng thực) sẽ trả về 400. Việc thêm một số đã tồn tại trên tài khoản - ngay cả khi được viết khác một chút, như các dạng +52 so với +521 của Mexico - sẽ trả về 409 thay vì tạo ra một hàng trùng lặp.
Đặt số điện thoại làm số chính
POST /phone-numbers/{phoneNumber}/set-primary
Chuyển một số thành is_active: true và mọi số khác trên tài khoản thành is_active: false, một cách nguyên tử - tài khoản sẽ không bao giờ kết thúc với hai số hoạt động hoặc không có số nào ở giữa yêu cầu. is_active không thể được đặt thông qua điểm cuối cập nhật chung; lệnh gọi chuyên dụng này là cách duy nhất để thay đổi số nào là số chính.
curl -X POST "https://api.youraiconnector.com/v1/phone-numbers/+14155551234/set-primary" \
-H "X-API-Key: YOUR_API_KEY"
Phản hồi
{
"success": true,
"phone_number": {
"id": "+14155551234",
"phone_number": "+14155551234",
"display_name": "Support line",
"channel": "whatsapp",
"is_active": true,
"whatsapp_status": "ONLINE"
}
}
phone_number ở đây là đối tượng số đầy đủ (cùng hình dạng mà GET /phone-numbers trả về), không chỉ là chuỗi. Một phoneNumber không có trên tài khoản sẽ trả về 404.
Xóa bản ghi của số điện thoại (mà không giải phóng nó)
DELETE /phone-numbers/{phoneNumber}/record
Một thao tác xóa đơn giản bản ghi của số điện thoại trên tài khoản này - không có việc giải phóng hoặc hủy đăng ký ở phía nhà cung cấp, và không áp dụng thời gian chờ 7 ngày như bước giải phóng ở trên. Sử dụng tùy chọn này để xóa các bản ghi BYO, WhatsApp Web, Telegram hoặc LINE, hoặc một mục nhập cũ mà không cần thông qua quy trình giải phóng được quản lý. Không giống như giải phóng, việc xóa một số không có trên tài khoản là một 404, không phải là một thành công thầm lặng.
curl -X DELETE "https://api.youraiconnector.com/v1/phone-numbers/+14155551234/record" \
-H "X-API-Key: YOUR_API_KEY"
Phản hồi
{ "success": true, "phone_number": "+14155551234", "deleted": true }
Định tuyến kênh đến một chiến dịch
Kết nối một kênh sẽ đưa tin nhắn vào tài khoản. Nó không quyết định AI Agent nào sẽ trả lời các tin nhắn đó.
Việc định tuyến được xử lý bởi Điểm truy cập (Entry Points) trên một AI Agent, không phải bởi các chiến dịch. Mỗi kênh có một Điểm truy cập mặc định chỉ định Agent sẽ trả lời các liên hệ mới, chưa xác định trên kênh đó:
| Việc bạn muốn làm | Lệnh gọi |
|---|---|
| Trỏ một kênh vào Agent sẽ trả lời kênh đó | PUT /entry-points/channel-defaults với phần thân { "channel": "instagram", "agent_id": "AGENT_ID" } |
| Kiểm tra xem danh sách Điểm truy cập đã hoạt động cho tài khoản chưa | GET /entry-points/routing-status, trả về { "success": true, "cutover_enabled": true } khi Điểm truy cập quyết định việc định tuyến của tài khoản đó |
| Để một kênh không có Agent nào trả lời | DELETE /entry-points/channel-defaults?channel=instagram |
Cho đến khi một kênh có Điểm truy cập (Entry Point), tin nhắn đầu tiên từ người mà bạn chưa từng trò chuyện vẫn sẽ được lưu trữ, nhưng không có gì nhận tin nhắn đó và không có trợ lý nào trả lời. Đây là bước mà hầu hết các tích hợp đều bỏ lỡ: việc kết nối Instagram và tạo một Tác nhân (Agent) là chưa đủ — bạn cũng phải trỏ kênh đó vào Tác nhân. Tập hợp đầy đủ các lệnh gọi — bao gồm một Tác nhân cho mỗi số WhatsApp, từ khóa và quy tắc bình luận — nằm trong API Điểm truy cập.
POST /channels/campaign vẫn ghi bản đồ định tuyến chiến dịch kế thừa theo từng kênh, được ghi lại bên dưới, nhưng bản đồ đó không còn được tham chiếu để định tuyến tin nhắn đến trên bất kỳ tài khoản nào; nó chỉ được giữ lại để khôi phục (rollback). Đừng xây dựng dựa trên nó.
Định tuyến một hoặc nhiều kênh (bản đồ định tuyến chiến dịch kế thừa)
POST /channels/campaign
Các trường yêu cầu
| Trường | Bắt buộc | Mô tả |
|---|---|---|
campaign_id |
Có | Chiến dịch sẽ trả lời các liên hệ mới trên các kênh này. Phải thuộc về tài khoản. |
channels |
Có | Một mảng các kênh không trống để định tuyến. Các loại được phép: whatsapp, whatsapp_web, telegram, instagram, messenger, chat_widget, custom_channel, sms, email. |
Khe định tuyến và danh sách enabled_channels của chiến dịch được cập nhật cùng nhau trong một thao tác nguyên tử, vì vậy chúng không bao giờ bị lệch nhau. Một kênh đã được định tuyến đến một chiến dịch khác sẽ đơn giản là được trỏ lại vào chiến dịch này.
cURL
curl -X POST "https://api.youraiconnector.com/v1/channels/campaign?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"campaign_id": "NBCXrhqGPSFsd6MV7pRo",
"channels": ["instagram", "messenger"]
}'
JavaScript
const res = await fetch("https://api.youraiconnector.com/v1/channels/campaign", {
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
campaign_id: "NBCXrhqGPSFsd6MV7pRo",
channels: ["instagram", "messenger"],
}),
});
const data = await res.json();
Python
import requests
res = requests.post(
"https://api.youraiconnector.com/v1/channels/campaign",
headers={"X-API-Key": "YOUR_API_KEY"},
json={
"campaign_id": "NBCXrhqGPSFsd6MV7pRo",
"channels": ["instagram", "messenger"],
},
)
data = res.json()
Phản hồi
{
"success": true,
"campaign_id": "NBCXrhqGPSFsd6MV7pRo",
"channels": ["instagram", "messenger"]
}
Các điều kiện để việc định tuyến thực sự hoạt động
Trên một tài khoản vẫn đọc bản đồ định tuyến chiến dịch kế thừa, việc định tuyến thành công dưới dạng lệnh gọi API nhưng ba yếu tố trên chiến dịch sẽ quyết định liệu một tin nhắn đến thực tế có được trả lời hay không. Hãy kiểm tra cả ba khi một kênh đã định tuyến vẫn im lặng.
| Yêu cầu | Điều gì xảy ra nếu không đáp ứng |
|---|---|
type là Incoming from Unknown Contacts hoặc Combined |
Yêu cầu bị từ chối với 400. Các chiến dịch Gửi đi và Từ khóa không thể giữ vị trí định tuyến. |
status là Live |
Việc định tuyến được lưu trữ nhưng không bao giờ nhận được gì. Chiến dịch Draft là nguyên nhân phổ biến nhất gây ra lỗi “Tôi đã định tuyến nhưng không có gì xảy ra”. |
ai_mode là true |
Liên hệ được tạo và tin nhắn được lưu trữ, nhưng trợ lý không bao giờ trả lời. |
Khớp từ khóa hiện nằm trên các Điểm truy cập — hãy tạo một Điểm truy cập loại keyword trên AI Agent cần trả lời.
Một chiến dịch cho mỗi kênh
Mỗi kênh giữ chính xác một vị trí định tuyến kế thừa. Việc định tuyến chiến dịch thứ hai vào cùng một kênh sẽ âm thầm trỏ lại vị trí đó và trả về 200 — không có lỗi xung đột. Chiến dịch trước đó vẫn tiếp tục xử lý các liên hệ mà nó đã có; nó chỉ ngừng nhận các liên hệ mới.
Xóa định tuyến của kênh
DELETE /channels/campaign/{channel}
Xóa định tuyến cho một kênh duy nhất, bất kể chiến dịch mà nó đang trỏ tới, và đưa kênh đó ra khỏi enabled_channels của chiến dịch đó. Các liên hệ mới chưa xác định trên kênh sẽ không còn được bất kỳ chiến dịch nào tiếp nhận nữa. Các liên hệ đã có trong chiến dịch vẫn tiếp tục như trước.
curl -X DELETE "https://api.youraiconnector.com/v1/channels/campaign/instagram?apiKey=YOUR_API_KEY"
Phản hồi
{
"success": true,
"channel": "instagram",
"cleared": true,
"campaign_id": "NBCXrhqGPSFsd6MV7pRo"
}
Thao tác này có tính lũy đẳng: việc xóa một kênh chưa từng được định tuyến cũng trả về 200, cùng với cleared: false và campaign_id: null. Điểm cuối này yêu cầu tính năng chiến dịch đến (incoming campaigns) trong gói dịch vụ; nếu không có, bạn sẽ nhận được 403.
Sử dụng ứng dụng Meta của riêng bạn (Instagram + Messenger)
Theo mặc định, kết nối Instagram + Messenger chạy thông qua ứng dụng Meta của nền tảng, vì vậy tên của ứng dụng đó là tên mà chủ tài khoản nhìn thấy trên màn hình đồng ý của Facebook. Nếu bạn muốn màn hình đồng ý hiển thị thương hiệu của bạn thay thế, bạn có thể đăng ký ứng dụng Meta của riêng mình và định tuyến toàn bộ quy trình thông qua đó. Sau khi được định cấu hình, nó sẽ áp dụng cho tài khoản của bạn — không có gì thay đổi trong các lệnh gọi kết nối ở trên ngoại trừ phần thương hiệu.
Điều này chỉ áp dụng cho Instagram + Messenger. Các kết nối WhatsApp, WhatsApp Web, Telegram và LINE không bị ảnh hưởng bởi ứng dụng Meta tùy chỉnh.
Những gì ứng dụng của bạn cần trước tiên
Đây là phần tốn thời gian và diễn ra hoàn toàn ở phía Meta:
- Một ứng dụng loại Business, đã thêm các sản phẩm Messenger và Instagram.
- Quyền truy cập nâng cao (Advanced Access) (thông qua Meta App Review) cho:
pages_show_list,pages_messaging,pages_manage_metadata,pages_read_engagement,instagram_basic,instagram_manage_messages. Nếu không có Quyền truy cập nâng cao, chỉ những người giữ vai trò trong ứng dụng của bạn mới có thể hoàn tất kết nối — kết nối của khách hàng của bạn sẽ thất bại. Quy trình App Review thường mất vài tuần và yêu cầu Xác minh doanh nghiệp (Business Verification). - Cấu hình Facebook Login for Business được tạo bên trong ứng dụng của bạn, cấp các quyền tương tự. ID cấu hình dạng số của nó là dành riêng cho từng ứng dụng, vì vậy bạn phải tạo cấu hình của riêng mình.
Nếu ứng dụng của bạn thiếu bất kỳ quyền bắt buộc nào, kết nối sẽ thất bại tại thời điểm kết nối với thông báo lỗi rõ ràng nêu tên quyền còn thiếu (có thể xem trong /status poll dưới dạng byo_app_missing_permissions) — thay vì có vẻ như hoạt động nhưng lại thất bại ở tin nhắn đầu tiên.
Bước 1 - Lưu ứng dụng của bạn
PUT /account-config/meta-app
| Trường | Bắt buộc | Mô tả |
|---|---|---|
app_id |
Có | ID ứng dụng Meta của bạn (Cài đặt → Cơ bản). |
app_secret |
Có | Mã bí mật ứng dụng Meta của bạn. Được xác minh với Meta trước khi lưu trữ, sau đó được mã hóa. Không bao giờ được trả về bởi bất kỳ endpoint nào. |
config_id |
Có | ID dạng số của cấu hình Facebook Login for Business bên trong ứng dụng của bạn. |
Cả ba đều bắt buộc đối với quy trình Đăng nhập Facebook. Nếu bạn chỉ chạy luồng đẩy mã thông báo Đăng nhập Instagram được mô tả ở phần dưới, bạn có thể bỏ qua hoàn toàn các trường này.
curl -X PUT "https://api.youraiconnector.com/v1/account-config/meta-app?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"app_id": "1234567890123456",
"app_secret": "your-app-secret",
"config_id": "9876543210987654"
}'
Phản hồi
{
"success": true,
"app_id": "1234567890123456",
"config_id": "9876543210987654",
"verify_token": "1f4c…a9",
"webhook_urls": {
"instagram": "https://api.youraiconnector.com/v1/incoming-instagram-message/byo/YOUR_ACCOUNT_ID",
"messenger": "https://api.youraiconnector.com/v1/incoming-messenger-message/byo/YOUR_ACCOUNT_ID"
}
}
Bước 2 - Định cấu hình ứng dụng của bạn để giao tiếp với chúng tôi
Trong bảng điều khiển ứng dụng Meta của bạn:
- Webhooks - đối với cả sản phẩm Instagram và Messenger, hãy đặt URL Callback thành giá trị
webhook_urlskhớp từ phản hồi và Verify token thànhverify_token. Đăng ký các trườngmessages,messaging_postbacksvàcomments. - URI chuyển hướng OAuth hợp lệ (Valid OAuth Redirect URIs) - thêm
https://api.youraiconnector.com/v1/auth-meta-callback-handlerđể luồng đồng ý có thể quay lại.
GET /account-config/meta-app trả về cùng một tài liệu thiết lập bất cứ lúc nào; DELETE /account-config/meta-app xóa ứng dụng (các kết nối trong tương lai sẽ quay lại ứng dụng nền tảng — cũng hãy xóa đăng ký webhook bên trong ứng dụng của bạn).
Bước 3 - Kết nối như bình thường
Không có gì khác thay đổi. POST /channels/meta/connect (và trang connect_url được lưu trữ) sẽ tự động sử dụng ứng dụng của bạn cho tài khoản của bạn; uses_byo_meta_app: true trong phản hồi sẽ xác nhận ứng dụng nào sẽ được hiển thị trên màn hình đồng ý. Việc gửi tin nhắn, chọn trang và ngắt kết nối vẫn hoạt động giống hệt nhau.
Sử dụng ứng dụng Instagram Login của riêng bạn (đẩy token)
Phần trên đề cập đến quy trình Đăng nhập Facebook, nơi tài khoản kết nối thông qua Trang Facebook. Meta cũng cung cấp API Instagram với Instagram Login (Đăng nhập doanh nghiệp cho Instagram): chủ tài khoản xác thực trực tiếp trên Instagram, không cần tài khoản hoặc Trang Facebook.
Nếu nền tảng của bạn đã chạy ứng dụng Meta riêng với sản phẩm đó, bạn hoàn toàn không cần bất kỳ quy trình OAuth nào từ phía chúng tôi. Khách hàng của bạn ủy quyền cho ứng dụng của bạn, và bạn đẩy thông tin xác thực đã hoàn tất cho mỗi tài khoản tới chúng tôi:
- Bạn lưu thông tin xác thực ứng dụng Instagram của mình một lần (để chúng tôi có thể xác minh webhook của bạn).
- Với mỗi tài khoản, bạn đẩy ID tài khoản chuyên nghiệp Instagram + token người dùng Instagram dài hạn mà ứng dụng của bạn đã lấy được.
- Bạn trỏ webhook nhắn tin Instagram của ứng dụng về phía chúng tôi. Các sự kiện cho những tài khoản bạn chưa đẩy sẽ được xác nhận và bỏ qua.
- Bạn quản lý vòng đời của token: làm mới token trong hệ thống của riêng bạn và đẩy mỗi token đã làm mới bằng cùng một lệnh gọi. Chúng tôi không bao giờ tự làm mới token đã được đẩy.
Những gì ứng dụng của bạn cần trước tiên
- Sản phẩm Instagram (“Thiết lập API với Instagram login”) được thêm vào ứng dụng Meta của bạn. Sản phẩm đó có cặp App ID và App Secret riêng, tách biệt với App ID/Secret của Facebook — bạn có thể tìm thấy chúng trong bảng thiết lập của sản phẩm.
- Quyền truy cập nâng cao (thông qua Đánh giá ứng dụng Meta) cho
instagram_business_basicvàinstagram_business_manage_messages(thêminstagram_business_manage_commentsnếu bạn sử dụng tính năng tự động hóa bình luận). Nếu không có quyền này, chỉ những người có vai trò trong ứng dụng của bạn mới có thể ủy quyền cho nó.
Bước 1 - Lưu thông tin xác thực ứng dụng Instagram của bạn
Sử dụng cùng điểm cuối như trên — gửi cặp Instagram tới PUT /account-config/meta-app. Các trường Facebook không cần thiết cho luồng này: hãy gửi riêng cặp Instagram nếu bạn chỉ chạy Đăng nhập Instagram, hoặc gửi cùng với các trường Facebook nếu bạn chạy cả hai. Một thao tác lưu luôn mô tả toàn bộ cài đặt, vì vậy bất kỳ tập hợp nào bạn bỏ qua sẽ bị xóa.
| Trường | Bắt buộc | Mô tả |
|---|---|---|
instagram_app_id |
Cùng nhau | App ID dạng số của riêng sản phẩm Instagram (không phải App ID Facebook). |
instagram_app_secret |
Cùng nhau | App Secret của riêng sản phẩm Instagram. Được mã hóa khi lưu trữ, không bao giờ được trả về. |
curl -X PUT "https://api.youraiconnector.com/v1/account-config/meta-app?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"instagram_app_id": "1122334455667788",
"instagram_app_secret": "your-instagram-app-secret"
}'
Phản hồi — chứa URL webhook Đăng nhập Instagram (các URL instagram và messenger chỉ xuất hiện khi các trường Facebook cũng được lưu trữ):
{
"success": true,
"instagram_app_id": "1122334455667788",
"verify_token": "1f4c…a9",
"webhook_urls": {
"instagram_login": "https://api.youraiconnector.com/v1/incoming-instagram-login-message/byo/YOUR_ACCOUNT_ID"
}
}
Trong bảng Webhooks của ứng dụng dành cho sản phẩm Instagram, hãy đặt URL Callback thành webhook_urls.instagram_login, Verify token thành verify_token và đăng ký các trường messages và comments.
Bước 2 - Đẩy token cho mỗi tài khoản
PUT /channels/instagram-login/token
Hoạt động với sub_account_id giống như mọi lộ trình khác, vì vậy khóa đại lý có thể cung cấp cho toàn bộ hệ thống của mình.
| Trường | Bắt buộc | Mô tả |
|---|---|---|
ig_user_id |
Có | ID tài khoản chuyên nghiệp Instagram — trường user_id từ GET https://graph.instagram.com/v21.0/me?fields=user_id,username. Đây là cùng một ID mà webhook Instagram mang theo dưới dạng entry.id. ⚠️ Đây không phải là trường id từ /me — trường đó có phạm vi ứng dụng và khác nhau tùy theo từng ứng dụng Meta. Việc đẩy ID theo phạm vi ứng dụng sẽ trả về 400 chỉ ra lỗi này. |
access_token |
Có | Token người dùng Instagram dài hạn mà ứng dụng của bạn đã lấy được cho tài khoản đó. Được xác thực trực tiếp với Instagram trước khi lưu trữ: token phải hoạt động và phải thuộc về ig_user_id. |
expires_at |
Không | Thời hạn hết hiệu lực của token theo chuẩn ISO-8601. Hoặc gửi expires_in (tính bằng giây). Mặc định là 60 ngày. |
username |
Không | @handle của tài khoản; chúng tôi vẫn đọc nó từ Instagram. |
curl -X PUT "https://api.youraiconnector.com/v1/channels/instagram-login/token?apiKey=YOUR_AGENCY_KEY&sub_account_id=CLIENT_ID" \
-H "Content-Type: application/json" \
-d '{
"ig_user_id": "17841400000000000",
"access_token": "IGAAR…",
"expires_at": "2026-11-01T00:00:00Z"
}'
Phản hồi
{
"success": true,
"ig_user_id": "17841400000000000",
"username": "acme.studio",
"expires_at": "2026-11-01T00:00:00.000Z",
"webhook_url": "https://api.youraiconnector.com/v1/incoming-instagram-login-message/byo/YOUR_ACCOUNT_ID"
}
Là một phần của quá trình đẩy, chúng tôi đăng ký ứng dụng của bạn với webhook của tài khoản đó (subscribed_apps với token đã đẩy), vì vậy tin nhắn sẽ bắt đầu được gửi mà không cần thêm bất kỳ lệnh gọi nào từ phía bạn.
Làm mới - đẩy token đã làm mới tới cùng một endpoint với cùng một ig_user_id; nó sẽ cập nhật token và thời hạn đã lưu tại chỗ.
Xung đột - một tài khoản Instagram không bao giờ hoạt động trên hai kết nối cùng lúc. Nếu tài khoản đã được kết nối ở nơi khác, hoặc trên chính tài khoản này thông qua luồng Trang Facebook, thao tác đẩy sẽ trả về một 409 cho biết bạn cần ngắt kết nối nào trước. Kết nối theo luồng Facebook không bao giờ được tự động thay thế, vì nó có thể đang phục vụ cả Messenger.
Bước 3 - Ngắt kết nối khi khách hàng rời đi
DELETE /channels/instagram-login/token (cùng xác thực và sub_account_id) sẽ hủy đăng ký webhook theo cơ chế nỗ lực tốt nhất và xóa thông tin xác thực đã lưu. Thao tác này luôn thành công, ngay cả khi token đã hết hạn — và một khi thông tin xác thực đã bị xóa, các sự kiện webhook của tài khoản đó sẽ bị bỏ qua.
Mẹo xây dựng trình bao bọc đáng tin cậy
- Thăm dò nhẹ nhàng. Vài giây một lần là đủ. Dừng lại khi bạn đạt đến trạng thái kết thúc (
connected/ONLINE, hoặc trạng thái lỗi) và đặt thời gian chờ tổng thể hợp lý cho vòng lặp (các bước trình duyệt/QR sẽ hết hạn, xem từngexpires_at). - Mã hóa URL số điện thoại trong đường dẫn. Dấu
+ở đầu nên được gửi dưới dạng%2B. Các điểm cuối cũng khôi phục các chữ số thô, nhưng mã hóa là mặc định an toàn. - Đừng bao giờ mong đợi nhận lại các thông tin bí mật. Mã truy cập, bí mật kênh và mã trang được chấp nhận hoặc lưu trữ nhưng không bao giờ được trả về trong bất kỳ phản hồi nào.
- Xử lý cổng xác thực.
403có nghĩa là quyền truy cập API không có trong gói hoặc kênh bạn đang kết nối không được bao gồm trong gói của tài khoản. Xem Quyền truy cập API. - Lưu ý giới hạn tốc độ. Các yêu cầu đã xác thực được giới hạn ở mức 300 mỗi phút;
429có nghĩa là hãy dừng lại và thử lại sau. Xem Xác thực.
Các bước tiếp theo
- Xác thực - bốn hình thức xác thực được chấp nhận và định dạng lỗi.
- Quyền truy cập API - tạo và quản lý khóa API của bạn.