Pular para o conteúdo principal
Uma completion síncrona mantém a conexão HTTP aberta até o Canvas terminar. Para documentos longos, lotes ou qualquer cliente que não deva esperar, execute a completion em segundo plano. Há duas formas, e elas compartilham os mesmos objetos:
  • async: true: a API responde de imediato com a execução, e você consulta GET /v2/chat/completions/{id} até ela terminar.
  • webhook_url: a execução se torna assíncrona automaticamente, e o Tela envia o resultado por POST para a sua URL quando ela termina.
De qualquer forma, a execução é registrada como uma completion run, que você pode consultar depois ou encontrar com GET /v1/completion-run.
A webhook_url de uma completion avisa sobre aquela única execução. Não é a mesma coisa que os Eventos da Workstation, que são assinaturas configuradas em um App e disparam para toda tarefa daquele App.

O objeto da execução

Chamadas assíncronas respondem com a execução em vez de um chat.completion. O mesmo objeto é retornado no polling e enviado para o seu webhook. O seu status vai de created para running, e então para succeeded ou failed.
O que uma execução com status: "failed" traz sobre a falha não está documentado aqui. Trate failed como final e verifique a execução no Usage do Canvas.

Usando a flag async

Acrescente async: true ao corpo. A resposta é a execução com status: "created".

Consultando o resultado

Chame GET /v2/chat/completions/{id} com o ID da execução até o status ser succeeded ou failed, e então leia output_content.content. Os exemplos abaixo iniciam uma execução e a consultam no mesmo script.

Usando uma URL de webhook

Passe uma webhook_url e a execução se torna assíncrona sem a flag async. A resposta imediata é a execução com status: "created"; quando a execução termina, o Tela envia uma requisição POST para a sua URL.

O callback

O seu endpoint recebe um POST com:
  • Headers: Content-Type: application/json e x-completion-run-id, o ID da execução. Use-o para associar o callback à execução que você criou, já que é o mesmo id retornado na resposta de criação.
  • Corpo: o objeto da execução com o seu status final (succeeded ou failed) e, em caso de sucesso, a resposta em output_content.content e raw_output.
Mantenha o handler rápido: guarde o payload e responda com um 2xx, e processe depois. Não está documentado aqui se a entrega é repetida quando o seu endpoint falha; se você precisa de garantia, consulte também GET /v2/chat/completions/{id} para as execuções que não deram retorno depois de um tempo.
Use HTTPS na webhook_url e confirme que a requisição veio do Tela antes de confiar nela, por exemplo conferindo o x-completion-run-id contra as execuções que você criou. Quando você cria tarefas com POST /task, os headers da requisição com o prefixo x-tela-forward- são encaminhados para o seu webhook sem o prefixo, o que permite enviar um segredo seu; veja Autenticação e headers.

Listando execuções anteriores

Toda completion, síncrona ou não, é guardada como uma completion run. GET /v1/completion-run retorna as execuções do seu Workspace, da mais recentemente atualizada para a mais antiga, para você auditar o que rodou, conciliar um lote ou encontrar uma execução cujo callback você perdeu.
cURL
A resposta tem um array data e um objeto meta com totalCount, limit, offset, currentPage, totalPages e links (first, last, next, previous). Cada execução tem as mesmas informações do objeto da execução acima, com duas diferenças: as chaves são camelCase (inputContent, rawInput, promptVersionId) e ela acrescenta tags, creditsUsed, promptId e um metadata com um retrato da versão que executou (modelConfigurations, variablesDefinitions e, quando a requisição usou um ambiente, requestedEnvironmentName).
Resposta
Listar execuções exige o papel member ou superior; chaves de API do Workspace atendem a isso. Quando você filtra por promptId, promptVersionId ou promptApplicationId, o recurso precisa estar acessível para a sua chave, caso contrário a chamada retorna 404.
Envie uma tag que identifique o seu lote ou o ID do seu próprio registro em cada requisição (por exemplo order-123) e filtre por ela aqui. É a forma mais simples de reencontrar uma execução sem guardar todos os IDs.
Para ler uma execução pelo ID a qualquer momento, use GET /v2/chat/completions/{id}, como em Consultando o resultado. Os detalhes completos de parâmetros e schemas estão na referência da API: Run Canvas, Retrieve Canvas Run e List completion runs.