CRM系统怎么实现通话功能?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CRM系统怎么实现通话功能?相关的知识,希望对你有一定的参考价值。
CRM是客户关系管理系统,客户关系的维护对企业而言是非常重要的,无论是日常的沟通和跟进,还是后期的维系与节假日问候。但CRM没有直接的通信功能,企业大多数是CRM和呼叫中心分开使用的。直接在CRM中集成通话能力,企业的工作效率就会大大提升。CRM实现通话能力,不一定需要呼叫中心。最简单的方法是用点击拨号API接口集成,只需要几行代码就可以轻松实现通话。无论是PC、网页或手机app,直接点击客户名字或电话号码就可以发起通话了。以上参考Enjoytalk点击拨号接口。
还可以将通话记录和通话录音推送至CRM,实现客户数据一体化,谢谢! 参考技术A 伴随着很多行业公司的业务的增长,接触到很多客户语音系统(呼叫中心系统)二次开发的客户。很多需求是存在一定的共性。如快速实现语音外呼系统与业务系统的对接。实现通过过程的过程化,流程化管理。
但开源的语音系统与业务系统的融合,目前大多基于IP软件换系统的二次开发(直接硬件开发,我觉得没有特殊需求暂时就不必考虑)。目前基于freeswitch、asterisk、pbx等交换系统开发需要程序人员具备一定的基础。开发费用和周期也比较长。针对这种情况,目前给融和开发的客户提供呼叫中心的中间间,中间件具备完善的三方开发接口,如 点击拨号,来去电/弹屏。
通讯层在呼叫中心中间件中好配置,业务系统只须调用标准的web api,即可快速实现业务系统的升级,融入语音系统。特点上线速度快,扩容灵活,主要是费用比较低。
主要几个功能的介绍
电话呼出
功能描述:该接口被调用时,呼叫中心的分机先振铃,分机被接起后,呼叫中心开始呼叫另一个分机或呼叫外 线号码。
接口地址:http://bltcall.com/?m=interface&c=api&a=dial
调用方式:GET 请求
接口参数:
◆ extension:主叫号码,必须为分机号码,必填。
◆ extensionDst:被叫号码,可以为分机号码或外线号码,必填。
◆ account:自定义标识,在通话记录中可以体现,可选项。
◆ callerid:设置出局 CID,可选项。
◆ 返回值:"result":"1","data":"","error":0或"result":"0","data":"","error":0,其中 ➢ result:表示操作状态,1 为操作成功,0 为操作失败。
➢ data:保存操作结果返回的数据信息,当 result 为 1 时,data 里面保存本次操作返回的正确数据信 息。
拓展资料:
客户关系管理系统(CRM)是以客户数据的管理为核心,利用信息科学技术,实现市场营销、销售、服务等活动自动化,并建立一个客户信息的收集、管理、分析、利用的系统,帮助企业实现以客户为中心的管理模式。 参考技术B 用点击拨号接口对接就可以实现,例如Enjoytalk的。
Django项目:CRM(客户关系管理系统)--65--55PerfectCRM实现CRM客户报名状态颜色变化
1 # kingadmin.py 2 # ————————04PerfectCRM实现King_admin注册功能———————— 3 from crm import models 4 #print("kingadmin crm",models.Customer) 5 6 # ————————05PerfectCRM实现King_admin注册功能获取内存———————— 7 # from king_admin.base_admin import register,BaseAdmin 8 from king_admin.base_admin import site,BaseAdmin 9 # ————————05PerfectCRM实现King_admin注册功能获取内存———————— 10 11 # ————————24PerfectCRM实现King_admin自定义操作数据———————— 12 from django.shortcuts import render 13 # ————————24PerfectCRM实现King_admin自定义操作数据———————— 14 15 # ————————28PerfectCRM实现King_admin编辑限制———————— 16 from django.forms import ValidationError 17 from django.shortcuts import render,redirect 18 # ————————28PerfectCRM实现King_admin编辑限制———————— 19 20 #04客户信息表 21 class CustomerAdmin(BaseAdmin):#定制Djanago admin 22 # ————————54PerfectCRM实现CRM客户报名链接———————— 23 # list_display = (\'id\', \'qq\', \'source\', \'consultant\', \'content\', \'date\') # 显示字段表头 24 list_display = (\'id\', \'qq\', \'source\', \'consultant\', \'content\', \'date\',\'status\',\'enroll\') # 显示字段表头 25 # ————————54PerfectCRM实现CRM客户报名链接———————— 26 # ————————11PerfectCRM实现King_admin分页显示条数———————— 27 list_per_page = 2 #分页条数 # 默认分页条数10 28 # ————————11PerfectCRM实现King_admin分页显示条数———————— 29 # ————————16PerfectCRM实现King_admin日期过滤———————— 30 # ————————15PerfectCRM实现King_admin多条件过滤———————— 31 # 过滤器(可以包含ManyToManyField) (注意加 逗号 , ) 32 # list_filter = (\'source\',\'consultant\',\'consult_courses\',) 33 list_filter = (\'date\',\'source\',\'consultant\',\'consult_courses\',) 34 # ————————15PerfectCRM实现King_admin多条件过滤———————— 35 # ————————16PerfectCRM实现King_admin日期过滤———————— 36 # ————————18PerfectCRM实现King_admin搜索关键字———————— 37 #搜索(不能包含CharField)(注意加 逗号 , ) 38 search_fields = (\'name\',\'qq\',) 39 # ————————18PerfectCRM实现King_admin搜索关键字———————— 40 # ————————26PerfectCRM实现King_admin自定义排序———————— 41 ordering = \'-qq\' #自定义排序,默认\'-id\' 42 # ————————26PerfectCRM实现King_admin自定义排序———————— 43 # ————————27PerfectCRM实现King_admin编辑复选框———————— 44 filter_horizontal = (\'tags\',) #复选框 45 # ————————27PerfectCRM实现King_admin编辑复选框———————— 46 # ————————33PerfectCRM实现King_admin编辑整张表限制———————— 47 readonly_table=True#默认表单不锁定 48 # ————————33PerfectCRM实现King_admin编辑整张表限制———————— 49 50 # ————————55PerfectCRM实现CRM客户报名状态颜色变化———————— 51 colored_fields = { 52 \'status\':{\'已报名\':"rgba(145, 255, 0, 0.78)", 53 \'未报名\':"#ddd"},} 54 # ————————55PerfectCRM实现CRM客户报名状态颜色变化———————— 55 56 # ————————54PerfectCRM实现CRM客户报名链接———————— 57 def enroll(self): 58 \'\'\'报名\'\'\' 59 print("customize field enroll",self) 60 link_name = "报名" 61 if self.instance.status == 0: 62 link_name = "报名新课程" 63 return \'\'\'<a target="_blank" class="btn-link" href="/bpm/customer/%s/enrollment/">点击%s</a> \'\'\' % (self.instance.id,link_name) 64 # url(r\'^customer/(\\d+)/enrollment/$\', sales_views.enrollment, name="enrollment"), # 客户招生#报名流程一 下一步 65 # target属性用于表示所链接文件打开到的位置 #记住,“”内的文字只是表示一个对象的名子。 66 enroll.display_name = "报名链接" 67 # ————————54PerfectCRM实现CRM客户报名链接———————— 68 69 70 71 # ————————24PerfectCRM实现King_admin自定义操作数据———————— 72 # from django.shortcuts import render 73 actions = [\'test_actions\',]#定制功能 #测试返回到一个新页面 74 def test_actions(self,request,arg2):#对应的函数 #request类自己的请求 #arg2类的内容 75 return render(request,"king_admin/table_index.html") 76 test_actions.short_description = "测试显示中文" 77 # ————————24PerfectCRM实现King_admin自定义操作数据———————— 78 79 # ————————28PerfectCRM实现King_admin编辑限制———————— 80 # ————————31PerfectCRM实现King_admin编辑多对多限制———————— 81 # readonly_fields = (\'qq\', \'consultant\',) # 不可修改 82 readonly_fields = (\'qq\', \'consultant\',\'tags\',) # 不可修改 83 # ————————31PerfectCRM实现King_admin编辑多对多限制———————— 84 85 # ————————29PerfectCRM实现King_admin编辑自定义限制———————— 86 def default_form_validation(self,obj): 87 print(\'validation:制定的\',obj.cleaned_data) 88 consult_course=obj.cleaned_data.get(\'content\',\'\')#自制验证字段 89 if len(consult_course)<10: 90 return ValidationError(#添加错误信息 返回 91 ("该字段%(field)s 咨询内容记录不能少于10个字符"), 92 code=\'invalid\', 93 params={\'field\':\'content\',}, 94 ) 95 # ————————29PerfectCRM实现King_admin编辑自定义限制———————— 96 97 # ————————28PerfectCRM实现King_admin编辑限制———————— 98 99 # ————————30PerfectCRM实现King_admin编辑自定义字段验证———————— 100 def clean_name(self,obj,*args,**kwargs):#名称验证 单个 101 name=obj.cleaned_data[\'name\'] 102 if not name: 103 obj.add_error(\'name\',\'不能为空!\') 104 return ValidationError(#添加错误信息 返回 105 ("%(field)s:该字段 不能为空"), 106 code=\'invalid\', 107 params={\'field\':\'name\',}, 108 ) 109 elif len(name)<5: 110 obj.add_error(\'name\',\'不能小于5个字符!\') 111 #return ValidationError(\'\',) 112 return ValidationError(#添加错误信息 返回 113 ("%(field)s:该字段 不能小于5个字符!"), 114 code=\'invalid\', 115 params={\'field\':\'name\',}, 116 ) 117 # ————————30PerfectCRM实现King_admin编辑自定义字段验证———————— 118 119 # ————————34PerfectCRM实现CRM自定义用户———————— 120 #10账号表 121 class UserProfileAdmin(BaseAdmin):#定制Djanago admin 122 list_display = (\'id\', \'email\', \'name\') # 显示字段表头 123 124 # ————————36PerfectCRM实现King_admin密码修改———————— 125 readonly_fields = (\'password\',) # 不可修改,限制 126 filter_horizontal = (\'user_permissions\',\'groups\') #复选框 127 modelform_exclude_fields=[\'last_login\']#排除#不显示 #自增日期 #base_admin.py #forms.py 128 # ————————36PerfectCRM实现King_admin密码修改———————— 129 130 site.register(models.UserProfile, UserProfileAdmin) 131 # ————————34PerfectCRM实现CRM自定义用户———————— 132 133 # ————————05PerfectCRM实现King_admin注册功能获取内存———————— 134 # register(models.Customer,CustomerAdmin) 135 # register(models.CourseRecord) 136 site.register(models.Customer,CustomerAdmin) 137 site.register(models.CourseRecord) 138 # ————————05PerfectCRM实现King_admin注册功能获取内存———————— 139 140 # ————————04PerfectCRM实现King_admin注册功能————————
1 #kingadmin_tags.py 2 3 # ————————06PerfectCRM实现King_admin注册功能获取内存优化处理———————— 4 5 # # 因为前端禁止使用下划线开头(_meta.verbose_name ),所以通过后端处理后返回前端。 6 # from django import template #模板 7 # register = template.Library() #模板库 8 # 9 # @register.simple_tag #Django中利用filter与simple_tag为前端自定义函数的实现方法 10 # def get_app_name(model_obj): 11 # 12 # # ————————06PerfectCRM实现King_admin注册功能获取内存优化处理———————— 13 # # return model_obj._meta.verbose_name_plural 14 # \'\'\' 15 # #判断 数据库 里如果有 verbose_name 或者 verbose_name_plural 就 调用 如果都没有 就使用默认的(英文) 16 # class Meta: 17 # verbose_name = "04客户信息表" #在 Django Admin 里 表名显示中文 但是会加s 18 # verbose_name_plural = "04客户信息表" #在 Django Admin 里 表名显示中文 不会加s 19 # \'\'\' 20 # model_name = model_obj._meta.verbose_name_plural if model_obj._meta.verbose_name else model_obj._meta.verbose_name_plural 21 # if not model_name: 22 # model_name = model_obj._meta.model_name 23 # 24 # return model_name 25 # ————————06PerfectCRM实现King_admin注册功能获取内存优化处理———————— 26 27 # ————————06PerfectCRM实现King_admin注册功能获取内存优化处理———————— 28 29 # ————————07PerfectCRM实现King_admin显示注册的表———————— 30 #因为前端禁止使用下划线开头(_meta.verbose_name ),所以通过后端处理后返回前端。 31 from django import template #模板 32 register = template.Library() #模板库 33 34 35 36 @register.simple_tag #Django中利用filter与simple_tag为前端自定义函数的实现方法 37 def get_model_verbose_name(model_obj): 38 \'\'\' 39 #判断 数据库 里如果有 verbose_name 或者 verbose_name_plural 就 调用 如果都没有 就使用默认的(英文) 40 class Meta: 41 verbose_name = "04客户信息表" #在 Django Admin 里 表名显示中文 但是会加s 42 verbose_name_plural = "04客户信息表" #在 Django Admin 里 表名显示中文 不会加s 43 \'\'\' 44 model_name = model_obj._meta.verbose_name_plural if model_obj._meta.verbose_name else model_obj._meta.verbose_name_plural 45 if not model_name: 46 model_name = model_obj._meta.model_name 47 return model_name 48 49 @register.simple_tag 50 def get_model_name(model_obj): 51 return model_obj._meta.model_name 52 @register.simple_tag 53 def get_app_name(model_obj): 54 return model_obj._meta.app_label 55 # ————————07PerfectCRM实现King_admin显示注册的表———————— 56 57 58 # # ————————09PerfectCRM实现King_admin显示注册表的内容———————— 59 # from django.utils.safestring import mark_safe #使用mark_safe函数标记后,django将不再对该函数的内容进行转义 60 # @register.simple_tag 61 # def build_table_row(admin_obj,obj):#通过kingadmin_tags在后台处理 再传到前端 62 # row_ele = "" #为了生成一整行返回前端 63 # if admin_obj.list_display:#如果不为空,有在crm/kingadmin.py注册site.register(models.Customer,CustomerAdmin) 64 # 65 # # ————————19PerfectCRM实现King_admin数据修改———————— 66 # #循环所有 要显示 的字符串 进行反射 展示 字段 67 # # for column in admin_obj.list_display: #循环base_admin里class BaseAdmin下list_display = () 68 # for index, column in enumerate(admin_obj.list_display): # 转为列表取 下标 , 字段名 69 # # ————————19PerfectCRM实现King_admin数据修改———————— 70 # 71 # column_obj = obj._meta.get_field(column)#遍历获取 传进的参数对象 72 # if column_obj.choices:#判断如果字段有choices属性 73 # #获取choices的字符串(外健) 74 # get_column_data = getattr(obj,"get_%s_display" % column) #反射,传进的参数对象,拼接字段 75 # column_data = get_column_data()#函数,拿到数据 76 # else: 77 # column_data = getattr(obj, column)#反射, 78 # # ————————10PerfectCRM实现King_admin日期优化———————— 79 # if type(column_data).__name__ == \'datetime\': 80 # column_data = column_data.strftime(\'%Y-%m-%d %H-%M-%S\') 81 # # ————————10PerfectCRM实现King_admin日期优化———————— 82 # 83 # # ————————19PerfectCRM实现King_admin数据修改———————— 84 # 85 # if index == 0: #首列 86 # # 生成一个链接 跳转到编辑页面 #Format参数是一个格式字符串(%s升级版) 87 # td_ele = \'\'\'<td><a href="/king_admin/{app_name}/{model_name}/{obj_id}/change/">{column_data}</a> </td>\'\'\'\\ 88 # .format(app_name=admin_obj.model._meta.app_label, 89 # model_name=admin_obj.model._meta.model_name, 90 # obj_id=obj.id, 91 # column_data=column_data) 92 # else: 93 # td_ele = \'\'\'<td>%s</td>\'\'\' % column_data 94 # # td_ele = \'\'\'<td>%s</td>\'\'\' % column_data #把反射来的值 拼接字符串 生成<td> 95 # # ————————19PerfectCRM实现King_admin数据修改———————— 96 # row_ele += td_ele #把 <td> 拼接到上面到空字符串 97 # else: 98 # row_ele +="<td>%s</td>" %obj #把<td>拼接到上面到空字符串,crm/models.py里 def __str__(self):的返回值 99 # return mark_safe(row_ele) #使用mark_safe函数标记后,django将不再对该函数的内容进行转义 100 # # ————————09PerfectCRM实现King_admin显示注册表的内容———————— 101 102 103 # ————————54PerfectCRM实现CRM客户报名链接———————— 104 from django.utils.safestring import mark_safe #使用mark_safe函数标记后,django将不再对该函数的内容进行转义 105 from django.core.exceptions import FieldDoesNotExist 106 @register.simple_tag 107 # ————————56PerfectCRM实现CRM客户首列进入更改页优化路径———————— 108 # def build_table_row(admin_obj,obj):#通过kingadmin_tags在后台处理 再传到前端 109 def build_table_row(admin_obj,obj,request): # 通过kingadmin_tags在后台处理 再传到前端 110 # ————————56PerfectCRM实现CRM客户首列进入更改页优化路径———————— 111 112 row_ele = "" #为了生成一整行返回前端 113 # ————————54PerfectCRM实现CRM客户报名链接———————— 114 column_not=[]#表示不是表中字段列表 115 # ————————54PerfectCRM实现CRM客户报名链接———————— 116 117 if admin_obj.list_display:#如果不为空,有在crm/kingadmin.py注册site.register(models.Customer,CustomerAdmin) 118 # ————————19PerfectCRM实现King_admin数据修改———————— 119 #循环所有 要显示 的字符串 进行反射 展示 字段 120 # for column in admin_obj.list_display: #循环base_admin里class BaseAdmin下list_display = () 121 for index, column in enumerate(admin_obj.list_display): # 转为列表取 下标 , 字段名 122 # ————————19PerfectCRM实现King_admin数据修改———————— 123 # ————————54PerfectCRM实现CRM客户报名链接———————— 124 try: #获取表中的字段 125 # ————————54PerfectCRM实现CRM客户报名链接———————— 126 127 column_obj = obj._meta.get_field(column)#遍历获取 传进的参数对象 128 if column_obj.choices:#判断如果字段有choices属性 129 #获取choices的字符串(外健) 130 get_column_data = getattr(obj,"get_%s_display" % column) #反射,传进的参数对象,拼接字段 131 column_data = get_column_data()#函数,拿到数据 132 else: 133 column_data = getattr(obj, column)#反射, 134 # ————————10PerfectCRM实现King_admin日期优化———————— 135 if type(column_data).__name__ == \'datetime\': 136 column_data = column_data.strftime(\'%Y-%m-%d %H-%M-%S\') 137 # ————————10PerfectCRM实现King_admin日期优化———————— 138 139 140 # ————————19PerfectCRM实现King_admin数据修改———————— 141 if index == 0: #首列 142 # 生成一个链接 跳转到编辑页面 #Format参数是一个格式字符串(%s升级版) 143 td_ele = \'\'\'<td><a href="/king_admin/{app_name}/{model_name}/{obj_id}/change/">{column_data}</a> </td>\'\'\'\\ 144 .format(app_name=admin_obj.model._meta.app_label以上是关于CRM系统怎么实现通话功能?的主要内容,如果未能解决你的问题,请参考以下文章