Testar Integração/API Softswitch

O objetivo deste documento é mostrar como realizar testes utilizando o web service do Softswitch.

O teste foi realizado na versão 5 e utilizado como base o documento Integração - PCRT 5.6.1

O softswitch utiliza o padrão de arquitetura SOAP, para testar iremos utilizar o Soap Ui:

Ao iniciar o Soap Ui, criaremos um novo projeto:

Inserindo um link wsdl, ele irá procurar todos os requests disponíveis para serem utilizados. No exemplo foi inserido o link http://IP_INTERACE:PORTA/SipPulse/SubscriberWS?wsdl mostrando todos requests relacionados à Subscriber:

 

Na documentação de integração terá todas informações necessárias contendo os links e variáveis que devem ser utilizadas.

Seguem exemplos:

DIDs:
http://sippulse.com:8080/SipPulse/DidWS?wsdl

Revendas:

http://sippulse.com:8080/SipPulse/ResellerWS?wsdl

Hunt Group:

http://sippulse.com:8080/SipPulse/HuntGroupWS?wsdl

Após inserir o link deve aparecer a lista de requests disponíveis:

Para realizar a insersão de um assinante, basta dar dois cliques no request e irá abrir uma nova tela contendo todos dados disponíveis para serem enviados no request:

Preencher também as informações do usuário que irá enviar o request:

OBS: O usuário utilizado pela API é o mesmo utilizado para acessar a interface web. Caso haja necessidade deve ser criado um novo usuário na interface web:

 

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://service.ws.sippulse.voffice.com.br/"> <soapenv:Header/> <soapenv:Body> <ser:insertSubscriber> <!--Optional:--> <subscriber> <!--Optional:--> <accountCode>teste_integra3@ssw5.sippulse.com</accountCode> <activeIncomingCalls>true</activeIncomingCalls> <activeOutgoingCalls>true</activeOutgoingCalls> <addServiceHeader>false</addServiceHeader> <!--Optional:--> <address></address> <!--Optional:--> <areaCode>48</areaCode> <blockAnonymousCalls>true</blockAnonymousCalls> <blockCollectCalls></blockCollectCalls> <blockEntry0303>false</blockEntry0303> <!--Optional:--> <callFwd></callFwd> <!--Optional:--> <callLimit>0</callLimit> <callsOnlyByIp>false</callsOnlyByIp> <!--Optional:--> <city></city> <!--Optional:--> <cityCode>55</cityCode> <!--Optional:--> <complement></complement> <!--Optional:--> <contractNumber></contractNumber> <copyPassertedRpid>false</copyPassertedRpid> <!--Optional:--> <countryCode>55</countryCode> <!--Optional:--> <document></document> <!--Optional:--> <domain>ssw5.sippulse.com</domain> <!--Optional:--> <emailAddress>teste_integra3@sippulse.com</emailAddress> <!--Optional:--> <firstName></firstName> <!--Optional:--> <fwdBusy></fwdBusy> <!--Optional:--> <id></id> <!--Optional:--> <lastName></lastName> <!--Optional:--> <localArea>SC</localArea> <lowCreditLimit>0.0</lowCreditLimit> <lowCreditNotification>false</lowCreditNotification> <!--Optional:--> <mobile></mobile> <!--Optional:--> <noAnswer></noAnswer> <!--Optional:--> <number></number> <!--Optional:--> <password>teste123</password> <!--Optional:--> <passwordPortal>teste123</passwordPortal> <!--Optional:--> <phone></phone> <!--Optional:--> <profile>teste</profile> <!--Optional:--> <quarter></quarter> <!--Optional:--> <ratePlanId>2</ratePlanId> <resellerBillingType></resellerBillingType> <!--Optional:--> <resellerId>1</resellerId> <resellerMarkup>1</resellerMarkup> <!--Optional:--> <resellerRatePlanId></resellerRatePlanId> <!--Optional:--> <rings></rings> <!--Optional:--> <rpid></rpid> <softphoneAllowed>true</softphoneAllowed> <!--Optional:--> <state></state> <!--Optional:--> <username>teste_integra3</username> <validateSource0303>false</validateSource0303> <!--Optional:--> <voiceMailPassword>teste123</voiceMailPassword> <voicemail>teste_integra3@sippulse.com</voicemail> <!--Optional:--> <zip></zip> </subscriber> <!--Optional:--> <principal> <!--Optional:--> <login>suportepulse</login> <!--Optional:--> <password>@#ashdiuhs87856!!</password> </principal> </ser:insertSubscriber> </soapenv:Body> </soapenv:Envelope>

 

 

Identificando erros:

Os logs de insersão de dados podem ser consultados no log do glassfish, no exemplo a variável blockCollectCalls é do tipo boolean e é requirida para insersão de assinantes. No request foi enviado sem definir um valor:

cd /opt/glassfish/domains/domain1/logs tail -f server.log

Ao clicar em executar no Soap UI é gerado um log no glassfish. Através dele é possível analisar e identificar a variável que está causando a falha:

at br.com.voffice.sippulse.ws.dto.SubscriberDTO$JaxbAccessorM_isBlockCollectCalls_setBlockCollectCalls_boolean.set(MethodAccessor_Boolean.java:59)

 

Outro caso que podemos encontrar na API SOAP é quando não há um usuário administrador no SSW e tentamos enviar uma requisição.

Não existe um log especificando o erro explicitamente, mas notamos a seguinte mensagem:

O erro TransactionRolledbackLocalException ocorre porque o GlassFish reverteu a transação devido a uma ArrayIndexOutOfBoundsException, que acontece quando o código tenta acessar um índice inválido de um array ou lista vazia. Isso pode estar relacionado a dados ausentes ou inválidos (como login e senha no XML). Para resolver, valide os dados de entrada, trate exceções adequadamente no EJB, e revise os logs para entender melhor a origem do problema.

 

 

DICA:

Após entender quais campos são necessários para enviar a requisição você pode montar um POST utilizando o comando Curl:
Atente-se aos campos obrigatórios como Rateplan e Profile.

SIPPulse Routing and Billing Solutions for SIP