Pedido Odoo
Consulta o seu Odoo durante a chamada e guarda a resposta em variáveis: um estado de encomenda, um saldo, uma data de compromisso, para depois encaminhar.
Em resumo
| Saídas | OK e Erro |
| Campos | Instância Odoo, Timeout, Modelo, Método, Args (JSON), Kwargs (JSON), e uma tabela de extrações Variável e Caminho JSON |
| Timeout proposto | 2, 3, 5 ou 8 s, 5 s por predefinição |
| Timeout realmente aplicado | 8 segundos no máximo |
| Método proposto na criação | search_read |
| Disjuntor | 5 falhas consecutivas no mesmo servidor abrem o circuito durante 30 segundos |
| Ensaio antes de colocar em serviço | botão Testar, que consulta realmente o Odoo |
O texto de ajuda mostrado na janela é: «Chama execute_kw(modelo, método, args, kwargs) no Odoo. args/kwargs = JSON com {{variaveis}} ({{caller_e164}} = formatos E.164 de quem liga). Extrai a resposta JSON para variáveis. Saída «Erro» se o Odoo falhar/exceder o timeout.»
Como funciona
É o módulo mais técnico do conjunto. Enquanto o Odoo, resolução de contacto responde a uma pergunta única e já pronta, este coloca qualquer pergunta ao Odoo. Em contrapartida, é preciso saber onde está a informação no Odoo.
Os quatro campos da pergunta
| Campo | O que é | Exemplo |
|---|---|---|
| Modelo | o nome interno da tabela do Odoo consultada | res.partner para os contactos |
| Método | o que se pede a essa tabela | search_read para procurar e depois ler |
| Args (JSON) | os argumentos, na prática o filtro de procura | [[["phone_sanitized","in","{{caller_e164}}"]]] |
| Kwargs (JSON) | as opções nomeadas: que campos ler, quantas linhas | {"fields":["name","user_id"],"limit":1} |
O nome do modelo lê-se no Odoo, ativando o modo programador, ou pergunta-se a quem administra o Odoo. É o único ponto desta página que não se inventa.
JSON, numa frase
Args e Kwargs escrevem-se em JSON, um formato em que os parênteses retos [ ] delimitam uma lista, as chavetas { } um conjunto de campos nomeados, e onde todo o texto fica entre aspas retas. Uma vírgula esquecida ou uma chaveta por fechar bastam para a fazer falhar.
As variáveis na pergunta
Escreva {{minha_variavel}} em qualquer lugar dentro de Args ou Kwargs. Uma nuance útil: uma variável rodeada de aspas, como "{{caller_e164}}", é substituída pelo seu valor em formato JSON, aspas incluídas. Uma lista, portanto, continua a ser uma lista, o que permite escrever um filtro do tipo «o telefone está entre estas escritas».
A extração
A tabela de baixo associa um Caminho JSON a um nome de Variável. Os níveis separam-se por pontos; as listas contam-se a partir de zero. search_read responde uma lista, pelo que o caminho de um primeiro resultado começa por 0.: 0.name designa o nome do primeiro contacto encontrado.
Um caminho deixado vazio traz a resposta inteira. Isto é indispensável para os métodos que respondem um número ou uma palavra sem estrutura à volta, como uma contagem: sem isso a variável ficaria vazia e a condição que a testa seria sempre falsa.
O disjuntor
Tal como no Pedido de API, depois de 5 falhas consecutivas para o mesmo servidor, o módulo deixa de o chamar durante 30 segundos e utiliza a saída Erro de imediato, sem pedido. Um primeiro sucesso repõe o contador a zero.
O que preencher
| Campo | O que é esperado | Se o deixar vazio |
|---|---|---|
| Instância Odoo | o Odoo a consultar, entre os declarados em Integrações, Odoo | Instância predefinida, a instância de resolução declarada para a instalação |
| Timeout | o prazo de espera, reduzido a 8 s no máximo na execução | 5 s |
| Modelo | o nome do modelo Odoo, por exemplo res.partner | a saída Erro é utilizada sem que nenhum pedido parta |
| Método | o método a chamar, pré-preenchido com search_read | a saída Erro é utilizada sem que nenhum pedido parta |
| Args (JSON) | os argumentos, em JSON válido | lista vazia |
| Kwargs (JSON) | as opções nomeadas, em JSON válido | nenhuma opção |
| Variável de uma extração | o nome sob o qual guardar o valor lido | a linha é ignorada |
| Caminho JSON de uma extração | o caminho até ao valor, por exemplo 0.name | a resposta inteira é guardada na variável |
Os botões da janela são Adicionar uma extração, Testar, Cancelar e Guardar.
Passo a passo
- Verifique que o Odoo está ligado, em Integrações, Odoo, e que a instância está ativa aí.
- Identifique no Odoo o modelo e os campos que carregam a informação pretendida. Peça ajuda a quem administra o Odoo se necessário.
- Coloque o módulo Pedido Odoo e ligue o nó anterior à sua entrada.
- Abra-o, escolha a Instância Odoo e regule o Timeout o mais curto possível: dois a três segundos, quem liga aguarda na linha.
- Indique o Modelo e o Método.
- Escreva os Args (JSON) e os Kwargs (JSON), limitando o número de linhas lidas com
"limit":1quando uma só baste. - Clique em Adicionar uma extração e associe um Caminho JSON a um nome de Variável.
- Clique em Testar, indique as variáveis de ensaio, depois em Executar. Corrija até que o valor obtido seja o correto.
- Clique em Guardar, depois ligue OK à continuação e Erro a um recurso que trate a chamada sem o dado.
- Clique em Guardar, depois em Aplicar as alterações na faixa superior.
- Ligue para o número e verifique o encaminhamento, com a ajuda de um módulo Depuração que escreve as variáveis extraídas.
Se não funcionar
A saída Erro é utilizada de imediato, sem que nenhum pedido parta. Três causas. O Modelo ou o Método está vazio. A instância Odoo escolhida já não existe ou já não está ativa. Ou o disjuntor está aberto, depois de cinco falhas consecutivas, durante trinta segundos.
O pedido falha apesar de o JSON parecer correto. Tem de continuar válido depois de substituídas as variáveis, e é aí que ocorre a maioria dos erros. Clique em Testar: o ecrã mostra o pedido realmente enviado, args e kwargs depois da substituição. Para que uma variável seja substituída pelo seu valor JSON, rodeie-a de aspas: "{{caller_e164}}".
A variável extraída fica vazia apesar de a resposta conter o dado. O caminho não corresponde. search_read responde uma lista: comece por 0. para o primeiro elemento. Um método que responde apenas um número exige, pelo contrário, um caminho vazio. A coluna Valor obtido do ensaio assinala as extrações vazias.
O ensaio pede para confirmar antes de partir. O método pedido escreve no Odoo em vez de se limitar a ler. O ensaio executa-se realmente no Odoo de produção: só confirme se aceitar essa escrita.
A chamada é cortada quando o Odoo responde mal. A saída Erro não está ligada a nada. Este módulo não tem o recurso automático do módulo de resolução de contacto: ligue Erro, no mínimo ao atendimento habitual.
Como se constrói o plano de chamadas, explicado em imagens
Ver a página Planos de numeração