微软Dynamics 365客户服务 提供了一套工具,使企业能够优化其客户服务管理。除了提高客户体验,这个平台还可以协助跟踪沟通和内部支持流程,使公司和客户都受益。
然而,尽管微软Dynamics 365客户服务门户可能是有用的,但配置它以满足一套独特的要求可能是一项具有挑战性的任务。
在Connecting Software,我们用 微软Dynamics 365客户服务 来建立我们的 支持门户网站.由于我们对我们的支持门户网站有一个具体的愿景,通过这篇文章,我们将详细介绍通过Dynamics 365客户服务实施的过程,同时展示我们在路上遇到的障碍和我们找到的最佳解决方案。
Dynamics 365客户服务门户网站的特点

当客户在知识库中未能找到所需问题的解答时,Dynamics 365客户服务门户允许客户创建支持案例。从客户角度来看,这是我们支持门户的两大核心功能。.
然而,对我们来说,主要的优势是能够产生有关使用支持门户和我们的软件解决方案的信息。例如,如果我们注意到有几个关于特定产品的特定问题的案例被提交,我们可以重新调整我们的资源以快速解决这个问题。如果这只是一个常见问题,我们可以把它添加到我们的支持门户的知识库中,使任何有同样关切的客户都能获得这些信息。
因此,Dynamics 365客户服务门户网站作为一个集中的工具,用于评估我们的产品质量,提高客户满意度,跟踪客户互动,保证我们能够获得让我们不断改进的信息,调整我们的资源规划,甚至产生有价值的内部报告,例如,每个产品的支持成本。
现在,让我们来看看在实施支持门户过程中遇到的障碍。.
事件#1 – 现有客户群
当我们开始开发支持门户网站时,有一个现有的客户群,结果是很麻烦的。
每当一个客户第一次注册我们的门户网站时,就会在微软Dynamics 365(CRM),也就是我们的客户数据库中创建一个重复的联系人。用于客户服务的Microsoft Dynamics 365并没有将重复的联系人与我们客户数据库中真正的客户联系人联系起来,因此,这些信息没有集中到一个记录中。这意味着,我们的支持案例也没有链接到与我们有既定关系的账户相关的联系人。相反,它们被链接到作为支持门户注册结果而创建的空的重复联系人。
这个问题本来可以通过自动发送邀请函来解决,该邀请函可以成功地将重复的联系人与我们CRM中的真实客户联系人联系起来,但这是必须从开始建立客户群时就进行的事情。此外,尽管这在理论上可行,但由于电子邮件打开率低,这并不是一个现实的解决方案。只是为了说明问题,根据Mailchimp的数据,所有行业的平均电子邮件打开率仅为 21.33% 在2021年。
你可能也在想,默认合并记录就够了,但事实并非如此,因为将记录信息合并为一个联系人会导致失去对我们支持门户网站的访问。
解决方案 – A Dynamics 365 插件
解决这个问题的另一个方法是创建一个自定义的微软Dynamics 365插件(在Power Apps领域被称为解决方案),这就是我们所做的。我们建立的插件在支持门户注册时扫描用户是否已经存在于我们的CRM中。
有两种可能的结果:如果该用户确实存在于我们的数据库中,该插件会识别这种匹配,并将两条记录上的信息合并为一个单一的联系人,而该用户不会失去对Dynamics 365客户服务门户的访问,也就是我们的支持门户。第二个联系人,此时不包含任何信息,被我们建立的插件自动删除,它每周运行一个单独的批量删除工作来清除记录。
如果注册门户网站的用户在我们的CRM中不存在,该插件会做一些不同的事情。作为一家B2B公司,我们数据库中客户的电子邮件有一个特定于他们工作的组织的域名。因此,如果一个不在我们CRM中的用户希望注册我们的门户网站,该插件会搜索我们CRM中这个新用户的电子邮件域名。如果有匹配的,就会在CRM中自动创建一个新的联系人,因为这个用户属于一个我们已经熟悉的公司。相反,如果我们的数据库中没有与注册支持门户的客户的电子邮件域相匹配,我们就会在内部被告知试图注册,并在需要时联系获得进一步信息。
你可以通过以下方式找到我们微软Dynamics 365插件的部分代码 这个环节.请随意 伸出援手 如果你想要完整的版本,请给我们
public void Execute(IServiceProvider serviceProvider)
{
var tracingService = (ITracingService) serviceProvider.GetService(typeof(ITracingService));
var context = (IPluginExecutionContext) serviceProvider.GetService(typeof(IPluginExecutionContext));
var serviceFactory = (IOrganizationServiceFactory) serviceProvider.GetService(typeof(IOrganizationServiceFactory));
var service = serviceFactory.CreateOrganizationService(context.UserId);
if (!context.InputParameters.Contains("Target") || !(context.InputParameters["Target"] is Entity))
{
返回;
}
var entity = (Entity) context.InputParameters["Target"];
var isLoginEnabled = HasLoginEnabled(entity);
if (isLoginEnabled == false)
{
返回;
}
try
{
var emailAddress = (string) entity["emailaddress1"];
var contactsWithSameEmailAddress = GetContactsByEmailAddress(service, entity.Id, emailAddress);
如果 (contactsWithSameEmailAddress.Entities.Count > 0)
{
var hasLoginEnabled = HasLoginEnabled(contactsWithSameEmailAddress.Entities[0]);
if (hasLoginEnabled)
{
throw new InvalidPluginExecutionException(OperationStatus.Failed、
"用户已存在。请尝试使用不同的电子邮件地址注册,或登录现有账户。");
}
var mergeRequest = new MergeRequest
{
SubordinateId = entity.Id、
Target = new EntityReference("contact", contactsWithSameEmailAddress.Entities[0].Id)、
更新内容 = GetUpdateContent(entity)
};
var _ = (MergeResponse) service.Execute(mergeRequest);
entity[CustomAttributeName] = true;
service.Update(entity);
}
否则
{
var domain = emailAddress.Split('@')[1];
如果 (_publicDomains.Contains(domain))
{
SendEmailAndDeactivateContact(service, tracingService, entity);
}
否则
{
var contactsWithSameDomain = GetContactsByDomain(service, entity.Id, domain);
if (contactsWithSameDomain.Entities.Count > 0)
{
entity["parentcustomerid"] = contactsWithSameDomain.Entities[0]["parentcustomerid"];
service.Update(entity);
}
否则
{
SendEmailAndDeactivateContact(service, tracingService, entity);
}
}
}
}
catch (FaultException) ex)
{
throw new InvalidPluginExecutionException("ContactPostOperationPlugin.",ex);
}
}
关闭代码我们的网络商店

事件 #2 – D365 客户服务中的错误消息
尚未在我们的Dynamics 365客户服务门户网站注册的用户在试图登录时收到一条误导性的错误信息。这条信息说他们的密码不正确,而不是通知他们他们的电子邮件没有在支持门户网站上注册。
回顾先前的情况,每当用户注册支持门户时,我们的客户关系管理系统(CRM)中就会生成重复记录。未注册门户的客户则不存在此类重复记录,因此系统无法读取包含其登录信息的记录。 系统会更新CRM中的“用户名输入”字段(该字段原本不包含任何信息),此操作会触发Microsoft Dynamics 365客服系统误判用户已拥有登录凭证,从而显示密码错误的提示信息。.
解决方案——Dynamics 365插件
就像我们有一个现有客户数据库的问题的解决方案一样,与这个错误信息作斗争的最好方法是使用微软Dynamics 365插件/解决方案。
事实上,我们使用了现有的Dynamics 365插件,仅做了微调。 开发团队新增了一个插件步骤,本质上是一个识别并阻止系统错误的指令——当“用户名输入”字段为空时,系统会自动更新该字段。该插件步骤随后修正了向尝试访问门户的用户显示的错误信息,改为提示"您没有支持门户的登录权限",而非原先显示的"密码错误"。.
关于作者
作者 Diogo Gouveia
"在英国完成学业后,我加入了 Connecting Software 的营销团队,负责创建有关软件集成和其他各种 IT 主题的内容。如果您有任何意见或建议,请联系我"。
