encodeDownlink() does not add "frm_payload" when integrated with Azure

I’ve integrated an instance of TTN with Azure IoT hub. When I update and save a device twin key value pair, the information is transmitted to TTN and scheduled for download to the end device as expected, but the payload is not transformed to bytes and added to the downlowd message as expected. It appears the encodeDownlink() does not execute.

When I test the encodeDownlink() under the individual device configuration, it performs the encode (not the way I want it to do so, but I’ll open another topic to address functionality) and adds the “frm_payload” item.

This is a section of the device twin:

"properties": {
        "desired": {
            "decodedPayload": {
                "CycleTime": 1100
            "rawDownlink": {
                "fPort": 1,
                "framePayload": "",
                "operation": "replace"

The scheduled download message:

"data": {
    "@type": "type.googleapis.com/ttn.lorawan.v3.ApplicationDownlink",
    "f_port": 1,
    "decoded_payload": {
      "CycleTime": 1100
    "correlation_ids": [

The encodeDownlink() code:

function encodeDownlink(input) {
  return {
    bytes: [input.data.CycleTime],
    fPort: 1,
    warnings: [],
    errors: []

The encodeDownlink() code produces this when performing a test at the console:

  "f_port": 1,
  "frm_payload": "CA==",
  "decoded_payload": {
    "CycleTime": 1800