Android 客服 开发帮助手册

注意:最新API及用法请参见Demo

1. 登录管理后台, 到我的应用页面, 点击创建应用, 进入新应用创建页面

2. 为创建的应用分配客服账号

3. App创建成功后,获取Appkey

说明:在新的应用创建过程中,请尽量填写准确的信息,便于我们为您提供更加周到的服务

这里下载SDK, 内含Demo程序和jar包

Android SDK支持发送文字、表情、图片、语音

1.导入appkefu_sdk.jar

直接将libs文件夹中的jar包拷贝到项目工程libs文件夹下面

2.添加资源res文件

将下载的 “res”文件夹中的资源,拷贝到您的项目的"res"文件夹中,其中:SDK中的资源文件均以“appkefu_”开头

3.配置AndroidManifest.xml

请将下列 权限(user-permission)/Activity/Service/receivers分别拷贝到AndroidManifest.xml的相应位置, 并注意:请填写自己申请的appkey

<manifest……>
......
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.READ_LOGS" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.GET_TASKS" />
    <uses-permission android:name="android.permission.CHANGE_CONFIGURATION" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.USE_CREDENTIALS" />
    
<application ……>
 ……
        <!-- 请到 http://appkefu.com/AppKeFu/admin/ 申请appkey-->
        <meta-data
            android:name="com.appkefu.lib.appkey"
            android:value="6f8103225b6ca0cfec048ecc8702dbce" />

        <!-- 聊天窗口, 可通过修改layout文件appkefu_chat_activity.xml自定义窗口UI -->
        <activity android:name="com.appkefu.lib.ui.activity.KFChatActivity" />
        <!-- 队列会话窗口,可通过修改layout问题appkefu_qchat_activity.xml自定义窗口UI -->
        <activity android:name="com.appkefu.lib.ui.activity.KFQChatActivity" />
        <!-- 常见问题FAQ窗口 -->
        <activity android:name="com.appkefu.lib.ui.activity.KFFAQSectionsActivity"/>
        <activity android:name="com.appkefu.lib.ui.activity.KFFAQActivity" />
        <activity android:name="com.appkefu.lib.ui.activity.KFFAQDetailActivity" />
        <!-- 客服个人资料窗口 -->
        <activity android:name="com.appkefu.lib.ui.activity.KFProfileActivity"/>
        <activity android:name="com.appkefu.lib.ui.activity.KFQProfileActivity"/>
        <!-- 验证消息窗口,可通过修改layout文件appkefu_activity_subscribe_notification.xml自定义窗口UI -->
        <activity android:name="com.appkefu.lib.ui.activity.KFSubscribeNotificationActivity" />
		<!-- 群聊 -->
        <activity android:name="com.appkefu.lib.ui.activity.KFMUCChatActivity"/>
		<activity android:name="com.appkefu.lib.ui.activity.KFMUCProfileActivity"/>
		<!-- 选择发送图片 -->
        <activity android:name="com.appkefu.lib.ui.activity.KFSelectPicActivity"
            android:theme="@style/appkefu_dialog_style_bottom" />
        
        <!-- 发送语音辅助service -->
        <service
            android:name="com.appkefu.lib.soundrecorder.KFRecorderService"
            android:exported="true"/>     
        
        <!-- 主service -->       
        <service android:name="com.appkefu.lib.service.KFMainService" android:exported="true">
            <intent-filter>
                
                <action android:name="com.appkefu.lib.action.CONNECT" />
                <action android:name="com.appkefu.lib.action.DISCONNECT" />
                <action android:name="com.appkefu.lib.action.TOGGLE" />
                <action android:name="com.appkefu.lib.action.SEND" />
                
                <action android:name="com.appkefu.lib.action.NETWORK_STATUS_CHANGED"/>
                <action android:name="com.appkefu.lib.action.XMPP.MESSAGE_RECEIVED" />

            </intent-filter>
        </service>
        
        <!-- 获取OpenUDID, 专用于客服 -->
        <service android:name="org.OpenUDID.OpenUDID_service" >
            <intent-filter>
                <action android:name="org.openudid.GETUDID" />
            </intent-filter>
        </service>        
        
        <!-- 监听网络变化 -->
        <receiver android:name="com.appkefu.lib.receivers.KFNetworkConnectivityReceiver">
            <intent-filter>
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            </intent-filter>
        </receiver> 
        
        <receiver android:name="com.appkefu.lib.receivers.KFAlarmReceiver">
            <intent-filter>
                <action android:name="com.appkefu.lib.action.LOGIN_ALARM" />
            </intent-filter>
         </receiver>

        
</application>
......  
</manifest> 
          

4.客服Demo讲解

1.登录,在onCreate()里面添加

protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	setContentView(R.layout.activity_main);

	//与admin会话,实际应用中需要将admin替换为真实的客服用户名			
	//mKefuUsername = "admin";
		
	//初始化资源
	initView();
			
	//第一步:登录
	KFInterfaces.visitorLogin(this);
}

2.监听通知:添加receiver和service变量

//监听:连接状态、即时通讯消息、客服在线状态
private BroadcastReceiver mXmppreceiver = new BroadcastReceiver() 
{
    public void onReceive(Context context, Intent intent) 
    {
        String action = intent.getAction();
        //监听:连接状态
        if (action.equals(KFMainService.ACTION_XMPP_CONNECTION_CHANGED))//监听链接状态
        {
             updateStatus(intent.getIntExtra("new_state", 0));        
        }
        //监听:即时通讯消息
        else if(action.equals(KFMainService.ACTION_XMPP_MESSAGE_RECEIVED))//监听消息
        {
            String body = intent.getStringExtra("body");
            String from = StringUtils.parseName(intent.getStringExtra("from"));
            	
            KFSLog.d("body:"+body+" from:"+from);
         }
       }
};
    
          

3.注册和销毁receiver和service,分别在onStart()和onStop()里面

protected void onStart() {
    super.onStart();
		
    IntentFilter intentFilter = new IntentFilter();
	//监听网络连接变化情况
    intentFilter.addAction(KFMainService.ACTION_XMPP_CONNECTION_CHANGED);
    //监听消息
    intentFilter.addAction(KFMainService.ACTION_XMPP_MESSAGE_RECEIVED);

    registerReceiver(mXmppreceiver, intentFilter);     
}

@Override
protected void onStop() {
    super.onStop();
    
    unregisterReceiver(mXmppreceiver);
}
          

4.另外,还有重要登录状态函数

//根据监听到的连接变化情况更新界面显示
private void updateStatus(int status) {
    switch (status) {
        case KFXmppManager.CONNECTED:
        	mTitle.setText("微客服(客服Demo)");
        	
    		//设置昵称,否则在客服客户端 看到的会是一串字符串(必须在登录成功之后才能调用,才有效)
    		KFInterfaces.setVisitorNickname("访客1", this);

            break;
        case KFXmppManager.DISCONNECTED:
        	mTitle.setText("微客服(客服Demo)(未连接)");
            break;
        case KFXmppManager.CONNECTING:
        	mTitle.setText("微客服(客服Demo)(登录中...)");
        	break;
        case KFXmppManager.DISCONNECTING:
        	mTitle.setText("微客服(客服Demo)(登出中...)");
            break;
        case KFXmppManager.WAITING_TO_CONNECT:
        case KFXmppManager.WAITING_FOR_NETWORK:
        	mTitle.setText("微客服(客服Demo)(登录中)");
            break;
        default:
            throw new IllegalStateException();
    }
}
          

5.检测客服在线状态

    //检测客服是否在线
    private void checkKeFuOnlineThread() 
    {
    	final Handler handler = new Handler() 
    	{
    		public void handleMessage(Message msg) 
  			{
    			Boolean isOnline = (Boolean)msg.obj;
    			if(isOnline)
    			{
    				mChatBtn.setText("咨询客服(在线)");
    			}
    			else
    			{
    				mChatBtn.setText("咨询客服(离线)");
    			}
  			}
    	};
    	
    	new Thread() 
  		{
  			public void run() 
  			{
  				Message msg = new Message();

  				//检测客服是否在线,需要在非主线程中执行
  				msg.obj = KFInterfaces.isKeFuOnlineSync(mKefuUsername);
  				
  				handler.sendMessage(msg);
  			}
  		}.start();
    }
          

6.自定义昵称,以便于在客户端看到友好的用户名称,否则会是一串字符

//设置昵称,否则在客服客户端 看到的会是一串字符串(必须在登录成功之后才能调用,才有效)
KFInterfaces.setVisitorNickname("访客1", this);
          

7.发起会话

//启动咨询对话框,其中kefuUsername为客服用户名
private void chatWithKeFu(String kefuUsername)
{
		KFInterfaces.startChatWithKeFu(this,
				kefuUsername, //客服用户名
				"您好,我是微客服小秘书,请问有什么可以帮您的?",  //问候语
				"咨询客服");//会话窗口标题
}		  
		  

详情请下载Demo去Github下载

使用步骤:

  • 1.在管理后台创建应用,创建应用
  • 2.为应用添加智能问答
  • 3.测试:
    • 1.请求地址:http://appkefu.com/AppKeFu/admin/index.php/faq/robot
    • 2.参数说明: appkey->你创建的应用的appkey, q->问题
    • 3.范例: http://appkefu.com/AppKeFu/admin/index.php/faq/robot?appkey=6f8103225b6ca0cfec048ecc8702dbce&q=你好
    • 4.返回结果为JSON格式:[{"id":"18","app_id":"6","question":"\u4f60\u597d","answser":"\u4f60\u597d\u554a","create_time":"2013-08-04 09:26:43","create_user_id":"14","update_time":"2013-08-04 09:26:43","update_user_id":"14"}], 其中:"question"字段为返回答案,"answser"字段为问题,暂时可以忽略其他字段
  • 4.支持国际化
  • 5.免费用户支持关键字匹配,付费用户支持模糊匹配

更多:帮助

开发者可以根据自己需要自定义界面显示格式

比如:隐藏会话界面导航栏可以:修改布局文件 appkefu_activity_chat.xml, 在id为android:id="@+id/rl_layout"的layout中 添加android:visibility="gone"

  • 1.appkefu_chat_activity.xml 会话主界面
  • 2.appkefu_chatting_item_msg_text_left.xml 左侧单条会话内容
  • 3.appkefu_chatting_item_msg_text_right.xml 右侧单条会话内容
  • 4.appkefu_face_grid1.xml 表情页面1
  • 5.appkefu_face_grid2.xml 表情页面2
  • 6.appkefu_face_grid3.xml 表情页面3
  • 7.appkefu_voice_rcd_hind_window.xml 录音提示窗口

主要有4个客服接口:

//登录
KFInterfaces.visitorLogin(Context context)

//检测客服在线状态 
KFInterfaces.checkKeFuIsOnlineSync(String kefuname, Context context)
        		
//设置昵称,否则在客服客户端 看到的会是一串字符串(必须在登录成功之后才能调用,才有效)
KFInterfaces.setVisitorNickname(String nickname, Context context)

//
/**
* 直接与单个客服会话
* @param context 上下文
* @param kefuName 客服用户名
* @param greetings 问候语
* @param title 会话窗口标题
*/
public static void startChatWithKeFu(Context context, String kefuName, String greetings, String title)

/**
* 发送文本消息
* @param msgContent 消息内容
* @param toUsername 对方的用户名,如:test1
* @param type		 消息的类型,含(chat/groupchat/privatechat),一般为 "chat"
* @param context	 
*/
public static void sendTextMessage(String msgContent, String toUsername, String type, Context context)

//退出登录
KFInterfaces.Logout(Context context)    
          

如果开发者不希望直接将客服名称写死在App应用里面,可以通过在后台配置客服

{
          "id":"1",	//记录id
          "app_id":"6",	//所属App的id
          "product_id":"1",	//商品id
          "product_name":"pro1", //商品编号
          "product_description":"pro1 description", //商品描述
          "kefu_name":"kefu1", //客服名
          "kefu_description":"kefu1 description", //客服描述
          "create_time":"2013-06-27 04:53:35", //词条创建时间
          "create_user_id":"14", //词条创建用户id
          "update_time":"2013-06-27 04:53:35", //词条更新时间
          "update_user_id":"14"} //词条更新用户id
          

开发者可以根据商品编号和客服的对于关系在不同的地方分配不同的客服。 注意:目前sdk中没有相关接口,需要开发者自行发送http请求,获取json结果,并解析

更新日期: 2014/02/14

技术交流QQ群:48661516,或邮件appkefu@163.com,或咨询微客服...

微客服-移动在线客服