0
0
Lập trình
Hưng Nguyễn Xuân 1
Hưng Nguyễn Xuân 1xuanhungptithcm

Hướng Dẫn Xây Dựng Đại Lý Điện Thoại AI Bằng Python

Đăng vào 6 tháng trước

• 8 phút đọc

Giới thiệu: Tại Sao Đại Lý Điện Thoại AI Quan Trọng

Bạn có muốn tạo một trợ lý giọng nói AI có khả năng trả lời cuộc gọi tự động? Các đại lý điện thoại AI đang cách mạng hóa cách doanh nghiệp xử lý hỗ trợ khách hàng và giao tiếp thời gian thực.

Trong hướng dẫn này, chúng ta sẽ cùng nhau xây dựng một đại lý điện thoại AI hoàn chỉnh bằng Python, ngay cả khi bạn là người mới bắt đầu. Cuối cùng, đại lý AI của bạn sẽ có khả năng:

  • Trả lời cuộc gọi đến tự động
  • Thực hiện cuộc gọi đi
  • Hiểu ngôn ngữ nói của con người thông qua Speech-to-Text (STT)
  • Phản hồi thông minh với Large Language Models (LLM)
  • Nói tự nhiên với Text-to-Speech (TTS)

Các yêu cầu trước khi xây dựng Đại Lý Điện Thoại AI

Chúng ta sẽ sử dụng pipeline thời gian thực, nếu bạn muốn sử dụng cascading pipeline, hãy theo dõi hướng dẫn này: https://docs.videosdk.live/ai_agents/core-components/cascading-pipeline

Trước khi bắt đầu, hãy đảm bảo bạn có:

  1. Python 3.12+ được cài đặt trên máy tính của bạn.
  2. Tài khoản VideoSDK để lấy VIDEOSDK_TOKEN của bạn.
  3. Các khóa API:
    • Khóa API Google cho pipeline thời gian thực.
  4. Kiến thức cơ bản về Python (hàm, lớp, lập trình bất đồng bộ).

Mẹo cho người mới bắt đầu: Lưu trữ các khóa API của bạn trong tệp .env để giữ an toàn.


Thiết lập dự án

Tạo một thư mục dự án với cấu trúc sau:

Copy
├── main.py          # Logic chính của đại lý AI của bạn
├── requirements.txt # Các phụ thuộc Python
└── .env             # Lưu trữ các khóa API của bạn

Ví dụ tệp .env:

Copy
VIDEOSDK_TOKEN="your_videosdk_token_here"
GOOGLE_API_KEY="your_google_api_key_here"

Ví dụ tệp requirements.txt:

Copy
videosdk-agents==0.0.32
videosdk-plugins-google==0.0.32
python-dotenv==1.1.1
requests==2.31.

Những thư viện này sẽ xử lý việc nhận diện giọng nói, phản hồi AI và tổng hợp giọng nói.


Bước 1: Viết Đại Lý Điện Thoại AI của Bạn

Dưới đây là một đoạn mã Python thân thiện với người mới bắt đầu cho đại lý AI của bạn:

python Copy
import asyncio
import traceback
from videosdk.agents import Agent, AgentSession, RealTimePipeline, JobContext, RoomOptions, WorkerJob, Options
from videosdk.plugins.google import GeminiRealtime, GeminiLiveConfig
from dotenv import load_dotenv
import os
import logging
logging.basicConfig(level=logging.INFO)

load_dotenv()

# Định nghĩa hành vi và tính cách của đại lý
class MyVoiceAgent(Agent):
    def __init__(self):
        super().__init__(
            instructions="Bạn là một trợ lý AI hữu ích trả lời cuộc gọi điện thoại. Giữ cho phản hồi của bạn ngắn gọn và thân thiện.",
        )

    async def on_enter(self) -> None:
        await self.session.say("Xin chào! Tôi là trợ lý thời gian thực của bạn. Tôi có thể giúp gì cho bạn hôm nay?")

    async def on_exit(self) -> None:
        await self.session.say("Tạm biệt! Rất vui được trò chuyện với bạn!")

async def start_session(context: JobContext):
    # Cấu hình mô hình Gemini cho giọng nói thời gian thực
    model = GeminiRealtime(
        api_key=os.getenv("GOOGLE_API_KEY"),
        config=GeminiLiveConfig(
            voice="Leda",
            response_modalities=["AUDIO"]
        )
    )
    pipeline = RealTimePipeline(model=model)
    session = AgentSession(agent=MyVoiceAgent(), pipeline=pipeline)

    try:
        await context.connect()
        await session.start()
        await asyncio.Event().wait()
    finally:
        await session.close()
        await context.shutdown()

if __name__ == "__main__":
    try:
        # Đăng ký đại lý với một ID duy nhất
        options = Options(
            agent_id="MyTelephonyAgent",  # QUAN TRỌNG: Nhận diện duy nhất cho việc định tuyến
            register=True,               # BẮT BUỘC: Đăng ký với VideoSDK cho điện thoại
            max_processes=10,            # Số cuộc gọi đồng thời để xử lý
            host="localhost",
            port=8081,
            )
        job = WorkerJob(entrypoint=start_session, options=options)
        job.start()
    except Exception as e:
        traceback.print_exc()

Bước 2: Chạy Đại Lý AI của Bạn trên Máy Tính

Copy
# Tạo một môi trường ảo
python3 -m venv .venv

# Kích hoạt môi trường ảo
source .venv/bin/activate  # macOS/Linux
.venv\Scripts\activate     # Windows

# Cài đặt các phụ thuộc
pip install -r requirements.txt

# Chạy đại lý AI
python main.py

Giữ cho terminal này mở, đại lý của bạn phải được giữ hoạt động để trả lời cuộc gọi.


Bước 3: Kết Nối Đại Lý AI của Bạn với Mạng Điện Thoại

1. Cấu hình Cổng vào

Mua một Số và Tạo một SIP Trunk trong Twilio

  • Đăng nhập vào Console Twilio của bạn.
  • Mua một số điện thoại nếu bạn chưa có.
  • Tạo một SIP Trunk mới trong phần Voice của Twilio.

Cấu hình Cổng vào trong VideoSDK

  • Mở Dashboard VideoSDK.

  • Đi tới Điện thoại > Cổng vào.

  • Nhấp Thêm Cổng và nhập số Twilio của bạn để tạo một cổng vào.

  • Sau khi tạo, bạn sẽ thấy một URI Cổng vào (ví dụ: sip:your-org-id.sip.videosdk.live). Sao chép URI này.

Cấu hình Origination SIP Trunk Twilio

  • Trong SIP Trunk của bạn, đi đến phần Origination.
  • Thêm URI Cổng vào đã sao chép làm mục tiêu Origination.
  • Lưu thay đổi của bạn.

2. Cấu hình Cổng ra

Cấu hình Termination SIP Trunk Twilio

  • Trong SIP Trunk của bạn, đi đến phần Termination.

  • Thiết lập SIP URI Termination (địa chỉ mà VideoSDK sẽ sử dụng cho các cuộc gọi đi).

  • Thêm địa chỉ IP được phép và thiết lập thông tin xác thực (tên người dùng và mật khẩu) cho trunk.

Cấu hình Cổng ra trong VideoSDK

  • Trong Dashboard VideoSDK, đi đến Điện thoại > Cổng ra.

  • Nhấp Thêm Cổng và nhập URI Termination Twilio và thông tin xác thực.

  • Lưu cổng.

Thêm quy tắc định tuyến

  • Đi đến Điện thoại > Quy tắc Định tuyến và nhấp Thêm.

  • Cấu hình quy tắc:

    • Cổng: Chọn Cổng vào/ra mà bạn vừa tạo.
    • Số: Thêm số điện thoại liên kết với cổng.
    • Phân phối: Chọn Đại lý.
    • Loại Đại lý: Đặt thành Tự Host.
    • ID Đại lý: Nhập MyTelephonyAgent. Điều này phải khớp với agent_id trong tệp main.py của bạn.
  • Nhấp Tạo để lưu quy tắc.

Khởi tạo một Cuộc gọi đi

Khi cổng ra của bạn đã được cấu hình, bạn có thể khởi tạo các cuộc gọi đi bằng cách sử dụng API VideoSDK. Điều này cho phép bạn gọi ra từ một cuộc họp đến bất kỳ số điện thoại bên ngoài hoặc điểm cuối SIP nào.

Sử dụng API sau để kích hoạt một cuộc gọi đi: Tham số:

  • gatewayId: ID của cổng SIP ra để sử dụng.
  • sipCallTo: Số điện thoại đích (định dạng E.164).
  • destinationRoomId: (Tùy chọn) ID phòng để kết nối cuộc gọi.

Yêu cầu POST đến https://api.videosdk.live/v2/sip/call

javascript Copy
import fetch from 'node-fetch';
const options = {
    method: "POST",
    headers: {
        "Authorization": "$YOUR_TOKEN",
        "Content-Type": "application/json",
    },
    body: JSON.stringify({
        "gatewayId" : "gw_123456789",
        "sipCallTo" : "+14155550123"
    }),
};
const url= `https://api.videosdk.live/v2/sip/call`;
const response = await fetch(url, options);
const data = await response.json();
console.log(data);

PHẢN HỒI

{ "message": "Cuộc gọi đã được khởi tạo thành công", "data": { "callId": "call_123456789", "status": "INITIATED", "roomId": "room_123456", "sipCallTo": "+14155550123", "sipCallFrom": "+14155559876", "gatewayId": "gw_123456789", "metadata": { "campaignId": "cmp_123", "source": "crm" }, "timelog": [ { "status": "INITIATED", "timestamp": "2025-08-21T11:45:00.000Z" } ] } }

Kết luận

Bạn vừa học cách xây dựng một đại lý điện thoại AI hoàn chỉnh bằng Python sử dụng VideoSDK từ việc viết đoạn mã đầu tiên đến việc chạy nó trên máy tính và kết nối với mạng điện thoại toàn cầu. Với sự trợ giúp của pipeline thời gian thực, đại lý của bạn giờ đây có thể trả lời các cuộc gọi đến, thực hiện các cuộc gọi đi và tương tác với người dùng trong thời gian thực.

  • 🚀 Hãy thử ngay: Nhân bản thiết lập này và tùy chỉnh đại lý giọng nói AI của riêng bạn hôm nay.
  • 📚 Khám phá thêm: Kiểm tra tài liệu VideoSDK để tìm hiểu thêm về các tính năng khác.
  • 💡 Xây dựng trợ lý thông minh hơn: Thử nghiệm với các giọng nói, ngôn ngữ và mô hình AI khác nhau để tạo ra một trải nghiệm độc đáo.
  • Tài nguyên: https://youtu.be/WgEvRs0zqcI?si=qWKudU-qYIVEYXeo hãy xem video này để làm rõ hơn.

💡 Chúng tôi rất muốn nghe ý kiến của bạn!

  • Bạn đã thiết lập thành công đại lý điện thoại AI đầu tiên bằng Python chưa?
  • Những thách thức nào bạn đã gặp phải khi tích hợp với các nhà cung cấp SIP như Twilio?

👉 Chia sẻ suy nghĩ, khó khăn hoặc câu chuyện thành công của bạn trong phần bình luận hoặc tham gia cộng đồng Discord của chúng tôi ↗. Chúng tôi rất mong được học hỏi từ hành trình của bạn và giúp bạn xây dựng những công cụ giao tiếp mạnh mẽ hơn với AI!

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào