集成模板 XML 说明
Yeastar P 系列软件版 允许你创建 CRM / Helpdesk 集成模板,在模板中定义必要的设置,包括特定的 API 端点、数据字段和集成所需的功能场景。本文提供了 XML 模板中设置元素的详细说明。
模板约定
模板遵循 XML 1.1 标准规范。本节描述了模板的语法和约定。
- 变量
-
模板支持使用变量来处理动态数据。当模板执行时,模板中引用的变量将被替换为它们各自的值。
- 函数
- 集成模板支持以下函数,可以与变量一起使用,从而动态地操作或格式化变量值。
函数 说明 TimeFormat 该函数用于自定义时间戳的格式。 格式:{{ TimeFormat Timestamp_variable "format_string" "Whether_to_convert_to_UTC_time" }}
示例:
{{ TimeFormat .StartTimeUnix "yyyy-MM-ddTHH:mm:ss.000Zz" "1" }}
假设 {{.StartTimeUnix}} 的值为
1672531199
,则调用函数后最终输出为2023-01-01T00:59:59.000Z
。ToMillis 该函数用于将秒时间戳转换为毫秒时间戳。 格式: {{ ToMillis Timestamp_variable}}
示例:
{{ ToMillis .StartTimeUnix }}
假设 {{.StartTimeUnix}} 的值为
1672531199
,,则调用函数后最终输出为1672531199000
。Capitalize 该函数用于将字符串的首字母大写。 格式:{{ Capitalize variable_string}}
示例:
{{ Capitalize .variable_string }}
假设 {{.variable_string}} 的值为
hello world
,则调用函数后最终输出为Hello world
.UrlEncode 该函数用于对字符串进行 URL 编码。 格式:{{ UrlEncode .variable }}
示例:
{{ UrlEncode .variable}}
假设 {{.variable}} 的值为
hello world!
,则调用函数后最终输出为hello%20world%21
. - 元素
- 模板提供以下主要元素,以定义集成交互,确保模板能够与第三方系统无缝连接并根据集成要求处理数据。
模板属性
<Information>
元素提供模板的属性信息,包括基本模板信息和配置概览,具体属性如下:
属性 | 说明 |
---|---|
Provider | 模板类型,固定值为 crm 或
helpdesk 。 |
Name | 模板名称。 |
Key | 模板的唯一标识符。 |
Logo | Logo 文件名称。 |
Remark | 模板的描述或备注。 |
Version | 模板版本号,例如:1.0.0 。 |
AuthType | 集成使用的身份验证方法。
|
MaxConcurrentRequest | 允许向 CRM/Helpdesk 发送的最大并发 HTTP 请求数量。 |
UserAssociation | 是否启用用户关联功能。
|
CallJournal | 是否启用通话日志同步功能。
|
CreateNewContact | 是否启用新建联系人功能。
|
CreateNewTicket | 是否启用自动创建新工单功能。
|
身份验证场景
此场景定义了 CRM/Helpdesk 系统使用的身份验证方法。该场景的结构及其关键元素如下所示:
<Scenario Id="AuthMethod" Type="AUTH">
<Presets></Presets>
<Parameters>
<Parameter Name="AuthMethod" Value="oauth2"></Parameter>
<Parameter Name="AuthEndPoint" Value="https://api.example.com/oauth/v2/auth?client_id={{.client_id}}"></Parameter>
<Parameter Name="TokenEndPoint" Value="https://api.example.com/oauth/v2/token?client_id={{.client_id}}&client_secret={{.client_secret}}"></Parameter>
<Parameter Name="AdditionalQueryString"></Parameter>
<Parameter Name="Scope" Value="contacts.read,contacts.write,calls.read,calls.write,user.read,user.write"></Parameter>
<Parameter Name="CredentialType"></Parameter>
<Parameter Name="Base64EncodedCredential"></Parameter>
<Parameter Father="CustomFieldList" Name="client_id" Editor="password" Title="Client ID"></Parameter>
<Parameter Father="CustomFieldList" Name="client_secret" Editor="password" Title="Client Secret"></Parameter>
</Parameters>
<Requests></Requests>
</Scenario>
下面是对场景中具体元素的详细解释。
- Scenario 元素
<Scenario>
元素具有以下属性:- Parameter 元素
-
属性 说明 Name 身份验证参数 的名称。 Value 身份验证参数 的值。 Father 父参数的名称 (应固定为 CustomFieldList
),用于组织自定义输入字段,允许用户在配置 UI 中展示的自定义输入字段中输入相关参数值。注: 自定义输入字段中捕获的变量可供模板中的所有后续请求使用。Name
:自定义输入字段的变量名称,可用于在模板中引用变量。Editor
:自定义输入字段的类型。有效值:
string
:标准输入框,用户可以输入普通文本。password
:专用的输入框,用于敏感信息,输入内容会被隐藏。list
:可选列表,允许用户从预定义的选项中选择。
Title
:自定义输入字段的标题。Value
:预定义的选项列表。
用户关联场景
此场景用于从 CRM/Helpdesk 系统中搜索并获取用户列表。该场景的结构及其关键元素如下所示:
<Scenario Id="UserAssociation" Type="REST">
<Parameters></Parameters>
<Requests>
<Request Name="UserAssociation" Method="GET" ResponseType="application/json" RequestEncoding="" URLFormat="https://www.api.example.com/v1/users?type=ActiveUsers">
<Parameters></Parameters>
<Outputs>
<Output Name="UserUniqueId" Path="users.#.id" Type=""></Output>
<Output Name="FirstName" Path="users.#.First_Name" Type=""></Output>
<Output Name="LastName" Path="users.#.Last_Name" Type=""></Output>
<Output Name="Email" Path="users.#.Email" Type=""></Output>
</Outputs>
</Request>
</Requests>
</Scenario>
以下是该场景中具体元素的详细说明。
- Scenario 元素
<Scenario>
元素具有以下属性:- Request 元素
<Request>
元素具有以下属性:
- Output 元素
<Output>
元素具有以下属性:
自动联系人同步场景
此场景用于在 CRM/Helpdesk 系统中搜索联系人,且返回的信息可用于实现 CRM 联系人搜索、自动联系人同步和来电弹屏。该场景的结构及其关键元素如下所示:
<Scenario Id="SyncContactAuto" Type="REST">
<Presets></Presets>
<Parameters>
<Parameter Name="ContactUrlType" Value="retrieve_from_contact"></Parameter>
<Parameter Name="URLFormat"></Parameter>
<Parameter Name="ContactFieldForUri" Value="data.#.contactUrl"></Parameter>
<Parameter Name="ContactsIdEnable" Value="1"></Parameter>
<Parameter Name="FirstNameEnable" Value="1"></Parameter>
<Parameter Name="BusinessNumberEnable" Value="1"></Parameter>
<Parameter Name="CustomValueEnable" Value="0"></Parameter>
</Parameters>
<Requests>
<Request Name="Contacts" Method="GET" ResponseType="application/json" RequestEncoding="" URLFormat="https://www.api.example.com/v1/Contacts/search?criteria=((Phone:equals:{{.Phone}})or(Home_Phone:equals:{{.Phone}})or(Mobile:equals:{{.Phone}})or(Asst_Phone:equals:{{.Phone}}))">
<Parameters></Parameters>
<Outputs>
<Output Name="ContactsId" Path="data.#.id" Type=""></Output>
<Output Name="FirstName" Path="data.#.First_Name" Type=""></Output>
<Output Name="BusinessNumber" Path="data.#.Phone" Type=""></Output>
...
<Output Name="CustomValue" Path="data.#.Owner" Type=""></Output>
</Outputs>
</Request>
</Requests>
</Scenario>
以下是该场景中具体元素的详细说明。
- Scenario 元素
<Scenario>
元素具有以下属性::- Parameter 元素
<Parameter>
元素具有以下属性:- Request 元素
<Request>
元素具有以下属性:
- Output 元素
<Output>
元素具有以下属性:
自动联系人创建场景
此场景用于在来电者的号码与现有联系人不匹配时,在 CRM/Helpdesk 系统中创建一个新的联系人。该场景的结构及其关键元素如下所示:
<Scenario Id="CreateNewContact" Type="REST">
<Parameters></Parameters>
<Requests>
<Request Name="Contacts" Method="POST" ResponseType="application/json" RequestEncoding="" URLFormat="https://www.api.example.com/v1/Contacts">
<Parameters>
<Parameter Name="Data" Type="Body" Value="{"data": [{"Last_Name":"{{.LastName}}","First_Name":"{{.FirstName}}","Phone":"{{.BusinessNumber}}";}]}"></Parameter>
</Parameters>
<Outputs></Outputs>
</Request>
</Requests>
</Scenario>
以下是场景中各个元素的详细说明:
- Scenario 元素
<Scenario>
元素具有以下属性:- Request 元素
<Request>
元素具有以下属性:
- Parameter 元素
<Parameter>
元素嵌套在<Request>
元素中,定义了请求体中包含的参数。属性 说明 Name 参数的名称,应固定为 Data
。Type 参数的类型,应固定为 Body
。Value 定义了通过请求体传递的必需参数,包含在 data
结构中。参数值可以从 PBX 系统中预定义的变量中获取。注: 格式应遵循 XML 参数标准。例如,如果需要换行符,必须使用转义字符

来表示换行符。
自动工单创建场景 (仅适用于 Helpdesk 系统)
此场景用于在 Helpdesk 系统中创建一个新的工单。该场景的结构及其关键元素如下所示:
<Scenario Id="CreateNewTicket" Type="REST" >
<Presets></Presets>
<Parameters>
<Parameter Name="EnableSubject" Value="1"></Parameter>
<Parameter Name="Subject" Value="{{.Communication_Type}} {{.Call_Status}} - from {{.Call_From}} to {{.Call_To}}"></Parameter>
<Parameter Name="EnableDescription" Value="1"></Parameter>
<Parameter Name="Description" Value="{{.Time}} {{.Communication_Type}} {{.Call_Status}} - from {{.Call_From}} to {{.Call_To}} {{.Talk_Duration}}"></Parameter>
</Parameters>
<Requests>
<Request Name="CreateNewTicket" Method="POST" Weight="0" ResponseType="application/json" RequestEncoding="" URLFormat="https://{{.domain}}/api/v1/tickets">
<Parameters>
<Parameter Name="Data" Type="Body" Value="{"subject":"{{.Subject}}","contactId":"{{.ContactId}}","phone":"{{.ContactNumber}}","description":"{{.Description}}";}"></Parameter>
</Parameters>
<Outputs></Outputs>
</Request>
</Requests>
</Scenario>
以下是场景中各个元素的详细说明:
- Scenario 元素
<Scenario>
元素具有以下属性:- Parameter 元素
-
属性 说明 Name 场景中使用的 配置项 名称。 Value 配置项的值。 配置项设置 说明 EnableSubject 是否允许用户自定义工单的主题。 有效值:0
:禁用。1
:启用。
Subject 指定主题的默认值。 注: 默认值为{{.Communication_Type}} {{.Call_Status}} - from {{.Call_From}} to {{.Call_To}}
。关于更多支持的变量,请参见 参数变量列表。EnableDescription 是否允许用户自定义工单的描述。 有效值:0
:禁用。1
:启用。
Description 指定描述的默认值。 注: 默认值为{{.Time}} {{.Communication_Type}} {{.Call_Status}} - from {{.Call_From}} to {{.Call_To}} {{.Talk_Duration}}
。关于更多支持的变量,请参见 参数变量列表。 - Request 元素
<Request>
元素具有以下属性:
- Parameter 元素
<Parameter>
元素嵌套在<Request>
元素中,定义了请求体中包含的参数。属性 说明 Name 参数的名称,应固定为 Data
。Type 参数的类型,应固定为 Body
。Value 定义了通过请求体传递的必需参数。参数值可以从 PBX 系统中预定义的变量中获取。 注: 格式应遵循 XML 参数标准。例如,如果需要换行符,必须使用转义字符

来表示换行符。
通话记录同步场景
该场景用于将绑定用户的通话活动同步到 CRM / Helpdesk 中的场景。以下是该场景的结构及其关键元素的详细说明。
<Scenario Id="CallJournal" Type="REST">
<Presets></Presets>
<Parameters>
<Parameter Name="EnableSubject" Value="1"></Parameter>
<Parameter Name="Subject" Value="Extension Call"></Parameter>
<Parameter Name="EnableDescription" Value="1"></Parameter>
<Parameter Name="Description" Value="Call: {{.Time}} {{.Call_Log_Status}} from {{.Call_From}} to {{.Call_To}} {{.Talk_Duration}}"></Parameter>
<Parameter Name="EnablePlayCallRecording" Value="1"></Parameter>
<Parameter Name="PlayCallRecording" Value="0"></Parameter>
</Parameters>
<Requests>
<Request Name="CallJournal" Method="POST" Weight="0" ResponseType="application/json" RequestEncoding="" URLFormat="https://www.api.example.com/crm/v2/Calls">
<Parameters>
<Parameter Name="Data" Type="Body" Value="{"data"[{"{{.Owner}}{{.WhoModule}}": {"Description":"{{.Description}}","Voice_Recording__s":"{{.RecordPath}}","Call_Start_Time":"{{TimeFormat .StartTimeUnix "yyyy-MM-ddTHH:mm:ss-z" "1"}}","Subject&":"{{.Subject}}","Call_Type": "Inbound","Call_Result": "{{.Call_Log_Status}}","Call_Duration": "{{.Talk_Duration_Sec}}"}}]}"></Parameter>
</Parameters>
<Outputs></Outputs>
</Request>
</Requests>
</Scenario>
以下是场景中各个元素的详细说明:
- Scenario 元素
<Scenario>
元素具有以下属性:- Parameter 元素
-
属性 说明 Name 场景中 配置项 的名称。 Value 配置项的值。 配置项设置 说明 EnableSubject 是否允许用户自定义通话记录的主题。 有效值:0
:禁用。1
:启用。
Subject 指定默认的主题。 EnableDescription 是否允许用户自定义通话记录的描述。 有效值:0
:禁用。1
:启用。
Description 指定默认的描述。 注: 默认值为{{.Time}} {{.Communication_Type}} {{.Call_Status}} - from {{.Call_From}} to {{.Call_To}} {{.Talk_Duration}}
。更多支持的变量,请参见 参数变量列表。EnablePlayCallRecording 是否允许用户配置在CRM中播放通话录音的选项。 有效值:0
:禁用。1
:启用。
PlayCallRecording 指定通话录音播放选项的默认状态。 有效值:0
:禁用。1
:启用。
- Request 请求
<Request>
元素具有以下属性:
- Parameter 元素
- 内嵌在
<Request>
中的<Parameter>
元素用于定义请求体中包含的参数。属性 说明 Name 参数的名称,应固定为 Data
。Type 参数的类型,应固定为 Body
。Value 定义请求体中传递的所需参数,参数值可以从 PBX 系统中预定义的 变量 中获取。 注: 格式应遵循 XML 参数标准。例如,如果需要换行符,必须使用转义字符

来表示换行符。
扩展配置
- 设置自定义请求头
- 如果需要自定义请求头,你可以添加
Parameter
元素,并将类型 (Type) 设置为Header
,这将在请求体中添加 Header。 - 识别令牌错误
- 在
AuthMethod
场景中,你可以添加一个参数TokenInvalid
来帮助识别请求中的问题是否与令牌相关。 - 获取额外变量
-
若系统提供的变量不满足你的需求,或需在集成过程中全局使用某些通用信息,则可以定义一个
GetGlobalInfo
场景,并设置相关请求来获取所需的变量。在对接完成或 PBX 启动时,系统将向 CRM / Helpdesk 系统发送一次
GetGlobalInfo
场景中设置的请求,并将获取的变量存储在Output
元素中 ( 此处的Output
元素名称直接对应变量名)。这些变量可以在除身份验证场景外的其他场景中引用。如下示例所示,
GetGlobalInfo
场景包含了获取部门 ID 和门户名称的请求。<Scenario Id="GetGlobalInfo" Type="REST"> <Presets /> <Parameters /> <Requests> <Request Name="GetDepartments" Method="GET" ResponseType="application/json" URLFormat="https://desk.example.{{.domain_suffix}}/api/v1/departments"> <Parameters /> <Outputs> <Output Name="DepartmentId" Path="data.#.id" /> </Outputs> </Request> <Request Name="GetOrganizations" Method="GET" ResponseType="application/json" URLFormat="https://desk.example.{{.domain_suffix}}/api/v1/organizations"> <Parameters /> <Outputs> <Output Name="PortalName" Path="data.#(portalName!="").portalName" /> </Outputs> </Request> </Requests> </Scenario>
- 补充联系人查询信息
- 如果初始的联系人信息查询未返回所需的所有信息,可能需要通过返回的联系人 ID 或其他联系人信息进行进一步查询。
- 获取 TicketId 以执行后续操作
- 在 Helpdesk 集成模板中,你可以通过额外设置来获取工单 ID (TicketId) 以用于后续操作,如更新工单或在通话记录中使用该变量。