介绍
3CX 提供与 MongoDB 数据库的集成。因为该数据库的结构和其他数据库不同,所以我们无法提供一个通用模板以供使用。我们也无法为您提供适用的 JSON 模板,因为我们也不知道每个用户的 JSON 该是怎么样的。所以我们将提供一个简单的模板,用户可以经过调整以达到他们的要求。
该示范模板对接 MongoDB 数据库可以实现以下功能:
- 联系人同步 – 来自外部号码的呼叫会触发数据库中的联系人查找,并将联系人信息将添加到3CX联系人中。这样,当您接到电话时,来电者姓名会自动显示在您的电话显示屏中。
- 呼叫弹出窗口 – 使用 3CX Web 客户端时,当您收到呼叫时,客户记录会自动显示给您。
- 呼叫日志 – 将呼叫记录在数据库中。
- 将收到的未知呼叫自动创建新联系人并存入数据库。
该模板在服务端完成,非常方便直接。
接下来我们将介绍如何一步步在 3CX 服务端完成与 MongoDB 的数据库集成。
准备模板
第一步 – 下载模板
可以在 3CX 管理控制台 – 设置 – CRM 集成 – 服务端标签 – Database MongoDB – 显示模板 中下载模板文件。
该模板的适用场景是使用一个 MongoDB 数据库,包含了两个集合。一个集合用来存联系人,一个集合用来存联系人的通话。数据库和集合的名称已经在模板中定义了。Contacts 对象具有以下结构:
{
_id: "5b99567d1c9d440000d34328",
Name: {
FirstName: "John"
LastName: "Doe"
},
Phones: {
Work: "1155551001",
Mobile: "1155551002"
},
Email: "johndoe@example.com"
}
联系人呼叫集合中的对象具有以下结构:
{
_id: "5bf41e571be56017b4a92727",
Subject: "3CX PhoneSystem Call",
Number: "123456",
CallStartTime: "2018-11-20T16:40:50Z",
CallEndTime: "2018-11-20T16:45:50Z",
CallDuration: "05:00",
CallType: "Inbound",
Description: "11/20/2018 4:40 PM: Answered incoming call from 123456 John Smith "
}
打开 MongoDB 的 XML 模板文件并记录下列信息:
- 参数:在 3CX 显示并允许在模板里配置的参数。
- 场景:这里我们定义 3CX 如何与 MongoDB 交互。此示例模板中有 3 个场景:
- 查找联系人
- 记录 Call Journaling
- 创建联系人
第二步 – 编辑模板 – 查找联系人
XML 模板的第一个场景就是从 MongoDB 检索特定联系人的详细信息。下面是样例:
<Scenario Type="NoSQLDatabase"> <Command DatabaseType="MongoDB" ConnectionString="[ConnectionString]" Database="[Database]" Collection="[ContactsCollection]" CommandType="Filter" Command="{ $or: {{ { "Phones.Work": { $regex: "[Number]amp;quot; } }, { "Phones.Mobile": { $regex: "[Number]
amp;quot; } } }} }" />
<Rules>
<Rule Type="Any" Ethalon="">_id</Rule>
</Rules>
<Variables>
<Variable Name="ContactID">_id.$oid</Variable>
<Variable Name="FirstName">Name.FirstName</Variable>
<Variable Name="LastName">Name.LastName</Variable>
<Variable Name="Email">Email</Variable>
<Variable Name="WorkPhone">Phones.Work</Variable>
<Variable Name="Mobile">Phones.Mobile</Variable>
</Variables>
<Outputs AllowEmpty="false">
<Output Type="ContactUrl" Value="http://example.com/[ContactID]" />
<Output Type="ContactID" Value="[ContactID]"/>
<Output Type="FirstName" Value="[FirstName]" />
<Output Type="LastName" Value="[LastName]" />
<Output Type="Email" Value="[Email]" />
<Output Type="PhoneBusiness" Value="[WorkPhone]" />
<Output Type="PhoneMobile" Value="[Mobile]" />
</Outputs>
</Scenario>
要编辑这个样例,请遵循以下规则:
- 在 Command 元素中,需要编辑:
- Command 属性:这是一个过滤表达式。在示例中,我们过滤了属性 Phone 或属性 Mobile 以调用者编号结束的对象。您需要创建一个过滤表达式,从 contacts 集合中返回正确的对象。
- Rules 元素标识每条记录,我们可以通过标准 _id 字段识别它们,因此不需要编辑它。
- 在 Variables 元素中,我们获取返回的每个对象的值。您需要编辑路径“Name.FirstName”,“Name.LastName”等。根据你从MongoDB返回的对象的结构。此外,如果您需要返回更多字段(其他电话,公司名称等),您可以根据需要添加变量。
- 最后,Outputs 元素包含场景返回的内容,即联系人查找结果。我们需要返回一个强制的 ContactUrl 字段,该字段用于在浏览器中打开联系人记录,还可以唯一地标识联系人记录和任何其他输出字段。当我们设置输出值时,我们可以使用在括号之间的上一步中创建的变量,例如[FirstName]。有效的输出字段是:
- ContaactUrl
- FirstName
- LastName
- CompanyName
- PhoneMobile
- PhoneMobile2
- PhoneHome
- PhoneHome2
- PhoneBusiness
- PhoneBusiness2
- PhoneOther
- FaxBusiness
- FaxHome
- Pager
- PhotoUrl
第三步 – 编辑模板 – Call Journaling
XML 模板中的第二个场景用于在 MongoDB 中创建调用记录,并具有特殊 ID“ReportCall”。呼叫结束时执行此方案。这是提供的示例场景:
要编辑此方案,请执行以下操作:
- 在 Command 元素中,您需要编辑:
- CommandData 子元素描述了3CX应如何创建要在 MongoDB 插入的 JSON 对象。在我们的示例中,要插入的对象只有 string 子属性,但您也可以创建子对象或数组。
- 此方案不会向3CX返回任何信息。
第四步 – 编辑模板 – 创建联系人
当无法找到呼叫者号码时,XML 模板中的第三个场景用于在 MongoDB 中创建联系人记录,并具有特殊ID“CreateContactRecord”。这是提供的示例场景:
<Scenario Id="ReportCall" Type="NoSQLDatabase"> <Command SkipIf="[ReportCallEnabled]!=True" DatabaseType="MongoDB" ConnectionString="[ConnectionString]" Database="[Database]" Collection="[CallsCollection]" CommandType="Insert"> <CommandData> <Value Key="Subject" Passes="2">[[Subject]]</Value> <Value Key="Number">[Number]</Value> <Value Key="CallStartTime" Type="String">[[CallStartTimeUTC].ToString("yyyy-MM-ddTHH:mm:ssZ")]</Value> <Value Key="CallEndTime" Type="String">[[CallEndTimeUTC].ToString("yyyy-MM-ddTHH:mm:ssZ")]</Value> <Value Key="CallDuration">[Duration]</Value> <Value Key="CallType" Type="String">[CallType]</Value> <Value Key="Description" Passes="2" If="[CallType]==Inbound">[[InboundCallText]]</Value> <Value Key="Description" Passes="2" If="[CallType]==Missed">[[MissedCallText]]</Value> <Value Key="Description" Passes="2" If="[CallType]==Outbound">[[OutboundCallText]]</Value> <Value Key="Description" Passes="2" If="[CallType]==Notanswered">[[NotAnweredOutboundCallText]]</Value> </CommandData> </Command> </Scenario>
要编辑此方案,请执行以下操作:
- 在 Command 元素中,您需要编辑:
- CommandData 子元素描述了 3CX 应如何创建要在 MongoDB 中插入的 JSON 对象。在我们的示例中,要插入的对象具有嵌套的子属性(名称和电话)。根据需要插入的对象的结构进行编辑。
- 以与联系人查找方案相同的方式,我们使用 Rules 元素来标识记录(这可以保持不变,因此我们获取刚刚插入的记录的 ID),Variables 元素用于从记录中获取信息,以及 Outputs 元素需要返回与联系人查找方案相同的信息。
第五步 更新 3CX 模板
根据 MongoDB 集合和对象结构完成模板编辑后,需要将其上传到3CX。去做这个:
- 登录 3CX 管理控制台 – 设置 – CRM 集成 – 服务端。
- 点击添加,将编辑后的 XML 文件上传上去。接着就可以配置了。
3CX 配置
通用设置
- 登录 3CX 管理控制台 – 设置 – CRM 集成 – 服务端集成。
- 在下拉列表中选择 MongoDB。
- 输入连接字符串。你可以从连接 MongoDB 的工具中获取。
- 定义数据库名字。
- 输入 Contacts Collection,它是包含联系人数据的集合的名称。
- 输入 Calls Collection,它是包含呼叫数据的集合的名称。
Call Journaling
- 如果想记录与外部的通话到 MongoDB 中,请勾选 Enable Call Journaling 选项,并配置下列选项:呼叫项目,不同的呼叫类型(已接听,未接,已接听的外线,未接听的外线)。
- 请注意,您可以在上面的字段中使用变量。变量在 [] 之间指定,例如外部数字指定为 [Number]。可用的变量是:
- CallType – 呼叫类型,可以是”Inbound”, “Outbound”, “Missed” 或者 “Unanswered”。
- Number – 外部联系号码(已拨打的外形号码或者呼入的主叫号码)。
- Agent – 处理这个通话的坐席分机号码。
- Duration – 通话持续时间。以 “hh:mm:ss” 形式显示。
- DurationTimeSpan – TimeSpan 对象的通话持续时间,可以根据客户需求格式化。
- DateTime – 使用3CX服务器中的本地格式在本地时区中进行呼叫的开始日期和时间。
- CallStartTimeLocal – 以本地时间记录通话开始的日期和时间,是一个 DateTime 对象,可以根据用户格式化。
- CallStartTimeUTC – 以 UTC 时间记录通话开始的日期和时间,是一个 DateTime 对象,可以根据用户格式化。
- CallEndTimeLocal – 以本地时间记录通话结束的日期和时间,是一个 DateTime 对象,可以根据用户格式化。
- CallEndTimeUTC – 以 UTC 时间记录通话结束的日期和时间,是一个 DateTime 对象,可以根据用户格式化。
创建联系人
- 如果要在找不到呼叫方号码时在 MongoDB 中创建新联系人,请选中“启用联系人创建”复选框,然后配置“新建联系人姓名”和“新联系人姓氏”字段。
- 请注意,您可以在上面的字段中使用变量。变量在[]之间指定,例如外部数字指定为[Number]。可用的变量是:
- Number – 外部联系号码(拨出呼叫的号码或呼入呼叫的呼叫者号码)。