STDIO
Tìm kiếm gần đây
    Mục lục
    Thảo luận
    0
    Liên kết
    QR Code

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

    Thao tác với Skype bằng giao diện đồ họa mặc dù khá dễ dùng, nhưng đôi lúc cần xử lý một số tác vụ tự động và liên quan đến nhiều users hơn như gửi cùng một tin cho nhiều người lại gây khó dễ và mất thời gian, ta có thể lập trình để mọi thứ tự động hóa. Bản thân Skype có hỗ trợ điều này, đó là Skype4COM.dll.
    13/09/2014
    05/04/2017
    9 phút đọc
    Giới Thiệu Skype4COM - Lập Trình Tương Tác Với Skype Trên Windows - C#.NET

    Giới thiệu

    Có những nhu cầu như gửi cùng 1 tin nhắn cho nhiều người trong Skype, hoặc tự động trả lời tin theo một tiêu chuẩn khi chúng ta không có mặt sử dụng Skype, hoặc lưu lại lịch sử chat để dễ dàng gửi đi, và điều này bản thân Skype chưa hỗ trợ. Nhưng Skype cho chúng ta 1 khả năng để có thể mở rộng một số tiện ích đó. Ngoài ra từ đó ta có thể thiết kế thêm 1 số như: tự động trả lời khách hàng, đăng tin tự động, và điển hình hơn là ta thấy được một số loại spam-bot quảng cáo đang xuất hiện trong khoảng thời gian gần đây trên Skype.

    Trong bài viết này, tôi sẽ giới thiệu và cách lập trình với vài tính năng mà tôi đang dùng

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

    Đối tượng hướng đến

    Trong bài viết này, tôi muốn biến nó trở thành một sản phẩm cho người sử dụng cuối, tuy nhiên có rất nhiều đặc tả cho mỗi người với mục đích sử dụng khác nhau rất nhiều nên chỉ có thể hướng đến đối tượng lập trình viên C#.NET.

    Skype4COM

    Skype4COM hay Skype4COM.dll được cài đặt sẵn cùng lúc khi bạn cài đặt Skype trên PC, nó được lưu mặc định theo đường dẫn sau (sau khi cài đặt Skype)

    • 32bit - C:\Program Files (x86)\Common Files\Skype
    • 64bit - C:\Program Files\Common Files\Skype

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

    Tính năng cần hiện thực

    • 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 một người, một 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 Studio 2015 Community. C#.NET.
    • Cần thiết Skype4COM.dll, được Skype đặt trong thư mục như trên.
    • Máy phải có cài đặt và đăng nhập Skype dành cho việc thử nghiệm.

    Chuẩn bị cho project

    Tạo project C#

    Trong trường hợp của tôi là Windows Form Application và tạo giao diện cơ bản như bên dưới.

    ss_1

    Add Reference... Skype4COM.dll

    • Nếu là Skype 32bit thì bạn cần dùng C:\Program Files (x86)\Common Files\Skype\Skype4COM.dll
    • Nếu là Skype 64bit thì bạn cần dùng C:\Program Files\Common Files\Skype\Skype4COM.dll

    Hoặc bạn có thể tự tìm kiếm xem Skype đặt file đó ở đâu, trong trường hợp cập nhật bài viết ở lần gần nhất tôi nhận thấy nó đã được cập nhật lại tại đường dẫn sau: C:\Program Files (x86)\Common Files\Skype\Skype4COM.dll qua 1 độc giả giấu tên đã gợi ý về sự thay đổi này.

    Lưu ý rằng tại thời điểm gần nhất cập nhật bài viết này thì Skype đặt Skype4COM.dll theo các đường dẫn trên, tương lai khi Skype phát triển các phiên bản mới, các thay đổi có thể sẽ xảy ra như họ sửa tên thư viện, đặt lại Skype4COM.dll tại thư mục khác hoặc hủy bỏ cả các thư viện này. Khi đó, bạn cần tìm hiểu thêm tại trang chính thức của Skype.

    Cách tạo project C# Windows Form Application và cách Add Reference... - đọc thêm bài Add Reference Trong C# (Visual Studio) để có thêm chi tiết.

    Trong trường hợp của tôi, và khá là thông thường, chúng ta dùng Skype4COM.dll 32bit.

    Phần codes

    Để sử dụng các đối tượng, phương thức giao tiếp với Skype bạn cần sử dụng namespace trong Skype4COM.dll. Bạn thêm dòng khai báo sau vào những nơi bạn cần dùng.

    using SKYPE4COMLib;

    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

    Ta có button Connect To Skype và ta sẽ sử dụng button này để khởi tạo và kết nối đến Skype.

    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 của chúng ta nhúng vào Skype hay không, nếu bạn muốn (trong trường hợp này là muốn) thì ta nhấn vào nút Allow access trong ứng dụng Skype.

    ss_2

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

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

    ChatMessage SendMessage(string Username, string Text);

    Tham số UsernameSkypeId của người mà ta muốn gửi, tham số Text là nội dung cần gửi. Lưu ý, với Username được kế thừa từ Windows Live sẽ có dạng live:username thì ta bắt buộc phải ghi đúng như vậy, thay vì chỉ ghi username.

    Giả sử button Send Message ta thêm phần xử lý sự kiện khi click là gửi tin đến nhiều người, ta sẽ 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. Tôi không muốn spam bạn bè mình, nên tôi không có screenshot trong trường hợp này, và các bạn cũng không nên lạm dụng điều này, nếu không muốn bạn bè cho bạn vào Block-List.

    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 đó bạn đã "Connect To Skype". Chương trình sẽ 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), ta tiến hành gửi tin nhắn đến cho đối phương, SkypeId của đối phương được lưu trong đối tượng msg là msg.Sender.Handle. Ngoài ra, msg.Body chính là nội dung tin nhắn mà đối phương đã gửi cho chúng ta, bạ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, bạn tiến hành Build lại project → "Connect To Skype" → "Auto Reply" và chờ bạn bè gửi tin nhắn đến và xem kết quả.

    Lưu ý: 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

    Việc lưu trữ tin nhắn khá đơn giản, ta chỉ việc lưu trữ toàn bộ tin nhắn.

    Thêm một 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 bạn có thể tự định nghĩa, trong trường hợp tôi dùng cấu trúc như sau:

    • Tin nhắn gửi từ chúng ta đến bạn: [ME] [Friend_SkypeId] [Message]
    • Tin nhằn gửi từ bạn đến chúng ta: [Friend_SkypeId][ME] [Message]

    Tương tự như chức năng Auto Reply, ta 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 ta 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 sẽ 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. Ta 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.Handle là SkypeId 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_VS2015.zip

    Nếu project có yêu cầu cần Add Reference... dll, bạn có thể làm lại bước Add Reference... và chỉ đến Skype4COM.dll như trên.

    Đề xuất

    GameObject - Thao Tác Với C# Script

    GameObject - Thao Tác Với C# Script

    GameObject là một khái niệm cơ bản trong Unity. Mọi đối tượng trong game ...

    Lập Trình GameKiến Thức Nâng Cao

    08/08/2015

    EmguCV - OpenCV cho .NET - Giới Thiệu và Cách Tích Hợp vào .NET

    EmguCV - OpenCV cho .NET - Giới Thiệu và Cách Tích Hợp vào .NET

    Giới thiệu về wrapper EmguCV của OpenCV và hướng dẫn cách tích hợp ...

    Computer VisionOpenCV

    22/01/2015

    Khám phá thêm

    Định Dạng Ảnh Bitmap - Giới Thiệu và Các Thao Tác Cơ Bản

    Định Dạng Ảnh Bitmap - Giới Thiệu và Các Thao Tác Cơ Bản

    Trong đời thường, bạn sẽ gặp các file ảnh có định dạng .PNG, .JPG, .TGA, ...

    Phan Tấn Phúc

    13/09/2017

    Socket.IO với Cocos2d-x

    Socket.IO với Cocos2d-x

    Trong các bài viết trước trong chương trình tự học lập trình games với ...

    Lập Trình GameCocos2d-x

    11/06/2017

    C# - Vì Sao Lại Chọn C Sharp

    C# - Vì Sao Lại Chọn C Sharp

    Ngôn ngữ lập trình C# được xây dựng bởi Microsoft có thiết kế mạnh mẽ có ...

    C# for AutomationGóc Nhìn

    09/08/2020

    Cài Đặt Môi Trường Lập Trình C++ Với Visual Studio 20xx Community

    Cài Đặt Môi Trường Lập Trình C++ Với Visual Studio 20xx Community

    Hướng dẫn cài đặt Visual Studio Community và môi trường lập trình C++ ...

    Huỳnh Duy Lộc

    27/02/2018

    Khởi Tạo Môi Trường Lập Trình Đồ Họa OpenGL Trên Windows với GLEW và GLFW3

    Khởi Tạo Môi Trường Lập Trình Đồ Họa OpenGL Trên Windows với GLEW và GLFW3

    Hướng dẫn khởi tạo môi trường đồ họa với OpenGL, GLEW và GLFW3.

    Vũ Quang Huy

    28/09/2014

    Quản Lý Vị Trí Các Đối Tượng Trong Game

    Quản Lý Vị Trí Các Đối Tượng Trong Game

    Thông thường khi khởi tạo một đối tượng trong game, các lập trình viên ...

    Lập Trình GameKiến Thức Nâng Cao

    30/03/2015

    Quản Lý Vị Trí Của Các Đối Tượng Trong Cocos2d-x

    Quản Lý Vị Trí Của Các Đối Tượng Trong Cocos2d-x

    Trong lập trình game, việc xử lý “cứng” các đối tượng là điều nên tránh. ...

    Lập Trình GameCocos2d-x

    04/08/2015

    STDIO
    Trang chính
    Công ty TNHH STDIO

    30, Trịnh Đình Thảo, Hòa Thạnh, Tân Phú, Hồ Chí Minh
    +84 28.36205514 - +84 942.111912
    developer@stdio.vn

    383/1 Quang Trung, Phường 10, Quận Gò Vấp, Hồ Chí Minh
    Số giấy phép ĐKKD: 0311563559 do sở Kế hoạch và Đầu Tư TPHCM cấp ngày 23/02/2012

    ©STDIO, 2013 - 2020