API de Jornadas
As jornadas eram anteriormente chamadas de "stacks". As palavras "stacks" e "jornadas" podem ser usadas de forma intercambiável em nossa documentação, e você ainda pode ver o termo "stacks" em nomes de funções e outros locais.
A autenticação ocorre como em outras chamadas de API, com um token da Turn.io especificado no header HTTP Authorization
, prefixado por Bearer
e seguido de um token emitido pela interface do usuário da Turn.io.
As operações de criação, atualização e publicação da API estão disponíveis apenas no plano Enterprise.
Criando uma Jornada
Para criar uma jornada, você precisa fornecer um objeto JSON com os seguintes campos:
name
: STRING, obrigatóriopublish_latest_changes
: BOOLEAN, padrão éfalse
enabled
: BOOLEAN, padrão étrue
notebook
: STRING, obrigatório
$ curl https://whatsapp.turn.io/v1/stacks \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"name": "Minha Jornada de Código",
"publish_latest_changes": true,
"enabled": true,
"notebook": "stack Jornada do\n card Cartão do\n text(\"olá\")\n end\nend"
}'
> {
"name": "Minha Jornada de Código",
"uuid": "d144cb30-f759-4260-82ba-07353f0e389f",
"updated_at": "2024-09-04T19:05:50.802047Z",
"inserted_at": "2024-09-04T19:05:50.802047Z",
"is_canvas": false,
"url": "https://whatsapp.turn.io/v1/stacks/d144cb30-f759-4260-82ba-07353f0e389f",
"is_notebook_valid": true,
"production_notebook_revision_uuid": "1bd73256-8c13-4057-89a7-a8e3b5c139a9",
"enabled": true,
"has_unpublished_changes": false
}
Atualizando uma Jornada
Para atualizar uma jornada, você precisa fornecer um objeto JSON com os seguintes campos:
name
: STRING, opcionalpublish_latest_changes
: BOOLEAN, padrão éfalse
enabled
: BOOLEAN, opcionalnotebook
: STRING, opcional
$ curl -X PATCH https://whatsapp.turn.io/v1/stacks/d144cb30-f759-4260-82ba-07353f0e389f \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"name": "Novo Nome",
"publish_latest_changes": true,
"enabled": true,
"notebook": "stack Jornada do\n card Cartão do\n text(\"oi\")\n end\nend"
}'
> {
"name": "Novo Nome",
"uuid": "d144cb30-f759-4260-82ba-07353f0e389f",
"updated_at": "2024-09-04T19:05:50.802047Z",
"inserted_at": "2024-09-05T20:02:51.102046Z",
"is_canvas": false,
"url": "https://whatsapp.turn.io/v1/stacks/d144cb30-f759-4260-82ba-07353f0e389f",
"is_notebook_valid": true,
"enabled": true,
"production_notebook_revision_uuid": "617af2c4-eca6-47d6-9ffc-7a614b5d22f9",
"has_unpublished_changes": false
}
Publicar Última Revisão do Notebook
Publique a versão mais recente de uma jornada.
$ curl -X POST https://whatsapp.turn.io/v1/stacks/2299109f-04aa-4fb4-bb41-a3f653e63658/publish \
-H "Authorization: Bearer <token>"
> {"success": true}
Obter detalhes de todas as Jornadas
Obtenha os detalhes de todas as jornadas de um determinado número.
$ curl https://whatsapp.turn.io/v1/stacks \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json"
> '[
{
"inserted_at": "2023-09-05T15:17:43.073516Z",
"name": "Minha Jornada Canvas",
"is_canvas": true,
"is_notebook_valid": true,
"updated_at": "2023-09-05T15:17:43.073516Z",
"url": "https://whatsapp.turn.io/v1/stacks/280f7035-be13-46ab-90e6-15fbc75ca973",
"uuid": "280f7035-be13-46ab-90e6-15fbc75ca973",
"enabled": true,
"has_unpublished_changes": true,
"production_notebook_revision_uuid": null
},
{
"inserted_at": "2023-08-05T15:17:43.073516Z",
"name": "Minha Jornada de Código",
"is_canvas": false,
"is_notebook_valid": true,
"updated_at": "2023-10-01T12:19:43.073512Z",
"url": "https://whatsapp.turn.io/v1/stacks/2299109f-04aa-4fb4-bb41-a3f653e63658",
"uuid": "2299109f-04aa-4fb4-bb41-a3f653e63658",
"enabled": false,
"has_unpublished_changes": false,
"production_notebook_revision_uuid": "a666d2fc-6843-4d66-84e9-afbd1e898955"
}
]'
Obter especificação FLOIP da Jornada
Obtenha a especificação FLOIP de uma jornada específica como um arquivo JSON.
$ curl https://whatsapp.turn.io/v1/stacks/2299109f-04aa-4fb4-bb41-a3f653e63658 \
-H "Authorization: Bearer <token>"
> '{
"description": "Descrição padrão",
"flows": [
{
"blocks": [
{
"config": {
"prompt": "363a3491-c781-497c-b502-ea195ca0c835"
},
"exits": [
{
"config": {},
"default": true,
"destination_block": null,
"name": "card_text",
"semantic_label": "",
"test": "",
"uuid": "39a1cfcd-c88d-445b-8c43-fdf9c24ace6f",
"vendor_metadata": {}
}
],
"label": null,
"name": "card_text",
"semantic_label": null,
"tags": [],
"type": "MobilePrimitives.Message",
"ui_metadata": {
"canvas_coordinates": {
"x": 0,
"y": 0
}
},
"uuid": "36ca1800-af6a-5f9a-a207-6f57deab175d",
"vendor_metadata": {
"io": {
"turn": {
"stacks_dsl": {
"0.1.0": {
"card": {
"condition": null,
"meta": {
"column": 3,
"line": 2
},
"name": "Card",
"uuid": "4d692c00-9ba9-54f9-a873-e3900b9eb5db"
},
"card_item": {
"meta": {
"column": 5,
"line": 3
},
"text": {},
"type": "text"
},
"index": 0
}
}
}
}
}
}
],
"exit_block_id": "",
"first_block_id": "36ca1800-af6a-5f9a-a207-6f57deab175d",
"interaction_timeout": 300,
"label": null,
"languages": [
{
"bcp_47": null,
"id": "93acf2a1-f165-468a-9e36-ae5b174fe2a2",
"iso_639_3": "eng",
"label": "Inglês",
"variant": null
}
],
"last_modified": "2024-07-28T22:12:41.044217Z",
"name": "jornada",
"supported_modes": [
"RICH_MESSAGING"
],
"uuid": "5f397f22-2710-4754-99e5-21e96a85bfac",
"vendor_metadata": {}
}
],
"name": "Minha Jornada de Código",
"resources": [
{
"uuid": "363a3491-c781-497c-b502-ea195ca0c835",
"values": [
{
"content_type": "TEXT",
"language_id": "93acf2a1-f165-468a-9e36-ae5b174fe2a2",
"mime_type": "text/plain",
"modes": [
"RICH_MESSAGING"
],
"value": "olá"
}
]
}
],
"specification_version": "1.0.0-rc3",
"uuid": "c666d2fc-6843-4d66-84e9-afbd1e898955",
"vendor_metadata": {}
}'
Obter o código cru da Jornada
Obtenha o código cru da Jornada como um arquivo markdown.
$ curl https://whatsapp.turn.io/v1/stacks/2299109f-04aa-4fb4-bb41-a3f653e63658?format=md \
-H "Authorization: Bearer <token>"
> '
# Minha primeira Jornada em código
<!-- { section: "98ec5f44-da93-479b-a83a-054409eb1107", x: 0, y: 0} -->
```stack
stack Jornada do
card Card do
text("hi")
end
end
```
'
Iniciar uma Jornada via chamada HTTP
Se uma jornada no WhatsApp for iniciada para uma conversa após mais de 24 horas, ela deve começar enviando uma mensagem de modelo (template). O WhatsApp exige que você inicie uma conversa com um modelo (template) se a última mensagem do usuário tiver mais de 24 horas.
Nos canais de API HTTP da Turn.io, você pode iniciar uma jornada para uma conversa sem uma mensagem de modelo (template) após mais de 24 horas usando esta API. (Por enquanto, não é possível usar a interface Inbox UI para iniciar uma jornada para uma conversa após mais de 24 horas).
Para iniciar uma jornada, as seguintes condições precisam ser atendidas:
- Deve-se fornecer o ID do WhatsApp (ou número de telefone) do contato para quem a jornada será iniciada. Uma jornada pode ser iniciada atualmente apenas para um único usuário. Vários usuários exigirão várias chamadas da API HTTP.
- Pode-se iniciar uma jornada apenas para um contato que já tenha enviado uma mensagem para o serviço na Turn.io anteriormente. Isso ocorre porque a jornada requer uma mensagem para criar o contexto necessário para a execução da jornada. Essa mensagem estará disponível no contexto de variáveis da jornada sob
event.message
. Um parâmetromessage_id
pode ser fornecido opcionalmente e essa mensagem será usada para preencher o contexto. Caso contrário, a última mensagem no chat será usada. - Se o contato em questão já estiver em uma sessão ativa na Turn.io, a jornada não será iniciada.
$ curl -H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-X POST \
-d '{"wa_id": "<o-id-do-whatsapp-do-usuario>"}' \
https://whatsapp.turn.io/v1/stacks/<o-uuid-da-jornada-a-iniciar>/start
A jornada será iniciada imediatamente, não há como agendar uma jornada neste momento.
Para iniciar uma jornada com uma mensagem de referência diferente da mais recente:
$ curl -H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-X POST \
-d '{
"wa_id": "<o-id-do-whatsapp-do-usuario>",
"message_id": "<o-id-da-mensagem-de-referencia>"
}' \
https://whatsapp.turn.io/v1/stacks/<o-uuid-da-jornada-a-iniciar>/start
Quando uma jornada é iniciada corretamente, ela responderá com um status HTTP 201
e o JSON {"success": true}
.
Se falhar, retornará um erro no intervalo HTTP 400
com um JSON explicando o motivo da falha.
Obter logs da Jornada
Obtenha os logs de uma jornada específica. Retorna os 1000 logs mais recentes, ordenados por timestamp de forma ascendente.
Parâmetros opcionais
from
: mostra apenas logs que foram registrados após um timestamp específico (em microssegundos).
$ curl https://whatsapp.turn.io/v1/stacks/<o-uuid-da-jornada>/logs?from=1687569529563008 \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json"
> '[
{
"level": "info",
"message": "olá mundo",
"metadata": {
"app": "https://whatsapp.turn.io/app/number/39de874e-e916-49b4-9670-e6f6ce704ae9",
"chat": "https://whatsapp.turn.io/app/c/3d8009e1-9b2e-4872-a601-debc74185fcf",
"card": %{
"condition": null,
"meta": %{"column": 3, "line": 8},
"name": "Greeting"
},
"session_id": "001056e6-b9d5-4c3f-bddf-74d66483d072",
"stack": "https://whatsapp.turn.io/app/stacks/39de874e-e916-49b4-9670-e6f6ce704ae9/12719410-6fab-4ff2-8029-2f136dafd5e0"
},
"timestamp": 1687569529563012
},
{
"level": "error",
"message": "[body: \"ERROR: timeout\", status: nil, type: \"webhook\"]",
"metadata": {
"app": "https://whatsapp.turn.io/app/number/39de874e-e916-49b4-9670-e6f6ce704ae9",
"chat": "https://whatsapp.turn.io/app/c/3d8009e1-9b2e-4872-a601-debc74185fcf",
"card": %{
"condition": null,
"meta": %{"column": 8, "line": 24},
"name": "CallApi"
},
"session_id": "001056e6-b9d5-4c3f-bddf-74d66483d072",
"stack": "https://whatsapp.turn.io/app/stacks/39de874e-e916-49b4-9670-e6f6ce704ae9/12719410-6fab-4ff2-8029-2f136dafd5e0",
"support_id": "fcb6d55f95e4406db2b583b8f2004449"
},
"timestamp": 3012569529564529
}
]'