[Resolvido] BLiPChat - Definir Contato com Comando (command)

No tópico abaixo foi questionado sobre definir contato, mas foi informado que não é possível considerando que o método withAuth usado primeiramente é o GUEST e não DEV_AUTH

Seria possível usar a implementação abaixo:

  /*jshint esversion: 6 */
(function () {
        //window.onload = function () {
      		var blipClient = undefined;
  
      		blipClient = new BlipChat()
            .withAppKey('KEY')
            .withButton({"color":"#3a183d"})
  			.withEventHandler(BlipChat.ENTER_EVENT, function () {

              console.log('BLiPChat Event Enter');

              if (browsingContext.Common.Shopper.IsAuthenticated) {
                
                console.log('LinxCore IsAuthenticated');
                
                blipClient.sendCommand({
                  id: '1',
                  to: 'postmaster@msging.net',
                  method: 'set',
                  uri: '/contacts',
                  type: 'application/vnd.lime.contact+json',
                  resource: {
                      name: browsingContext.Common.Shopper.Name,
                		fullName: browsingContext.Common.Shopper.Name + ' ' + browsingContext.Common.Shopper.SurName,
						gender: browsingContext.Common.Customer.Gender,
              			email: browsingContext.Common.Shopper.Email,
              			phoneNumber: browsingContext.Common.Customer.ExtendedProperties.Phone.Value,
                  		extras: {
                  			CustomerID: browsingContext.Common.Customer.CustomerID
                    	}
                  }
                });
              }
              
            })
            //.withoutHistory()
            ;

            blipClient.build();
        //};
 })();

Foi utilizado as seguintes documentações:

BLiP Chat - Widget - Send Command

Extensions - API Reference - Contacts

Apresentou o erro no console

Uncaught (in promise) Error: Cannot send in the 'authenticating' state
    at e.t.sendCommand (lime.min.js:1)
    at t.value (blip-sdk.js:474)
    at Function.e.processCommand (CommandProcessor.ts:26)
    at Function.e.get (AccountCommandProcessor.ts:8)
    at a.<anonymous> (App.vue?eb80:223)
    at WebView.vue?8e5b:27
    at Object.next (WebView.vue?8e5b:27)
    at WebView.vue?8e5b:27
    at new Promise (<anonymous>)
    at ga (WebView.vue?8e5b:27)
    at a.setupThread (App.vue?eb80:223)
    at a.<anonymous> (App.vue?eb80:343)
    at WebView.vue?8e5b:27
    at Object.next (WebView.vue?8e5b:27)
    at t (WebView.vue?8e5b:27)

@AndyDaSilva52

Para adicionar um contato na primeira interação use o withAccount, independente do tipo de autenticação. É possível sim usar o modo DEV_AUTH com ele, vide exemplo. Vale lembrar que após a primeira interação, ele não sera executado, ou seja, ele não atualiza o contato caso você mude os valores de withAccount. Para atualizar um contato após ele ter sido criado, você pode utilizar a ação Definir Contato dentro do Builder mesmo, ou criar uma API que faça essas requisições para a API de Contatos do BLiP.

Não é possível usar o sendCommand para esse tipo de ação, visto que você está no chat em nome do usuário e não em nome do bot, portanto você não tem autorização para realizá-lo.

Então só vou conseguir atualizar os dados de Contato no lado do servidor, pois não posso expor a chave da API!! :frowning:

A questão é que como nós, muitos clientes não tem acesso ao lado do servidor, considerando que contratam uma plataforma de ecommerce de terceiro.

Outra opção que estamos considerando essa limitação do BlipChat que várias outras ferramentas de mercado não tem, é mascarar a exposição em um webhook personalizado que tenta garantir um pouco de segurança. No caso, é enviado o JSON para um endereço webhook de entrada que então internamente faz a requisição a API do BLiPChat que garante a segurança da Chave API

Não entendo por qual motivo esse tipo de uso do command não é válido

Caso queira informar a URL de outro serviço na sessão da conversa não vai ser possível também?

Seguindo a documentação do serviço LogRocket disponível em:

LogRocket - Supporting Customers

Se você conseguiria via sendCommand no Widget, é só repassar a informação para uma API sua, sem que você precise expor sua API Key.

Caso seja um problema e você acredite que seja algo viável para a usabilidade da plataforma, sugiro que envie isso como sugestão lá no BLiP Ideas.

Não é valido, pois na aplicação do widget estas ações são feitas em nome do usuário e não seria legal dar ao usuário o controle do bot, por questões de segurança. Você, enquanto desenvolvedor do bot, consegue fazer isso no Builder ou através da API do BLiP sem problemas.

Basta adicionar essa informação como extras do contato.

1 Curtida