# Outbound LivePerson

## Visão geral

Com a ferramenta *Proactive Messaging* da [LivePerson](https://authentication.liveperson.net/) é possível criar campanhas e templates para envio de mensagens ativas via WhatsApp e Apple Business Chat.

**Antes de habilitar a API de Outbound no Zenvia NLU**, você deverá[ consultar essa documentação](https://knowledge.liveperson.com/messaging-channels-proactive-messaging-proactive-messaging-user-guide.html) da LivePerson e **se** **certificar que** **cumpriu todos os requisitos**, com atenção especial ao template ([HSM](https://docs.altu.d1.cx/mais/glossario))

![Caminho para o Proactive Messaging dentro da página LivePerson](https://776911411-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MBjaNm5lB1Yqgih1JCA%2F-MeQKwwjCycpUrqgcmK1%2F-MeQM4v4GCR0GEEMB-L-%2Ftela_inicial_proactive_liveperson.gif?alt=media\&token=2ee2ca1f-3629-4f78-a01f-234766eb4c20)

{% hint style="warning" %}
Caso você fique preso na tela de apresentação "LivePerson Proactive Messaging" realize a limpeza de cache e cookies do seu navegador
{% endhint %}

Os próximos passos serão dedicados a habilitar e configurar API para envio de outbound via WhatsApp.

## **Habilitar e configurar API**

Vá até **Canais > WhatsApp > LivePerson**

![Caminho até a integração com WhatsApp via LivePerson](https://776911411-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MBjaNm5lB1Yqgih1JCA%2F-MeQKwwjCycpUrqgcmK1%2F-MeQNJZOZ6aliE8v8xJY%2Fconnect_canais_whatsapp_LP.gif?alt=media\&token=03b4c546-ba49-445d-96cf-59654a3a25c6)

Ao clicar sobre o ícone da LivePerson, você irá visualizar uma tela com todos os assistentes já integrados a esse Broker. Escolha qual será o responsável pelo envio e clique em **editar integrações**, simbolizado pelo ícone de lápis ![](https://lh6.googleusercontent.com/xPbP-vo9TQFCV8kailK-fiycp7HUZKSUqX5WsTFXkcNHN_jpukbaSQJYcriHUywnjtflYP8KHux5uc4Yn3BEXpm12NxIpTqsYjBOj5oFv3eGvIEJ7bdZ68XYQs3EWbq-2HL-V4x4)&#x20;

![Edite a integração de um assistente para habilitar a API de Outbound](https://776911411-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MBjaNm5lB1Yqgih1JCA%2F-MeQNU-b8QRyD0cI5blO%2F-MeQOPwWT3eB3ubzcfnm%2Feditar_integra%C3%A7oes_liveperson.png?alt=media\&token=7aaa4089-475a-423b-87a8-d3b2044236bc)

## **Estrutura**

Na tela inicial da área de edição de integrações você verá todas as informações da integração. No fim da página você irá encontrar um botão para habilitar a API de outbound.

![Botão de habilitar API Outbound](https://776911411-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MBjaNm5lB1Yqgih1JCA%2F-MeWo1YWxinh1Ew9pXr_%2F-MeWoEqunxaAXMnMXikZ%2Fconnect_canais_lp_habilitar_outbound.gif?alt=media\&token=eab2842c-4919-47f9-a77e-2e231d0cf571)

{% hint style="info" %}
Você deverá escolher entre a **versão 1.0** ou **2.0**, conforme a versão da sua conta na **LivePerson**.
{% endhint %}

## Versão 1.0

Ao habilitar a API de outbound 1.0 é gerado um **endpoint** e um **token**. Eles serão utilizados para realizar o envio das mensagens ativas.\
\
Use a ferramenta de requisição de API’s de sua preferência, e a configure utilizando as seguintes informações:

<mark style="color:green;">`POST`</mark> `https://outbound.ms.altubots.com/liveperson/<slug>/<id_integracao>`

#### Headers

| Name          | Type   | Description      |
| ------------- | ------ | ---------------- |
| Content-type  | string | application/json |
| Authorization | string | \<token>         |

{% tabs %}
{% tab title="200 " %}

```
{
  "status": "pending",
  "messageId": 161
}
```

{% endtab %}

{% tab title="400 " %}

```
{
	"status": "error",
	"message": "Invalid destination!"
}
```

{% endtab %}

{% tab title="404 " %}

```
{ 
	"status": "error",
	"message": "Contact not found!" 
}
```

{% endtab %}

{% tab title="500 Caso receba esta resposta, verifique se o número do destino e o nome do template estão corretos" %}

```
{ 
	"status": "error",
	"message": "Unexpected error" 
}
```

{% endtab %}
{% endtabs %}

![Informações sobre endpoint e token versão v.1 no Zenvia NLU](https://776911411-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MBjaNm5lB1Yqgih1JCA%2Fuploads%2FPF78i7fbFuX9VjOAdUsJ%2FScreen%20Shot%202022-05-19%20at%2017.51.07.png?alt=media\&token=9032eb85-d56a-47c9-aa68-e375dd9cc441)

Você encontra um exemplo de como fazer a requisição no campo de “documentação” que fica ao lado das configurações da API. Essas informações podem ser copiadas e coladas.<br>

### **Body's templates:**

{% tabs %}
{% tab title="HSM Padrão" %}
Utilize este body quando for enviar uma mensagem ativa **somente com texto e variáveis**, **SEM** imagens, botões ou documentos:

```
{
    "destination": "35999999999",
    "context": {
        "status": "aprovado"
    },
    "hsm": true,
    "richTemplateName": "meu_template",
    "richTemplateVariables": {
        "variable_number": "variable_value"
    },
    "restartContact": false,
    "skill": "minha_skill",
		"inactivityTime": 2
}
```

### Atributos:

* **destination**: número que irá receber a mensagem
* **context (opcional)**: variáveis que serão salvas no contexto do usuário
* **hsm**: campo necessário para envio de mensagem hsm
* **richTemplateName**: nome do template de mensagem a ser enviado
* **richTemplateVariables (opcional)**: variáveis do template
  * **variable\_number:** número da variável dentro do template (1, 2, 3...)
  * **variable\_value:** valor que substituirá o número da variável no template
* **restartContact (opcional):** boleano para resetar as variáveis de contexto do usuário
* **skill (opcional):** habilidade na liveperson que atenderá o usuário
* **inactivityTime (opcional)**: tempo em minutos que deve passar desde a última interação do usuário com o assistente para que a mensagem seja enviada. **Exemplo:** Se o usuário está interagindo ou interagiu com assistente a 1 minuto e o tempo de inatividade necessário para mensagem ser enviada é 2 minutos("inactivityTime": 2) a mensagem não é enviada, caso a interação tivesse ocorrido a 3 minutos a mensagem seria enviada.
  {% endtab %}

{% tab title="HSM Rich Template" %}
Com este body é possível enviar uma mensagem ativa **com imagens, documentos e botões**:

```
{
   "destination": "11999999999",
   "context": {
       "status": "aprovado",
   },
   "hsm": true,
   "richTemplateName": "richtemplate",
   "richTemplateVariables": {
       "pic": "https:imageURL.png",
       "variable_number": "variable_value"
   }
}
```

### Atributos:

* **destination**: número que irá receber a mensagem
* **context (opcional)**: variáveis que serão salvas no contexto do usuário
* **hsm**: campo necessário para envio de mensagem hsm
* **richTemplateName**: nome do template de mensagem a ser enviado
* **richTemplateVariables (opcional)**: variáveis do template
  * **variable\_number:** número da variável dentro do template (1, 2, 3...)
  * **variable\_value:** valor que substituirá o número da variável no template
    {% endtab %}

{% tab title="Notificação" %}
Caso o assistente tenha recebido uma mensagem da pessoa usuária nas últimas 24 horas, você pode enviar uma notificação para continuar a conversa. Utilize este body:&#x20;

```
{
    "destination": "35988841854",
    "messages": "Envie um 'Oi' para iniciar o atendimento",
    "context": {
        "status": "aprovado"
    },
		"inactivityTime": 2
}
```

### **Atributos:**

* **destination**: número que irá receber a mensagem
* **messages**: mensagem a ser enviada
* **context (opcional)**: variáveis de contexto do usuário que serão salvas
* **inactivityTime (opcional)**: tempo em minutos que deve passar desde a última interação do usuário com o assistente para que a mensagem seja enviada. **Exemplo**: Se o usuário interagiu com assistente a 1 minuto e o tempo de inatividade necessário para mensagem ser enviada é 2 minutos ("inactivityTime": 2) a mensagem não será enviada. Caso a interação tivesse ocorrido a 3 minutos a mensagem seria enviada.
  {% endtab %}
  {% endtabs %}

\
**Exemplo HSM Padrão:**

**TemplateName:** template\_test

**Mensagem:** Olá {{1}}! Temos uma atualização a respeito da sua solicitação aberta. Envie um "oi" para saber mais.

```
{
    "destination": "35998631234",
    "context": {
        "status": "aprovado"
    },
    "hsm": true,
    "richTemplateName": "template_test",
    "richTemplateVariables": {
        "1": "TESTE"
    },
    "restartContact": false,
    "skill": "atendimento",
		"inactivityTime": 2
}    
```

**Mensagem recebida:**&#x20;

```
Olá TESTE! Temos uma atualização a respeito da sua solicitação aberta. Envie um "oi" para saber mais.
```

## **Webhook de status**

Um webhook é uma infraestrutura que recebe informações sobre as mensagens de outbound enviadas. Ele é composto por um endpoint (link do webhook, onde o cliente receberá as atualizações de status) e um token (acesso gerado pela equipe Zenvia NLU para realizar a integração). \
Você vai precisar das seguintes informações, que são encontradas logo abaixo da área de configuração da API de outbound:

* **Header**: token gerado pelo Zenvia NLU, que é específico para cada assistente e canal
* **Post**: link com o endpoint informado para acesso

![Configuração de webhook no ALTU](https://776911411-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MBjaNm5lB1Yqgih1JCA%2F-MeQY4f5p226fFr4HsOU%2F-MeQZGh-y3DSjb6m-lxB%2Fconfigurar_webhook_status_v1_liveperson.PNG?alt=media\&token=d66db3ef-6a0a-4c9f-a3de-5f85a4e73d14)

Os status retornados via webhook são:

* **Enviado** (sent): retorno exclusivo para ativos enviados pela LivePerson, indica o sucesso no encaminhamento da mensagem.
* **Entregue** (delivered): Indica que a mensagem foi entregue (equivalente ao sinal único de visto ✅ no WhatsApp).
* **Respondido** (replied): Indica que a mensagem foi respondida pelo usuário.
* **Erro** (error): Indica que houve um erro no envio da mensagem.

O status `<enviado>` é instantâneo. O `<respondido>`será entregue primeiro e tem prioridade no `<entregue>`

{% tabs %}
{% tab title="Enviado" %}

```
{
  "external_id": "36ef4510-9c96-11eb-8ccf-dfce354710ee",
  "status": "sent",
  "destination": "35999999999",
  "client": "demo",
  "date": "2021-04-13T17:24:16-03:00"
}
```

{% endtab %}

{% tab title="Entregue" %}

```
{
  "external_id": "36ef4510-9c96-11eb-8ccf-dfce354710ee",
  "status": "delivered",
  "destination": "35999999999",
  "client": "demo",
  "date": "2021-04-13T17:24:15-03:00"
}
```

{% endtab %}

{% tab title="Respondido" %}

```
{
  "external_id": "36ef4510-9c96-11eb-8ccf-dfce354710ee",
  "status": "replied",
  "destination": "35999999999",
  "client": "demo",
  "message": "Ola",   //resposta enviada pelo usuario
  "date": "2021-04-13T17:24:25-03:00"
}
```

{% endtab %}

{% tab title="Erro" %}

```
{
  "external_id": "36ef4510-9c96-11eb-8ccf-dfce354710ee",
  "status": "error",
  "destination": "35999999999",
  "client": "demo",
  "message": "Erro ao enviar HSM",
  "date": "2021-04-13T17:24:15-03:00"
}
```

{% endtab %}
{% endtabs %}

## Versão 2.0

Na tela de configuração da API de outbound, ao selecionar a opção V 2.0 a configuração passa a ser a seguinte:

* **ALTU Token**: token configurado que será usado na requisição
* **Domínio do serviço**: informação preenchida automaticamente de acordo com o id da conta cadastrado na integração
* **Domínio da API**: informação preenchida automaticamente de acordo com o id da conta cadastrado na integração

Os dados abaixo devem ser recuperados através da URL: <https://authentication.liveperson.net/>

* **Id do cliente**: Id do cliente localizado na conta LivePerson
* **Segredo do cliente**: Id do cliente localizado na conta LivePerson

{% hint style="danger" %}
Ao salvar a integração na versão 2.0, não será possível voltar para a 1.0
{% endhint %}

<mark style="color:green;">`POST`</mark> `https://outbound.ms.altubots.com/liveperson/<slug>/<id_integracao>`

#### Headers

| Name          | Type   | Description      |
| ------------- | ------ | ---------------- |
| Content-type  | string | application/json |
| Authorization | string | \<token>         |

{% tabs %}
{% tab title="200 " %}

```
{
  "status": "sent",
  "messageId": 163,
  "external_id": "1405d120-c801-11ea-bc3c-331e67fe876f",
  "contact_id": 1
}
```

{% endtab %}

{% tab title="400 " %}

```
{
  "status": "error",
  "message": "Invalid destination!"
}
```

{% endtab %}

{% tab title="500 Caso receba esta resposta, verifique se o número do destino e o nome do template estão corretos." %}

```
{
  "status": "error",
  "message": "5535988841852 is not eligible for wa."
}
```

{% endtab %}
{% endtabs %}

![Informações sobre endpoint e token versão v.2 no Zenvia NLU](https://776911411-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MBjaNm5lB1Yqgih1JCA%2Fuploads%2FHkQIj348AXYOXUoCeOUL%2FScreen%20Shot%202022-05-19%20at%2017.58.45.png?alt=media\&token=0f7f4199-549b-476e-a712-7a254b02b7f7)

Você encontra um exemplo de como fazer a requisição no campo de “documentação” que fica ao lado das configurações da API. Essas informações podem ser copiadas e coladas.

### **Body's templates:**

{% tabs %}
{% tab title="HSM Padrão" %}
Utilize este body quando for enviar uma mensagem ativa **somente com texto e variáveis**, **SEM** imagens, botões ou documentos:

```
{
    "outboundNumber": "5511999999999",
    "destination": "35999999999",
    "context": {
        "status": "aprovado"
    },
    "hsm": true,
    "templateId": "1111111111111",
    "richTemplateVariables": {
        "variable_number": "variable_value"
    },
    "restartContact": false,
    "skill": "atendimento",
		"inactivityTime": 2
} 
```

### Atributos:

* **outboundNumber**: número que irá enviar a mensagem
* **destination**: número que irá receber a mensagem
* **context (opcional)**: variáveis que serão salvas no contexto do usuário
* **hsm**: campo necessário para envio de mensagem hsm
* **templateId**: nome do template de mensagem a ser enviado
* **richTemplateVariables (opcional)**: variáveis do template
  * **variable\_number:** número da variável dentro do template (1, 2, 3...)
  * **variable\_value:** valor que substituirá o número da variável no template
* **restartContact (opcional):** boleano para resetar as variáveis de contexto do usuário
* **skill :** habilidade na liveperson que atenderá o usuário
* **inactivityTime (opcional)**: tempo em minutos que deve passar desde a última interação do usuário com o assistente para que a mensagem seja enviada. **Exemplo:** Se o usuário está interagindo ou interagiu com assistente a 1 minuto e o tempo de inatividade necessário para mensagem ser enviada é 2 minutos("inactivityTime": 2) a mensagem não é enviada, caso a interação tivesse ocorrido a 3 minutos a mensagem seria enviada.
  {% endtab %}

{% tab title="HSM Rich Template" %}
Com este body é possível enviar uma mensagem ativa **com imagens, documentos e botões**:

```
{
    "outboundNumber": "5511999999999",
    "destination": "35999999999",
    "context": {
        "status": "aprovado"
    },
    "hsm": true,
    "templateId": "1111111111111",
    "richTemplateVariables": {
        "1": "TESTE"
    },
    {
    "headerVariables": {
        "video": "https://file-examples-com.github.io/uploads/2017/04/file_example_MP4_640_3MG.mp4" 
    }
    },
    "restartContact": false,
    "skill": "atendimento",
		"inactivityTime": 2
} 
```

**Atributos:**

* **outboundNumber (opcional):** número que dispara a mensagem
* **destination**: número que irá receber a mensagem
* **context (opcional)**: variáveis de contexto do usuário que serão salvas
* **hsm**: campo necessário para envio de mensagem hsm
* **templateId**: ID template de mensagem a ser enviado
* **richTemplateVariables (opcional)**: variáveis do template
  * **variable\_number:** número da variável dentro do template( 1, 2 3 ...)
  * **variable\_value:** valor que substituirá o número da variável no template
* **headerVariables (opcional):** variáveis de mídia no cabeçalho do template
* **restartContact (opcional):** booleano para resetar as variáveis de contexto do usuário
* **skill:** habilidade na LivePerson que atenderá o usuário
* **inactivityTime (opcional)**: tempo em minutos que deve passar desde a última interação do usuário com o assistente para que a mensagem seja enviada. **Exemplo:** Se o usuário está interagindo ou interagiu com assistente a 1 minuto e o tempo de inatividade necessário para mensagem ser enviada é 2 minutos("inactivityTime": 2) a mensagem não é enviada, caso a interação tivesse ocorrido a 3 minutos a mensagem seria enviada.
  {% endtab %}

{% tab title="Notificação" %}
Caso o assistente tenha recebido uma mensagem da pessoa usuária nas últimas 24 horas, você pode enviar uma notificação para continuar a conversa. Utilize este body:&#x20;

```
{
    "destination": "35988841854",
    "messages": "Envie um 'Oi' para iniciar o atendimento",
    "context": {
        "status": "aprovado"
    },
		"inactivityTime": 2
}
```

{% endtab %}
{% endtabs %}

{% hint style="warning" %}
Na versão 2.0 o Webhook de status não está disponível.&#x20;
{% endhint %}
