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注册功能————————
# kingadmin.py

 

 

 

  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系统怎么实现通话功能?的主要内容,如果未能解决你的问题,请参考以下文章

crm 是啥,怎样学会使用

CRM系统开发一般需要多久?

中润云服:“天下没有免费的CRM系统”

WebService实例-CRM系统提供WebService实现用户注册功能

Java高级项目实战之CRM系统用户登录功能实现

Django项目:CRM(客户关系管理系统)--64--54PerfectCRM实现CRM客户报名链接