启动带有用户活动事件的ZIS流
的用户活动事件事件API来启动一个ZIS流。您可以使用Events API来跟踪第三方系统中发生的用户事件。例如,您可以使用API来跟踪客户的购买或网站访问。
免责声明:亚博Zendesk提供本文仅用于指导目的。示例集成并不适用于生产环境。
你需要什么?
要完成本教程,您需要以下内容:
熟悉ZIS。在开始之前,完成构建您的第一个ZIS集成教程。
已注册的ZIS集成。您可以使用在中创建的集成构建您的第一个ZIS集成或者注册一个新的。要注册新的集成,请参见注册集成名称。
用于集成的ZIS OAuth令牌。看到获取ZIS OAuth令牌。
一个免费的外部目标URLRequestBin
创建集成
您创建的ZIS集成为名为Acme的在线商店路由退款请求。商店使用Events API作为用户活动事件来跟踪退款请求。当积分检测到a创建的用户活动事件时,它检查该事件是否是退款请求。如果不是,则集成不执行任何操作。
如果事件是退款请求,集成将检查退款金额。如果金额为100美元或更少,则集成将事件数据发布到外部目标。此目标表示用于启动退款的外部API。
如果退款金额超过100美元,则集成将获得相关客户的个人资料。然后集成检查客户的商店会员级别。如果客户拥有高级会员资格,则集成开始退款。否则,集成将为退款请求创建一个Zendesk票证。亚博
注意:ZIS可以多次重试一个ZIS流。在生产环境中,确保外部退款API支持幂等性。幂等性允许您重试请求,而无需多次执行相同的操作。例如,如果启动退款的API请求由于网络错误而失败,ZIS将重试该请求。幂等性保证退款只执行一次,而不考虑相关API请求的数量。
要创建集成
创建一个名为“zendesk”的OAuth连接。亚博您将使用该连接对集成的ZIS流中的Zendesk API请求进行身份验证。亚博
在典型的设置中,管理员使用私有Zendesk应用程序创建OAuth连接。亚博在本教程中,您将创建没有应用程序的“zendesk”OAuth连接。亚博
要创建连接,请按照中的步骤操作为Zendesk创建OAuth连接亚博。然后回到这里。
创建一个JSON文件my_zis_bundle.json。
将以下包骨架添加到my_zis_bundle.json:
{
“名称”:“自定义活动事件的示例ZIS集成”,
“描述”:“批准和发送退款请求”,
“zis_template_version”:“2019-10-14”,
“亚博电脑端资源”:{
“GetUserProfile”:{
“_placeholder_”:"ZIS自定义动作定义在这里"
},
“Create亚博ZendeskTicket”:{
“_placeholder_”:"ZIS自定义动作定义在这里"
},
“InitiateRefund”:{
“_placeholder_”:"ZIS自定义动作定义在这里"
},
“RefundRequestFlow”:{
“_placeholder_”:“ZIS流到这里”
},
“RefundRequestJobSpec”:{
“_placeholder_”:“ZIS的工作说明书在这里”
}
}
}
在接下来的步骤中,您将定义自定义操作、ZIS流和作业规范。
在my_zis_bundle.json,替换
GetUserProfile
具有以下自定义操作定义的占位符。“GetUserProfile”:{
“类型”:“子::行动::Http”,
“属性”:{
“名称”:“GetUserProfile”,
“定义”:{
“方法”:“获得”,
美元”的道路。”:“/ api / v2 / user_profiles / {{$ .profile_id}}”,
“connectionName”:“亚博zendesk”
}
}
},
当被调用时,该操作向Zendesk Profiles API发送一个POST请求亚博通过配置文件id获取配置文件端点。
取代
Create亚博ZendeskTicket
具有以下自定义操作定义的占位符。“Create亚博ZendeskTicket”:{
“类型”:“子::行动::Http”,
“属性”:{
“名称”:“Create亚博ZendeskTicket”,
“定义”:{
“方法”:“职位”,
美元”的道路。”:“/ api / v2 / tickets.json”,
“connectionName”:“亚博zendesk”,
“头”:(
{
“关键”:“内容类型”,
“价值”:“application / json”
}
],
“requestBody”:{
“票”:{
“美元的话题。”:“.subject美元”,
“评论”:{
“身体。”:“.comment_body美元”
},
“requester_id美元。”:“.requester_id美元”
}
}
}
}
},
当被调用时,该操作向Zendesk支持API发送一个POST请求亚博创建机票端点。请求正文包含票据的主题、正文文本和请求者id。
取代
InitiateRefund
具有以下自定义操作定义的占位符。在定义中,将“EXTERNAL_TARGET_URL”替换为RequestBin端点URL。“InitiateRefund”:{
“类型”:“子::行动::Http”,
“属性”:{
“名称”:“InitiateRefund”,
“定义”:{
“方法”:“职位”,
“url”:“EXTERNAL_TARGET_URL”,
“requestBody”:{
“order_id美元。”:“.order_id美元”,
“refund_amount美元。”:“.refund_amount美元”,
“user_profile_id美元。”:“.profile_id美元”
}
}
}
},
当调用时,自定义操作向外部目标URL发送POST请求。请求主体包含商店订单id、退款金额和客户的配置文件id。
取代
RefundRequestFlow
占位符,具有以下ZIS流定义。在定义中,将“INTEGRATION”替换为您的集成键。流从筛选User Activity Created事件的Choice状态开始。流中的大多数状态仅为带有
user_activity.type
“refund_request”。“RefundRequestFlow”:{
“类型”:“子:流”,
“属性”:{
“名称”:“RefundRequestFlow”,
“定义”:{
“StartAt”:“CheckEventSourceAndType”,
“州”:{
“CheckEventSourceAndType”:{
“类型”:“选择”,
“选择”:(
{
“变量”:“.input.activity_event.user_activity.type美元”,
“StringEquals”:“refund_request”,
“下一个”:“ConvertRefundAmountToNum”
}
],
“默认”:“完成”
},
“ConvertRefundAmountToNum”:{
“类型”:“行动”,
“ActionName”:“子:常见的变换:金桥”,
“参数”:{
“expr”:“.activity_event.user_activity.properties。退款金额|号码,
“数据。美元”:“.input美元”
},
“ResultPath”:“.refund_amount_num美元”,
“下一个”:“CheckRefundAmount”
},
“CheckRefundAmount”:{
“类型”:“选择”,
“选择”:(
{
“变量”:“.refund_amount_num美元”,
“NumericLessThanEquals”:One hundred.,
“下一个”:“InitiateRefund”
}
],
“默认”:“GetUserProfile”
},
“GetUserProfile”:{
“类型”:“行动”,
“ActionName”:“子:集成:行动:GetUserProfile”,
“参数”:{
“profile_id美元。”:“.input.activity_event.user_activity.profile_id美元”
},
“ResultPath”:“.customer美元”,
“下一个”:“CheckForPremiumMembership”
},
“CheckForPremiumMembership”:{
“类型”:“选择”,
“选择”:(
{
“变量”:“.customer.profile.attributes.membership美元”,
“StringEquals”:“溢价”,
“下一个”:“InitiateRefund”
}
],
“默认”:“Create亚博ZendeskTicket”
},
“Create亚博ZendeskTicket”:{
“类型”:“行动”,
“ActionName”:“子:集成:行动:CreateZendeskTicket”亚博,
“参数”:{
“美元的话题。”:"订单{{$.input.activity_event.user_activity.properties.order_id}}的退款请求",
“comment_body美元。”:“嗨,\n我请求${{$.input.activity_event.user_activity.properties。refund_amount}}refund for order {{$.input.activity_event.user_activity.properties.order_id}}.",
“requester_id美元。”:“.input.activity_event.user_activity.user_id美元”
},
“下一个”:“完成”
},
“InitiateRefund”:{
“类型”:“行动”,
“ActionName”:“子:集成:行动:InitiateRefund”,
“参数”:{
“order_id美元。”:“.input.activity_event.user_activity.properties.order_id美元”,
“refund_amount美元。”:“.input.activity_event.user_activity.properties.refund_amount美元”,
“profile_id美元。”:“.input.activity_event.user_activity.profile_id美元”
},
“下一个”:“完成”
},
“完成”:{
“类型”:“成功”
}
}
}
}
},
取代
RefundRequestJobSpec
具有以下职位说明定义的占位符。在定义中,将“INTEGRATION”替换为您的集成键。“RefundRequestJobSpec”:{
“类型”:“子::JobSpec”,
“属性”:{
“名称”:“RefundRequestJobSpec”,
“event_source”:“阳光”,
“event_type”:”活动。UserActivityCreated”,
“flow_name”:“子:集成:流:RefundRequestFlow”
}
}
作业规范告诉ZIS在检测到User Activity Created事件时运行ZIS流。
保存my_zis_bundle.json。文件现在看起来应该是这样的:
{
“名称”:“自定义活动事件的示例ZIS集成”,
“描述”:“批准和发送退款请求”,
“zis_template_version”:“2019-10-14”,
“亚博电脑端资源”:{
“GetUserProfile”:{
“类型”:“子::行动::Http”,
“属性”:{
“名称”:“GetUserProfile”,
“定义”:{
“方法”:“获得”,
美元”的道路。”:“/ api / v2 / user_profiles / {{$ .profile_id}}”,
“connectionName”:“亚博zendesk”
}
}
},
“Create亚博ZendeskTicket”:{
“类型”:“子::行动::Http”,
“属性”:{
“名称”:“Create亚博ZendeskTicket”,
“定义”:{
“方法”:“职位”,
美元”的道路。”:“/ api / v2 / tickets.json”,
“connectionName”:“亚博zendesk”,
“头”:(
{
“关键”:“内容类型”,
“价值”:“application / json”
}
],
“requestBody”:{
“票”:{
“美元的话题。”:“.subject美元”,
“评论”:{
“身体。”:“.comment_body美元”
},
“requester_id美元。”:“.requester_id美元”
}
}
}
}
},
“InitiateRefund”:{
“类型”:“子::行动::Http”,
“属性”:{
“名称”:“InitiateRefund”,
“定义”:{
“方法”:“职位”,
“url”:“EXTERNAL_TARGET_URL”,
“requestBody”:{
“order_id美元。”:“.order_id美元”,
“refund_amount美元。”:“.refund_amount美元”,
“user_profile_id美元。”:“.profile_id美元”
}
}
}
},
“RefundRequestFlow”:{
“类型”:“子:流”,
“属性”:{
“名称”:“RefundRequestFlow”,
“定义”:{
“StartAt”:“CheckEventSourceAndType”,
“州”:{
“CheckEventSourceAndType”:{
“类型”:“选择”,
“选择”:(
{
“变量”:“.input.activity_event.user_activity.type美元”,
“StringEquals”:“refund_request”,
“下一个”:“ConvertRefundAmountToNum”
}
],
“默认”:“完成”
},
“ConvertRefundAmountToNum”:{
“类型”:“行动”,
“ActionName”:“子:常见的变换:金桥”,
“参数”:{
“expr”:“.activity_event.user_activity.properties。退款金额|号码,
“数据。美元”:“.input美元”
},
“ResultPath”:“.refund_amount_num美元”,
“下一个”:“CheckRefundAmount”
},
“CheckRefundAmount”:{
“类型”:“选择”,
“选择”:(
{
“变量”:“.refund_amount_num美元”,
“NumericLessThanEquals”:One hundred.,
“下一个”:“InitiateRefund”
}
],
“默认”:“GetUserProfile”
},
“GetUserProfile”:{
“类型”:“行动”,
“ActionName”:“子:集成:行动:GetUserProfile”,
“参数”:{
“profile_id美元。”:“.input.activity_event.user_activity.profile_id美元”
},
“ResultPath”:“.customer美元”,
“下一个”:“CheckForPremiumMembership”
},
“CheckForPremiumMembership”:{
“类型”:“选择”,
“选择”:(
{
“变量”:“.customer.profile.attributes.membership美元”,
“StringEquals”:“溢价”,
“下一个”:“InitiateRefund”
}
],
“默认”:“Create亚博ZendeskTicket”
},
“Create亚博ZendeskTicket”:{
“类型”:“行动”,
“ActionName”:“子:集成:行动:CreateZendeskTicket”亚博,
“参数”:{
“美元的话题。”:"订单{{$.input.activity_event.user_activity.properties.order_id}}的退款请求",
“comment_body美元。”:“嗨,\n我请求${{$.input.activity_event.user_activity.properties。refund_amount}}refund for order {{$.input.activity_event.user_activity.properties.order_id}}.",
“requester_id美元。”:“.input.activity_event.user_activity.user_id美元”
},
“下一个”:“完成”
},
“InitiateRefund”:{
“类型”:“行动”,
“ActionName”:“子:集成:行动:InitiateRefund”,
“参数”:{
“order_id美元。”:“.input.activity_event.user_activity.properties.order_id美元”,
“refund_amount美元。”:“.input.activity_event.user_activity.properties.refund_amount美元”,
“profile_id美元。”:“.input.activity_event.user_activity.profile_id美元”
},
“下一个”:“完成”
},
“完成”:{
“类型”:“成功”
}
}
}
}
},
“RefundRequestJobSpec”:{
“类型”:“子::JobSpec”,
“属性”:{
“名称”:“RefundRequestJobSpec”,
“event_source”:“阳光”,
“event_type”:”活动。UserActivityCreated”,
“flow_name”:“子:集成:流:RefundRequestFlow”
}
}
}
}
将包上传到ZIS。
curl -X POST https://{subdomain}.亚博zendesk.com/api/services/zis/registry/{integration}/bundles \
-u {email}:{password} \
-H "Content-Type: application/json" \
- d @my_zis_bundle.json
安装作业规范以启用集成。
curl -X POST "https://{subdomain}.亚博zendesk.com/api/services/zis/registry/job_specs/install?job_spec_name=zis:{integration}:job_spec:RefundRequestJobSpec" \
密码- u {email}: {}
测试集成
要测试集成,请使用Events API为退款请求创建一个用户活动事件。然后验证集成是否启动退款或创建Zendesk票证。亚博
本教程提供了三个测试用例的步骤:
您可以使用类似的工作流来覆盖其他测试用例。
测试用例1:100美元退款
根据集成的逻辑,100美元或更少的退款请求应该向RequestBin端点URL发送请求。URL表示用于启动退款的外部API。
使用以下请求为退款请求创建用户活动事件。事件有一个
refund_amount
“100.00”。curl -X POST https://{subdomain}.亚博zendesk.com/api/v2/user_profiles/events \
-u {email_address}:{password} \
-H "Content-Type: application/json" \
- d”{
"事件":{
“源”:“online_order”,
“类型”:“refund_request”,
"属性":{
“order_id”:“789”,
“refund_amount”:“100.00”
}
},
“简介”:{
"name": "John Doe",
“源”:“acme_store”,
“类型”:“客户”,
"属性":{
“会员”:“基本”
},
“标识符”:[
{
“类型”:“电子邮件”,
“价值”:“(电子邮件保护)”
}
]
}
} '
导航到RequestBin指示板。您应该看到一个JSON有效负载,其中包含订单id、退款金额和客户的配置文件id。
测试用例2:使用高级会员退款200美元
根据集成的逻辑,具有高级会员资格的客户的退款请求应该向RequestBin端点URL发送请求。无论退款金额多少,这个逻辑都适用。
使用以下请求创建用户活动事件。事件有一个
refund_amount
“200.00”。与事件关联的概要文件具有会员
“溢价”。curl -X POST https://{subdomain}.亚博zendesk.com/api/v2/user_profiles/events \
-u {email_address}:{password} \
-H "Content-Type: application/json" \
- d”{
"事件":{
“源”:“online_order”,
“类型”:“refund_request”,
"属性":{
“order_id”:“456”,
“refund_amount”:“200.00”
}
},
“简介”:{
"name": "Jennifer Doe",
“源”:“acme_store”,
“类型”:“客户”,
"属性":{
“会员”:“溢价”
},
“标识符”:[
{
“类型”:“电子邮件”,
“价值”:“j(电子邮件保护)”
}
]
}
} '
导航到RequestBin指示板。您应该看到一个JSON有效负载,其中包含订单id、退款金额和客户的配置文件id。
测试案例3:200美元退款,没有高级会员资格
根据集成的逻辑,退款请求在Zendesk中创建一个票证,如果:亚博
- 退款金额超过$100 AND
- 客户没有高级会员资格
使用以下请求创建用户活动事件。事件有一个
refund_amount
“200.00”。与事件关联的概要文件具有会员
“基本”。curl -X POST https://{subdomain}.亚博zendesk.com/api/v2/user_profiles/events \
-u {email_address}:{password} \
-H "Content-Type: application/json" \
- d”{
"事件":{
“源”:“online_order”,
“类型”:“refund_request”,
"属性":{
“order_id”:“123”,
“refund_amount”:“200.00”
}
},
“简介”:{
"name": "Jane Doe";
“源”:“acme_store”,
“类型”:“客户”,
"属性":{
“会员”:“基本”
},
“标识符”:[
{
“类型”:“电子邮件”,
“价值”:“(电子邮件保护)”
}
]
}
} '
要验证在Zendesk中创建的相关票证的集成,请作为请求者搜索客户的电子邮件地址。亚博
旋度https://{subdomain}.zen亚博desk.com/api/v2/search.json \
-u {email}:{password} \
-G——data-urlencode "query=request:(电子邮件保护)”
响应包含一个票据。机票的描述包含订单id和退款金额。
{
“结果”:(
{
“url”:“https://example.亚博zendesk.com/api/v2/tickets/75.json”,
“id”:75,
…
“主题”:“订单123退款申请”,
“raw_subject”:“订单123退款申请”,
“描述”:“你好,我要求退回123号订单的200美元。”,
…
}
],
…
}
您还可以使用Zendesk Support代理界面验证票据是否存在。亚博