STDIO
Tìm kiếm gần đây
    • Nội dung
    • QR Code
    • 0
    • 0
    • Sao chép

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

    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ợ.
    13/09/2014
    27/09/2020
    6 phút đọc
    Giới Thiệu Skype4COM - Lập Trình Tương Tác với Skype trên Windows - C#.NET

    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

    0 Bình luận

    Đề xuất

    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 ...
    Đị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, ...

    Khám phá

    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à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++ ...
    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.
    28/09/2014
    Struct Trong Lập Trình C Và Tư Duy Trừu Tượng Hoá
    Ứng dụng và tư duy trừa tượng hoá của struct trong lập trình C/C++.
    11/08/2015
    Hướng Dẫn Lập Trình C++ và Gỡ Lỗi với Visual Studio Code
    Bài viết hướng dẫn cách cài đặt Visual Studio Code để lập trình với ngôn ...
    17/08/2018
    Các Ngôn Ngữ Lập Trình Game
    Bài viết giới thiệu các ngôn ngữ lập trình game cho lập trình viên như ...
    03/07/2020
    LINQ to SQL - Giới Thiệu
    Giới thiệu LINQ to SQL, ý nghĩa và cú pháp cơ bản sử dụng LINQ to SQL ...
    GameObject - Thao Tác với C# Script
    Giới thiệu các thành phần chung của 1 GameObject và các thao tác với C# ...
    Khi bạn nhấn vào liên kết sản phẩm do STDIO đề xuất và mua hàng, STDIO có thể nhận được hoa hồng. Điều này hỗ trợ STDIO tạo thêm nhiều nội dung hữu ích. Tìm hiểu thêm.
    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