Verificar por Telefone
Use este skill quando um agente precisar estabelecer se informações armazenadas sobre uma organização ainda são verdadeiras, e uma chamada telefônica para o número público da organização for a maneira de descobrir.
verify-by-phone é um skill de fluxo de trabalho de verificação. Ele faz exatamente uma chamada CALL-E divulgada por registro, extrai a resposta do transcript com um trecho de suporte literal, reconcilia-a com o registro armazenado usando aritmética transparente de pesos de correspondência e retorna uma confiança calibrada ou uma abstenção explícita. O objetivo de design é um agente que nunca converte uma resposta telefônica incerta em uma escrita confiante no banco de dados.
Quando Usar
Use este skill para:
- verificar uma listagem de diretório de provedor: esta prática é real, acessível, aceitando novos pacientes, aceitando um determinado plano de saúde
- verificar se um registro de negócio armazenado (horários, serviços, disponibilidade) ainda corresponde à realidade
- atualizar qualquer conjunto de dados onde o telefone é a fonte da verdade e o registro está suspeito de estar desatualizado
- fluxos de trabalho onde um resultado "desconhecido" deve ser registrado honestamente em vez de adivinhado
- um registro de cada vez, com uma lista de destinatários autorizada por humanos
Quando Não Usar
Não use este skill para:
- fazer chamadas não divulgadas ou com pretexto; toda chamada anuncia que é um assistente automatizado e por que está ligando, na mesma respiração
- ligar para números pessoais ou sem fio; os alvos de verificação são linhas organizacionais publicadas
- realizar marketing, vendas, geração de leads ou qualquer divulgação promocional
- discar em lote uma lista sem autorização humana por registro
- sobrescrever um registro armazenado diretamente de um resultado de chamada; a saída é um veredito com evidência, e a decisão de escrita permanece com o operador
- adivinhar uma resposta que o entrevistado não deu; se a chamada não produzir uma resposta utilizável, o resultado é uma abstenção, e essa é a saída correta
Regras de Consentimento e Divulgação
Estas são estruturais, não meramente burocráticas:
- A chamada começa declarando a identidade da IA e o propósito juntos, antes de qualquer outra coisa, e anuncia que a chamada pode ser gravada.
- Se o entrevistado se opuser a falar com um chamador automatizado, a chamada agradece e termina imediatamente. O resultado registra a recusa como um resultado não verificável.
- O tempo de espera é limitado. Se o entrevistado pedir ao chamador para esperar, ele espera brevemente e depois relata de volta em vez de esperar indefinidamente.
- O agente nunca inventa informações que não lhe foram dadas, na chamada ou no resultado. Concretamente: uma clínica frequentemente pedirá ao chamador um nome, uma data de nascimento, um número de membro ou cartão do seguro, ou um motivo para a visita. O agente diz claramente que não tem essa informação, porque esta é uma chamada de verificação de diretório e não uma solicitação de consulta, e então repete a pergunta que ligou para fazer. Um espaço reservado é uma invenção.
- Correio de voz não é uma resposta. Ao chegar ao correio de voz ou a uma secretária eletrônica, a chamada termina imediatamente sem deixar mensagem: um fato de diretório não pode ser estabelecido a partir de uma gravação, e ninguém deve encontrar uma mensagem de robô em sua linha.
- As chamadas são de verificação informacional, nunca promocionais. Trate toda chamada como gravada, considerando os requisitos de consentimento de todas as partes.
Fluxo de Trabalho de Verificação
- Calibre o limite de abstenção primeiro, com
scripts/calibrate.pyem dados de cenário rotulados, para que "confiante" signifique algo mensurável: no nível padrão, a verdadeira resposta cai dentro do conjunto de previsão pelo menos 90 por cento das vezes em dados retidos. Ele imprime umqhatque a etapa 6 consome. Isso é executado sem credenciais e sem chamadas, então pode ser feito uma vez, antes de qualquer discagem. - Colete o registro a verificar: nome da organização, número de telefone publicado em E.164, e as afirmações a verificar (por exemplo, aceitando novos pacientes, aceita um plano nomeado).
- Confirme que o operador autoriza esta chamada específica para este número específico.
- Construa a tarefa de chamada com
scripts/place_verify_call.py. O script padrão é uma execução a seco que imprime a tarefa exata e o destinatário sem discar; passe--livesomente após a execução a seco parecer correta. - Consulte o resultado terminal com
scripts/poll_result.py, que salva o payload completo em um arquivo local. - Extraia a resposta com
scripts/extract_answer.py --qhatda etapa 1. Cada campo extraído carrega o trecho de transcrição literal e os deslocamentos de caractere que o suportam. Respostas evasivas ("Acho que sim") mantêm sua polaridade com uma pontuação de confiança atenuada. Turnos não responsivos (número errado, recusa, "ligue mais tarde") nunca contam como respostas. A resposta é fornecida somente quando o conjunto de previsão calibrado é um único valor e esse valor não é "desconhecido"; caso contrário, o resultado é uma abstenção. Omitir--qhatabstém-se de tudo e rotula a saída comouncalibrated, porque um limite sem calibração por trás não garante nada. - Reconcilie contra o registro armazenado com
scripts/reconcile_record.py: cada campo concordante adiciona bits documentados de evidência, cada campo discordante os subtrai, e o veredito é verificado, contradito ou não verificável.
Nota de Manutenção
Os scripts neste skill são cópias autocontidas da implementação de referência no backend Attest (backend/app no repositório de origem). Eles são mantidos pequenos de propósito para que o skill seja instalado sem dependências desse repositório.
Essa cópia é imposta, não prometida. tests/test_skill_parity.py no repositório de origem executa o extrator deste skill e o do backend sobre os mesmos transcripts e falha se eles discordarem sobre a resposta, sobre os deslocamentos de caractere do trecho citado, ou sobre os próprios léxicos de sinalização. Uma versão anterior desta nota pedia a um humano para ressincronizar manualmente, e a cópia ainda assim divergiu: o backend aprendeu a confiar na última sinalização em um turno e a ler "sem problema" como concordância, enquanto este script ainda confiava na primeira, então um simples "Não, não estamos" se absteve aqui e respondeu lá.
Início Rápido
pip install calle-ai
# 1. Calibre o portão primeiro. Imprime o qhat que a etapa 5 precisa.
python3 scripts/calibrate.py --data references/sample-scenarios.jsonl --alpha 0.1
# 2. Execução a seco: imprime a tarefa e o destinatário mascarado, não disca nada.
python3 scripts/place_verify_call.py \
--org "Centro de Aconselhamento Exemplo" \
--phone "+15550101234" \
--claim-accepting-new-patients yes \
--claim-plan "Exemplo Saúde PPO"
# 3. Faça a chamada de verdade (requer CALLE_API_KEY).
python3 scripts/place_verify_call.py ... --live
# 4. Aguarde o payload terminal.
python3 scripts/poll_result.py --call-id call_abc123 --out result.json
# 5. Extraia a resposta baseada no trecho, controlada pelo limite calibrado.
python3 scripts/extract_answer.py --payload result.json --qhat 0.750
# 6. Reconcilie contra o registro armazenado.
python3 scripts/reconcile_record.py --payload result.json \
--claim-accepting-new-patients yes --claim-plan-accepted yes
Todos os números de exemplo neste skill são números fictícios reservados. O caminho de execução a seco e os dados de cenário incluídos significam que tudo, exceto a etapa 3, é executado sem credenciais e sem chamada real.
Como é a Saída
extract_answer.py emite um objeto JSON por afirmação:
{
"claim": "accepting_new_patients",
"answer": "yes",
"trust_score": 0.9,
"hedged": false,
"span": {"turn": 6, "text": "Sim.", "char_start": 0, "char_end": 3},
"abstain": false,
"gate": "conformal(qhat=0.750)"
}
Uma abstenção mantém a mesma forma com "abstain": true, seja porque o conjunto de previsão calibrado continha mais de um rótulo ou porque o extrator não encontrou resposta alguma ("answer": "unknown"). O campo gate nomeia o limite que tomou a decisão e lê uncalibrated quando nenhum --qhat foi fornecido, que é o único caso em que toda afirmação se abstém independentemente do que foi dito. reconcile_record.py adiciona a aritmética de pesos de correspondência e um veredito. Nenhum campo aparece nunca sem um trecho de suporte ou uma abstenção explícita.
Efeitos Colaterais e Cancelamento
- Efeito colateral: exatamente uma chamada telefônica de saída por invocação
--live, para o número que o operador forneceu. Nada é recorrente; não há agendador neste skill. - Custo: uma chamada CALL-E faturada por execução ao vivo. Execuções a seco são gratuitas.
- Cancelamento: CALL-E não expõe cancelamento de chamada, então o momento de parar é antes de
--live. O padrão de execução a seco existe exatamente por esse motivo. - Dados: os payloads são escritos em arquivos locais que o operador nomeia. Os números de telefone são mascarados na saída do console. Nada neste skill transmite resultados para qualquer lugar, exceto a própria API CALL-E.
Referências
references/api-notes.md: a forma do payload CALL-E observada empiricamente e os comportamentos da API nos quais este skill se baseia, incluindo fatos que foram descobertos por teste em vez de documentação.references/verification-protocol.md: o script de divulgação completo, a postura legal para chamadas de verificação de saída e por que a abstenção é a decisão central de design.references/sample-scenarios.jsonl: dados de cenário fictícios rotulados usados porscripts/calibrate.py, para que a calibração seja executada sem credenciais e sem chamadas.