Enviar mensagem iterando (loop) sobre array de mensagens vindas do Request HTTP

Estou com uma dúvida funcional aqui com o Builder do Blip.

Tenho um Array de mensagens oriunda de minha API, desejo entregá-las cada mensagem em um bloco de mensagens de conteúdo separadamente, a quantidade de mensagens é dinâmica (obviamente limitada a uma quantidade que não atrapalhe a experiência do usuário.

Essa é a forma que desejo apresentar:

lista atendimentos
Dados da minha API

{
    "status": "ok",
    "results": [{
            "horario_atendimento": "01/01/2020 ás 9:40",
            "numero_atendimento": "10102002020",
            "Assunto": "Pensão Alimentícia"
        },
        {
            "horario_atendimento": "01/01/2020 ás 9:40",
            "numero_atendimento": "10102002020",
            "Assunto": "Pensão Alimentícia"
        },
        {
            "horario_atendimento": "01/01/2020 ás 9:40",
            "numero_atendimento": "10102002020",
            "Assunto": "Pensão Alimentícia"
        },
        {
            "horario_atendimento": "01/01/2020 ás 9:40",
            "numero_atendimento": "10102002020",
            "Assunto": "Pensão Alimentícia"
        },
        {
            "horario_atendimento": "01/01/2020 ás 9:40",
            "numero_atendimento": "10102002020",
            "Assunto": "Pensão Alimentícia"
        }
    ]
}

Qual seria a melhor forma de realizar esse loop?

Oi @LuizCarvalho como vai?

Você pode usar o tipo de Conteúdo Collection que nada mais é que uma “lista” de várias mensagens enviadas de uma vez.

1 Curtida

@Bruno Obrigado pela resposta, mas acho que faltou um detalhe, estou utilizando no Builder a ação Requisição HTTP esse JSON é carregado no body de uma variável. Gostaria de saber se iterar sobre essa variável, onde cada item do array seja uma mensagem separada.

Essa é uma adaptação ao Carrossel do Facebook Messenger, já que irei usar o Blip para Whatsapp.

Entendi, Luiz.

No caso você vai precisar criar um Script que receba essa variável e converta ela para o Collection que te falei. Aí você vai poder usar um Conteúdo Dinâmico pra retornar isso pro usuário.

Vou deixar aqui um artigo/exemplo de como você pode fazer isso:

Obrigado novamente pela resposta @Bruno

Gostei muito da dica de converter para Collection, mas vi que o conteúdo dinâmico do exemplo compila toda a informação em um texto apenas (considerando Whatsapp), há como cada item do Collection ser exibido em uma mensagem separadamente?

@LuizCarvalho no exemplo que eu te passei, é enviando um tipo Texto normal.

Quando você envia um Collection, é como se estivesse enviando vários textos. Então vai separado.

Excepcional meu amigo @Bruno vou testar aqui.

Obrigado novamente.

@Bruno infelizmente não consegui formatar o dado de forma que o Collection fosse interpretado de forma correta, tentei só como array puro, tentei com a com a chave items, e por último tentei passando a chave type como na documentação e nada.

Busquei na documentação , artigos, stackoverflow, etc… Sem sucesso para um exemplo como esse.

Último formato JSON testado:

{
    "itemType": "text/plain",
    "items": [
        "Horário 01/01/2020 ás 9:40\n Numero Atendimento10102002020 \n Assunto Pensão Alimentícia",
        "Horário 01/01/2020 ás 9:40\n Numero Atendimento10102002020 \n Assunto Pensão Alimentícia",
        "Horário 01/01/2020 ás 9:40\n Numero Atendimento10102002020 \n Assunto Pensão Alimentícia",
        "Horário 01/01/2020 ás 9:40\n Numero Atendimento10102002020 \n Assunto Pensão Alimentícia"
    ]
}

Conteúdo dinâmico

[DEBUG] Erro no parse da informação

Failed: SendRawMessage action in 3 milliseconds
order: 0
type: "SendRawMessage"
parsedSettings: {"metadata":{"#stateName":"Meus atendimentos","#stateId":"6077137c-d24c-435b-93d8-79d1a81ff070","#messageId":"aef2e569-304e-4dfa-bf7e-699c527685ed"},"type":"application/vnd.lime.collection+json","rawContent":"atendimentosResponse"}
continueOnError: false
timestamp: "2020-06-01T14:39:42.517Z"
 elapsedMilliseconds: 3

error: "Newtonsoft.Json.JsonReaderException: Unexpected character encountered while parsing value: a. Path '', line 0, position 0.\n at Newtonsoft.Json.JsonTextReader.ParseValue()\n at Newtonsoft.Json.Linq.JObject.Load(JsonReader reader, JsonLoadSettings settings)\n at Newtonsoft.Json.Linq.JObject.Parse(String json, JsonLoadSettings settings)\n at Lime.Protocol.Serialization.DocumentSerializer.Deserialize(String value, MediaType mediaType)\n at Take.Blip.Builder.Actions.SendRawMessage.SendRawMessageAction.ExecuteAsync(IContext context, SendRawMessageSettings settings, CancellationToken cancellationToken)\n at Take.Blip.Builder.Actions.ActionBase`1.ExecuteAsync(IContext context, JObject settings, CancellationToken cancellationToken)\n at Takenet.Iris.Application.TemplateHosting.Templates.Builder.MetricsActionDecorator.ExecuteAsync(IContext context, JObject settings, CancellationToken cancellationToken) in /usr/app/src/Applications/Takenet.Iris.Application.TemplateHosting/Templates/Builder/MetricsActionDecorator.cs:line 62\n at Take.Blip.Builder.FlowManager.ProcessActionsAsync(LazyInput lazyInput, IContext context, Action[] actions, ICollection`1 actionTraces, CancellationToken cancellationToken)"

@LuizCarvalho quero te pedir desculpas, cometi um engano (inclusive isso está escrito na documentação e eu deixei passar).

No WhatsApp o Collection é interpretado como sendo várias linhas de uma mesma mensagem. Utilizei o JSON que você enviou e a resposta que recebi foi essa:

image

Vamos ter que pensar numa forma de enviar várias mensagens pro usuário, uma de cada vez, baseada na resposta da sua API. Neste caso não vai ser possível enviar sem o usuário ter que ficar dando entrada entre cada mensagem, pois o bot acusará que está em loop. O ideal aqui é criar uma API que envia as mensagens.

1 Curtida

pooxaa

Aqui me bateu uma tristeza aqui… Pq no Messenger eles fazem esse split e no Whatsapp não? Se quisesse mandar tudo junto, era só mandar td junto.

Mas fazer o q ne?
Obrigado mesmo assim @Bruno

=(

2 Curtidas

Este tópico foi fechado automaticamente 7 dias depois da úlima resposta. Novas respostas não são mais permitidas.