Help

SOLVED LTI Advantage Deep Linking - handleDeepLinkingLaunchInfo.error on LtiDeepLinkingResponse

aljones
Rookie

SOLVED LTI Advantage Deep Linking - handleDeepLinkingLaunchInfo.error on LtiDeepLinkingResponse

Hello community!

 

I am a developer trying to integrate our tool with Schoology via LTI Advantage for deep linking. We already have a working LTI 1.3 core integration for launches, and our deep linking works on Canvas LMS. 

 

We can successfully launch into the tool with a LtiDeepLinkingRequest and select content items, but when trying to POST the JWT back to Schoology we get this error:

 

{"error":"handleDeepLinkingLaunchInfo.error: One or more parameter values were invalid: Condition parameter type does not match schema type"}

 

Our JWT follows the required LtiDeepLinkingResponse schema outlined in the specifications:

 

{
"iss": "string",
"aud": "string",
"exp": "integer (unix timestamp)",
"iat": "integer (unix timestamp)",
"nonce": "string",
"https://purl.imsglobal.org/spec/lti/claim/version": "string",
"https://purl.imsglobal.org/spec/lti/claim/message_type": "string",
"https://purl.imsglobal.org/spec/lti/claim/deployment_id": "string",
"https://purl.imsglobal.org/spec/lti-dl/claim/content_items": [
{
"type": "string",
"url": "string",
"title": "string"
}
],
"https://purl.imsglobal.org/spec/lti-dl/claim/data": "string",
"https://purl.imsglobal.org/spec/lti-dl/claim/msg": "string"
}


Has anyone seen this error before or knows what I am missing?

 

Solution 

 

The "iss" (client ID) was being sent as an integer, not a string. Although Schoology client IDs are digits only they must be sent as strings. Other systems appear to be more flexible with this so we did not catch it before.

1 Reply
chrisyust
Rookie

Hello, we recently completed our LTI 1.3 integration, including Deep Linking, and did not see that error.  Without seeing the specific data in one of your response packets, it's hard to tell if there is an issue (e.g. a simple typo in the message_type string) that might cause a LMS to reject the packet.

 

We used the following PHP library, which you might want to review and see how they are forming the Deep Linking responses - perhaps that might spark an idea?

https://github.com/packbackbooks/lti-1-3-php-library/tree/master

 

With that library, the PHP code on our end to return a DeepLink is approximately:

 

$dl = $launch->getDeepLink();

$resource1 = Resource::new()
->setUrl("<URL to this specific resource>")
->setTitle("Lesson 1 Text");

$jwt = $dl->getResponseJwt([$resource1]);

$return_url = $dl->returnUrl();

// and then POST the $jwt string back to the $return_url