{"info":{"_postman_id":"7209db63-a4c8-4102-9f62-c0cda45d88c8","name":"Contact Center API","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[],"description":"<html><head></head><body></body></html>","owner":"9483797","collectionId":"7209db63-a4c8-4102-9f62-c0cda45d88c8","publishedId":"2s93JtP3Ey","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"1E90FF"},"publishDate":"2025-02-17T21:06:06.000Z"},"item":[{"name":"Authentication","item":[{"name":"Login and Get Token","id":"2d80e630-416b-429e-9a0f-ff65cc97dbe4","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"username\": \"MyUserName\",\r\n    \"password\": \"myPa$$w0rd\"\r\n}","options":{"raw":{"language":"json"}}},"url":"{{ApiBase}}/account/accesstoken","description":"<p>Autentica o utilizador e devolve o token necessário autenticar com o método Bearer Token os restantes pedidos à API.</p>\n<p>No Body do pedido deve ser enviado um objeto JSON com as seguintes propriedades:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Propriedade</th>\n<th>Tipo</th>\n<th>Descrição</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>username</td>\n<td>String</td>\n<td>Nome de utilizador, geralmente o email.</td>\n</tr>\n<tr>\n<td>password</td>\n<td>String</td>\n<td>a password do utilizador.</td>\n</tr>\n</tbody>\n</table>\n</div><p>Como Resposta obtem-se um objeto JSON como o seguinte:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n   \"redirectToken\": \"redirectToken\",\n    \"token\": \"Token\"\n}\n\n\n</code></pre>\n<p>Em que só o <em><strong>token</strong></em> é usado para autorização nos restantes métodos da API.</p>\n<p>O <em><strong>redirectToken</strong></em> destina~se a uso interno e pode ser descartado.</p>\n","urlObject":{"path":["account","accesstoken"],"host":["{{ApiBase}}"],"query":[],"variable":[]}},"response":[{"id":"ad64e03b-5a77-4fd3-86d1-bb45e4c82e8e","name":"Response 200","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"username\" : \"user@domain.tld\",\r\n    \"password\" : \"myPa$$w0rd\"\r\n}","options":{"raw":{"language":"json"}}},"url":"{{ApiBase}}/account/accesstoken"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Server","value":"nginx/1.20.1"},{"key":"Date","value":"Fri, 10 Mar 2023 14:56:29 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Connection","value":"keep-alive"}],"cookie":[],"responseTime":null,"body":"{\n    \"redirectToken\": \"JYdbaPeuEQjnNP5EzucwC18A25gFYnnsGAwG\",\n    \"token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1laWRlbnRpZmllciI6IjY3IiwiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wNS9pZGVudGl0eS9jbGFpbXMvbmFYXRpc3RhIiwidGVuYW50aWQiOiI3IiwidGltZXpuZWluZm8iOiJHTVQgU3RhbmRhcmQgVGltZSIsImNvdW50cnljb2RlIjoiMzUxIiwiY291bnRyeWlzb2NvZGUiOiJQVCIsImNvdW50cnluYW1lIjoiUG9ydHVnYWwiLCJncm91cGkIjoiNiIsImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vd3MvMjAwOC8wNi9pZGVudGl0eS9jbGFpbXMpbmlzdHJhdGlvbi5hcHAiLCJvcGVyYXRvci5ob21lLmFzciIsIm9wZXJhdG9yLmhvbWUuYW5zd2VyZWRDYWxscyIsIm9wZXJhdG9yLmhvbWUudG90YWxDb252ZXJzYXRpb24iLCJvcGVyYXRvci5ob21lLmF2ZXJhZ2VUYWxrVGltZSIsIm9wZXJhdG9yLmF1dGhlbnRpY2F0aW9uIiwib3BlcmF0b3IuYnJlYWtzLmFjY2VzcyIsIm9wZXJhdG9yLmNhbXBhaWducy5hY2Nlc3MiLCJvcGVyYXRvci5jYWxscy5yZXBvcnRzLmFjY2VzcyIsIm9wZXJhdG9yLmNhbGxzLnJlcG9ydHMuZXhwb3J0Iiwib3BlcmF0b3IuY2FsbHMucmVwb3J0cy5yZWNvcmRpbmdzIiwib3BlcmF0b3IuY2FsbHMuc21zIiwib3BlcmF0b3IuY2FsbHMuY2VydGlmaWVkU01TIiwib3BlcmF0b3IuY2FsbHMuZW1haWwiLCJvcGVyYXRvci5jb250YWN0cy5hY2Nlc3MiLCJvcGVyYXRvci5jb250YWN0cy5zbXMiLCJvcGVyYXRvci5jb250YWN0cy5lbWFpbCIsIm9wZXJhdG9yLmNvbnRhY3RzLnRhc2tzLmFjY2VzcyIsIm9wZXJhdG9yLmNvbnRhY3RzLnRhc2tzLm1hbmFnZSIsIm9wZXJhdG9yLmNvbnRhY3RzLnRhc2tzLnF1ZXVlTWFuYWdlIiwib3BlcmF0b3IuY29udGFjdHMubWFuYWdlIiwib3BlcmF0b3IuY29udGFjdHMuYWxsIiwib3BlcmF0b3IuZW1haWwuc210cCIsIm9wZXJhdG9yLmVtYWlsLmltYXAiLCJvcGVyYXRvci5iZXRhIiwib3BlcmF0b3IuY29udmVyc2F0aW9ucy5hY2Nlc3MiLCJvcGVyYXRvci5jb252ZXJzYXRpb25zLmludGVybmFsY2hhdCIsIm9wZXJhdG9yLmNhbGxzLmxhc3RDYWxscy41Il0sImV4cCI6MTY3ODQ4ODk4OX0.y4H2Zwo35FZpJe-nqxMv2PBePd-VtjU2zyTwurFHZNk\"\n}"}],"_postman_id":"2d80e630-416b-429e-9a0f-ff65cc97dbe4"}],"id":"94528598-beda-430c-97ae-7d45a3766a99","description":"<ul>\n<li>Métodos de autenticação.</li>\n</ul>\n","_postman_id":"94528598-beda-430c-97ae-7d45a3766a99"},{"name":"Contact Management","item":[{"name":"Contacts","item":[{"name":"Get CRM Contact by ID","id":"58780590-9363-46a7-9ea9-e3fbbc2bba71","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"GET","header":[],"url":"{{ApiBase}}/contact/getcontactbyid?id={{ContactID}}","description":"<p>Obtem um contacto através do seu ID.</p>\n<p>Aceita como parametros:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Parâmetro</strong></th>\n<th><strong>Tipo</strong></th>\n<th><strong>Descrição</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>id</td>\n<td>inteiro</td>\n<td>O Identificador do Contacto</td>\n</tr>\n</tbody>\n</table>\n</div><p>Como resposta devolve um bjeto JSON como o seguinte:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"id\": 8014,\n    \"name\": \"João Ratão\",\n    \"avatar\": null,\n    \"userID\": 6,\n    \"isPrivate\": false,\n    \"companyName\": null,\n    \"companyID\": 0,\n    \"callID\": 0,\n    \"companyFields\": null,\n    \"contactFields\": [\n        {\n            \"id\": 48999,\n            \"formFieldID\": 3,\n            \"value\": \"my work place\",\n            \"label\": \"work\"\n        }\n    ]\n}\n\n</code></pre>\n","urlObject":{"path":["contact","getcontactbyid"],"host":["{{ApiBase}}"],"query":[{"key":"id","value":"{{ContactID}}"}],"variable":[]}},"response":[{"id":"8db5a1bf-f217-4854-af2a-908c0ff78bc4","name":"Response 200","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{ApiBase}}/contact/getcontactbyid?id=8014","host":["{{ApiBase}}"],"path":["contact","getcontactbyid"],"query":[{"key":"id","value":"8014"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Server","value":"nginx/1.20.1"},{"key":"Date","value":"Fri, 10 Mar 2023 14:44:32 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Connection","value":"keep-alive"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 8014,\n    \"name\": \"João Ratão\",\n    \"avatar\": null,\n    \"userID\": 6,\n    \"isPrivate\": false,\n    \"companyName\": null,\n    \"companyID\": 0,\n    \"callID\": 0,\n    \"companyFields\": null,\n    \"contactFields\": [\n        {\n            \"id\": 48999,\n            \"formFieldID\": 3,\n            \"value\": \"batatas\",\n            \"label\": \"work\"\n        }\n    ]\n}"}],"_postman_id":"58780590-9363-46a7-9ea9-e3fbbc2bba71"},{"name":"Get CRM Contact Form Fields","id":"fada61bb-44ec-4008-8c61-b83f21b47a7c","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"GET","header":[],"body":{"mode":"graphql","graphql":{"query":"","variables":""}},"url":"{{ApiBase}}/contact/getcontactformfields","description":"<ul>\n<li>Devolve a lista de campos, incluindo os personalizados, que caracterizam os contactos.</li>\n<li>Não necessita de parametros de entrada, usa apenas barear token para autorização.</li>\n</ul>\n<p>Devolve uma estrutura JSON como a seguinte:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">[\n  {\n    \"id\": 1,\n    \"source\": 2,\n    \"type\": 0,\n    \"name\": \"job\",\n    \"defaultValue\": null,\n    \"isRequired\": false,\n    \"options\": null\n  },\n  {\n    \"id\": 2,\n    \"source\": 2,\n    \"type\": 11,\n    \"name\": \"company\",\n    \"defaultValue\": null,\n    \"isRequired\": false,\n    \"options\": null\n  },\n  {\n    \"id\": 3,\n    \"source\": 2,\n    \"type\": 12,\n    \"name\": \"phone\",\n    \"defaultValue\": null,\n    \"isRequired\": false,\n    \"options\": [\n      \"work\",\n      \"home\",\n      \"mobilePhone\",\n      \"other\"\n    ]\n  }\n]\n\n</code></pre>\n<p>Chama-se a atenção para as propriedades <strong>source</strong> e <strong>type</strong> que representam respetivamente a que tipo de contacto e o tipo de campo a que estão associados, conforme os enums seguintes:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>source</strong></th>\n<th><strong>type</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Company = 1,  <br />Contact = 2</td>\n<td>Text = 0  <br />TextArea = 1  <br />Checkbox = 2  <br />Numeric = 3  <br />Date = 4  <br />DateTime = 5  <br />Radio = 8  <br />Select = 9  <br />SelectMulti = 10</td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"path":["contact","getcontactformfields"],"host":["{{ApiBase}}"],"query":[],"variable":[]}},"response":[{"id":"f8a9741e-1007-4e44-af08-c8dd17ddb709","name":"Response 200","originalRequest":{"method":"GET","header":[],"body":{"mode":"graphql","graphql":{"query":"","variables":""}},"url":"{{ApiBase}}/contact/getcontactformfields"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Server","value":"nginx/1.20.1"},{"key":"Date","value":"Fri, 10 Mar 2023 14:20:26 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Connection","value":"keep-alive"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"id\": 1,\n        \"source\": 2,\n        \"type\": 0,\n        \"name\": \"job\",\n        \"defaultValue\": null,\n        \"isRequired\": false,\n        \"options\": null\n    },\n    {\n        \"id\": 2,\n        \"source\": 2,\n        \"type\": 11,\n        \"name\": \"company\",\n        \"defaultValue\": null,\n        \"isRequired\": false,\n        \"options\": null\n    },\n    {\n        \"id\": 3,\n        \"source\": 2,\n        \"type\": 12,\n        \"name\": \"phone\",\n        \"defaultValue\": null,\n        \"isRequired\": false,\n        \"options\": [\n            \"work\",\n            \"home\",\n            \"mobilePhone\",\n            \"other\"\n        ]\n    },\n    {\n        \"id\": 4,\n        \"source\": 2,\n        \"type\": 13,\n        \"name\": \"email\",\n        \"defaultValue\": null,\n        \"isRequired\": false,\n        \"options\": [\n            \"work\",\n            \"home\"\n        ]\n    },\n    {\n        \"id\": 5,\n        \"source\": 2,\n        \"type\": 14,\n        \"name\": \"url\",\n        \"defaultValue\": null,\n        \"isRequired\": false,\n        \"options\": [\n            \"Website\",\n            \"Linkedin\",\n            \"Twitter\",\n            \"Facebook\",\n            \"Instagram\"\n        ]\n    },\n    {\n        \"id\": 7,\n        \"source\": 2,\n        \"type\": 9,\n        \"name\": \"status\",\n        \"defaultValue\": null,\n        \"isRequired\": false,\n        \"options\": [\n            \"lead\",\n            \"prospect\",\n            \"customer\",\n            \"inactive\",\n            \"general\"\n        ]\n    },\n    {\n        \"id\": 8,\n        \"source\": 2,\n        \"type\": 10,\n        \"name\": \"tags\",\n        \"defaultValue\": null,\n        \"isRequired\": false,\n        \"options\": [\n            \"Tag 1\",\n            \"Tag 2\",\n            \"Tag 3\",\n            \"Tag 4\",\n            \"Tag 5\"\n        ]\n    },\n    {\n        \"id\": 9,\n        \"source\": 2,\n        \"type\": 9,\n        \"name\": \"source\",\n        \"defaultValue\": null,\n        \"isRequired\": false,\n        \"options\": [\n            \"advertisement\",\n            \"email\",\n            \"partner\"\n        ]\n    },\n    {\n        \"id\": 10,\n        \"source\": 2,\n        \"type\": 1,\n        \"name\": \"notes\",\n        \"defaultValue\": null,\n        \"isRequired\": false,\n        \"options\": null\n    },\n    {\n        \"id\": 11,\n        \"source\": 1,\n        \"type\": 12,\n        \"name\": \"phone\",\n        \"defaultValue\": null,\n        \"isRequired\": false,\n        \"options\": [\n            \"work\",\n            \"home\",\n            \"mobilePhone\",\n            \"other\"\n        ]\n    },\n    {\n        \"id\": 12,\n        \"source\": 1,\n        \"type\": 0,\n        \"name\": \"nif\",\n        \"defaultValue\": null,\n        \"isRequired\": false,\n        \"options\": null\n    },\n    {\n        \"id\": 15,\n        \"source\": 2,\n        \"type\": 5,\n        \"name\": \"Data\",\n        \"defaultValue\": null,\n        \"isRequired\": false,\n        \"options\": null\n    },\n    {\n        \"id\": 16,\n        \"source\": 1,\n        \"type\": 14,\n        \"name\": \"url\",\n        \"defaultValue\": null,\n        \"isRequired\": false,\n        \"options\": [\n            \"Website\",\n            \"Linkedin\",\n            \"Twitter\",\n            \"Facebook\",\n            \"Instagram\"\n        ]\n    }\n]"}],"_postman_id":"fada61bb-44ec-4008-8c61-b83f21b47a7c"},{"name":"Add CRM Contact","id":"fcdfa7b6-1e43-4ced-a8d8-18bca5f175a6","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n  \"name\": \"João Ratinho\",\r\n  \"userId\": 6,\r\n  \"isPrivate\" : true,\r\n  \"contactFields\": [{\r\n    \"id\": 0,\r\n    \"formFieldID\": 3,\r\n    \"value\": \"351210000000\",\r\n    \"label\": \"work\"\r\n  },{\r\n    \"id\": 0,\r\n    \"formFieldID\": 3,\r\n    \"value\": \"351910000000\",\r\n    \"label\": \"personal\"\r\n  }]\r\n}","options":{"raw":{"language":"json"}}},"url":"{{ApiBase}}/contact/addcontact","description":"<p>Permite adicionar um contacto, utilizando no body uma estrutura JSON como em baixo.</p>\n<p>Nessa estrutura, teremos que ter em conta os tipos dos campos como descrito em \"Get ContactForm Fields\".</p>\n<p>Assim, passamos a explicar os atributos mais importantes da estrutura exemplo:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Atributo</strong></th>\n<th><strong>Descrição</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><em><strong>userId</strong></em></td>\n<td>O ID do utilizador do sistema a quem vai ser atribuído o contacto.  <br />ou <em><strong>Null</strong></em> caso não se queira atrubuír a um utilizador.</td>\n</tr>\n<tr>\n<td><em><strong>isPrivate</strong></em></td>\n<td>Se <em><strong>true</strong></em> o contacto apenas será visto no sistema pelo utilizador a que foi atribuído através do <em><strong>userId</strong></em></td>\n</tr>\n<tr>\n<td><em><strong>contactFields [ ]</strong></em>  <br /></td>\n<td>Array de objetos Form Field</td>\n</tr>\n<tr>\n<td><em><strong>contactFields[ ].id</strong></em></td>\n<td>Deve ser 0 quando adiciona um contacto. ( neste caso será sempre 0)  <br />Ou o id do Form Field quando faz update (no end point seguinte)</td>\n</tr>\n<tr>\n<td><em><strong>contactFields[ ].formFieldID</strong></em></td>\n<td>Representa o tipo de campo tal como na tabela apresentada em <strong>\"Get Contact Form Fields\"</strong></td>\n</tr>\n</tbody>\n</table>\n</div><p>Como Resposta obtemos um <em><strong>id, inteiro</strong></em>, que representa o <strong>Id do contacto criado</strong>.</p>\n<p>NOTA: OS NÚMEROS DE TELEFONE E DE TELEMÓVEL DEVEM SER ENVIADOS COM O COUNTRY CODE E SEM 00 NEM SINAL +.</p>\n","urlObject":{"path":["contact","addcontact"],"host":["{{ApiBase}}"],"query":[],"variable":[]}},"response":[{"id":"b85847e4-b841-4e51-8239-063f7987c7da","name":"Response 200","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n  \"name\": \"Fonseca\",\r\n  \"userId\": 6,\r\n  \"isPrivate\" : true,\r\n  \"contactFields\": [{\r\n    \"id\": \"0\",\r\n    \"formFieldID\": 3,\r\n    \"value\": \"123456789\",\r\n    \"label\": \"work\"\r\n  }]\r\n}","options":{"raw":{"language":"json"}}},"url":"{{ApiBase}}/contact/addcontact"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Server","value":"nginx/1.20.1"},{"key":"Date","value":"Fri, 10 Mar 2023 14:45:40 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Connection","value":"keep-alive"}],"cookie":[],"responseTime":null,"body":"8017"}],"_postman_id":"fcdfa7b6-1e43-4ced-a8d8-18bca5f175a6"},{"name":"Update CRM Contact","id":"bd23c77f-1eb5-4b11-99d5-e2a1bed1898b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"PUT","header":[],"body":{"mode":"raw","raw":"{\r\n  \"id\": 8014,\r\n  \"name\": \"João Ratão\",\r\n  \"userId\": 6,\r\n  \"isPrivate\" : true,\r\n  \"contactFields\": [{\r\n    \"id\": 48999,\r\n    \"formFieldID\": 3,\r\n    \"value\": \"batatas\",\r\n    \"label\": \"work\"\r\n  }]\r\n}","options":{"raw":{"language":"json"}}},"url":"{{ApiBase}}/contact/updatecontact","description":"<p>Permite fazer Update de um contacto.</p>\n<p>A estrutura do contacto deve ser enviada no body e será atualizado o contacto que tiver o respetivo id.</p>\n<p>Como resultado, devolve um objeto JSON que corresponde ao contacto alterado.</p>\n","urlObject":{"path":["contact","updatecontact"],"host":["{{ApiBase}}"],"query":[],"variable":[]}},"response":[{"id":"e667f09d-9586-4a71-9660-9cb2677a8529","name":"Response 200","originalRequest":{"method":"PUT","header":[],"body":{"mode":"raw","raw":"{\r\n  \"id\": 8014,\r\n  \"name\": \"João Ratão\",\r\n  \"userId\": 6,\r\n  \"isPrivate\" : true,\r\n  \"contactFields\": [{\r\n    \"id\": 48999,\r\n    \"formFieldID\": 3,\r\n    \"value\": \"batatas\",\r\n    \"label\": \"work\"\r\n  }]\r\n}","options":{"raw":{"language":"json"}}},"url":"{{ApiBase}}/contact/updatecontact"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Server","value":"nginx/1.20.1"},{"key":"Date","value":"Fri, 10 Mar 2023 14:40:59 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Connection","value":"keep-alive"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 8014,\n    \"name\": \"João Ratão\",\n    \"avatar\": null,\n    \"userID\": 6,\n    \"isPrivate\": false,\n    \"companyName\": null,\n    \"companyID\": 0,\n    \"callID\": 0,\n    \"companyFields\": null,\n    \"contactFields\": [\n        {\n            \"id\": 48999,\n            \"formFieldID\": 3,\n            \"value\": \"batatas\",\n            \"label\": \"work\"\n        }\n    ]\n}"}],"_postman_id":"bd23c77f-1eb5-4b11-99d5-e2a1bed1898b"}],"id":"9834d45a-519d-46bb-a374-079093a3b16a","description":"<ul>\n<li>Contactos</li>\n</ul>\n","_postman_id":"9834d45a-519d-46bb-a374-079093a3b16a"},{"name":"Companies","item":[{"name":"Get Company by ID","id":"0cdf1092-1f54-455a-a19e-0ca5a159d424","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{ApiBase}}/contact/getcompanybyid?id={{companyId}}","description":"<p>Obtem os dados de uma empresa fornecendo como parâmetro o seu Id.</p>\n<p>Como resultado, devolve uma estrutura JSON como a seguinte:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"id\": 952,\n    \"name\": \"Coimbra's Company Ltd.\",\n    \"avatar\": null,\n    \"fields\": [\n        {\n            \"id\": 145,\n            \"formFieldID\": 11,\n            \"value\": \"351239xxxxxx\",\n            \"label\": \"other\"\n        },\n        {\n            \"id\": 162,\n            \"formFieldID\": 12,\n            \"value\": \"5xxxxxxxx\",\n            \"label\": null\n        }\n    ]\n}\n\n</code></pre>\n","urlObject":{"path":["contact","getcompanybyid"],"host":["{{ApiBase}}"],"query":[{"key":"id","value":"{{companyId}}"}],"variable":[]}},"response":[{"id":"d160c5f9-a24d-42ce-a7b8-0f63f9bf2015","name":"Resposta 200","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{ApiBase}}/contact/getcompanybyid?id={{companyId}}","host":["{{ApiBase}}"],"path":["contact","getcompanybyid"],"query":[{"key":"id","value":"{{companyId}}"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Server","value":"nginx/1.20.1"},{"key":"Date","value":"Tue, 14 Mar 2023 18:15:14 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Connection","value":"keep-alive"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 952,\n    \"name\": \"Coimbra's Company Ltd.\",\n    \"avatar\": null,\n    \"fields\": [\n        {\n            \"id\": 145,\n            \"formFieldID\": 11,\n            \"value\": \"351239\",\n            \"label\": \"other\"\n        },\n        {\n            \"id\": 162,\n            \"formFieldID\": 12,\n            \"value\": \"5xxxxxxxx\",\n            \"label\": null\n        }\n    ]\n}"}],"_postman_id":"0cdf1092-1f54-455a-a19e-0ca5a159d424"},{"name":"Get All Companies","id":"aa93c886-99da-419a-aeaf-e54a84d5a84f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{ApiBase}}/contact/getallcompanies","description":"<p>Obtem a lista de todas as empresas existentes no sistema.</p>\n<p>Necessita apenas da Autorização por <strong>Bearer Token.</strong></p>\n<p>Como resposta obtem um array JSON com a s empresas existentes:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">[\n    {\n        \"id\": 952,\n        \"name\": \"Coimbra's Company Ltd.\",\n        \"avatar\": null,\n        \"fields\": {\n            \"phone\": \"351239\",\n            \"nif\": \"5xxxxxxxx\"\n        }\n    },\n    {\n        \"id\": 957,\n        \"name\": \"Empresa Teste\",\n        \"avatar\": null,\n        \"fields\": {\n            \"phone\": \"3512\",\n            \"nif\": \"5XXXXXXXX\",\n            \"url\": \"https://www.mydomain.tld\"\n        }\n    },\n    {\n        \"id\": 975,\n        \"name\": \"My Test Company Ltd.\",\n        \"avatar\": null,\n        \"fields\": {\n            \"phone\": \"Coimbra\",\n            \"nif\": \"5xxxxxxxx\"\n        }\n    }\n]\n\n</code></pre>\n","urlObject":{"path":["contact","getallcompanies"],"host":["{{ApiBase}}"],"query":[],"variable":[]}},"response":[{"id":"d4b51e8d-b55d-4a8d-8228-1a34bddaff47","name":"Resposta 200","originalRequest":{"method":"GET","header":[],"url":"{{ApiBase}}/contact/getallcompanies"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Server","value":"nginx/1.20.1"},{"key":"Date","value":"Tue, 14 Mar 2023 18:13:28 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Connection","value":"keep-alive"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"id\": 952,\n        \"name\": \"Coimbra's Company Ltd.\",\n        \"avatar\": null,\n        \"fields\": {\n            \"phone\": \"351239\",\n            \"nif\": \"5xxxxxxxx\"\n        }\n    },\n    {\n        \"id\": 957,\n        \"name\": \"Empresa Teste\",\n        \"avatar\": null,\n        \"fields\": {\n            \"phone\": \"3512\",\n            \"nif\": \"5XXXXXXXX\",\n            \"url\": \"https://www.mydomain.tld\"\n        }\n    },\n    {\n        \"id\": 975,\n        \"name\": \"My Test Company Ltd.\",\n        \"avatar\": null,\n        \"fields\": {\n            \"phone\": \"Coimbra\",\n            \"nif\": \"5xxxxxxxx\"\n        }\n    }\n]"}],"_postman_id":"aa93c886-99da-419a-aeaf-e54a84d5a84f"},{"name":"Add Company","id":"b5b0765f-ed38-482a-82fc-49888a0b3509","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token}}"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n  \"name\": \"My Test Company Ltd.\",\r\n  \"fields\": [{\r\n    \"id\": 0,\r\n    \"formFieldID\": 0,\r\n    \"value\": \"Coimbra\",\r\n    \"label\": \"Cidade\"\r\n  }]\r\n}","options":{"raw":{"language":"json"}}},"url":"{{ApiBase}}/contact/addcompany","urlObject":{"path":["contact","addcompany"],"host":["{{ApiBase}}"],"query":[],"variable":[]}},"response":[{"id":"9b6e6885-ce02-4cd2-8c94-32f671048d7a","name":"Resposta 200","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n  \"name\": \"My Test Company Ltd.\",\r\n  \"fields\": [{\r\n    \"id\": 0,\r\n    \"formFieldID\": 0,\r\n    \"value\": \"Coimbra\",\r\n    \"label\": \"Cidade\"\r\n  }]\r\n}","options":{"raw":{"language":"json"}}},"url":"{{ApiBase}}/contact/addcompany"},"status":"OK","code":200,"_postman_previewlanguage":"plain","header":[{"key":"Server","value":"nginx/1.20.1"},{"key":"Date","value":"Tue, 14 Mar 2023 17:24:35 GMT"},{"key":"Content-Length","value":"0"},{"key":"Connection","value":"keep-alive"}],"cookie":[],"responseTime":null,"body":null}],"_postman_id":"b5b0765f-ed38-482a-82fc-49888a0b3509"},{"name":"Update Company","id":"21d18f8b-99f7-47b1-b2ea-d717a3142a65","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"PUT","header":[],"body":{"mode":"raw","raw":"{\r\n  \"id\": 952,\r\n  \"name\": \"Coimbra's Company\",\r\n  \"fields\": [{\r\n    \"id\": 145,\r\n    \"formFieldID\": 0,\r\n    \"value\": \"Cidade\",\r\n    \"label\": \"Coimbra\"\r\n  }]\r\n}","options":{"raw":{"language":"json"}}},"url":"{{ApiBase}}/contact/updatecompany","urlObject":{"path":["contact","updatecompany"],"host":["{{ApiBase}}"],"query":[],"variable":[]}},"response":[{"id":"3035cf9d-d3b8-4164-a46a-45d079d4f0af","name":"Resposta 200","originalRequest":{"method":"PUT","header":[],"body":{"mode":"raw","raw":"{\r\n  \"id\": 952,\r\n  \"name\": \"Coimbra's Company Ltd.\",\r\n  \"fields\": [{\r\n    \"id\": 145,\r\n    \"formFieldID\": 0,\r\n    \"value\": \"Cidade\",\r\n    \"label\": \"Coimbra\"\r\n  }]\r\n}","options":{"raw":{"language":"json"}}},"url":"{{ApiBase}}/contact/updatecompany"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Server","value":"nginx/1.20.1"},{"key":"Date","value":"Tue, 14 Mar 2023 17:42:32 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Connection","value":"keep-alive"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 952,\n    \"name\": \"Coimbra's Company Ltd.\",\n    \"avatar\": null,\n    \"fields\": [\n        {\n            \"id\": 145,\n            \"formFieldID\": 11,\n            \"value\": \"Cidade\",\n            \"label\": \"Coimbra\"\n        }\n    ]\n}"}],"_postman_id":"21d18f8b-99f7-47b1-b2ea-d717a3142a65"}],"id":"4f65a92f-559c-4a2f-8e57-be9719c6b299","description":"<ul>\n<li>Empresas</li>\n</ul>\n","_postman_id":"4f65a92f-559c-4a2f-8e57-be9719c6b299"}],"id":"699b50d9-8b3a-4964-8ac8-f1acc7d352a5","description":"<ul>\n<li>Gestão de Contactos</li>\n</ul>\n","_postman_id":"699b50d9-8b3a-4964-8ac8-f1acc7d352a5"},{"name":"Calls","item":[{"name":"Calls Download Audio","id":"460d074f-d2cf-4312-9123-48fc2586944d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{ApiBase}}Call/AudioDownload?session={{session}}","description":"<p>Permite fazer download do ficheiro de audio associado a uma chamada, identificada por \"session\"</p>\n<h4 id=\"-a-disponibilizar-brevemente-\">( a disponibilizar brevemente )</h4>\n","urlObject":{"path":["AudioDownload"],"host":["{{ApiBase}}Call"],"query":[{"key":"session","value":"{{session}}"}],"variable":[]}},"response":[],"_postman_id":"460d074f-d2cf-4312-9123-48fc2586944d"},{"name":"Queue Calls","id":"58dc33a8-1e6a-48a0-8b33-d710761ca342","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{ApiBase}}/queue/getqueuecalls?day=2025-01-15&queue=400","description":"<p>Permite obter as chamadas de uma fila específica realizadas num dia específico.</p>\n","urlObject":{"path":["queue","getqueuecalls"],"host":["{{ApiBase}}"],"query":[{"key":"day","value":"2025-01-15"},{"key":"queue","value":"400"}],"variable":[]}},"response":[],"_postman_id":"58dc33a8-1e6a-48a0-8b33-d710761ca342"}],"id":"f96f2641-4395-4c92-9800-748626169eeb","_postman_id":"f96f2641-4395-4c92-9800-748626169eeb","description":""},{"name":"Webphone Integration","item":[{"name":"Embed webphone  by GET ou Iframe","id":"d5f3ba3e-093f-4855-a57b-6129bfe11c63","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{iFrameBase}}/?iframe=default&apiKey={{apiKey}}&number={{number }}&layout={{layout}}&autocall={{autocall}}","description":"<p>Para utilizar a integração do webphone, deve pedir à Let's Call uma Api Key e o URL ue lhe permitirá usar a funcionalidade.</p>\n<p>Uma vez na posse da KEY e da URL, pode usar o comando get com os seguintes parametros:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Parametro</strong></th>\n<th><strong>Tipo</strong></th>\n<th><strong>Descrição</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>iframe</td>\n<td>constante = default</td>\n<td>Deve ser usada a constante \"default\", não tem outra função</td>\n</tr>\n<tr>\n<td>apiKey</td>\n<td>string</td>\n<td>A Key fornecida pela Let's Call</td>\n</tr>\n<tr>\n<td>number</td>\n<td>string</td>\n<td>O numero de telefone para onde fazer a ligação</td>\n</tr>\n<tr>\n<td>layout</td>\n<td>boolean</td>\n<td>Como mostra os controles da chamada:  <br /><strong>true</strong> - Conjunto de controles básicos  <br /><strong>false</strong> - Conjunto de controles completo</td>\n</tr>\n<tr>\n<td>autocall</td>\n<td>boolean</td>\n<td>Inicia automaticamente a chamada:  <br />true - inicia a chamada imediatamente.  <br />false - espera que seja premido o botão de inicio de chamada.</td>\n</tr>\n</tbody>\n</table>\n</div><p>O código HTML seguinte pode ser usado como teste para verificar os parâmetros explicados, ou como base para embeber como iframe na aplicação a customizar.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-html\">﻿&lt;html&gt;\n&lt;head&gt;\n    &lt;style&gt;\n        body {\n            background-color: #252423;\n            color: var(--whiteColor);\n            margin: 0 auto;\n            color: white;\n        }\n​\n        .container {\n            margin: 0 auto;\n            width: 300px;\n        }\n​\n        .container&gt;div {\n            margin-top: 10px;\n            margin-bottom: 10px;\n        }\n​\n        #webphone {\n            width: 330px;\n            height: 500px;\n            border: none;\n            box-shadow: 0px 0px 1px 1px var(--blackColor);\n        }\n​\n        #keypad {\n            display: none;\n            margin-top: 5px;\n        }\n​\n        #keypad.active {\n            display: block;\n        }\n​\n        #keypad button {\n            margin: 3px;\n        }\n    &lt;/style&gt;\n&lt;/head&gt;\n​\n&lt;body&gt;\n    &lt;div class='preserveHtml' class='preserveHtml' class='preserveHtml' class=\"container\"&gt;\n        &lt;div class='preserveHtml' class='preserveHtml' class='preserveHtml' class='preserveHtml'&gt;\n            &lt;textarea style=\"width: 300px; height:75px;\" type=\"text\" id=\"urlOutput\"&gt;&lt;/textarea&gt;\n        &lt;/div&gt;\n​\n        &lt;div class='preserveHtml' class='preserveHtml' class='preserveHtml' class='preserveHtml'&gt;\n            &lt;label&gt;Url&lt;/label&gt;\n            &lt;input type=\"text\" id=\"url\" value=\"\" /&gt;\n        &lt;/div&gt;\n​\n​\n        &lt;div class='preserveHtml' class='preserveHtml' class='preserveHtml' class='preserveHtml'&gt;\n            &lt;label&gt;Key (Optional)&lt;/label&gt;\n                            value=\"\" /&gt;\n        &lt;/div&gt;\n​\n﻿\n​\n        &lt;div class='preserveHtml' class='preserveHtml' class='preserveHtml' class='preserveHtml'&gt;\n            &lt;label&gt;Number&lt;/label&gt;\n            &lt;input type=\"text\" id=\"number\" value=\"\" /&gt;\n​\n            &lt;div class='preserveHtml' class='preserveHtml' class='preserveHtml' class='preserveHtml'&gt;\n                &lt;label&gt;CLI (Optional)&lt;/label&gt;\n                &lt;input type=\"text\" id=\"cli\" value=\"\" /&gt;\n            &lt;/div&gt;\n        &lt;/div&gt;\n​\n        &lt;div class='preserveHtml' class='preserveHtml' class='preserveHtml' class='preserveHtml'&gt;\n            &lt;label&gt;Layout&lt;/label&gt;\n            &lt;input type=\"radio\" name=\"layout\" value=\"false\" checked&gt;\n            &lt;label&gt;Default&lt;/label&gt;\n            &lt;input type=\"radio\" name=\"layout\" value=\"true\"&gt;\n            &lt;label&gt;Basic&lt;/label&gt;\n        &lt;/div&gt;\n​\n        &lt;div class='preserveHtml' class='preserveHtml' class='preserveHtml' class='preserveHtml'&gt;\n            &lt;label&gt;Auto Call&lt;/label&gt;\n            &lt;input type=\"radio\" name=\"autoCall\" value=\"true\"&gt;\n            &lt;label&gt;Yes&lt;/label&gt;\n            &lt;input type=\"radio\" name=\"autoCall\" value=\"false\" checked&gt;\n            &lt;label&gt;No&lt;/label&gt;\n        &lt;/div&gt;\n​\n﻿\n​\n        &lt;div class='preserveHtml' class='preserveHtml' class='preserveHtml' class='preserveHtml'&gt;\n            &lt;button id=\"clickToCall\"&gt;Click to call&lt;/button&gt;\n            &lt;button id=\"getToCall\"&gt;Get to call&lt;/button&gt;\n        &lt;/div&gt;\n​\n        &lt;div class='preserveHtml' class='preserveHtml' class='preserveHtml' class='preserveHtml'&gt;\n            &lt;button id=\"hangup\"&gt;Hangup&lt;/button&gt;\n            &lt;button id=\"mute_unmute\"&gt;Mute/Unmute&lt;/button&gt;\n            &lt;button id=\"hold_unhold\"&gt;Hold/Unhold&lt;/button&gt;\n        &lt;/div&gt;\n​\n        &lt;div class='preserveHtml' class='preserveHtml' class='preserveHtml' class='preserveHtml'&gt;\n            &lt;button id=\"toggleKeypad\"&gt;keypad&lt;/button&gt;\n            &lt;div class='preserveHtml' class='preserveHtml' class='preserveHtml' id=\"keypad\"&gt;\n                &lt;button onclick=\"pad('1')\"&gt;1&lt;/button&gt;\n                &lt;button onclick=\"pad('2')\"&gt;2&lt;/button&gt;\n                &lt;button onclick=\"pad('3')\"&gt;3&lt;/button&gt;\n                &lt;button onclick=\"pad('4')\"&gt;4&lt;/button&gt;\n                &lt;button onclick=\"pad('5')\"&gt;5&lt;/button&gt;\n                &lt;button onclick=\"pad('6')\"&gt;6&lt;/button&gt;\n                &lt;button onclick=\"pad('7')\"&gt;7&lt;/button&gt;\n                &lt;button onclick=\"pad('8')\"&gt;8&lt;/button&gt;\n                &lt;button onclick=\"pad('9')\"&gt;9&lt;/button&gt;\n                &lt;button onclick=\"pad('*')\"&gt;*&lt;/button&gt;\n                &lt;button onclick=\"pad('0')\"&gt;0&lt;/button&gt;\n                &lt;button onclick=\"pad('#')\"&gt;#&lt;/button&gt;\n            &lt;/div&gt;\n        &lt;/div&gt;\n​\n        &lt;div class='preserveHtml' class='preserveHtml' class='preserveHtml' id=\"callEvent\"&gt;...&lt;/div&gt;\n​\n        &lt;iframe id=\"webphone\" allow=\"microphone *\"&gt;&lt;/iframe&gt;\n    &lt;/div&gt;\n    &lt;script&gt;\n        const regex = new RegExp('^[0-9*]+$');\n        //Talvez quando fizerem o login no vosso lado, registem as credenciais na localstorage do browser algo do gênero\n        const apiKey = \"\";\n​\n        window.onload = function () {\n            const _urlOutput = document.getElementById(\"urlOutput\");\n            const _url = document.getElementById(\"url\");\n            const _key = document.getElementById(\"key\");\n            const _number = document.getElementById(\"number\");\n            const _cli = document.getElementById(\"cli\");\n            const _iframe = document.getElementById(\"webphone\");\n            const _callEvent = document.getElementById(\"callEvent\");\n            const _layouts = document.getElementsByName(\"layout\");\n            const _autoCall = document.getElementsByName(\"autoCall\");\n            const _keypad = document.getElementById(\"keypad\");\n​\n            //ADICIONA EVENTOS DA IFRAME PARA O PAI\n            //É POSSIVEL MELHORAR OS EVENTOS DEPOIS\n            window.addEventListener('message', function (e) {\n                //EVENTOS VEM AQUI, DE CHAMADA DE ENTRADA\n                console.error(e.data);\n                //VERIFICAR ORIGIN = e.origion != \"xpto\" return;\n                _callEvent.innerHTML = JSON.stringify(e.data);\n            }, false);\n​\n            document.getElementById(\"clickToCall\").addEventListener(\"click\", function () {\n                _callEvent.innerHTML = \"...\";\n                let number = getNumber();\n                if (number == null) {\n                    return;\n                }\n​\n                if (_iframe.getAttribute(\"src\") == null) {\n                    _iframe.setAttribute(\"src\", _url.value + \"?iframe=default\");\n                    _iframe.onload = function () {\n                        send(number);\n                        return;\n                    }\n                }\n                send(number);\n            });\n​\n            document.getElementById(\"getToCall\").addEventListener(\"click\", function () {\n                _callEvent.innerHTML = \"...\";\n                if (getNumber() == null) {\n                    return;\n                }\n​\n                _iframe.setAttribute(\"src\", _urlOutput.value);\n            });\n​\n            document.getElementById(\"hangup\").addEventListener(\"click\", function () {\n                let data = {\n                    action: 0\n                };\n​\n                _iframe.contentWindow.postMessage(data, _urlOutput.value);\n            });\n​\n            document.getElementById(\"mute_unmute\").addEventListener(\"click\", function () {\n                let data = {\n                    action: 1\n                };\n​\n                _iframe.contentWindow.postMessage(data, _urlOutput.value);\n            });\n​\n            document.getElementById(\"hold_unhold\").addEventListener(\"click\", function () {\n                let data = {\n                    action: 2\n                };\n​\n                _iframe.contentWindow.postMessage(data, _urlOutput.value);\n            });\n​\n            document.getElementById(\"toggleKeypad\").addEventListener(\"click\", function () {\n                if (_keypad.classList.contains(\"active\")) {\n                    _keypad.classList.remove(\"active\");\n                    return;\n                }\n​\n                _keypad.classList.add(\"active\");\n            });\n​\n            function send(number) {\n                let data = {\n                    number: number,\n                    layout: getLayout(),\n                    autoCall: getAutoCall(),\n                    cli: getCLI()\n                };\n​\n                _iframe.contentWindow.postMessage(data, _url.value + \"?iframe=default\");\n            }\n​\n            function getNumber() {\n                let number = _number.value.trim();\n                if (number.length == 0 || !regex.test(number)) {\n                    return null;\n                }\n​\n                return number;\n            }\n​\n            function getCLI() {\n                let cli = _cli.value.trim();\n                if (cli.length == 0 || !regex.test(cli)) {\n                    return null;\n                }\n​\n                return cli;\n            }\n​\n            function getLayout() {\n                for (i = 0; i &lt; _layouts.length; i++) {\n                    if (_layouts[i].checked) {\n                        return _layouts[i].value;\n                    }\n                }\n​\n                return _layouts[0].value;\n            }\n​\n            function getAutoCall() {\n                for (i = 0; i &lt; _autoCall.length; i++) {\n                    if (_autoCall[i].checked) {\n                        return _autoCall[i].value;\n                    }\n                }\n​\n                return _autoCall[0].value;\n            }\n​\n            _url.addEventListener(\"input\", function () {\n                buildURL();\n            });\n​\n            _key.addEventListener(\"input\", function () {\n                buildURL();\n            });\n​\n            _number.addEventListener(\"input\", function () {\n                buildURL();\n            });\n​\n            _cli.addEventListener(\"input\", function () {\n                buildURL();\n            });\n​\n            _layouts.forEach((x) =&gt; {\n                x.addEventListener(\"change\", function () {\n                    buildURL();\n                });\n            });\n​\n            _autoCall.forEach((x) =&gt; {\n                x.addEventListener(\"change\", function () {\n                    buildURL();\n                });\n            });\n​\n            buildURL();\n​\n            function buildURL() {\n                if (_url.value.length &gt; 0) {\n                    _urlOutput.value = _url.value + \"?iframe=default\";\n                }\n​\n                if (key.value.length &gt; 0) {\n                    _urlOutput.value += \"&amp;apiKey=\" + key.value;\n                }\n​\n                let number = getNumber();\n                if (number != null &amp;&amp; number.length &gt; 0) {\n                    _urlOutput.value += \"&amp;number=\" + number;\n                }\n​\n                let cli = getCLI();\n                if (cli != null &amp;&amp; cli.length &gt; 0) {\n                    _urlOutput.value += \"&amp;cli=\" + cli;\n                }\n​\n                _urlOutput.value += \"&amp;layout=\" + getLayout();\n                _urlOutput.value += \"&amp;autocall=\" + getAutoCall();\n            }\n        }\n​\n        function pad(key) {\n            const iframe = document.getElementById(\"webphone\");\n            const url = document.getElementById(\"url\");\n            if (iframe == null || url == null) {\n                return;\n            }\n​\n            let data = {\n                action: 3,\n                key: key\n            };\n​\n            iframe.contentWindow.postMessage(data, url.value);\n        }\n    &lt;/script&gt;\n&lt;/body&gt;\n​\n&lt;/html&gt;\n\n</code></pre>\n","urlObject":{"path":[""],"host":["{{iFrameBase}}"],"query":[{"key":"iframe","value":"default"},{"key":"apiKey","value":"{{apiKey}}"},{"key":"number","value":"{{number }}"},{"key":"layout","value":"{{layout}}"},{"key":"autocall","value":"{{autocall}}"}],"variable":[]}},"response":[],"_postman_id":"d5f3ba3e-093f-4855-a57b-6129bfe11c63"}],"id":"7ad74a59-c875-46df-b33e-72445717da6e","description":"<p>Pode integrar-se a funcionalidae de emitir chamadas a pedido ou em iframe.</p>\n","_postman_id":"7ad74a59-c875-46df-b33e-72445717da6e"},{"name":"Web Hooks","item":[{"name":"Web Hook","id":"881139e9-ebc4-4217-8b0e-d91f82e14e07","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"url":"{userURL}","description":"<p>O Contact Center Let's Call tem a possibilidade de enviar pedidos POST para um URL fornecido, (Web Hook).</p>\n<p>O pedido envia três tipos de estruturas JSON, conforme a informação disponível. As estruturas são identificadas pelo campo Type e podem ser do tipo:</p>\n<p>Call ( Type = 0 )</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"type\": 0,\n  \"callID\": \"02164EF91C81400001E56282@TB007612_VOIPB.MG02_pbx-1\",\n  \"direction\": 0,\n  \"duration\": 11,\n  \"state\": 1,\n  \"caller\": \"35193000000\",\n  \"callee\": \"35121000000\",\n  \"cause\": \"Rejeitado\",\n  \"operatorName\": \"user 1\",\n  \"operatorEmail\": \"user1@domain.tld\"\n}\n\n</code></pre><p>Relativo à estrutra Call, defenimos os seguintes enums:</p>\n<blockquote>\n<p>public enum Direction<br />{<br />Incoming = 0,<br />Outgoing = 1<br />} </p>\n</blockquote>\n<blockquote>\n<p>public enum State<br />{<br />Answered = 1,<br />AnsweredElseWhere = 4,<br />NotAnswered = 5,<br />} </p>\n</blockquote>\n<p>Form ( Type = 1 )</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code> {\n \"type\": 1,\n  \"callID\": \"02164EF91C81400001E56282@TB007612_VOIPB.MG02_pbx-1\",\n  \"name\": \"Campanha\",\n  \"fields\": {\n    \"Tipo Text\": \"Outro form aleatorio\",\n    \"TAG BOX\": \"ok,sim\",\n    \"Date\": \"2023-04-14\",\n    \"DateTime\": \"2023-04-14 13:40:00\"\n  }\n}\n\n</code></pre><p>Typification ( Type = 2 )</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"type\": 2,\n  \"callID\": \"02164EF91C81400001E56282@TB007612_VOIPB.MG02_pbx-1\",\n  \"typification\": \"Tipificaçao geral\"\n}\n\n</code></pre>","urlObject":{"host":["{userURL}"],"query":[],"variable":[]}},"response":[],"_postman_id":"881139e9-ebc4-4217-8b0e-d91f82e14e07"}],"id":"822d4435-e022-445e-b7a0-406c80fb414e","description":"<p>O utilizador pode defenir ,no portal de administração, um URL que permitirá que o Contact Center envie dados parauma aplicação personalizada pelo cliente.</p>\n","_postman_id":"822d4435-e022-445e-b7a0-406c80fb414e"},{"name":"Campaigns","item":[{"name":"Get All Campaigns","id":"ae74d64e-e0e4-4896-b3ad-1ee92e2ffb65","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{ApiBase}}/campaign","auth":{"type":"bearer","bearer":{"basicConfig":[]},"isInherited":true,"source":{"_postman_id":"b189b132-fa3d-418d-b677-a21044ad8681","id":"b189b132-fa3d-418d-b677-a21044ad8681","name":"Campaigns","type":"folder"}},"urlObject":{"path":["campaign"],"host":["{{ApiBase}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"ae74d64e-e0e4-4896-b3ad-1ee92e2ffb65"},{"name":"Get All Contact and Calls","id":"b038c8e6-bc04-4019-93b9-e2795c4f18ce","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{ApiBase}}/campaign/{{CampaignId}}/contacts","auth":{"type":"bearer","bearer":{"basicConfig":[]},"isInherited":true,"source":{"_postman_id":"b189b132-fa3d-418d-b677-a21044ad8681","id":"b189b132-fa3d-418d-b677-a21044ad8681","name":"Campaigns","type":"folder"}},"urlObject":{"path":["campaign","{{CampaignId}}","contacts"],"host":["{{ApiBase}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"b038c8e6-bc04-4019-93b9-e2795c4f18ce"},{"name":"Add  Campaign Contact","id":"22bdec6c-a53a-45bb-80b6-f62824516d61","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"Number\": \"911111111\",\r\n    \"Name\" : \" Contacto Teste\",   \r\n    \"Fields\" : [{\"Key\":\"E-mail\",\"Value\":\"user@domain.tld\"} , {\"Key\":\"Cód. Postal\",\"Value\":\"3000-000\"}, {\"key\":\"key1\", \"Value\":\"Value1\"}]\r\n\r\n}","options":{"raw":{"language":"json"}}},"url":"{{ApiBase}}/campaign/{{CampaignId}}/contact/","description":"<p>Adiciona um contacto à lista de contactos de uma campanha.</p>\n<p>No body do pedido deve enviar-se uma estrutura JSON como em baixo, com os seguintes atributos:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Atributo</strong></th>\n<th><strong>Tipo</strong></th>\n<th><strong>Descrição</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Number</td>\n<td>String</td>\n<td>Número de telefone/telemóvel do contacto</td>\n</tr>\n<tr>\n<td>Name</td>\n<td>String</td>\n<td>Nome do Contacto.</td>\n</tr>\n<tr>\n<td>Fields</td>\n<td>JSON Array de Objetos Key/Value</td>\n<td>Cada par Key/Value representa um campo e respetivo valor que caracteriza o contacto. Se o campo não existir para os outros contactos, da lista,, sera adicionado para todos, embora, claro, com valor vazio.</td>\n</tr>\n</tbody>\n</table>\n</div><p>Como resultado, devolve apenas o código de erro, 200 OK, se correu bem, ou outro, no caso de não ter executado corretamente.</p>\n<p>NOTA: O CAMPO NUMBER DEVE SER ENVIADO COM O COUNTRY CODE E SEM 00 NEM SINAL +.</p>\n","urlObject":{"path":["campaign","{{CampaignId}}","contact",""],"host":["{{ApiBase}}"],"query":[],"variable":[]}},"response":[{"id":"f44fd2d7-d69f-4d5e-90ec-d2d0fc6b3d85","name":"Resposta 200","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"Number\": \"911111111\",\r\n    \"Name\" : \"Teste API3\",   \r\n    \"Fields\" : [{\"Key\":\"E-mail\",\"Value\":\"user@domain.tld\"} , {\"Key\":\"Cód. Postal\",\"Value\":\"3000-000\"}, {\"key\":\"key1\", \"Value\":\"Value1\"}]\r\n\r\n}","options":{"raw":{"language":"json"}}},"url":"{{ApiBase}}/campaign/{{CampaignId}}/contact/"},"status":"OK","code":200,"_postman_previewlanguage":"plain","header":[{"key":"Server","value":"nginx/1.20.1"},{"key":"Date","value":"Mon, 13 Mar 2023 19:53:03 GMT"},{"key":"Content-Length","value":"0"},{"key":"Connection","value":"keep-alive"}],"cookie":[],"responseTime":null,"body":null}],"_postman_id":"22bdec6c-a53a-45bb-80b6-f62824516d61"}],"id":"b189b132-fa3d-418d-b677-a21044ad8681","auth":{"type":"bearer","bearer":{"basicConfig":[]},"isInherited":false},"event":[{"listen":"prerequest","script":{"id":"1d0dc6ce-60c6-44b7-9f21-b7203989aca2","type":"text/javascript","packages":{},"exec":[""]}},{"listen":"test","script":{"id":"fda72a98-deeb-4275-9928-0f8415b2df98","type":"text/javascript","packages":{},"exec":[""]}}],"_postman_id":"b189b132-fa3d-418d-b677-a21044ad8681","description":""}]}