Construção do próprio Webhook ############################# O Webhook é um serviço que funciona como um listener do agente CPQD iD, recebendo notificações através de determinadas rotas/tópicos que estão detalhadas logo abaixo. Esse Webhook é associado a uma carteira através de uma configuração no agente CPQD iD. Vale mencionar que cada tópico, nesse documento **issue_credential**, **present_proof** e **connections**, possui uma máquina de estados, e a cada mudança de status, é disparada uma notificação pra esse tópico. Além disso, os payloads de cada tópico podem variar dos exemplos abaixo, de acordo com o status corrente. 1. Requisições ************** 1.1 POST /topic/issue_credential ================================ A requisição de emissão de credenciais enviará um payload no endpoint **/topic/issue_credential** com um conteúdo parecido com o exemplo abaixo. Os status que podem ser alcançados nesse caso são proposal_sent, proposal_received, offer_sent, offer_received, request_sent, request_received, issued, credential_received, credential_issued, credential_acked. .. code-block:: json { "auto_issue": false, "auto_offer": false, "connection_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "credential": {}, "credential_definition_id": "WgWxqztrNooG92RXvxSTWv:3:CL:20:tag", "credential_exchange_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "credential_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "credential_offer": {"..."}, "credential_proposal_dict": {"..."}, "credential_request": {}, "credential_request_metadata": {}, "error_msg": "Credential definition identifier is not set in proposal", "initiator": "self", "parent_thread_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "raw_credential": {}, "schema_id": "WgWxqztrNooG92RXvxSTWv:2:schema_name:1.0", "state": "credential_acked", "thread_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", } É possível realizar validações ou apenas monitorar o fluxo, em caso de sucesso devolver 200, caso contrário devolver erro http, interrompendo o fluxo da credencial. 1.2 POST /topic/present_proof ============================= A requisição de apresentação de prova enviará um payload no endpoint **/topic/present_proof** com um conteúdo parecido com o exemplo abaixo. Os status que podem ser alcançados no tópico present_proof são proposal_sent, proposal_received, request_sent, request_received, presentation_sent, presentation_received, presentation_acked, verified. .. code-block:: json { "connection_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "created_at": "2021-12-31 23:59:59Z", "initiator": "self", "presentation_exchange_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "presentation_proposal": {"..."}, "presentation_proposal_dict": {"..."}, "role": "prover", "state": "verified", "thread_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "trace": true, "updated_at": "2021-12-31 23:59:59Z", } Em caso de sucesso devolver 200, caso contrário devolver erro http, interrompendo o fluxo de prova. 1.3 POST /topic/connections =========================== A requisição para gerenciamento de conexões enviará um payload no endpoint **/topic/connections** com um conteúdo parecido com o exemplo abaixo: Os status que podem ser alcançados no tópico connections são invitation, request, response, active, completed .. code-block:: json { "connection_protocol": "connections/1.0", "routing_state": "active", "their_did": "WgWxqztrNooG92RXvxSTWv", "accept": "auto", "state": "active", "their_role": "requester", "invitation_key": "H3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV", "invitation_mode": "once", "created_at": "2021-12-31 23:59:59Z", "their_label": "Bob", "rfc23_state": "invitation-sent", "connection_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "updated_at": "2021-12-31 23:59:59Z" "my_did": "WgWxqztrNooG92RXvxSTWv" } Em caso de sucesso devolver 200, caso contrário devolver erro http, interrompendo o fluxo. 2. Configuração *************** Para configurar um ou mais webhooks no **Portal CPQD iD** faz-se necessário: 1. Acessar o menu **"Minha Carteira"** no Portal; 2. Pressionar o botão **"CONFIGURAR WEBHOOKS"**; 3. Pressionar o botão **"+ ADICIONAR WEBHOOK"**; 4. Inserir um **endereço válido (URL)** e uma **chave de autorização**. O **endereço (URL)** é necessário para que o recebimento de eventos relacionados à emissão e provas de credenciais aconteça e a **chave de autorização** para que ocorra a integração do CPQD iD com a aplicação do cliente. Após a configuração, é possível realizar a edição ou a remoção do(s) webhook(s) cadastrado(s). .. figure:: /_images/cpqdidUseMyWallet.png :alt: text :align: center :width: 80% Menu "Minha Carteira" - Passos 1 e 2 .. figure:: /_images/cpqdidUseRegisterWebhook.png :alt: text :align: center :width: 80% Cadastro do(s) webhook(s) - Passos 3 e 4 .. figure:: /_images/cpqdidUseMyWalletWithWebhook.png :alt: text :align: center :width: 80% Menu "Minha Carteira" com um webhook cadastrado .. toctree:: :maxdepth: 1