如何使用 Freshdesk API 使用 javascript 创建带有自定义字段的新工单
How to use Freshdesk API to create a new ticket with custom fields using javascript
我有一个函数,当用户在表单上单击 "submit" 时会触发该函数。除了 custom_fields.
之外的所有内容都将提交给 freshdesk
我正在使用 Angular 1.4 和控制器,所以 ctrl 是我的控制器。这是我的代码:
function postTicket() {
var formdata = new FormData();
var customFields = {
"serial_number": ctrl.newTicket.serialnumber
};
customFields = JSON.stringify(customFields);
formdata.append('description', ctrl.newTicket.description);
formdata.append('subject', ctrl.newTicket.subject);
formdata.append('type', ctrl.newTicket.type);
formdata.append('email', ctrl.newTicket.email);
formdata.append('custom_fields', customFields);
formdata.append('status', 2); // open
formdata.append('priority', 1); // low
supportResource.postTicket(formdata).then(
results => {
console.log('it worked! ', results);
ctrl.formSent = true;
},
error => {
console.log('something went wrong. ', error);
});
}
这里是支持资源代码:
function postTicket(ticket) {
return $q(function(fulfill, reject) {
$http({
url: `https://${MYACCOUNT}.freshdesk.com/api/v2/tickets`,
method: 'POST',
headers: {
'Authorization': 'Basic ' + btoa(MYKEY),
'Content-Type': undefined
},
data: ticket
}).then(
results => {
fulfill(results.data);
},
error => reject(error));
});
}
我收到以下错误:"Value set is of type String.It should be a/an key/value pair"
我遵循了这里的示例:
https://github.com/freshdesk/fresh-samples/blob/master/jquery/create_ticket_with_attachment.html
但是这个例子使用的是 CURL,我不确定如何使用 FormData() 发送数据 http://developer.mozilla.org/en-US/docs/Web/API/FormData
我想在这里分享解决方案,以防其他人遇到这个问题。这特定于 freshdesk API 以及它如何期望数据。表单数据的语法非常简单:
Syntax
There are two versions of this method: a two and a three parameter version:
- formData.append(name, value);
- formData.append(name, value, filename);
因此,通过将 name 从字符串更改为引用 custom_field 名称作为关联数组,如下所示:custom_fields[serial_number]
然后 API 了解正在使用的键,并且能够读取表单数据 value
function postTicket() {
var formdata = new FormData();
formdata.append('description', ctrl.newTicket.description);
formdata.append('subject', ctrl.newTicket.subject);
formdata.append('type', ctrl.newTicket.type);
formdata.append('email', ctrl.newTicket.email);
formdata.append('custom_fields[serial_number]', ctrl.newTicket.serialnumber);
formdata.append('status', 2); // open
formdata.append('priority', 1); // low
supportResource.postTicket(formdata).then(
results => {
console.log('it worked! ', results);
ctrl.formSent = true;
},
error => {
console.log('something went wrong. ', error);
});
}
我有一个函数,当用户在表单上单击 "submit" 时会触发该函数。除了 custom_fields.
之外的所有内容都将提交给 freshdesk我正在使用 Angular 1.4 和控制器,所以 ctrl 是我的控制器。这是我的代码:
function postTicket() {
var formdata = new FormData();
var customFields = {
"serial_number": ctrl.newTicket.serialnumber
};
customFields = JSON.stringify(customFields);
formdata.append('description', ctrl.newTicket.description);
formdata.append('subject', ctrl.newTicket.subject);
formdata.append('type', ctrl.newTicket.type);
formdata.append('email', ctrl.newTicket.email);
formdata.append('custom_fields', customFields);
formdata.append('status', 2); // open
formdata.append('priority', 1); // low
supportResource.postTicket(formdata).then(
results => {
console.log('it worked! ', results);
ctrl.formSent = true;
},
error => {
console.log('something went wrong. ', error);
});
}
这里是支持资源代码:
function postTicket(ticket) {
return $q(function(fulfill, reject) {
$http({
url: `https://${MYACCOUNT}.freshdesk.com/api/v2/tickets`,
method: 'POST',
headers: {
'Authorization': 'Basic ' + btoa(MYKEY),
'Content-Type': undefined
},
data: ticket
}).then(
results => {
fulfill(results.data);
},
error => reject(error));
});
}
我收到以下错误:"Value set is of type String.It should be a/an key/value pair"
我遵循了这里的示例: https://github.com/freshdesk/fresh-samples/blob/master/jquery/create_ticket_with_attachment.html
但是这个例子使用的是 CURL,我不确定如何使用 FormData() 发送数据 http://developer.mozilla.org/en-US/docs/Web/API/FormData
我想在这里分享解决方案,以防其他人遇到这个问题。这特定于 freshdesk API 以及它如何期望数据。表单数据的语法非常简单:
Syntax
There are two versions of this method: a two and a three parameter version:
- formData.append(name, value);
- formData.append(name, value, filename);
因此,通过将 name 从字符串更改为引用 custom_field 名称作为关联数组,如下所示:custom_fields[serial_number]
然后 API 了解正在使用的键,并且能够读取表单数据 value
function postTicket() {
var formdata = new FormData();
formdata.append('description', ctrl.newTicket.description);
formdata.append('subject', ctrl.newTicket.subject);
formdata.append('type', ctrl.newTicket.type);
formdata.append('email', ctrl.newTicket.email);
formdata.append('custom_fields[serial_number]', ctrl.newTicket.serialnumber);
formdata.append('status', 2); // open
formdata.append('priority', 1); // low
supportResource.postTicket(formdata).then(
results => {
console.log('it worked! ', results);
ctrl.formSent = true;
},
error => {
console.log('something went wrong. ', error);
});
}