PowerTalkBox和飞信结合搞定在线客户端(.net)

一个礼拜了,都在搞这个在线客户端,差点没崩溃,最终还是搞定了,嘿嘿,在此感谢一下那些帮助我的同学、朋友、老师、网友,嘿嘿,要不还不知道啥时候才能搞定呢.......

这玩意其实说通了也就两个飞信号在那对发信息,即Web(用PowerTalkBox)--服务端(使用飞信的sdk,这里用一个飞信号)--飞信客户端(这是我们的客服号),基本思路是:用户在Web端发送一条消息,通过socket发送给服务端,服务端接收完成到信息后,将该信息通过飞信的sdk转发给客服,客服回复信息,发送到服务端,服务端利用飞信sdk收到消息,调用一个根据PowerTalkBox写的服务,将消息加入到PowerTalkBox的对话列表中,这样web端就直接将这条消息调出来,客户就可以看到了,哈

客户端那边是用web实现的,以前有看过那个PowerTalkBox,带源码,觉得还不错,这次决定还是用这个进行二次开发,改改,哈哈

首先要搞定的就是服务端调用飞信sdk和飞信客户端通讯,刚开始不懂飞信的sdk怎么用,后面网上找了一下,结果找到的都是php的,哎!看来不行,得自己写,呵呵,找了一些帮助文档,恩,相对来说还是比较简单的,玩了一下,服务端可以和飞信的客户端通讯了......,把飞信的sdk一些基本的东西贴出来....,嘿嘿

/// <summary>
        /// 登陆飞信
        /// </summary>
        private bool FetionLogin(string userName,string pwd)
        {
                sdk.AccountManager.FillUserIdAndPassword(userName, pwd, false);//第三个参数为是否自动登陆
                 bool isOk=sdk.AccountManager.Login();//登陆           
                 return isOk;
        }

        /// <summary>
        /// 发送消息
        /// </summary>
        private void SendFetionMsg(string userName, string msg)
        {       

    //userName为对方的飞信号,msg为要发送的信息

                sdk.ContactControl.SendIM.SendIM(userName, msg);   

        }


        /// <summary>
        /// 发送手机消息
        /// </summary>
        private void SendFetionMobileMsg(string userName, string msg)
        { 

    //userName为对方的飞信号,msg为要发送的信息

               sdk.ContactControl.SendSMS.SendSMS(userName, msg);

        }
        

        /// <summary>
        /// 加载好友列表
        /// </summary>
        /// <param name="psSdk">飞信sdk对象</param>
        /// <returns>返回飞信好友信息集合</returns>
        private List<FetionFriend> GetFetionFriendList(FetionSDK psSdk)
        {
            List<FetionFriend> fetionFriends = new List<FetionFriend>();
            try
            {
                List<Imps.Client.Core.Contact> list = psSdk.ContactControl.getAllContactList();
                for (int i = 0; i < list.Count; i++)
                {
                    try
                    {
                        FetionFriend fetionFriend = new FetionFriend();//自定义飞信用户实体信息类
                        fetionFriend.UserId = int.Parse(list[i].Uri.Id);
                        fetionFriend.Nickname = list[i].DisplayName;
                        fetionFriend.Mobile = list[i].PersonalInfo.MobileNo;
                        fetionFriends.Add(fetionFriend);
                    }
                    catch { }                   
                }
            }
            catch { fetionFriends = new List<FetionFriend>(); }
            return fetionFriends;
        }
        

        /// <summary>
        /// 飞信sdk出现错误
        /// </summary>
        private void Sdk_SDK_Error(object sender, NullStudio.Fetion_SDK.Event.SDK_ErrorEventArgs fe)
        {

        }

 

        /// <summary>
        /// 当前飞信号状态
        /// </summary>
        private void Sdk_SDK_UserSatusChange(object sender, Imps.Client.Core.UserSatusChangedEventArgs e)
        {
            switch (e.NewStatus.ToString())
            {
                case "Disconnected"://断开了网络
                    FetionLogin(userName, userPwd);//重新登陆
                    break;
                case "Initialized"://已初始化
                   
                    break;
                case "Loginning"://登陆中

                    break;
                case "Logon"://已登陆
                     sdk.AccountManager.CurrentUser.Presence.AsyncChangeMainPresence(Imps.Common.MainPresence.Online, Imps.Common.MainPresence.Online.ToString());//设置PC在线
                    break;
                case "Logoff"://离开网络

                    break;
                case "Logouting"://注销中

                    break;
                case "None"://无状态

                    break;
                case "OfflineLogon"://离线

                    break;
                case "StandBy"://待机

                    break;
                case "WaitReconnect"://等待

                    break;
            }      

      }

        /// <summary>
        /// 接收到的消息
        /// </summary>
        private void sdk_SDK_ReceiveMessage(object sender, NullStudio.Fetion_SDK.Event.SDK_ReceiveMessageEventArgs fe)
        {

    //fe.Message为接收到的消息

  }

恩,单这些就可以实现服务器跟客户端通讯的功能了.....

 

接下去就要搞定web和服务端之间的通讯了,这块比较变态点....,在Powertalkbox有接收消息和发送消息的事件刚开始看到的时候,高兴得要死,结果进去一看,只有接收消息的时候,在事件里能获取消息,发送消息获取不到....,悲剧了....,哎!没办法,只能去研究一下PowerTalkBox的发送事件怎么写了,后面看着看着实在不知道该怎么在那发送事件里重写sendevent,火大,直接在事件中弄一个全局静态变量,嘿嘿,这样在外面就可以调用了....,哈,这样就可以从web通过socket发送消息给服务端了。

服务端发送消息给web这个刚开始有点晕,后面干脆就直接去看PowerTalkBox是怎么发送消息的,结果发现那边消息都是全部存到一个list中,嘿嘿,这样就好办了,在PowerTalkBox那边做一个将消息添加到list中的服务,然后在服务端接收飞信消息的那事件中调用一下这个服务,将消息传入list中,嘿嘿,web那边就直接自动将消息显示出来了.....这样就搞定了,哈

感觉web这边用socket发送消息给服务端好像不太好.....,具体怎么个不好法说不大清楚....,嘿嘿,有什么好思路大家共享一下哈,嘿嘿

后记:在服务端这边还有一个小的问题,就是服务端这边飞信登录成功后差不多10分钟,就会掉线,我现在是做一个线程,每隔三分钟重新登录一下飞信,原本是做成改变一下状态的,不过还是不行,这样有时消息会丢失。后面发现好像可以使用一个什么移动的心跳包,在服务端每隔一段时间给移动那边发送一个包,这样就不会掉线了,嘿嘿,这个还值得研究研究

 

后面早上又做了一个监控网站的,如果网站不能浏览就发送短信给站长......,嘿嘿,上面的那些搞定了,其实这个也没什么了,哈,最主要是这里发送短信是直接发送到自己的手机上,嘿嘿,就是在发送消息的时候使用下面这方法:

//第一个参数直接这个,是给自己发送手机消息的意思,msg是要发送的内容

sdk.ContactControl.SendSMS.SendSMS(sdk.ContactControl.getMyself().Uri.Id,msg);

PowerTalkBox控件源码(教程版) powertalkbox免费开源的asp.net,即时通讯控件与大家分享 这是一款免费开源的控件,作者的初衷是为了让来到网站上的人流资源更好的被把握住. 传统方式的弊端: 1、靠网站联系方式:有时来客会考虑到电话费的问题,如果长途的话,就会更使其考虑是否需要联系了. 2、QQ/MSN等在线客服,如果客户电脑并没有安装QQ或受到病毒干扰,或本身就没有QQ号,会使这类人群错过. 3、使用其他网站的收费IM系统,如果其他网站的IM连接字符串形式,会收到其他网站的带宽,流量,等不稳定因素干扰,并且每年的服务费用并不低. PowerTalk控件的好处: 1、免费开源,使用者可以放心大胆的使用,控件源代码提供丰富的中文注释,可以使使用者看到内核原理. 2、二次开发性强,控件提供很多属性,接口,以及事件,开发者可以根据自己的需要,任意改装,包括外观,内部存储信息方式,比如数据库或txt等. 3、系统跑在自己的服务器上,这就不用担心使用其他网站IM带来的干扰影响,并且还是免费的. 4、现成示例多,开发者可以根据需要改程序,而不要花很长时间去重新设计,省时省力 源码附视频教程(swf) 概括 http://bbs.51aspx.com/showtopic-13084.html 属性介绍 http://bbs.51aspx.com/showtopic-13085.html S1一对一聊天模式 http://bbs.51aspx.com/showtopic-13086.html S2一对多模式轮询事件体验 http://bbs.51aspx.com/showtopic-13087.html S3传文件功能演示 http://bbs.51aspx.com/showtopic-13088.html S4广告设置 http://bbs.51aspx.com/showtopic-13089.html S5人员列表以及对话设置 http://bbs.51aspx.com/showtopic-13090.html S6事件(一) http://bbs.51aspx.com/showtopic-13091.html S6事件(二) http://bbs.51aspx.com/showtopic-13092.html S7方法 http://bbs.51aspx.com/showtopic-13094.html S8JS调用 http://bbs.51aspx.com/showtopic-13095.html 结束 http://bbs.51aspx.com/showtopic-13086.html
powertalkbox免费开源的asp.net,即时通讯控件与大家分享 这是一款免费开源的控件,作者的初衷是为了让来到网站上的人流资源更好的被把握住. 传统方式的弊端: 靠网站联系方式:有时来客会考虑到电话费的问题,如果长途的话,就会更使其考虑是否需要联系了. QQ/MSN等在线客服,如果客户电脑并没有安装QQ或受到病毒干扰,或本身就没有QQ号,会使这类人群错过. 使用其他网站的收费IM系统,如果其他网站的IM连接字符串形式,会收到其他网站的带宽,流量,等不稳定因素干扰,并且每年的服务费用并不低. PowerTalk控件的好处: 免费开源,使用者可以放心大胆的使用,控件源代码提供丰富的中文注释,可以使使用者看到内核原理. 二次开发性强,控件提供很多属性,接口,以及事件,开发者可以根据自己的需要,任意改装,包括外观,内部存储信息方式,比如数据库或txt等. 系统跑在自己的服务器上,这就不用担心使用其他网站IM带来的干扰影响,并且还是免费的. 现成示例多,开发者可以根据需要改程序,而不要花很长时间去重新设计,省时省力 程序里有精灵的提示程序,如果想使精灵发声说话,请在系统里安装Microsoft Speech SDK 5.1.msi, 在打上中文语言包,就可以帮您读出聊天中文内容。 客户端交互是使用WebService技术,WebService文件在源代码->Chat->PowerTalk-FetionInterFace.asmx,所以才配置PowerTalkClient.exe.config 本示例项目是单客服与多个客户之间的聊天,如果想更改成多个客服,只要注意两个地方即可。 WinForm下PowerTalkClient客户端LoginFrm.cs的登录框this.textBox1.Text = "在线客服";,上面默认是 "在线客服" WebForm下WebPowerTalk/IM/Chat.aspx.cs的string WebServiceAnser = "在线客服", 上面默认是 "在线客服"        "在线客服"这两个对应上即可多一个客服 比如,你的数据库里的名是 客服1,客服2,.....等等,利用程序把上面的"在线客服"替换即可利用客服1进行交谈。 客户端文件夹中含客户端管理系统 带IP智能库,具体解析登陆者的地址 飞信功能
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值