构建第一个支持应用程序——第4部分:获取数据
在本系列前面的教程中,您为一个名为Requester X-ray的应用程序设计了用户界面。在本教程中,您将获得关于请求者的信息,并将其显示在UI中。
应用程序将从Zendesk REST API获取请求者信息。亚博它会向<一个href="https://developer.zendesk.com/api-reference/ticketing/users/users/">显示用户一个>端点:
得到/api/v2/用户/{id}.json
一个端点是一个URL,可以在其中获取或设置有关资源的信息。显示用户端点包括id
变量,它是Zendesk Support用亚博户ID。你的应用需要提供ID到端点,但它不知道提前。ID取决于代理在Zendesk Support中查看的票据。亚博
让我们来研究一下应用程序的逻辑。首先,应用程序应该访问代理界面中当前打开的票据,并获得请求者的用户ID。其次,应用程序应该使用ID从Show user端点请求用户信息。如果请求成功,应用程序应该在请求者模板中显示请求者的信息。如果请求失败,应用程序应该在另一个模板中显示错误消息。应用程序逻辑看起来是这样的:
本教程涵盖了构建应用程序逻辑的步骤:
本教程是构建Zendesk应用程序系列的一部分:亚博
调用框架API
第一步是从代理接口中的票据打开处获取请求者的ID。
它是如何工作的
Apps框架包括一个票务API,它允许您访问代理接口中打开的任何票务的票务数据。
框架的<一个href="https://developer.zendesk.com/api-reference/apps/apps-support-api/ticket_sidebar/">票对象一个>Doc列出了您可以检索的票据属性。扫描文档中的列表,您会找到一个特别的<一个href="https://developer.zendesk.com/api-reference/apps/apps-support-api/ticket_sidebar/">ticket.requester一个>属性,该属性返回用户描述用户的对象。深入研究<一个href="https://developer.zendesk.com/api-reference/apps/apps-support-api/all_locations/">用户对象一个>博士,你去找<一个href="https://developer.zendesk.com/api-reference/apps/apps-support-api/all_locations/">user.id一个>属性,它以整数形式返回用户的ID。
有了这些信息,你可以使用下面的路径来获取请求者的ID:
“ticket.requester.id”
在ZAF v2中,您使用client.get (_path_)
方法来查询数据API。该方法不直接返回值。相反,它返回一个包含属性的对象,该属性的名称与API路径对应。例子:
{
“ticket.requester.id”:29043265
}
name字符串包含句点,所以使用JavaScript括号来检索它的值:
var客户端=ZAFClient.初始化();
客户端.得到(“ticket.requester.id”).然后(函数(数据){
控制台.日志(数据[“ticket.requester.id”]);//类似29043265
});
iframe和父页面之间的通信是异步.换句话说,浏览器不会等待对请求的响应。它在处理请求时继续正常工作。当收到响应时,您将得到一个回调。的那就是()
方法用于等待回调。方法返回一个<一个href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise">承诺一个>并且有两个参数:成功时运行的函数和失败时运行的函数。这句话的基本意思是,“提出请求,然后在知道结果后做这两件事中的一件。”
客户端.得到(“ticket.requester.id”).然后(
run_this_fn_on_success,
run_this_fn_on_failure
);
有关更多信息,请参见<一个href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then">Promise.protoype.then ()一个>在Mozilla开发者网络上。
获取请求者的用户id
在上一节中,您了解到可以使用以下路径获取请求者的用户ID:
“ticket.requester.id”
将路径插入client.get (_path_)
方法来获取答案。
获取请求者的用户id
在main.js文件,在自调用函数中插入以下语句:
...
客户端.得到(“ticket.requester.id”).然后(
函数(数据){
varuser_id=数据[“ticket.requester.id”];
控制台.日志('请求者id是'+user_id);
}
);
该语句获取代理接口中当前打开的票据请求者的用户id。在获得成功响应后,它将其分配给一个名为user_id.
通过重新加载应用程序并在浏览器控制台中查找console.log消息来检查id。
如果ZCLI服务器尚未启动,请参见<一个href="https://developer.zendesk.com/documentation/apps/build-an-app/build-your-first-support-app/part-2-designing-the-user-interface/">测试应用程序一个>的指令。
取代
console.log ()
语句,使用以下函数调用:requestUserInfo(客户端,user_id);
该调用将客户端变量和id变量传递给一个名为
requestUserInfo ()
,您将在下一节中创建它。它的任务是向Zendesk REST API中的Users API发出HTTP请求。亚博你通过客户端因为该函数需要ZAFClient对象来发出HTTP请求。
到目前为止,你的自调用函数应该如下所示:
(函数(){
var客户端=ZAFClient.初始化();
客户端.调用(“调整”,{宽度:“100%”,高度:“120 px”});
客户端.得到(“ticket.requester.id”).然后(
函数(数据){
varuser_id=数据[“ticket.requester.id”];
requestUserInfo(客户端,user_id);
}
);
})();
调用REST API
现在你的应用程序可以从票据中获得请求者的ID,你可以使用它从Zendesk API中获得请求者的“x射线”用户信息。亚博
定义API请求
您可以使用<一个href="https://developer.zendesk.com/api-reference/apps/apps-core-api/client_api/">client.request ()一个>方法向外部api发送HTTP请求。该方法接受一个对象,该对象将请求设置定义为参数。例子:
var设置={
url:“https://www.example.com/api/resource.json”,
类型:“得到”,
数据类型:json的
};
客户端.请求(设置).然后(
函数(数据){
控制台.日志(数据);
},
函数(响应){
控制台.错误(响应.响应结果字符串);
}
);
x射线应用程序的请求设置是什么?的<一个href="https://developer.zendesk.com/api-reference/ticketing/users/users/">REST API文档一个>为Show User端点提供所需的所有信息:
- 的url是
' / api / v2 /用户/ {id} . json的
.对于Ze亚博ndesk端点,您不需要指定完整的URL。对于其他端点,指定完整的URL,例如“https://www.example.com/api/resource.json”
- 的类型是
得到
- 的数据类型是
json
获取请求者的信息
在上一节中,您了解到可以使用以下设置向Show User端点发出HTTP请求:
var设置={
url:' / api / v2 /用户/ {id} . json的,
类型:“得到”,
数据类型:json的
};
获取请求者的信息
控件中插入以下函数main.js文件:
函数requestUserInfo(客户端,id){
var设置={
url:' / api / v2 /用户/ '+id+. json的,
类型:“得到”,
数据类型:json的,
};
客户端.请求(设置).然后(
函数(数据){
控制台.日志(数据);
},
函数(响应){
控制台.错误(响应);
}
);
}
如果请求成功,应用程序将数据显示在控制台中
console.log(数据)
.如果请求不成功,应用程序将在控制台中以红色显示响应console.error(响应)
.在浏览器控制台中检查请求的结果。保存文件,重新加载应用程序,并在控制台中查找console.log消息。您应该看到一个包含用户数据的对象。
通过在其中一个请求设置中引入拼写错误来测试失败的结果。保存文件,重新加载应用程序,并寻找控制台。控制台中出现错误消息。
请记住,在您满意错误处理按预期工作后,修复请求设置中的拼写错误。
在第一个回调函数中,将console.log语句替换为对your
showInfo ()
功能:showInfo(数据);
在第二个回调函数中,将console.log语句替换为对your
showError ()
功能:showError(响应);
你的
requestUserInfo ()
函数应该如下所示:函数requestUserInfo(客户端,id){
var设置={
url:' / api / v2 /用户/ '+id+. json的,
类型:“得到”,
数据类型:json的,
};
客户端.请求(设置).然后(
函数(数据){
showInfo(数据);
},
函数(响应){
showError(响应);
}
);
}
显示请求者信息
在上一节中,您将用户信息传递给showInfo ()
从Zendesk API获得成功响应后调用函数。亚博
在本节中,您将获取信息并将其显示在请求程序模板中。
在你的
showInfo ()
函数定义(不是showInfo ()
函数调用),添加一个名为数据接收用户数据:函数showInfo(数据){
...
在
showInfo ()
函数中的硬编码值requester_data
对象中的值数据
论点:varrequester_data={
“名字”:数据.用户.的名字,
“标签”:数据.用户.标签,
“created_at”:数据.用户.created_at,
“last_login_at”:数据.用户.last_login_at
};
保存文件,单击重新加载所有应用程序在Ze亚博ndesk Support中测试您的工作。如果ZCLI服务器尚未启动,请参见<一个href="https://developer.zendesk.com/documentation/apps/build-an-app/build-your-first-support-app/part-2-designing-the-user-interface/">测试应用程序一个>的指令。
注意,如果用户在他们的Zendesk配置文件中没有任何标签,Tags行就不会出现。亚博
这些日期对用户来说不是很友好。你决定花几分钟来解决这个问题。
日期格式
您可以使用标准的JavaScript Date方法来格式化日期。
将以下帮助函数添加到您的main.js文件:
函数formatDate(日期){
varcdate=新日期(日期);
var选项={
一年:“数字”,
月:“短”,
一天:“数字”
};
日期=cdate.toLocaleDateString(“en - us”,选项);
返回日期;
}
该函数根据传递给函数的日期字符串创建一个JavaScript Date对象。它使用Date格式化方法对数据进行格式化,并返回修改后的日期。
回到你的
showInfo ()
函数,将这两个日期传递给helper函数:“created_at”:formatDate(数据.用户.created_at),
“last_login_at”:formatDate(数据.用户.last_login_at)
保存main.js文件并单击重新加载所有应用程序在Ze亚博ndesk Support中测试您的工作。
约会应该比以前更友好。
显示错误消息
在<一个href="#calling-the-rest-api">调用REST API一个>方法传递了一个响应对象showError ()
函数从Zendesk API得到错误响应后:亚博
showError(响应);
在本节中,您将获取信息并将其显示在错误模板中。
添加一个参数到你的
showError ()
接收错误数据的函数定义:函数showError(响应){
...
在
showError ()
函数中的硬编码值error_data
对象中的值响应
对象:varerror_data={
“状态”:响应.状态,
“statusText”:响应.statusText
};
中的请求设置中的一个输入错误,从而测试错误页面
requestUserInfo ()
.保存文件并重新加载应用程序。应该会显示错误模板。记住,在您满意错误模板按预期工作之后,要修复请求设置中的错字。
代码完成!
恭喜你!你开发了你的第一个ZAF应用程序。你的最终版本main.js文件应该是这样的:
(函数(){
var客户端=ZAFClient.初始化();
客户端.调用(“调整”,{宽度:“100%”,高度:“120 px”});
客户端.得到(“ticket.requester.id”).然后(
函数(数据){
varuser_id=数据[“ticket.requester.id”];
requestUserInfo(客户端,user_id);
}
);
})();
函数requestUserInfo(客户端,id){
var设置={
url:' / api / v2 /用户/ '+id+. json的,
类型:“得到”,
数据类型:json的,
};
客户端.请求(设置).然后(
函数(数据){
showInfo(数据);
},
函数(响应){
showError(响应);
}
);
}
函数showInfo(数据){
varrequester_data={
“名字”:数据.用户.的名字,
“标签”:数据.用户.标签,
“created_at”:formatDate(数据.用户.created_at),
“last_login_at”:formatDate(数据.用户.last_login_at)
};
var源=文档.getElementById(“requester-template”).innerHTML;
var模板=车把.编译(源);
var超文本标记语言=模板(requester_data);
文档.getElementById(“内容”).innerHTML=超文本标记语言;
}
函数showError(响应){
varerror_data={
“状态”:响应.状态,
“statusText”:响应.statusText
};
var源=文档.getElementById(“错误模板”).innerHTML;
var模板=车把.编译(源);
var超文本标记语言=模板(error_data);
文档.getElementById(“内容”).innerHTML=超文本标记语言;
}
函数formatDate(日期){
varcdate=新日期(日期);
var选项={
一年:“数字”,
月:“短”,
一天:“数字”
};
日期=cdate.toLocaleDateString(“en - us”,选项);
返回日期;
}
你的iframe.html文件应该是这样的:
<!文档类型超文本标记语言>
<超文本标记语言>
<头>
<元字符集="utf - 8">
<链接rel="样式表"href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"
crossorigin="匿名">
<链接href="main.css"rel="样式表">
头>
<身体>
<divid="内容">div>
<页脚>
<一个href="https://mysite.github.io/support"目标="平等自愿">报告错误一个>
页脚>
<脚本id="requester-template"类型="文本/ x-handlebars-template">
<表格>
<tr>
<道明>客户:</道明>
<道明类=“数据”>{{的名字}}</道明>
</tr>
{{#如果标签}}
<tr>
<道明>标签:</道明>
<道明类=“数据”>{{#每一个标签}}{{这}}{{/每一个}}</道明>
</tr>
{{/如果}}
<tr>
<道明>添加:</道明>
<道明类=“数据”>{{created_at}}</道明>
</tr>
<tr>
<道明>最后的签署在:</道明>
<道明类=“数据”>{{last_login_at}}</道明>
</tr>
</表格>
脚本>
<脚本id="错误模板"类型="文本/ x-handlebars-template">
<p>{{状态}}-{{statusText}}错误.请在下面的链接报告一个错误.</p>
脚本>
<脚本src="https://static.zdassets.com/亚博zendesk_app_framework_sdk/2.0/zaf_sdk.min.js">脚本>
<脚本src="https://cdn.jsdelivr.net/npm/<一个href="https://developer.zendesk.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="167e7778727a7374776465562238253825">(电子邮件保护)一个>/dist / handlebars.min.js">脚本>
<脚本src="main.js">脚本>
身体>
超文本标记语言>
如果你喜欢,继续调整应用程序。你可以通过点击下载完整的应用程序源代码<一个href="https://zen-marketing-documentation.s3.amazonaws.com/docs/en/xr_app.zip">xr_app.zip一个>.
最后一步是在Zendesk Support实例中验证、打包和安装应用程序。亚博继续<一个href="https://developer.zendesk.com/documentation/apps/build-an-app/build-your-first-support-app/part-5-installing-the-app-in-zendesk-support/">第5部分-在Zendesk Support中安装应用程序亚博一个>.