Skip to main content

Widget

Widget integration

The Dizme Widget provides a seamless way to integrate a verification flow into a customer service experience. This widget is included within the Dizme Agent, making it easy to access and use.

Configuration

JS url: https://<<yourdizmeagent>>/widget-svc-static/widget_viewer/dizme_widget_v2.js

FieldDefaultDescription
data-request-orgidrequiredOrganization business code
data-request-servicerequiredService callback to be used when verify configrm is invoked
data-request-multi-readrequiredBoolean value “false|true” of is this a multiple read widget or not
data-request-templaterequiredProof template identifier
data-request-idoptional, randomRequest id, if set will be returned in verify confirm, otherwise will be autogenerated
data-request-ooboptional, falseBoolean value “false|true” specifying that OOB flow must be used
data-request-typerequiredWidget request type. One of “verify|connection|issue|retrieve” Verify - Connection - Issue - Retrieve - TODO
data-request-restrictionsoptionalProof template customized restrictions. See Restrictions, predicates and contents for details.
data-request-predicatesoptionalProof template customized predicates. See Restrictions, predicates and contents for details.
data-request-contentsoptionalProof template customized contents. See Restrictions, predicates and contents for details.
data-onauthoptionalJS Callback function, see more in Listening callbacks.
data-widget-typeoptional, completeWidget feedback type. One of “complete|qr-only|invisible”. See more in customization section.
data-langoptional, enLanguage used by widget if type is “complete”. One of “it|en”. How customize languages see customization section.
data-size-widgetoptional, normalWidget size, small: 150*150 ,normal: 300*300, large: 600*600, xlarge: 1000*1000

Restrictions, predicates and contents

Restrictions

The widget accepts an optional parameter data-request-restrictions to customize restrictions on attributes. If present, the parameter MUST be a JSON object with these parameters:

attr_name = {
  "restriction_type": {
    "field_ref":"value to restrict to"
  }
}

Multiple objects can be provided using attribute name as key (i.e. attr_name=username, email etc..). These objects must contain a restriction object. restriction_type: the restriction to apply. Only value is currently supported field_ref: the field to restrict. Only _self is presently supported.

Predicates

The widget accepts an optional parameter data-request-predicates to customize predicates on attributes. If present, the parameter MUST be a JSON object with these attributes:

{"predicate_name_1":"predicate_value_1", ...}

Multiple objects can be provided using predicate name as predicate_name and the desired value as predicate_value. Warning Only predicates already described in the proof template can be modified using these objects.

Contents

The widget accepts an optional parameter data-request-contents to customize the contents of attributes and proof template. If present, the parameter MUST be a JSON object with these attributes:

Attribute nameValueMultiplicityDescription
commentArray of 1 or more:{
"lang":"en",
"message": "msg_string"
}
0 or 1Update proof template comment with provided localized object
non_revoked{`
"from": ,
"to":
},
0 or 1Update proof template requiring non-revocability between provided timestamp.
From timestamp is optional, no default will be provided.
To timestamp is optional, default to current timestamp
attr_name{
“attr_detail_key”: <attr_detail_value>,
}
1 or moreMultiple objects can be provided using attribute name as key (i.e. attr_name=username, email etc..).
These objects contain details to update proof template details for attributes with the same
name which
have details with the provided name. If detail is not already present in the proof template for a specific
attribute, update will not take place and there won’t be any addiction.

Listening callbacks

After the widget is integrated into a page, it will create an iframe that will load the Dizme Agent Widget page. The configuration of the widget will determine which content, such as a QR code, is displayed on the Dizme Agent Widget page.

The widget will generate callbacks to the main page based on user actions. This is the only reliable way to determine if the user has completed the flow or if they have encountered an error.

To enable the callbacks, the integrating page must declare a function with a single parameter and provide the function's name as the value for the "data-onauth" widget parameter.

As argument of function object will delivered like so: {"transaction_status": state, 'details': details}

where transaction_status is always present and will determine action.

Transaction StatusDetailsWhat’s happening
CONNECTINGTrying to reach dizme service and obtaining invitation
SHOW_QRtid - transaction id link - link in qrcodeShowing QRCode
SCHEDULEDTransaction scheduled and waiting for user to scan QRCode
READUser has scanned QRCode
FAILUREerror_code - code of errormessage - human readable error descriptionSometing went wrong
SUCCESSProof is delivered to verify confirm
ABORTEDUser has aborted verify in app
TIMEOUTtimeout - milliseconds attentedTimeout is reached, generally within 60 sec.
Widget states
widget_states.png
Widget States (in blue selected the happy path) with multi-read = false

Warning The state diagram above pertains specifically to flows where the "multi-read" feature is disabled. If this feature is enabled and a user reads the QR code multiple times, the flow will be halted at the "SHOW_QR" state and unable to proceed further. This is because the flow cannot determine the appropriate path to take after multiple reads of the QR code.

Customization

The Dizme Widget offers three different customization options, allowing for greater flexibility and personalization:

  • Size: Customize the widget's size using the "data-size-widget" parameter.
  • Language: Choose between Italian and English using the "data-lang" parameter. Additional languages can also be added if needed.
  • View type: Use the "data-widget-type" parameter to customize the widget's view type. For example, it is possible to add a logo to the QR code or create a completely custom QR code.

When the widget type is set to "complete", the widget will handle all aspects of the user experience, including text in the selected language.

If the widget type is set to "qr-only", the widget will hide all text and only display the QR code and some animations. In this case, the handling of text and messages will be the responsibility of the integrating party, using transaction statuses provided by the "data-onauth" callback.

Finally, the widget type "invisible" will hide the QR code altogether by setting the iframe size to 0px*0px. In this case, the integrating party is responsible for rendering the QR code, which can be designed to their specifications. The QR code's contents will be provided in the "SHOW_QR" callback, inside the "link" field.

Examples

Simple example

<script async src="https://<<agent_url>>/widget-svc-static/widget_viewer/dizme_widget_v2.js"
    data-onauth="onDizmeAuth(res)"
    data-request-orgid="#ORGANIZATION NAME"
    data-request-service="#PUT HERE THE BUSINESS CODE OF SERVICE CONFIGURED"
    data-request-multi-read="false"
    data-request-template="#PUT HERE THE BUSINESS CODE OF PROOF CONFIGURED"
    data-request-id="#PUT HERE YOUR OWN REQUEST UID OR REMOVE TO AUTO GENERATE ONE"
    data-request-oob="true" #ENABLE OUT OF BAND"
    data-lang="en" # PUT en or it
    data-request-type="verify">
</script>
<script type="text/javascript">
    function onDizmeAuth(res) {
        console.log(res);
        if (res.proof_status === "SUCCESS") {
        } else if (res.proof_status === "FAILURE") {
        } else if (res.proof_status === "ABORTED") {
        }
    }
</script>

Full example with restrictions and contents update

<script
    src="https://agent-aws.dizme.io/widget-svc-static/widget_viewer/dizme_widget_v2.js"
    data-onauth="onDizmeAuth(res)"
    data-request-orgid="#ORGANIZATION NAME"
    data-request-service="#PUT HERE THE BUSINESS CODE OF SERVICE CONFIGURED"
    data-request-multi-read="false"
    data-request-template="#PUT HERE THE BUSINESS CODE OF PROOF CONFIGURED"
    data-request-id="#PUT HERE YOUR OWN REQUEST UID OR REMOVE TO AUTO GENERATE ONE"
    data-request-oob="true #ENABLE OUT OF BAND"
    data-lang="en # PUT en or it" 
    data-request-type="verify"
    data-request-restrictions='{
        "username": {
            "value": {
                "_self": "sersvsv"
            }
        },
        "email": {
            "value": {
                "_self": "some@example.com"
            }
        }
    }'
    data-request-contents='{
        "comment": [
            {
                "lang": "en",
                "message": "Proof description"
            },
            {
                "lang": "it",
                "message": "Descrizione della proof"
            }
        ],
        "q1": {
            "choice_list": [
                "YES",
                "NO"
            ],
            "description": [
                {
                    "lang": "en",
                    "message": "Important dynamic question"
                },
                {
                    "lang": "it",
                    "message": "Domanda dinamica importante"
                }
            ]
        }
    }'                   
    data-size-widget="normal"
    data-request-oob="true"
    data-widget-type="complete">
</script>