iOS-QQ自动聊天机器人

素材有两个一个消息字典,一个自动回复匹配字典

首先字典转模型,位置和数据都是模型里面弄好的 加了一个工具方法resizeImage来调整聊天界面

然后来写自定义cell

最后在控制器里面写逻辑

//
//  UIImage+resizeImage.h
//  QQ聊天
//
//  Created by YaguangZhu on 15/8/28.
//  Copyright (c) 2015年 YaguangZhu. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface UIImage (resizeImage)

+ (UIImage *)resizeWithImageName:(NSString *)name;
@end

---------------------------------//
//  UIImage+resizeImage.m
//  QQ聊天
//
//  Created by YaguangZhu on 15/8/28.
//  Copyright (c) 2015年 YaguangZhu. All rights reserved.
//

#import "UIImage+resizeImage.h"

@implementation UIImage (resizeImage)

//返回一个可拉伸的图片
+ (UIImage *)resizeWithImageName:(NSString *)name
{
    UIImage *normal = [UIImage imageNamed:name];

    CGFloat w = normal.size.width * 0.5f -1;
    CGFloat h = normal.size.height *0.5f -1;

    //CGFloat w = normal.size.width*0.8;
    // CGFloat h = normal.size.height*0.8;
    //传入上下左右不需要拉升的编剧,只拉伸中间部分
    return [normal resizableImageWithCapInsets:UIEdgeInsetsMake(h, w, h, w)];

    //    [normal resizableImageWithCapInsets:UIEdgeInsetsMake(<#CGFloat top#>, <#CGFloat left#>, <#CGFloat bottom#>, <#CGFloat right#>)]

    // 1 = width - leftCapWidth  - right
    // 1 = height - topCapHeight  - bottom

    //传入上下左右不需要拉升的编剧,只拉伸中间部分,并且传入模式(平铺/拉伸)
    //    [normal :<#(UIEdgeInsets)#> resizingMode:<#(UIImageResizingMode)#>]

    //只用传入左边和顶部不需要拉伸的位置,系统会算出右边和底部不需要拉升的位置。并且中间有1X1的点用于拉伸或者平铺
    // 1 = width - leftCapWidth  - right
    // 1 = height - topCapHeight  - bottom
    //    return [normal stretchableImageWithLeftCapWidth:w topCapHeight:h];
}
@end
//
//  Constant.h
//  QQ聊天
//
//  Created by YaguangZhu on 15/8/27.
//  Copyright (c) 2015年 YaguangZhu. All rights reserved.
//

#ifndef QQ___Constant_h
#define QQ___Constant_h

#define bScreenWidth [[UIScreen mainScreen] bounds].size.width

#define bNormalH 44

#define bIconW 50

#define bIconH 50

#define bBtnFont [UIFont systemFontOfSize:15.0f]

#endif
//
//  HMMessageModel.h
//  QQ聊天
//
//  Created by YaguangZhu on 15/8/27.
//  Copyright (c) 2015年 YaguangZhu. All rights reserved.
//

#import <Foundation/Foundation.h>
typedef enum {
    HMMessageModelGatsby =0,
    HMMessageModelJobs
}HMMessageModeltype;

@interface HMMessageModel : NSObject
@property(nonatomic,copy) NSString *text;
@property(nonatomic,copy) NSString *time;
@property(nonatomic,assign) HMMessageModeltype type;

@property(nonatomic,assign)BOOL hideTime;

- (instancetype)initWithDict:(NSDictionary *)dict;

+ (instancetype)messageWithDict:(NSDictionary *)dict;

//+ (NSArray *)Messages;

@end

---------------------------------//
//  HMMessageModel.m
//  QQ聊天
//
//  Created by YaguangZhu on 15/8/27.
//  Copyright (c) 2015年 YaguangZhu. All rights reserved.
//

#import "HMMessageModel.h"

@implementation HMMessageModel
- (instancetype)initWithDict:(NSDictionary *)dict
{
    self = [super init];
    if (self) {
        [self setValuesForKeysWithDictionary:dict];
    }
    return self;
}

+ (instancetype)messageWithDict:(NSDictionary *)dict
{
    return [[self alloc] initWithDict:dict];
}

//+ (NSArray *)Messages
//{
//    NSArray *array = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"messages.plist" ofType:nil]];
//    NSMutableArray *arrayM = [NSMutableArray array];
//    for (NSDictionary *dict in array) {
//        [arrayM addObject:[self messageWithDict:dict]];
//    }
//
//    return arrayM;
//}

@end
//
//  HMMessageFrameModel.h
//  QQ聊天
//
//  Created by YaguangZhu on 15/8/27.
//  Copyright (c) 2015年 YaguangZhu. All rights reserved.
//

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
@class HMMessageModel;
@interface HMMessageFrameModel : NSObject

//时间的frame
@property (nonatomic, assign,readonly)CGRect timeF;

//正文的frame
@property (nonatomic, assign,readonly)CGRect textViewF;

//图片
@property (nonatomic, assign,readonly)CGRect iconF;

//cell
@property (nonatomic, assign)CGFloat cellH;

//数据模型
@property (nonatomic, strong)HMMessageModel *message;

+ (NSArray *)messageFrame;

@end

---------------------------------
//
//  HMMessageFrameModel.m
//  QQ聊天
//
//  Created by YaguangZhu on 15/8/27.
//  Copyright (c) 2015年 YaguangZhu. All rights reserved.
//

#import "HMMessageFrameModel.h"
#import "HMMessageModel.h"
#import "Constant.h"

@implementation HMMessageFrameModel

- (void)setMessage:(HMMessageModel *)message
{
    _message = message;

    CGFloat padding = 10;
    if (message.hideTime ==NO) {
        //1. 时间
        CGFloat timeX = 0;
        CGFloat timeY = 0;
        CGFloat timeW = bScreenWidth;
        CGFloat timeH = bNormalH;

        _timeF = CGRectMake(timeX, timeY, timeW, timeH);

    }

    //2.头像
    CGFloat iconX;
    CGFloat iconY = CGRectGetMaxY(_timeF);
    CGFloat iconW = bIconW;
    CGFloat iconH = bIconH;

    if (message.type == HMMessageModelGatsby) {//自己发的

        iconX = bScreenWidth - iconW - padding;

    }else{//别人发的
        iconX = padding;
    }

    _iconF =  CGRectMake(iconX, iconY, iconW, iconH);
    //3.正文

    CGFloat textX;
    CGFloat textY = iconY+padding;

    CGSize textMaxSize = CGSizeMake(150, MAXFLOAT);
    CGSize textRealSize = [message.text boundingRectWithSize:textMaxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:bBtnFont} context:nil].size;

    CGSize btnSize = CGSizeMake(textRealSize.width+40, textRealSize.height+40);
    if (message.type == HMMessageModelGatsby) {
        textX = bScreenWidth - iconW - padding*2 - btnSize.width;
    }else{
        textX = padding + iconW;
    }

    //    _textViewF = CGRectMake(textX, textY, <#CGFloat width#>, <#CGFloat height#>)
    _textViewF = (CGRect){{textX,textY},btnSize};

    //4.cell高度

    CGFloat iconMaxY = CGRectGetMaxY(_iconF);
    CGFloat textMaxY = CGRectGetMaxY(_textViewF);

    _cellH = MAX(iconMaxY, textMaxY);
}

+ (NSArray *)messageFrame
{
    NSArray *array = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"messages.plist" ofType:nil]];

    NSMutableArray *arrayM = [NSMutableArray array];
    for (NSDictionary *dict in array) {
        // 要添加statusFrame对象
        HMMessageFrameModel *frameModel = [[HMMessageFrameModel alloc] init];

        // 实例化一个新的Status模型
        HMMessageModel *messageModel = [HMMessageModel messageWithDict:dict];

        HMMessageFrameModel *lastModel = [arrayM lastObject];

        messageModel.hideTime = [messageModel.time isEqualToString:lastModel.message.time];

        // 调用自己的setter方法,保存status数据模型,同时计算出所有控件的位置
        frameModel.message = messageModel;

        // 将statusFrame添加到数组
        [arrayM addObject:frameModel];
    }

    return arrayM;
}
@end
//
//  HMMessageCell.h
//  QQ聊天
//
//  Created by YaguangZhu on 15/8/27.
//  Copyright (c) 2015年 YaguangZhu. All rights reserved.
//

#import <UIKit/UIKit.h>
//@class HMMessageModel;
@class HMMessageFrameModel;
@interface HMMessageCell : UITableViewCell

+ (instancetype)messageCellWithTableView:(UITableView *)tableview;

//@property(nonatomic,strong) HMMessageModel *messageModel;

// frame 的模型
@property(nonatomic,strong) HMMessageFrameModel *frameModel;

@end

---------------------------------
//
//  HMMessageCell.m
//  QQ聊天
//
//  Created by YaguangZhu on 15/8/27.
//  Copyright (c) 2015年 YaguangZhu. All rights reserved.
//

#import "HMMessageCell.h"
#import "HMMessageModel.h"
#import "HMMessageFrameModel.h"
#import "Constant.h"
#import "UIImage+resizeImage.h"

/** 姓名字体 */
#define kNameFont   [UIFont systemFontOfSize:14]
/** 正文字体 */
#define kTextFont   [UIFont systemFontOfSize:16]

@interface HMMessageCell()
@property(nonatomic,strong)UILabel *time;
@property(nonatomic,strong)UIButton *textView;
@property(nonatomic,strong)UIImageView *icon;
@end
@implementation HMMessageCell

- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:nil reuseIdentifier:nil];
    self.backgroundColor = [UIColor clearColor];

    return self;
}

+ (instancetype)messageCellWithTableView:(UITableView *)tableview
{
    static NSString *ID = @"messageCell";
    HMMessageCell *cell = [tableview dequeueReusableCellWithIdentifier:ID];
    if (cell == nil) {
        cell = [[self alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];
    }

    return cell;
}

- (UILabel *)time
{
    if (_time ==nil) {
        _time = [[UILabel alloc]init];
        _time.textAlignment = NSTextAlignmentCenter;
        _time.font = [UIFont systemFontOfSize:13.0f];
        [self.contentView addSubview:_time];
    }
    return _time;
}

- (UIButton *)textView
{
    if (_textView == nil) {
        _textView = [[UIButton alloc]init];
        //_textView.backgroundColor = [UIColor grayColor];
        _textView.titleLabel.font = bBtnFont;
        _textView.titleLabel.numberOfLines = 0;//自动换行
        _textView.contentEdgeInsets = UIEdgeInsetsMake(20, 20, 20, 20);
        [_textView setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
        [self.contentView addSubview:_textView];

    }
    return _textView;
}

- (UIImageView *)icon
{
    if (_icon ==nil) {
        _icon = [[UIImageView alloc] init];
        [self.contentView addSubview:_icon];
    }
    return _icon;
}
//可以通过数据模型来设置数据和位置,也可以通过位置模型来设置数据和位置

- (void)setFrameModel:(HMMessageFrameModel *)frameModel
{
    _frameModel = frameModel;

    HMMessageModel *messageModel = frameModel.message;

    //1.时间
    self.time.frame = frameModel.timeF;
    self.time.text = messageModel.time;

    //2.头像
    self.icon.frame = frameModel.iconF;
    if (messageModel.type == HMMessageModelGatsby) {
        self.icon.image = [UIImage imageNamed:@"Gatsby"];
    }else{
        self.icon.image = [UIImage imageNamed:@"Jobs"];
    }

    //3.正文
    self.textView.frame = frameModel.textViewF;
    [self.textView setTitle:messageModel.text forState:UIControlStateNormal];

    if (messageModel.type == HMMessageModelGatsby) {
        [self.textView setBackgroundImage:[UIImage resizeWithImageName:@"chat_send_nor"] forState:UIControlStateNormal];
    }else
    {
         [self.textView setBackgroundImage:[UIImage resizeWithImageName:@"chat_recive_nor"] forState:UIControlStateNormal];
    }
}

- (void)awakeFromNib {
    // Initialization code
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
    [super setSelected:selected animated:animated];

    // Configure the view for the selected state
}

@end
//
//  ViewController.h
//  QQ聊天
//
//  Created by YaguangZhu on 15/8/27.
//  Copyright (c) 2015年 YaguangZhu. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

@end

----------------------------------

//
//  ViewController.m
//  QQ聊天
//
//  Created by YaguangZhu on 15/8/27.
//  Copyright (c) 2015年 YaguangZhu. All rights reserved.
//

#import "ViewController.h"
#import "HMMessageModel.h"
#import "HMMessageCell.h"
#import "HMMessageFrameModel.h"

@interface ViewController ()<UITabBarControllerDelegate,UITableViewDataSource,UITextFieldDelegate>
//@property(nonatomic,strong) NSArray *messages;
@property(nonatomic,strong) NSMutableArray *messagesFrame;
@property (weak, nonatomic) IBOutlet UITextField *inputView;

@property (weak, nonatomic) IBOutlet UITableView *tableView;

//自动回复数组
@property (nonatomic, strong)NSDictionary *autoReplay;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    self.tableView.allowsSelection = NO;

    self.tableView.backgroundColor = [UIColor colorWithRed:225/255.0 green:225/255.0 blue:225/255.0 alpha:1.0];

    self.tableView.separatorStyle =UITableViewCellEditingStyleNone;

    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(keyboardDidChangeFrame:) name:UIKeyboardDidChangeFrameNotification object:nil];

    //设置做边距
    self.inputView.leftView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 8, 0)];
    //一直显示
    self.inputView.leftViewMode = UITextFieldViewModeAlways;

    }

//点击右下角的send 按钮
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    NSLog(@"-------%@",textField.text);
    [self addMessage:textField.text type:HMMessageModelGatsby];

    //自动回复
    NSString *autoStr = [self autoReplayWithText:textField.text];
    //将自动回复添加成一天聊天信息
    [self addMessage:autoStr type:HMMessageModelJobs];
    //4. 清空表格

    self.inputView.text = @"";//nil

       return YES;
}

//自动回复一条聊天信息

- (NSString *)autoReplayWithText:(NSString *)text
{
    //3自动回复
    for (int a = 0 ; a < text.length; a++) {

        NSString *subStr = [text substringWithRange:NSMakeRange(a, 1)];

        if (self.autoReplay[subStr]) {
            return  self.autoReplay[subStr];
        }
    }

    return @"滚蛋吗0";
}

- (void)addMessage:(NSString *)text type:(HMMessageModeltype)type
{
    HMMessageModel *msg = [[HMMessageModel alloc]init];
    msg.time = @"17:25";
    msg.text = text;
    msg.type = type;

    HMMessageFrameModel *fm = [[HMMessageFrameModel alloc]init];
    fm.message =msg;
    [self.messagesFrame addObject:fm];

    [self.tableView reloadData];
    //3. 自动上移
    //移动的位置
    NSIndexPath *path = [NSIndexPath indexPathForRow:self.messagesFrame.count - 1 inSection:0];
    //真正去是位置 atSrcollPosition :  滚到位置
    [self.tableView scrollToRowAtIndexPath:path atScrollPosition:UITableViewScrollPositionBottom animated:YES];

}

- (void)keyboardDidChangeFrame:(NSNotification *)noti
{
    NSLog(@"--------%@",noti.userInfo);

    //改变window的背景颜色
    self.view.window.backgroundColor = self.tableView.backgroundColor;

    //最终键盘的frame
    CGRect frame = [noti.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];

    //键盘实时y
    CGFloat keyY = frame.origin.y;

    //屏幕的高度
    CGFloat screenH = [[UIScreen mainScreen] bounds].size.height;

    //动画时间
    CGFloat keyDuration = [noti.userInfo[UIKeyboardAnimationDurationUserInfoKey] floatValue];

    //执行动画
    [UIView animateWithDuration:keyDuration animations:^{
        self.view.transform = CGAffineTransformMakeTranslation(0, keyY - screenH);
    }];

}

//当tableview 滚动的时候 结束编辑事件  (退出键盘)
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
    [self.view endEditing:YES];
}

//-(NSArray *)messages
//{
//    if (_messages == nil) {
//        _messages = [HMMessageModel messages];
//    }
//    return _messages;
//}
- (NSArray *)messagesFrame
{
    if (_messagesFrame == nil) {
        _messagesFrame = [HMMessageFrameModel messageFrame];
    }
    return _messagesFrame;
}

//懒加载自动回复文件
- (NSDictionary *)autoReplay
{
    if (_autoReplay == nil) {
        _autoReplay  = [NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"autoReplay.plist" ofType:nil]];
    }
    return _autoReplay;
}

//隐藏状态栏
- (BOOL)prefersStatusBarHidden
{
    return YES;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return self.messagesFrame.count;
}

- (UITableViewCell * )tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
//    static NSString *ID [email protected]"cell";
//
//    HMMessageCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
//
//    if (cell ==nil) {
//        cell = [[HMMessageCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];
//
//    }

    HMMessageCell *cell = [HMMessageCell messageCellWithTableView:tableView];

   // cell.messageModel =self.messages[indexPath.row];

    HMMessageFrameModel *model = self.messagesFrame[indexPath.row];

    cell.frameModel =model;

       return cell;

}

#pragma mark - 代理方法
/** 计算单元格行高 */
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    /**
     计算行高的方法,会在加载表格数据时,有多少行计算多少次 contentSize

     问题:此方法执行的时候,cell还没有被实例化!
     但是:行高计算是在实例化cell时,通过设置status属性,计算的=>有了status模型,就可以知道行高!

     问题:如何在cell实例化之前,获得行高?
     解决方法:通过status可以计算得到行高!=》再建立一个模型,专门计算所有控件的位置
     */

//    HMMessageFrameModel *messageFrame1 = [[HMMessageFrameModel alloc] init];
//    messageFrame1.message =self.messagesFrame[indexPath.row];
//    return messageFrame1.cellH;

    HMMessageFrameModel *messageFrame1 = self.messagesFrame[indexPath.row];
       return messageFrame1.cellH;

    //return 200;
}

@end
时间: 2024-10-11 04:33:50

iOS-QQ自动聊天机器人的相关文章

自动聊天机器人项目班 [一门课搞定聊天机器人]

打造传统NLP聊天机器人第1课 聊天机器人的基础模型与综述知识点1:行业与业界综述实战项目:最简单的Rule-Base聊天机器人第2课 NLP基础及扫盲知识点1:NLP基本算法实战项目:经典NLP问题与解法第3课 用基础机器学习方法制作聊天机器人知识点1:神经网络与基础实战项目:说学逗唱的基础机器人打造深度学习聊天机器人第4课 深度学习基础及扫盲知识点1:深度学习基础算法实战项目:经典深度学习问题与解法第5课 深度学习聊天机器人原理知识点1:seq2seq生成模型知识点2:user modeli

微信自动聊天机器人

简单介绍 由于是一个项目,所以仍然是利用itchat进行实现. itchat的功能已经足够强大了,所以实现机器人回复其实并不是非常难的事情.主要内容就是itchat自己的回复消息模块 以及 图灵机器人的接口函数. 图灵机器人的接口 首先得去图灵机器人官网免费注册一个机器人,此时我们就已经获得了自己的API_KEY,当然你也可以选择网上的其他机器人.然后利用requests库将自己的API post出去就可以了,而且我们并不需要像写爬虫那样加上headers,这里要注意的是,我们需要获取的数据是以

QQ 聊天机器人API

QQ机器人是腾讯陆续推出的的人工智能聊天机器人的总称.都说小Q妹妹聪明好学,我们可以教她说话,也可以请他帮忙查询邮编.手机号,或者解释成语.翻译成语,据说她还会查询手机号码归属地.应用科学计算器. 可是,在查新闻.查列车.车航班.查团购.查价格.查优惠.查酒店.查餐厅.查彩票等方面,小Q妹妹就弱爆了,"逆水行舟,不进则退"小Q妹妹真应该被pass掉了.笔者已经开始使用一款功能更强的机器人--图灵机器人.试一下这个高智商的机器人,她永远有耐心陪您聊天,不怕你调戏她,就怕你被她调戏.点这里

基于torch学汪峰写歌词、聊天机器人、图像着色/生成、看图说话、生成字幕

手把手教你基于torch玩转 学汪峰写词.自动聊天机器人.图像着色.图像生成.看图说话.生成字幕 作者:骁哲.李伟.小蔡.July.说明:本教程出自七月在线开发/市场团队.及七月在线5月深度学习班学员之手,有何问题欢迎加Q群交流:472899334.时间:二零一六年十月十二日. 前言 我们教梵高作画的教程发布之后,国庆7天,上百位朋友一一陆续动手尝试,大有全民DL.全民实验之感.特别是来自DL班的小蔡同学,国庆7天连做10个开源实验,并把这10个实验的简易教程(含自动聊天机器人)发布在社区上:h

人机交互的新方向:智能聊天机器人

老网民肯定还记得263聊天室.QQ聊天室,火爆的聊天场景,充满好奇的人们聚一个虚拟的小房间里畅所欲言,不断地发出欢声笑语.那时候,有一些特别可爱的AI聊天机器人,简单的回复你几句,给你讲几个笑话,发几张美女,贴几条新闻……虽然简单,但那么真诚.可爱,像一个初生的小宝宝,给我们留下无限纯真和美好的回忆. IM出现&盛行之后,有msn聊天机器人接棒,也有QQ自动应答机器人轻舞飞扬……直到8年后的某一天,苹果第一次引入Siri,才全新定义了“智能聊天机器人”.据百度百科记录,“Siri可以令iPhon

vue-miniQQ——基于Vue2实现的仿手机QQ单页面应用(接入了聊天机器人,能够进行正常对话)

使用Vue2进行的仿手机QQ的webapp的制作,作品由个人独立开发,源码中进行了详细的注释. 由于自己也是初学Vue2,所以注释写的不够精简,请见谅. 项目地址 https://github.com/jiangqizheng/vue-MiniQQ 项目已实现功能 对话功能--想着既然是QQ总要能进行对话交流,所以在项目中接入了图灵聊天机器人,可以与列表中的每个人物进行对话. 左滑删除--左滑删除相关消息. 搜索页面--点击右上角搜索按钮,能够进入搜索页面,输入对应的单词或者数字,动态查找好友.

C#制作简易QQ聊天机器人

最近对QQ聊天机器人比较感兴趣,奈何一直没找到C#的源码,就自己摸索,好了废话不多说了,开始正题. 首先我们要准备的是C# 的SDK下载地址:https://cqp.cc/t-24088-1-1,Newtonsoft.Json.dll插件 打开C#SDK源码后找到MyApp.cs(QQ发送消模块) 在里面找到QQ私聊消息 HttpWebResponse Response = null; string result = null; String _strMessage = msg(收到的QQ消息)

qq聊天机器人 群发工具 (java版) (三)

本篇简单讲解一下如何接收QQ消息. 在成功登陆QQ后,要每隔一段时间发一个POST请求,用来维持登陆状态,同时也是用来接收消息的,请求如下: Request URL:http://d.web2.qq.com/channel/poll2 Request Method:POST Content-Type:application/x-www-form-urlencoded Referer:http://d.web2.qq.com/proxy.html?v=20130916001&callback=1&a

QQ自动营销怎么样?流量星球:QQ营销机器人深度挖掘精准粉丝!

QQ自动营销什么? 就是登陆了自己的QQ账号,设置了自己需要的广告词.目标用户人数等,然后发送,关电脑,这就是所谓的QQ自动营销.是不是很神奇?这世上会有这么强大的功能吗? 还别说,真有! 近几年的微信群控听说过了吗?可谓是风靡一时啊,相信用了这套系统的朋友们都有狠狠的赚了一笔吧!微信群控不仅提高了广告的推送效率,还大量的减少了人力物力财力,只可惜,在去年的 7月份微信进行了大整改,对微信的管理机制变得更加严谨了,微信群控也渐渐的没落了! 如今,流量星球这个团队经过不断的深入研究和探讨,发现QQ