Skip to content

Questionnaires

Questionnaires are answered by drivers on tasks (e.g. delivery confirmation, condition checks). Custom Link exposes two commands to retrieve those answers — both retrieve-only; there is no corresponding store command, since answers are submitted by drivers through a different surface, not Custom Link. MendriX Mobile (our own driver app) is the primary source of these answers, but any fleet management system a driver actually uses — including third-party telematics/board-computer integrations, or a custom app built against the Driver API — can submit them too.

SituationCommand
Retrieve structured question/answer pairs for tasks (recommended)RequestQuestionnaireAnswers
Retrieve the raw questionnaire-report XML blob for tasks (legacy)RequestTaskQuestionnaire
<?xml version="1.0" encoding="windows-1252"?>
<EoCustomLinkRequestQuestionnaireAnswers Type="TEoCustomLinkRequestQuestionnaireAnswers">
<Nested>False</Nested>
<Filter Type="TEoFilterQuestionnaireAnswers">
<TaskIdsCsv>2219,2220</TaskIdsCsv>
</Filter>
</EoCustomLinkRequestQuestionnaireAnswers>
Filter fieldTypeDescription
TaskIdsCsvstring (CSV)Task Ids to retrieve questionnaire answers for.

Response fields (TEoCustomLinkQuestionnaireAnswer)

Section titled “Response fields (TEoCustomLinkQuestionnaireAnswer)”

One row per answered question, per task:

FieldTypeDescription
QuestionnaireIdintDatabase Id of the questionnaire this answer belongs to.
MomentdateTimeWhen the questionnaire was submitted.
GoodIdintDatabase Id of the good, if the question was good-specific.
TaskIdintDatabase Id of the task.
QuestionIdintDatabase Id of the question.
QuestionKeystringStable key for the question (e.g. Payment_COD), useful for matching across questionnaire versions.
QuestionstringThe question text as shown to the driver.
AnswerIdintDatabase Id of this stored answer record — not a reference to a choice/option definition.
AnswerIndexintOrdinal position (0-based) of this answer within the batch of answers submitted together in one questionnaire response — not an index into an option list.
AnswerTypestringThe kind of answer (e.g. Select, free text, numeric).
AnswerValuesstringThe answered value(s), format depends on AnswerType.

Example response:

<?xml version="1.0" encoding="windows-1252"?>
<EoCustomLinkResponseQuestionnaireAnswers Type="TEoCustomLinkResponseQuestionnaireAnswers">
<Data Type="TEoCustomLinkQuestionnaireAnswerList">
<_TEoListBase_Items>
<EoCustomLinkQuestionnaireAnswer Type="TEoCustomLinkQuestionnaireAnswer">
<QuestionnaireId>2</QuestionnaireId>
<Moment>2026-07-22T10:28:22+02:00</Moment>
<GoodId>917</GoodId>
<TaskId>2219</TaskId>
<QuestionId>6</QuestionId>
<QuestionKey>Payment_COD</QuestionKey>
<Question>Is the cash-on-delivery amount fully paid?</Question>
<AnswerId>5</AnswerId>
<AnswerIndex>0</AnswerIndex>
<AnswerType>Select</AnswerType>
<AnswerValues>[0]</AnswerValues>
</EoCustomLinkQuestionnaireAnswer>
</_TEoListBase_Items>
</Data>
</EoCustomLinkResponseQuestionnaireAnswers>

Scenario: check whether cash-on-delivery was confirmed. Filter by the delivery task’s Id, then look for the answer whose QuestionKey matches your tenant’s COD-confirmation question — match on QuestionKey, not QuestionId, since the numeric Id can differ between questionnaire versions/tenants.

Scenario: retrieve answers for multiple tasks in one call. Set TaskIdsCsv to a comma-separated list of task Ids — the response contains one row per answered question per task, distinguishable by TaskId.

RequestTaskQuestionnaire returns the raw questionnaire-report XML submitted by whichever driver app or fleet management system answered the questionnaire — MendriX Mobile is the primary source, but the same storage path can be reached from other systems too — keyed by task, one blob per task.

<?xml version="1.0" encoding="windows-1252"?>
<EoCustomLinkRequestTaskQuestionnaire Type="TEoCustomLinkRequestTaskQuestionnaire">
<KeysExplicitAsCsv>437,438</KeysExplicitAsCsv>
</EoCustomLinkRequestTaskQuestionnaire>
<?xml version="1.0" encoding="windows-1252"?>
<EoCustomLinkResponseTaskQuestionnaire Type="TEoCustomLinkResponseTaskQuestionnaire">
<Data Type="TEoCustomLinkTaskQuestionnaireList">
<_TEoListBase_Items>
<EoCustomLinkTaskQuestionnaire Type="TEoCustomLinkTaskQuestionnaire">
<TaskId>437</TaskId>
<XML><questionnaireReport>
<questionnaireId>CUTK-SUCCEED</questionnaireId>
<questionnaireVersion>2</questionnaireVersion>
<timestamp>2026-07-22T10:14:41Z</timestamp>
<answer>
<questionId>TERMINAL</questionId>
<answerOptionId>1</answerOptionId>
</answer>
</questionnaireReport></XML>
</EoCustomLinkTaskQuestionnaire>
</_TEoListBase_Items>
</Data>
</EoCustomLinkResponseTaskQuestionnaire>

The <XML> element contains a nested, unescaped questionnaire-report document — parse it as a separate XML document per task, keyed by questionId. This format predates RequestQuestionnaireAnswers and is harder to work with (no stable question keys, requires understanding the report’s internal structure); new integrations should use the structured command above instead.

  • No store command exists — questionnaire answers come from drivers’ devices, not from Custom Link integrators. These commands are read-only.
  • Match on QuestionKey, not QuestionId, when using the structured command — the numeric Id isn’t guaranteed stable across questionnaire versions.
  • The legacy blob’s internal structure isn’t described by GdxEoStructures.xsd — it’s a separate, questionnaire-specific report format, not a standard Eo type.