mcorp / locasms

Client to consume LocaSMS api's
MIT License
4 stars 7 forks source link

Documentação (Wiki) não descreve a estrutura da resposta do serviço de consulta de campanha #17

Open UlyssesAlves opened 7 years ago

UlyssesAlves commented 7 years ago

Na página de documentação do serviço de consulta de campanha não está claro o que cada um dos diversos valores contidos no campo data significam na resposta do serviço.

Por exemplo, a documentação explica que, para o caso de mix de números válidos e inválidos (aguardando envio) a resposta deve ser na estrutura abaixo:

{ "status":0, "data":"'24021571';'N';'14/10/2013 22:28:02';'';'';'SEM TÍTULO';'Numero invalido ou nao cadastrado';'';'S';'';'88889999';'88889999';'Feliz natal'\n'24021572';'N';'14/10/2013 22:28:02';'';'';'SEM TÍTULO';'Aguardando envio';'';'S';'TIM';'4196363940';'4196363940';'Feliz natal'", "msg":null }

Minha dúvida é sobre o campo data:

"data":"'24021571';'N';'14/10/2013 22:28:02';'';'';'SEM TÍTULO';'Numero invalido ou nao cadastrado';'';'S';'';'88889999';'88889999';'Feliz natal'\n'24021572';'N';'14/10/2013 22:28:02';'';'';'SEM TÍTULO';'Aguardando envio';'';'S';'TIM';'4196363940';'4196363940';'Feliz natal'"

Entendo que isso são provavelmente vários resultados concatenados, porém não está simples entender onde começa cada repetição dos resultados, ou o que cada trecho dessa resposta representa (se é o número de telefone, a mensagem, data de envio, data de processamento, etc).

Existe alguma documentação específica de cada trecho do campo data retornado pelo serviço de consulta de status de campanha?

UlyssesAlves commented 7 years ago

De acordo com a análise que eu fiz, a estrutura do retorno do serviço de status da campanha é como segue: 'PROTOCOLO';'N';'DATA_ENVIO';'';'DATA_DE_ENTREGA';'TÍTULO';'STATUS';'';'S';'OPERADORA';'TELEFONE1';'TELEFONE2' ;'TELEFONE_N';'MENSAGEM'\n

O separador de cada registro é uma nova linha \n. Portanto, para processar essa resposta, o código cliente deve primeiro subdividir a string com base no caractere \n, obtendo assim cada um dos registros separados. Depois disso, basta dividir cada um dos registros com base no caractere ;, e o índice de cada campo será o equivalente à estrutura listada acima. Por exemplo, o PROTOCOLO será o primeiro campo, da data de envio o terceiro campo, e assim por diante.

UlyssesAlves commented 7 years ago

Deixarei o ticket aberto em caso de alguém atualizar a documentação com a estrutura que eu descrevi, ou caso a estrutura não esteja correta e for necessário alterá-la.

celsoandrade commented 7 years ago

Vamos ter que adivinhar cada campo de retorno...

UlyssesAlves commented 7 years ago

@celsoandrade a estrutura que eu apresentei parece estar correta, temos inclusive um sistema em produção enviando SMSs usando esse serviço. Sugiro que implemente seu código de envio de SMSs usando essa estrutura também.

vyper commented 7 years ago

O ideal seria de alguma forma encapsularmos isso na gem, né? Alguém aí com tempo? @celsoandrade? @UlyssesAlves? HEHEHE

celsoandrade commented 7 years ago

@UlyssesAlves o meu retorna diferente.. da uma olhada.. eu consegui adivinhar alguns baseado no SOAP mas ainda nao da pra ter certeza qual é o nome e qual o telefone ali aonde duplica o numero do telefone... lembrando que eu enviei a mensagem via API

  0 => "0000001" codigo
  1 => "N" spam
  2 => "24/08/2017 11:40:17" dh_entrada
  3 => ""
  4 => "24/08/2017 11:41:01" dh_envio
  5 => "SEM TÍTULO"
  6 => "SUCESSO" status
  7 => ""
  8 => "S"
  9 => "OI MÓVEL" destino_operadora
  10 => "11111111111" destino_nome // chutando porque nao da pra saber a ordem
  11 => "11111111111" destino_celular
  12 => "teste de msg"
UlyssesAlves commented 7 years ago

@celsoandrade Sua estrutura está praticamente igual a minha.

Acho que o que tá diferente é por que você está tentando passar o nome do destinatário na posição 10, mas pelo que eu entendi, após o campo da operadora (9) você tem que passar todos os números para os quais você deseja enviar o SMS, e a mensagem é informada no último parâmetro. Ou seja, o SMS nem sempre vai estar na posição 12 como no exemplo que você passou. Nesse caso está no 12 por que você enviou para apenas dois números de telefones. Mas se você enviasse para 5 números, por exemplo, então as posições 10, 11, 12, 13 e 14 todas seriam diferentes números de telefone, e a posição 15 seria o conteúdo da mensagem. Compreende?

celsoandrade commented 7 years ago

Essa foi a confusão então.. isso que mostrei é o retorno da action getstatus.. pra enviar a mensagem eu só passo a mensagem e os telefones.. Retorno da seguinte chamada: shortcode/api.ashx?action=getstatus&lgn=:usuario&pwd=:senha&id=:mensagem_id

UlyssesAlves commented 7 years ago

@celsoandrade Verdade, é a estrutura de retorno mesmo, eu falei envio mas é retorno.

Então, mas quando você envia a mensagem você pode passar uma lista de números destinatários no final da URL de envio de sms, como explicado na documentação:

http://54.173.24.177/painel/api.ashx?action=sendsms&lgn=login&pwd=senha&msg=mensagem& numbers=3194136747,3192450023

Daí esses números são retornados pra você pelo serviço da LocaSMS juntamente com as demais informações sobre cada envio. Ou seja, 3194136747 e 3192450023 seriam retornados pra você nas posições entre a operadora e conteúdo da mensagem na estrutura que você mostrou acima.