Search…

Giới Thiệu Skype4COM - Lập Trình Tương Tác với Skype trên Windows - C#.NET

06/05/20216 min read
Skype4COM có thể làm 1 mini chatbot để tự thực thi 1 số mệnh lệnh với Skype, mặc dù các tính năng đó Skype chưa hỗ trợ.

Skype4COM có thể hỗ trợ:

  • Gửi cùng 1 tin nhắn cho nhiều người trong Skype.
  • Tự động trả lời tin theo 1 tiêu chuẩn khi không có mặt sử dụng Skype.
  • Lưu lại lịch sử chat.

Bài viết giới thiệu và cách lập trình với vài tính năng:

  • Gửi yêu cầu cho các thành viên hàng loạt.
  • Tự động trả lời khi vắng.
  • Tự động sao lưu cuộc trò chuyện lại khi chat với khách hàng.

Skype4COM

Skype4COM hay Skype4COM.dll có thể được cài đặt thông qua NuGet tại - https://www.nuget.org/packages/Skype4COM

Install-Package Skype4COM

* Skype4COM chỉ hoạt động được với Skype cổ điển, không phù hợp với Skype v8 trở lên.

Hiện thực các tính năng

Tính năng

  • Tạo đối tượng Skype và kết nối với ứng dụng Skype - Connect To Skype.
  • Gửi tin nhắn đến 1 người, 1 nhóm người - Send Message.
  • Nhận tin nhắn do người dùng gửi đến, trả lời tin nhắn - Auto Reply.
  • Lưu trữ toàn bộ tin nhắn - Save Message.

Môi trường

  • Project được tạo với Visual Studi - C#.NET.
  • Cài đặt Skype4COM.dll như hướng dẫn ở trên.
  • Máy phải có cài đặt và đăng nhập Skype cổ điển (trước v8).

Chuẩn bị cho project

Tạo project C#

Tạo Windows Form Application và tạo giao diện cơ bản như bên dưới.

Skype4COM

Hiện thực các tính năng

Tạo đối tượng Skype và kết nối với ứng dụng Skype - Connect To Skype

Sử dụng button Connect To Skype và tạo tính năng kết nối Skype khi nhấn vào button này.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using SKYPE4COMLib;

namespace StdioSkype
{
    public partial class frmMain : Form
    {
        public frmMain()
        {
            InitializeComponent();
        }

        private Skype m_skype;

        private void btnConnectToSkype_Click(object sender, EventArgs e)
        {
            m_skype = new Skype();
            m_skype.Attach(7, false);
        }
    }
}
  • Dòng 22: Thêm 1 thuộc tính Skype m_skype.
  • Dòng 23 - 27: Xử lý sự kiện click vào button Conntect To Skype bằng cách khởi tạo đối tượng Skype và sau đó tương tác vào port của ứng dụng Skype (port số 7).

Build thử chương trình và nhấn vào button Connect To Skype, phía bên Skype sẽ phát hiện và hỏi người sử dụng có cho phép ứng dụng nhúng vào Skype hay không? Nhấn vào Allow access trong ứng dụng Skype.

Skype4COM

Gửi tin nhắn đến 1 người, 1 nhóm người - Send Message

Trong đối tượng m_skype có phương thức SendMessage để gửi tin nhắn đến 1 SkypeId cụ thể.

ChatMessage SendMessage(string Username, string Text);

Tham số UsernameSkypeId của đối tượng muốn gửi tin, tham số Text là nội dung cần gửi.

* Với Username được kế thừa từ Windows Live sẽ có dạng live:username, bắt buộc phải ghi đúng như vậy, thay vì chỉ ghi username.

Giả sử button Send Message thêm phần xử lý sự kiện khi click là gửi tin đến nhiều người, code như sau:

private void btnSendMessage_Click(object sender, EventArgs e)
{
    string[] users = new string[] { "kevinla.trainer",
                                    "developer.stdio",
                                    "live:khoinguyen1312" };

    for (int i = 0; i < users.Length; i++)
    {
        m_skype.SendMessage(users[i], "Hello, the message is sent from STDIO BOT!");
    }
}

Build lại project > "Connect To Skype" > "Send Message" để thử nghiệm.

Nhận tin nhắn do người dùng gửi đến, trả lời tin nhắn - Auto Reply

Nhấn vào button Auto Reply (phải chắc chắn rằng trước đó đã "Connect To Skype". Chương trình tiến hành lắng nghe các "động tĩnh" từ Skype và khi có sự kiện tin nhắn đến, nó sẽ tiến hành gửi phản hồi cho người gửi tin nhắn.

Code cho phần đăng ký sự kiện sau khi click vào button Auto Reply

private void btnAutoReply_Click(object sender, EventArgs e)
{
    m_skype.MessageStatus += new _ISkypeEvents_MessageStatusEventHandler(ProcessSkypeIncomingMessage);
}

Viết thêm phương thức ProcessSkypeIncomingMesseage, phương thức này sẽ tự động được gọi khi Skype nhận được tin nhắn (bao gồm tin do bạn gửi đi hoặc tin do bạn bè gửi lại).

private void ProcessSkypeIncomingMessage(ChatMessage msg, TChatMessageStatus status)
{
    if (msg.Body != null && status == TChatMessageStatus.cmsReceived)
    {
        string message = "Hello, I am Kevin La, I am busy now. ";
        message += "Leaving a message and I will response ASAP.";

        m_skype.SendMessage(msg.Sender.Handle, message + "\n. You just say: " + msg.Body);
    }
}
  • Dòng 3: kiểm tra xem trạng thái tin nhắn đã nhận xong chưa TChatMessageStatus status và kiểm tra xem thông tin người gửi đến có nội dung không msg.Body != null.
  • Dòng 7: nếu mọi thứ đã ổn (thỏa dòng 3), tiến hành gửi tin nhắn đến cho đối tượng, SkypeId của đối tượng được lưu trong đối tượng msgmsg.Sender.Handle. Ngoài ra, msg.Body chính là nội dung tin nhắn mà đối phương đã gửi tin đến, có thể sử dụng tin nhắn này, để phân tích ngữ nghĩa để tìm phương án trả lời phù hợp.

Sau khi code thêm đoạn trên, tiến hành Build lại project → "Connect To Skype" → "Auto Reply", chờ bạn bè gửi tin nhắn đến và xem kết quả.

* Nếu đối phương sử dụng các SkypeId không thuần Skype mà thông qua tài khoản Windows Live hoặc Facebook thì có thể sẽ có trục trặc xảy ra trong việc nhận tin nhắn (tức là có thể Skype4COM sẽ không nhận được thông điệp này).

Lưu trữ toàn bộ tin nhắn - Save Message

Thêm 1 thuộc tính là private string m_history = ""; để lưu trữ tin nhắn.

Thêm code vào hàm ProcessSkypeIncomingMesseage để tiến hành lưu trữ khi có tin nhắn đến hoặc đi.

Cấu trúc lưu trữ cho 1 tin nhắn có thể tự định nghĩa, trong trường hợp này dùng cấu trúc như sau:

  • Tin nhắn gửi đi: [ME] [Friend_SkypeId] [Message]
  • Tin nhằn gửi đến: [Friend_SkypeId][ME] [Message]

Tương tự như chức năng Auto Reply, cần đăng ký xử lý sự kiện lắng nghe các thông điệp đang gửi vào Skype. Khi click vào button Save Message sẽ đăng ký hàm xử lý này.

private void btnSaveMessasge_Click(object sender, EventArgs e)
{
    m_skype.MessageStatus += new _ISkypeEvents_MessageStatusEventHandler(ProcessSkypeRecordMessage);
}

Viết hàm xử lý này, chủ yếu hàm này làm nhiệm vụ lưu trữ các tin nhắn bao gồm tin đến và tin đi như cấu trúc phía trên.

private void ProcessSkypeRecordMessage(ChatMessage msg, TChatMessageStatus status)
{
    // FOR RECORDING MESSAGE
    if (msg.Body != null && status == TChatMessageStatus.cmsReceived)
    {
        m_history += "[" + msg.Sender.Handle + "]->" + "[ME]->" + "[" + msg.Body + "]\n";
    }
    if (msg.Body != null && status == TChatMessageStatus.cmsSent)
    {
        m_history += "[ME]->" + "[" + msg.Chat.Adder.Handle + "]->" + "[" + msg.Body + "]\n";
    }
}

Lúc này, bộ nhớ đã lưu trữ được các thông điệp ta gửi và nhận thông qua m_history. Có thể thiết kế thêm tính năng lưu trữ vào file nếu cần thiết.

  • TChatMessageStatus.cmsReceived nhận dạng tin được gửi đến và TChatMessageStatus.cmsSent nhận dạng cho việc tin gửi đi.
  • msg.Sender.HandleSkypeId của người gửi đi và msg.Chat.Adder.Handle lưu SkypeId của người nhận.

Download chương trình hoàn chỉnh

STDIOSkype.zip

IO Stream

IO Stream Co., Ltd

30 Trinh Dinh Thao, Hoa Thanh ward, Tan Phu district, Ho Chi Minh city, Vietnam
+84 28 22 00 11 12
developer@iostream.co

383/1 Quang Trung, ward 10, Go Vap district, Ho Chi Minh city
Business license number: 0311563559 issued by the Department of Planning and Investment of Ho Chi Minh City on February 23, 2012

©IO Stream, 2013 - 2024