Recentemente, atualizamos nossa marca em nossas ofertas e mudamos os nomes de nossos planos de preços. Se você se inscreveu antes de 9 de agosto de 2021, clique em Planos anteriores para ver os planos aplicáveis.
 Garantimos que essa alteração não afetará sua experiência com o produto e nenhuma ação é necessária de sua parte.


Você pode converter uma conversa no Freshdesk Messaging em um tíquete do Zendesk adicionando e habilitando o seguinte trecho de código como um smart plug.


Para obter instruções sobre como adicionar um plugue inteligente, consulte Trabalho com plugues inteligentes .


Nota :

Você precisa substituir os valores domain, emailAddress e apiKey no código a seguir por suas credenciais do Zendesk.


Snippet de código de amostra :


 <script>

var accountDetails = {
// As únicas variáveis a serem alteradas estão abaixo.
// Domínio Freshdesk. Sempre o domínio original aqui, por favor, não insira o CNAME.
domínio: 'domínio.zendesk.com',
emailAddress: 'admin@company.com',
// Chave de API do usuário administrador.
apiKey: 'Admin-API-Key'
};

var fcResolveCreateTicket = (function ($, window, name, email) {
if (window.FRESHCHAT_CREATE_TICKET_WIDGET) {
window.FRESHCHAT_CREATE_TICKET_WIDGET.setItUp (nome, e-mail); // passe a conversa / informações do usuário aqui
janela de retorno.FRESHCHAT_CREATE_TICKET_WIDGET;
}
var resolveButton = window.FRESHCHAT_CREATE_TICKET_WIDGET = {

reopenTimeStamp: '',

createdTimeStamp: '',

nome: '',

o email: '',

fcEvent: window.fcAgent.events,

conversaçãoId: janela.location.href.split ('/ conversação /') [1],

reqHeader: {
"Autorização": "Básico" + btoa (accountDetails.emailAddress + "/ token:" + accountDetails.apiKey),
"Content-Type": "application / json"
},

setItUp: function (name, email) {
var _self = this;
this.name = nome;
this.email = email;
},

inicializar: função () {
var _self = this;
console.log ('Init');
this.fcEvent.unsubscribe ("resolution_message", _ self.resolveMessage);
this.fcEvent.subscribe ("resolution_message", _ self.resolveMessage, this);
},

resolveMessage: function (data) {
console.log ('Resolução clicada');
this.assignedagentEmail = data.agent! = undefined? data.agent.email: null;
this.assignedgroupName = data.group! = undefined? data.group.name: null;
this.getConversationInfo ();
},

getConversationInfo: function () {
var _self = this;
jQuery.ajax (
{
url: 'https://web.freshchat.com/app/conversation/message?rand='+jQuery.now()+'&convid='+window.location.href.split('/conversation/')[1 ] + '& excludeCampaign = true',
tipo: 'GET',
contentType: 'application / json',
sucesso: função (dados) {
_self.getRequiredData (data.conversation);

}
})
},

getRequiredData: function (data) {
var _self = this,
índice = [],
reaberto = falso;

jQuery.each (data.messages, function (key, value) {
if (data.messages [key] .messageType == '2003') {
reaberto = verdadeiro;
index.push (chave);
}
});

if (reaberto! = verdadeiro) {
_self.createdTimeStamp = moment (data.messages [data.messages.length-1] .createdMillis) .format ('DD-MM-AAAA hh: mm: ss A');
console.log ('Tempo de criação =' + _self.createdTimeStamp);
_self.renderTicketData (data.messages, false);
}
outro {
var chat = data.messages,
ticketData = '';
if (data.messages [index [0]]. messageFragments [0] .content == 'Conversa reaberta devido a nova mensagem recebida') {
console.log ('reabertura automática');
_self.reopenTimeStamp = moment (data.messages [index [0]]. createdMillis) .format ('DD-MM-AAAA hh: mm: ss A');
ticketData = conversação.slice (0, índice [0] +2);
}
outro {
console.log ('reabertura manual');
_self.reopenTimeStamp = moment (data.messages [index [0]]. createdMillis) .format ('DD-MM-AAAA hh: mm: ss A');
ticketData = conversação.slice (0, índice [0]);
}
console.log ('Tempo reaberto =' + _self.reopenTimeStamp);
_self.renderTicketData (ticketData, true);
}
},

renderTicketData: function (data, reopenFlag) {
var messageContentArray = [],
userMessages = [],
_self = this;
jQuery.each (dados, função (i, ele) {
if (data [i] .messageType == 1) {
console.log ('userMessages');
messageContentArray.push (dados [i]);
}
outro {
console.log ('ignorar');
}
});

jQuery.each (messageContentArray, function (i, ele) {
if (messageContentArray [i] .messageFragments.length <1) {
console.log (messageContentArray [i] .messageFragments [0] .content);
userMessages.push (messageContentArray [i] .messageUserName + '|' + messageContentArray [i] .messageFragments [0] .content);
}
outro {
jQuery.each (messageContentArray [i] .messageFragments, function (j, ele) {
console.log (messageContentArray [i] .messageFragments [j] .content);
userMessages.push (messageContentArray [i] .messageUserName + '|' + messageContentArray [i] .messageFragments [j] .content);
});
}
});

var startTime = (reopenFlag == true)? _self.reopenTimeStamp: _self.createdTimeStamp;

var endTime = moment (data [0] .createdMillis) .format ('DD-MM-AAAA hh: mm: ss A');

var original = userMessages.reverse ();

var html = '<div class = "HotlinetimeStamp" style = "padding-bottom: 10px; font-weight: 500; color: # 000000;"> Inicializado em' + startTime + '</div>';
jQuery.each (original, função (i, ele) {
html + = '<div class = "userName" style = "display: inline-block; largura: 150px; vertical-align: top; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;"> <strong> '+ original [i] .split (' | ') [0] +' </strong>: </div> <div class = "userContent" style = "display: bloco embutido; quebra de palavra: quebra de palavra ; padding-left: 5px; vertical-align: top; "> '+ original [i] .split (' | ') [1] +' </div> <br/> ';
});
html + = '<div class = "HotlinetimeStamp" style = "padding-top: 10px; font-weight: 500; color: # 000000;"> Resolvido em' + endTime + '</div> <br/> <a href = "'+ window.location.href +'" target = "_ blank"> '+ window.location.href +' </a> ';
_self.setTicketData (startTime, html);
},

setTicketData: function (startTime, html) {
var _self = this;
var cleanEmail = _self.email;
var ticketEmail = cleanEmail.length> 3? cleanEmail: _self.name.replace ('', '-') + '@ app.freshchat.com';
var ticket = {
"bilhete": {
"subject": "Conversa com" + _self.name,
"comentário": {"html_body": html},
"solicitante": {"nome": _self.name, "email": ticketEmail}
}
};
console.log (tíquete);
this.newTicketCreate (ticket);
},

newTicketCreate: function (ticketData) {
var _self = this;
jQuery.ajax ({
método: "POST",
url: "/ app / extension_proxy",
processData: false,
dados: JSON.stringify ({
url: 'https: //'+accountDetails.domain+'/api/v2/tickets.json',
método: "POST",
dataType: "json",
cabeçalhos: this.reqHeader,
formParameters: {},
rawBody: JSON.stringify (ticketData)
}),
sucesso: função (dados) {
var returnTicketId = data.ticket.id;
console.log ('sucesso');
_self.successMessage (returnTicketId);
},
erro: função (dados) {
console.log ('erro');
}
});
},

successMessage: function (ticket) {
console.log (tíquete);
var responseTicketID = ticket;
TicketURL = "https: //" + accountDetails.domain + "/ agent / tickets /" + responseTicketID;
this.fcEvent.publish ('send_private_message', {mensagem: 'Ticket #' + responseTicketID + 'Criado, acesse <a href="'+TicketURL+'" target="_blank"> aqui </a> para ver o tíquete. '});
}
};
resolveButton.initialize ();
setTimeout (function () {
resolveButton.setItUp (nome, email);
}, 100);
return resolveButton;
}) (jQuery, janela, "{{user.name}}", "{{user.email}}");